Name: series-workflowpgxrj Phase: Succeeded StartedAt: 2026-08-21 13:17:26 +0000 UTC FinishedAt: 2026-08-21 14:04:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[0] Phase: Succeeded StartedAt: 2026-08-21 13:17:26 +0000 UTC FinishedAt: 2026-08-21 13:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 13:17:26 +0000 UTC FinishedAt: 2026-08-21 13:21:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "series_id": "96782cac-8a33-4480-8f4e-871b36c189b6" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "iucv_sock_sendmsg", "iucv_sock_recvmsg" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGSVVDViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2l1Y3Zfc29ja19zZW5kbXNnJiMzNDssCiAgICAmIzM0O2l1Y3Zfc29ja19yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kvbG9ja2luZyBpc3N1ZSBpbiB0aGUgQUZfSVVDViBzb2NrZXQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgaXQgZGVmZXJzIHRoZSBgaXVjdl9zZW5kX2N0cmwoKWAgY2FsbCBpbiBgaXVjdl9zb2NrX3JlY3Ztc2coKWAgdW50aWwgYWZ0ZXIgdGhlIGBpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrYCBzcGlubG9jayBpcyByZWxlYXNlZCwgcHJldmVudGluZyBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2sgaW52ZXJzaW9ucy4gSXQgYWxzbyBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBhZml1Y3ZfaHNfc2VuZCgpYCBieSB1c2luZyBgYXRvbWljX3hjaGcoKWAgdG8gY2xhaW0gcmVjZWl2ZSBjcmVkaXRzIGF0b21pY2FsbHkgcmlnaHQgYmVmb3JlIHRyYW5zbWlzc2lvbiwgaW5zdGVhZCBvZiByZWFkaW5nIGFuZCBsYXRlciBzdWJ0cmFjdGluZyB0aGUgdmFsdWUuIFxuXG5BbGwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzIGludm9sdmVkIChzdWNoIGFzIGBwaHNfaGRyYCBhbmQgYGNvbmZpcm1fcmVjdmApIGFyZSBmdWxseSBpbml0aWFsaXplZCAoZS5nLiwgYG1lbXNldChwaHNfaGRyLCAwLCBzaXplb2YoKnBoc19oZHIpKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIEtDU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBBRl9JVUNWIHNvY2tldCBzZW5kIGFuZCByZWNlaXZlIHBhdGhzIGJ5IHVzaW5nIGF0b21pY194Y2hnIGZvciB0aGUgbXNnX3JlY3YgdmFyaWFibGUgYW5kIG1vdmluZyBpdWN2X3NlbmRfY3RybCBvdXQgb2YgYSBzcGlubG9jayBibG9jay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgc29ja2V0IGxvZ2ljIGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIHRlc3RhYmxlIGluIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmZjdlYTcxNzU1NDViNGRkOGQ3NDAzNzk2MWMzOWNkNjlhZDA3NDk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTM6MTk6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jXG5pbmRleCBlYTA0N2JhYjY1ZTdjLi5hN2MwZjYwYmI1YmZjIDEwMDY0NFxuLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbkBAIC0yMTAsMTIgJiM0MzsyMTAsNiBAQCBzdGF0aWMgaW50IGFmaXVjdl9oc19zZW5kKHN0cnVjdCBpdWN2X21lc3NhZ2UgKmltc2csIHN0cnVjdCBzb2NrICpzb2NrLFxuIFx0cGhzX2hkci1cdTAwM2VmbGFncyA9IGZsYWdzO1xuIFx0aWYgKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pXG4gXHRcdHBoc19oZHItXHUwMDNld2luZG93ID0gaXVjdi1cdTAwM2Vtc2dsaW1pdDtcbi1cdGVsc2UgaWYgKChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfV0lOKSB8fCAhZmxhZ3MpIHtcbi1cdFx0Y29uZmlybV9yZWN2ID0gYXRvbWljX3JlYWQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdik7XG4tXHRcdHBoc19oZHItXHUwMDNld2luZG93ID0gY29uZmlybV9yZWN2O1xuLVx0XHRpZiAoY29uZmlybV9yZWN2KVxuLVx0XHRcdHBoc19oZHItXHUwMDNlZmxhZ3MgPSBwaHNfaGRyLVx1MDAzZWZsYWdzIHwgQUZfSVVDVl9GTEFHX1dJTjtcbi1cdH1cbiBcdG1lbWNweShwaHNfaGRyLVx1MDAzZWRlc3RVc2VySUQsIGl1Y3YtXHUwMDNlZHN0X3VzZXJfaWQsIDgpO1xuIFx0bWVtY3B5KHBoc19oZHItXHUwMDNlZGVzdEFwcE5hbWUsIGl1Y3YtXHUwMDNlZHN0X25hbWUsIDgpO1xuIFx0bWVtY3B5KHBoc19oZHItXHUwMDNlc3JjVXNlcklELCBpdWN2LVx1MDAzZXNyY191c2VyX2lkLCA4KTtcbkBAIC0yNTAsMTMgJiM0MzsyNDQsMjIgQEAgc3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jayxcbiBcdH1cbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0FGX0lVQ1YpO1xuIFxuJiM0MztcdC8qIENsYWltIHRoZSByZWNlaXZlIGNyZWRpdCBoZXJlLCBub3Qgd2hpbGUgYnVpbGRpbmcgdGhlIGhlYWRlcjogZXZlcnlcbiYjNDM7XHQgKiB3YXkgdGhpcyBmcmFtZSBjYW4gYmUgZHJvcHBlZCBoYXMgbm93IGJlZW4gcnVsZWQgb3V0LCBzbyB0aGUgd2luZG93XG4mIzQzO1x0ICogaXMgemVyb2VkIG9ubHkgZm9yIGFzIGxvbmcgYXMgdGhlIHRyYW5zbWl0IGl0c2VsZiB0YWtlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1dJTiB8fCAhZmxhZ3MpIHtcbiYjNDM7XHRcdGNvbmZpcm1fcmVjdiA9IGF0b21pY194Y2hnKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YsIDApO1xuJiM0MztcdFx0cGhzX2hkci1cdTAwM2V3aW5kb3cgPSBjb25maXJtX3JlY3Y7XG4mIzQzO1x0XHRpZiAoY29uZmlybV9yZWN2KVxuJiM0MztcdFx0XHRwaHNfaGRyLVx1MDAzZWZsYWdzID0gcGhzX2hkci1cdTAwM2VmbGFncyB8IEFGX0lVQ1ZfRkxBR19XSU47XG4mIzQzO1x0fVxuJiM0MztcbiBcdGF0b21pY19pbmMoXHUwMDI2aXVjdi1cdTAwM2Vza2JzX2luX3htaXQpO1xuIFx0ZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTtcbiBcdGlmIChuZXRfeG1pdF9ldmFsKGVycikpIHtcbiBcdFx0YXRvbWljX2RlYyhcdTAwMjZpdWN2LVx1MDAzZXNrYnNfaW5feG1pdCk7XG4tXHR9IGVsc2Uge1xuLVx0XHRhdG9taWNfc3ViKGNvbmZpcm1fcmVjdiwgXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdik7XG4tXHRcdFdBUk5fT04oYXRvbWljX3JlYWQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdikgXHUwMDNjIDApO1xuJiM0MztcdFx0YXRvbWljX2FkZChjb25maXJtX3JlY3YsIFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpO1xuIFx0fVxuIFx0cmV0dXJuIG5ldF94bWl0X2V2YWwoZXJyKTtcbiBcbkBAIC0xMjQxLDYgJiM0MzsxMjQ0LDcgQEAgc3RhdGljIGludCBpdWN2X3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4gXHRzdHJ1Y3QgaXVjdl9zb2NrICppdWN2ID0gaXVjdl9zayhzayk7XG4gXHR1bnNpZ25lZCBpbnQgY29waWVkLCBybGVuO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgKnJza2IsICpjc2tiO1xuJiM0MztcdGJvb2wgc2VuZF93aW4gPSBmYWxzZTtcbiBcdGludCBlcnIgPSAwO1xuIFx0dTMyIG9mZnNldDtcbiBcbkBAIC0xMzMxLDE2ICYjNDM7MTMzNSwyMCBAQCBzdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZpdWN2LVx1MDAzZWJhY2tsb2dfc2tiX3EpKSB7XG4gXHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxpc3QpKVxuIFx0XHRcdFx0aXVjdl9wcm9jZXNzX21lc3NhZ2VfcShzayk7XG4tXHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpIFx1MDAzZT1cbi1cdFx0XHRcdFx0XHRcdGl1Y3YtXHUwMDNlbXNnbGltaXQgLyAyKSB7XG4tXHRcdFx0XHRlcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1dJTik7XG4tXHRcdFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9ESVNDT05OO1xuLVx0XHRcdFx0XHRzay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2KSBcdTAwM2U9XG4mIzQzO1x0XHRcdFx0XHRcdFx0aXVjdi1cdTAwM2Vtc2dsaW1pdCAvIDIpXG4mIzQzO1x0XHRcdFx0c2VuZF93aW4gPSB0cnVlO1xuIFx0XHR9XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzZW5kX3dpbikge1xuJiM0MztcdFx0XHRlcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1dJTik7XG4mIzQzO1x0XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjtcbiYjNDM7XHRcdFx0XHRzay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gZG9uZTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZJVUNWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXVjdl9zb2NrX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgQUZfSVVDViBzb2NrZXQgc2VuZCBhbmQgcmVjZWl2ZSBwYXRocyBieSB1c2luZyBhdG9taWNfeGNoZyBmb3IgdGhlIG1zZ19yZWN2IHZhcmlhYmxlIGFuZCBtb3ZpbmcgaXVjdl9zZW5kX2N0cmwgb3V0IG9mIGEgc3BpbmxvY2sgYmxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIHNvY2tldCBsb2dpYyBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyB0ZXN0YWJsZSBpbiBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmY3ZWE3MTc1NTQ1YjRkZDhkNzQwMzc5NjFjMzljZDY5YWQwNzQ5NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDEzOjE5OjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jCmluZGV4IGVhMDQ3YmFiNjVlN2MuLmE3YzBmNjBiYjViZmMgMTAwNjQ0Ci0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXVjdi9hZl9pdWN2LmMKQEAgLTIxMCwxMiAmIzQzOzIxMCw2IEBAIHN0YXRpYyBpbnQgYWZpdWN2X2hzX3NlbmQoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqaW1zZywgc3RydWN0IHNvY2sgKnNvY2ssCiAJcGhzX2hkci0mZ3Q7ZmxhZ3MgPSBmbGFnczsKIAlpZiAoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1NZTikKIAkJcGhzX2hkci0mZ3Q7d2luZG93ID0gaXVjdi0mZ3Q7bXNnbGltaXQ7Ci0JZWxzZSBpZiAoKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19XSU4pIHx8ICFmbGFncykgewotCQljb25maXJtX3JlY3YgPSBhdG9taWNfcmVhZCgmYW1wO2l1Y3YtJmd0O21zZ19yZWN2KTsKLQkJcGhzX2hkci0mZ3Q7d2luZG93ID0gY29uZmlybV9yZWN2OwotCQlpZiAoY29uZmlybV9yZWN2KQotCQkJcGhzX2hkci0mZ3Q7ZmxhZ3MgPSBwaHNfaGRyLSZndDtmbGFncyB8IEFGX0lVQ1ZfRkxBR19XSU47Ci0JfQogCW1lbWNweShwaHNfaGRyLSZndDtkZXN0VXNlcklELCBpdWN2LSZndDtkc3RfdXNlcl9pZCwgOCk7CiAJbWVtY3B5KHBoc19oZHItJmd0O2Rlc3RBcHBOYW1lLCBpdWN2LSZndDtkc3RfbmFtZSwgOCk7CiAJbWVtY3B5KHBoc19oZHItJmd0O3NyY1VzZXJJRCwgaXVjdi0mZ3Q7c3JjX3VzZXJfaWQsIDgpOwpAQCAtMjUwLDEzICYjNDM7MjQ0LDIyIEBAIHN0YXRpYyBpbnQgYWZpdWN2X2hzX3NlbmQoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqaW1zZywgc3RydWN0IHNvY2sgKnNvY2ssCiAJfQogCXNrYi0mZ3Q7cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKTsKIAomIzQzOwkvKiBDbGFpbSB0aGUgcmVjZWl2ZSBjcmVkaXQgaGVyZSwgbm90IHdoaWxlIGJ1aWxkaW5nIHRoZSBoZWFkZXI6IGV2ZXJ5CiYjNDM7CSAqIHdheSB0aGlzIGZyYW1lIGNhbiBiZSBkcm9wcGVkIGhhcyBub3cgYmVlbiBydWxlZCBvdXQsIHNvIHRoZSB3aW5kb3cKJiM0MzsJICogaXMgemVyb2VkIG9ubHkgZm9yIGFzIGxvbmcgYXMgdGhlIHRyYW5zbWl0IGl0c2VsZiB0YWtlcy4KJiM0MzsJICovCiYjNDM7CWlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfV0lOIHx8ICFmbGFncykgewomIzQzOwkJY29uZmlybV9yZWN2ID0gYXRvbWljX3hjaGcoJmFtcDtpdWN2LSZndDttc2dfcmVjdiwgMCk7CiYjNDM7CQlwaHNfaGRyLSZndDt3aW5kb3cgPSBjb25maXJtX3JlY3Y7CiYjNDM7CQlpZiAoY29uZmlybV9yZWN2KQomIzQzOwkJCXBoc19oZHItJmd0O2ZsYWdzID0gcGhzX2hkci0mZ3Q7ZmxhZ3MgfCBBRl9JVUNWX0ZMQUdfV0lOOwomIzQzOwl9CiYjNDM7CiAJYXRvbWljX2luYygmYW1wO2l1Y3YtJmd0O3NrYnNfaW5feG1pdCk7CiAJZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTsKIAlpZiAobmV0X3htaXRfZXZhbChlcnIpKSB7CiAJCWF0b21pY19kZWMoJmFtcDtpdWN2LSZndDtza2JzX2luX3htaXQpOwotCX0gZWxzZSB7Ci0JCWF0b21pY19zdWIoY29uZmlybV9yZWN2LCAmYW1wO2l1Y3YtJmd0O21zZ19yZWN2KTsKLQkJV0FSTl9PTihhdG9taWNfcmVhZCgmYW1wO2l1Y3YtJmd0O21zZ19yZWN2KSAmbHQ7IDApOwomIzQzOwkJYXRvbWljX2FkZChjb25maXJtX3JlY3YsICZhbXA7aXVjdi0mZ3Q7bXNnX3JlY3YpOwogCX0KIAlyZXR1cm4gbmV0X3htaXRfZXZhbChlcnIpOwogCkBAIC0xMjQxLDYgJiM0MzsxMjQ0LDcgQEAgc3RhdGljIGludCBpdWN2X3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCiAJc3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spOwogCXVuc2lnbmVkIGludCBjb3BpZWQsIHJsZW47CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnJza2IsICpjc2tiOwomIzQzOwlib29sIHNlbmRfd2luID0gZmFsc2U7CiAJaW50IGVyciA9IDA7CiAJdTMyIG9mZnNldDsKIApAQCAtMTMzMSwxNiAmIzQzOzEzMzUsMjAgQEAgc3RhdGljIGludCBpdWN2X3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCiAJCWlmIChza2JfcXVldWVfZW1wdHkoJmFtcDtpdWN2LSZndDtiYWNrbG9nX3NrYl9xKSkgewogCQkJaWYgKCFsaXN0X2VtcHR5KCZhbXA7aXVjdi0mZ3Q7bWVzc2FnZV9xLmxpc3QpKQogCQkJCWl1Y3ZfcHJvY2Vzc19tZXNzYWdlX3Eoc2spOwotCQkJaWYgKGF0b21pY19yZWFkKCZhbXA7aXVjdi0mZ3Q7bXNnX3JlY3YpICZndDs9Ci0JCQkJCQkJaXVjdi0mZ3Q7bXNnbGltaXQgLyAyKSB7Ci0JCQkJZXJyID0gaXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19XSU4pOwotCQkJCWlmIChlcnIpIHsKLQkJCQkJc2stJmd0O3NrX3N0YXRlID0gSVVDVl9ESVNDT05OOwotCQkJCQlzay0mZ3Q7c2tfc3RhdGVfY2hhbmdlKHNrKTsKLQkJCQl9Ci0JCQl9CiYjNDM7CQkJaWYgKGl1Y3YtJmd0O3RyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgYXRvbWljX3JlYWQoJmFtcDtpdWN2LSZndDttc2dfcmVjdikgJmd0Oz0KJiM0MzsJCQkJCQkJaXVjdi0mZ3Q7bXNnbGltaXQgLyAyKQomIzQzOwkJCQlzZW5kX3dpbiA9IHRydWU7CiAJCX0KIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDtpdWN2LSZndDttZXNzYWdlX3EubG9jayk7CiYjNDM7CiYjNDM7CQlpZiAoc2VuZF93aW4pIHsKJiM0MzsJCQllcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1dJTik7CiYjNDM7CQkJaWYgKGVycikgewomIzQzOwkJCQlzay0mZ3Q7c2tfc3RhdGUgPSBJVUNWX0RJU0NPTk47CiYjNDM7CQkJCXNrLSZndDtza19zdGF0ZV9jaGFuZ2Uoc2spOwomIzQzOwkJCX0KJiM0MzsJCX0KIAl9CiAKIGRvbmU6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgTmV0L0lVQ1YgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyBgbmV0L2l1Y3YvYWZfaXVjdi5jYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBtb2RpZnlpbmcgYGFmaXVjdl9oc19zZW5kYCBhbmQgYGl1Y3Zfc29ja19yZWN2bXNnYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIHNvY2tldCBmYW1pbHkgY2hhbmdlIOKAkyBBRl9JVUNWLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgQUZfSVVDVi4uLiBpcyB0aGF0IGV2ZW4gZ29pbmcgdG8gYmUgcmVsZXZhbnQgaW4gbXkgc3RhbmRhcmQgdGVzdCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRT8mIzM0OyBJIG5lZWQgdG8gdmVyaWZ5IGlmIHRoYXQgc29ja2V0IGZhbWlseSBpcyBldmVuIHJlYWNoYWJsZSBpbiB0aG9zZSBzZXR0aW5ncyBiZWZvcmUgSSBnbyBkb3duIGEgcmFiYml0IGhvbGUuIEFoLCB5ZXMsIEFGX0lVQ1YgaXMgZm9yIHMzOTAsIHRoYXQmIzM5O3MgcmlnaHQuIEJ1dCB0aGUgcXVlc3Rpb24gaXM6IGlzIGl0ICpzb2xlbHkqIGZvciBzMzkwPyBMZXQmIzM5O3MgdmVyaWZ5IHRoYXQuIE5lZWQgdG8gY2hlY2sgYG5ldC9pdWN2L0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGFyY2hpdGVjdHVyZSBkZXBlbmRlbmN5IGFuZCBhbnkgYXNzb2NpYXRlZCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBRl9JVUNWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5NQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudCBkb3duOgoKKipDaGVja2luZyBvbiB0aGUgRXhpc3RlbmNlIG9mIGEgS2NvbmZpZyBGaWxlKioKCk9rYXksIHNvIEkmIzM5O20gd29ya2luZyB3aXRoIHRoZSBuZXR3b3JrIElVQ1YgY29kZSwgYW5kIGEgbmFtZSBqdXN0IHBvcHBlZCBpbnRvIG15IGhlYWQ6IGBuZXQvaXVjdi9LY29uZmlnYC4gKkJ1dCB3YWl0IGEgc2Vjb25kLi4uKiBJcyBpdCBldmVuIHRoZXJlPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgZmlsZSBleGlzdHMsIHNvIEkgY2FuIGNvbnRpbnVlIHdpdGggd2hhdGV2ZXIgSSB3YXMgZG9pbmcuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBuZXQvaXVjdi9gIGRpcmVjdG9yeSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYEtjb25maWdgIGZpbGUgaXMgYWN0dWFsbHkgcHJlc2VudCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgYXMgaXQmIzM5O3MgY3JpdGljYWwgdG8gdGhlIGJ1aWxkIHByb2Nlc3MgaW4gdGhpcyBhcmVhLiBObyBzZW5zZSBpbiBjaGFzaW5nIGdob3N0cyEgSSYjMzk7bGwgcXVpY2tseSB2ZXJpZnkgdGhlIGZpbGUmIzM5O3MgcHJlc2VuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7bmV0L2l1Y3YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDthZl9pdWN2LmMmIzM0OywKICAgICYjMzQ7aXVjdi5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjM1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB5b3VyIHN1bW1hcnksIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipLY29uZmlnIExvY2F0aW9uIERpbGVtbWEqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHByb2plY3QsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCYjMzk7cyBuYWdnaW5nIGF0IG1lIGlzLCB3aGVyZSB0aGUgaGVjayBpcyB0aGUgS2NvbmZpZyBmaWxlPyBJdOKAmXMgZnVuZGFtZW50YWwgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBrZXJuZWwgKG9yIHdoYXRldmVyIHN5c3RlbSBJJiMzOTttIHdvcmtpbmcgd2l0aCkuIEl0JiMzOTtzIHRoZSBjZW50cmFsIHBvaW50LCB0aGUgUm9zZXR0YSBTdG9uZSBvZiBob3cgZXZlcnl0aGluZyBmaXRzIHRvZ2V0aGVyLiBJIG5lZWQgdG8gZ2V0IG15IGJlYXJpbmdzIHF1aWNrbHkuIFdpdGhvdXQgaXQsIEkmIzM5O20gZmx5aW5nIGJsaW5kLCBhbmQgdGhhdCYjMzk7cyBub3QgYWNjZXB0YWJsZS4gSXMgaXQgaW4gdGhlIHJvb3QgZGlyZWN0b3J5PyBBIHNwZWNpZmljIHN1YmRpcmVjdG9yeT8gRGlkIHRoZXkgdXNlIHRoZSBzdGFuZGFyZCBuYW1pbmcgY29udmVudGlvbnMsIG9yIGFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZSBjdXN0b20gc2V0dXAgaGVyZT8gVGhpcyBpcyBnb2luZyB0byBzZXQgdGhlIHRvbmUgZm9yIHRoZSBlbnRpcmUgY29uZmlndXJhdGlvbiBwcm9jZXNzLCBzbyBJIG5lZWQgdG8gZmluZCBpdCBBU0FQLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFGX0lVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQ5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBBRl9JVUNWYC4gR2l2ZW4gdGhhdCBJJiMzOTttIGRlYWxpbmcgd2l0aCBrZXJuZWwgaW50ZXJuYWxzLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcy4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgcmlnaHQ/IEl0JiMzOTtzIHRoZSBzdGFuZGFyZCB3YXkgdG8gZmluZCBvdXQgaG93IHRoaXMgcGFydGljdWxhciBwcm90b2NvbCBpcyBlbmFibGVkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gU28sIGxldCYjMzk7cyBmaXJlIHVwIGEgc2VhcmNoIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gdHVybiB1cCB3aXRoIHRoYXQgZXhhY3Qgc3RyaW5nLCBgQUZfSVVDVmAuIEhvcGVmdWxseSwgdGhlIGNvbmZpZ3VyYXRpb24ga25vYnMgd2lsbCBiZSBjbGVhcmx5IGxhYmVsZWQgYW5kIHdlbGwtZG9jdW1lbnRlZC4gVGhpcyBzaG91bGQgYmUgYSBxdWljayBwYXRoIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydCBvZiB0aGUga2VybmVsIGlzIGNvbnRyb2xsZWQgYW5kIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIEkgbmVlZCB0byBrbm93IGFib3V0IGl0cyBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FGX0lVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWc9MTE9Y29uZmlnIEFGSVVDVlxuLS1cbm5ldC9pdWN2L0tjb25maWctMTMtXHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1Zcbm5ldC9pdWN2L0tjb25maWc6MTQ6XHRwcm9tcHQgXCYjMzQ7QUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXCYjMzQ7XG5uZXQvaXVjdi9LY29uZmlnLTE1LVx0aGVscFxubmV0L2l1Y3YvS2NvbmZpZzoxNjpcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBBRl9JVUNWIHNvY2tldCBhcHBsaWNhdGlvbnNcbm5ldC9pdWN2L0tjb25maWctMTctXHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDI9c3RhdGljIHN0cnVjdCBwcm90byBpdWN2X3Byb3RvID0ge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjQzOlx0Lm5hbWVcdFx0PSBcJiMzNDtBRl9JVUNWXCYjMzQ7LFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ0LVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ5PXN0YXRpYyBzdHJ1Y3QgaXVjdl9oYW5kbGVyIGFmX2l1Y3ZfaGFuZGxlcjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy01MC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo1MTovKiBzcGVjaWFsIEFGX0lVQ1YgSVBSTSBtZXNzYWdlcyAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jLTUyLXN0YXRpYyBjb25zdCB1OCBpcHJtX3NodXRkb3duWzhdID1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTA3PXN0YXRpYyBpbmxpbmUgdm9pZCBsb3dfbm1jcHkodW5zaWduZWQgY2hhciAqZHN0LCBjaGFyICpzcmMpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTExOC0gKlxubmV0L2l1Y3YvYWZfaXVjdi5jOjExOTogKiBGb3IgSVVDVl9JUFJNREFUQSwgQUZfSVVDViB1c2VzIHRoZSBmb2xsb3dpbmcgY29udmVudGlvbiB0byB0cmFuc3BvcnQgc29ja2V0XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTIwLSAqIGRhdGE6XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2Nj1zdGF0aWMgaW5saW5lIGludCBpdWN2X2JlbG93X21zZ2xpbShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MS1cdFx0cmV0dXJuIDE7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTcyOlx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVilcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzMtXHRcdHJldHVybiAoYXRvbWljX3JlYWQoXHUwMDI2aXVjdi1cdTAwM2Vza2JzX2luX3htaXQpIFx1MDAzYyBpdWN2LVx1MDAzZXBhdGgtXHUwMDNlbXNnbGltKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTk3PXN0YXRpYyBpbnQgYWZpdWN2X2hzX3NlbmQoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqaW1zZywgc3RydWN0IHNvY2sgKnNvY2ssXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNy1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDg6XHRwaHNfaGRyLVx1MDAzZW1hZ2ljID0gRVRIX1BfQUZfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDktXHRwaHNfaGRyLVx1MDAzZXZlcnNpb24gPSAxO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMC1cdHBoc19oZHItXHUwMDNlZmxhZ3MgPSBmbGFncztcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTE6XHRpZiAoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1NZTilcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTItXHRcdHBoc19oZHItXHUwMDNld2luZG93ID0gaXVjdi1cdTAwM2Vtc2dsaW1pdDtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDpcdGRldl9oYXJkX2hlYWRlcihza2IsIHNrYi1cdTAwM2VkZXYsIEVUSF9QX0FGX0lVQ1YsIE5VTEwsIE5VTEwsIHNrYi1cdTAwM2VsZW4pO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMS1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjQ0LVx0fVxubmV0L2l1Y3YvYWZfaXVjdi5jOjI0NTpcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0FGX0lVQ1YpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTI0Ni1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjUwLVx0ICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjUxOlx0aWYgKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19XSU4gfHwgIWZsYWdzKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjUyLVx0XHRjb25maXJtX3JlY3YgPSBhdG9taWNfeGNoZyhcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2LCAwKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjU0LVx0XHRpZiAoY29uZmlybV9yZWN2KVxubmV0L2l1Y3YvYWZfaXVjdi5jOjI1NTpcdFx0XHRwaHNfaGRyLVx1MDAzZWZsYWdzID0gcGhzX2hkci1cdTAwM2VmbGFncyB8IEFGX0lVQ1ZfRkxBR19XSU47XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjU2LVx0fVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0zOTg9c3RhdGljIHZvaWQgaXVjdl9zb2NrX2Nsb3NlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDExLVx0Y2FzZSBJVUNWX0NPTk5FQ1RFRDpcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0MTI6XHRcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDEzOlx0XHRcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfRklOKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00MTQtXHRcdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0RJU0NPTk47XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ2OT1zdGF0aWMgc3RydWN0IHNvY2sgKml1Y3Zfc29ja19hbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8sIGdmcF90IHByaW8sIGludCBrZXJuKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTYtXHRpZiAocHJfaXVjdilcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTc6XHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5OC1cdGVsc2Vcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTk6XHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19ISVBFUjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy01MDAtXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTU4NT1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy01OTYtXHRpZiAoYWRkcl9sZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXVjdikgfHxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo1OTc6XHQgICAgYWRkci1cdTAwM2VzYV9mYW1pbHkgIT0gQUZfSVVDVilcbm5ldC9pdWN2L2FmX2l1Y3YuYy01OTgtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02MzYtXHRcdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0JPVU5EO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjYzNzpcdFx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNjM4LVx0XHRcdGlmICghaXVjdi1cdTAwM2Vtc2dsaW1pdClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjUwLVx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IElVQ1ZfQk9VTkQ7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NjUxOlx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NTItXHRcdHNrLVx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjY4PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjc2LVx0bWVtY3B5KGl1Y3YtXHUwMDNlc3JjX3VzZXJfaWQsIGl1Y3ZfdXNlcmlkLCA4KTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2Nzc6XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzgtXHRzay1cdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTczNj1zdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03NDMtXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzQ0Olx0aWYgKGFsZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXVjdikgfHwgYWRkci1cdTAwM2VzYV9mYW1pbHkgIT0gQUZfSVVDVilcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NDUtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03NTAtXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9PUEVOIFx1MDAyNlx1MDAyNlxubmV0L2l1Y3YvYWZfaXVjdi5jOjc1MTpcdCAgICBpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc1Mi1cdFx0cmV0dXJuIC1FQkFERkQ7IC8qIGV4cGxpY2l0IGJpbmQgcmVxdWlyZWQgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzY4LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjc2OTpcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxubmV0L2l1Y3YvYWZfaXVjdi5jOjc3MDpcdFx0ZXJyID0gaXVjdl9zZW5kX2N0cmwoc29jay1cdTAwM2VzaywgQUZfSVVDVl9GTEFHX1NZTik7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNzcxLVx0ZWxzZVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODMtXG5uZXQvaXVjdi9hZl9pdWN2LmM6Nzg0Olx0aWYgKGVyciBcdTAwMjZcdTAwMjYgaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4NS1cdFx0aXVjdl9zZXZlcl9wYXRoKHNrLCAwKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9ODcyPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy04NzgtXG5uZXQvaXVjdi9hZl9pdWN2LmM6ODc5Olx0YWRkci1cdTAwM2VzYV9mYW1pbHkgPSBBRl9JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTg4MC1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTE5PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDAxLVx0ICogZm9yIFNPQ0tfU1RSRUFNIHdlIG1pZ2h0IHdhbnQgdG8gaW1wcm92ZSBpdCBpbiBmdXR1cmUgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDAyOlx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDAzLVx0XHRoZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIpICYjNDM7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNDYtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA0NzpcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA0OC1cdFx0YXRvbWljX2luYyhcdTAwMjZpdWN2LVx1MDAzZW1zZ19zZW50KTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTI0MD1zdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMxMi1cdFx0Y29uc3VtZV9za2Ioc2tiKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzEzOlx0XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMTQtXHRcdFx0YXRvbWljX2luYyhcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2KTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMzNy1cdFx0XHRcdGl1Y3ZfcHJvY2Vzc19tZXNzYWdlX3Eoc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjEzMzg6XHRcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIgXHUwMDI2XHUwMDI2XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMzOS1cdFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdikgXHUwMDNlPVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzQ1LVx0XHRpZiAoc2VuZF93aW4pIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzQ2Olx0XHRcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfV0lOKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzQ3LVx0XHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTQyNj1zdGF0aWMgaW50IGl1Y3Zfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDUxLVx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfQ09OTkVDVEVEKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ1MjpcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NTMtXHRcdFx0dHhtc2cuY2xhc3MgPSAwO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDcwLVx0XHR9IGVsc2Vcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDcxOlx0XHRcdGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfU0hUKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDcyLVx0fVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc1LVx0aWYgKGhvdyA9PSBSQ1ZfU0hVVERPV04gfHwgaG93ID09IFNIVVRET1dOX01BU0spIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDc2Olx0XHRpZiAoKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikgXHUwMDI2XHUwMDI2XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3Ny1cdFx0ICAgIGl1Y3YtXHUwMDNlcGF0aCkge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjE1PXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzQtXHRpdWN2X3NvY2tfaW5pdChuc2ssIHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc1Olx0bml1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzYtXHRuc2stXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xODcyPXN0YXRpYyBpbnQgYWZpdWN2X2hzX2NhbGxiYWNrX3N5bihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4ODItXHRcdGFmaXVjdl9zd2FwX3NyY19kZXN0KHNrYik7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTg4MzpcdFx0dHJhbnNfaGRyLVx1MDAzZWZsYWdzID0gQUZfSVVDVl9GTEFHX1NZTiB8IEFGX0lVQ1ZfRkxBR19GSU47XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg4NC1cdFx0ZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg5NC1cdFx0YWZpdWN2X3N3YXBfc3JjX2Rlc3Qoc2tiKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODk1Olx0XHR0cmFuc19oZHItXHUwMDNlZmxhZ3MgPSBBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0ZJTjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODk2LVx0XHRlcnIgPSBkZXZfcXVldWVfeG1pdChza2IpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTA0LVx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTkwNTpcdG5pdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkwNi1cdG5pdWN2LVx1MDAzZW1zZ2xpbWl0ID0gaXVjdi1cdTAwM2Vtc2dsaW1pdDtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkxOC1cdGFmaXVjdl9zd2FwX3NyY19kZXN0KHNrYik7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTkxOTpcdHRyYW5zX2hkci1cdTAwM2VmbGFncyA9IEFGX0lVQ1ZfRkxBR19TWU4gfCBBRl9JVUNWX0ZMQUdfQUNLO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MjAtXHR0cmFuc19oZHItXHUwMDNld2luZG93ID0gbml1Y3YtXHUwMDNlbXNnbGltaXQ7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIwNjY9c3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwODktXHRza19mb3JfZWFjaChzaywgXHUwMDI2aXVjdl9za19saXN0LmhlYWQpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDkwOlx0XHRpZiAodHJhbnNfaGRyLVx1MDAzZWZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDkxLVx0XHRcdGlmICgoIW1lbWNtcChcdTAwMjZpdWN2X3NrKHNrKS1cdTAwM2VzcmNfbmFtZSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzMC1cdHN3aXRjaCAodHJhbnNfaGRyLVx1MDAzZWZsYWdzKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjEzMTpcdGNhc2UgQUZfSVVDVl9GTEFHX1NZTjpcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTMyLVx0XHQvKiBjb25uZWN0IHJlcXVlc3QgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzNC1cdFx0YnJlYWs7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjEzNTpcdGNhc2UgKEFGX0lVQ1ZfRkxBR19TWU4gfCBBRl9JVUNWX0ZMQUdfQUNLKTpcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTM2LVx0XHQvKiBjb25uZWN0IHJlcXVlc3QgY29uZmlybWVkICovXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMzgtXHRcdGJyZWFrO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMzk6XHRjYXNlIChBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0ZJTik6XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0MC1cdFx0LyogY29ubmVjdCByZXF1ZXN0IHJlZnVzZWQgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0Mi1cdFx0YnJlYWs7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE0MzpcdGNhc2UgKEFGX0lVQ1ZfRkxBR19GSU4pOlxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNDQtXHRcdC8qIGNsb3NlIHJlcXVlc3QgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0Ni1cdFx0YnJlYWs7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE0NzpcdGNhc2UgKEFGX0lVQ1ZfRkxBR19XSU4pOlxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNDgtXHRcdGVyciA9IGFmaXVjdl9oc19jYWxsYmFja193aW4oc2ssIHNrYik7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNTMtXHRcdGZhbGx0aHJvdWdoO1x0LyogYW5kIHJlY2VpdmUgbm9uLXplcm8gbGVuZ3RoIGRhdGEgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTU0Olx0Y2FzZSAoQUZfSVVDVl9GTEFHX1NIVCk6XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE1NS1cdFx0Lyogc2h1dGRvd24gcmVxdWVzdCAqL1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjE0PXN0YXRpYyBpbnQgYWZpdWN2X25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMjgtXHRcdFx0XHRpZiAoZXZlbnQgPT0gTkVUREVWX0dPSU5HX0RPV04pXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIyOTpcdFx0XHRcdFx0aXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19GSU4pO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMzAtXHRcdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgaXVjdl9zb2NrX2ZhbWlseV9vcHMgPSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI5NzpcdC5mYW1pbHlcdD0gQUZfSVVDVixcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk4LVx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzAyPXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXVjdl9wYWNrZXRfdHlwZSA9IHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzAzOlx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA0LVx0LmZ1bmMgPSBhZml1Y3ZfaHNfcmN2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgQUZfSVVDViBTb2NrZXQgRmFtaWx5KioKClJpZ2h0LCBzbyAqQUZfSVVDViouLi4gdGhhdCYjMzk7cyBhIHNvY2tldCBmYW1pbHksIG9mIGNvdXJzZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZXRhaWxzLiBMZXQgbWUgcGlucG9pbnQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIEtjb25maWcgZmlsZSBzaG91bGQgYmUgaW4gYG5ldC9pdWN2L0tjb25maWdgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBMZXQmIzM5O3MgZGl2ZSBpbiBhbmQgdGFrZSBhIGxvb2sgYXQgYG5ldC9pdWN2L0tjb25maWdgIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGF2YWlsYWJsZSBhbmQgaG93IGl0JiMzOTtzIGRlZmluZWQuIEkmIzM5O2xsIGJydXNoIHVwIG9uIGl0cyBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIElVQ1ZcbiAgIDM6XHRcdGRlcGVuZHMgb24gUzM5MFxuICAgNDpcdFx0ZGVmX3RyaXN0YXRlIHkgaWYgUzM5MFxuICAgNTpcdFx0cHJvbXB0IFwmIzM0O0lVQ1Ygc3VwcG9ydCAoUzM5MCAtIHovVk0gb25seSlcJiMzNDtcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBpbnRlci11c2VyIGNvbW11bmljYXRpb25cbiAgIDg6XHRcdCAgdW5kZXIgVk0gb3IgVklGLiBJZiB5b3UgcnVuIG9uIHovVk0sIHNheSBcJiMzNDtZXCYjMzQ7IHRvIGVuYWJsZSBhIGZhc3RcbiAgIDk6XHRcdCAgY29tbXVuaWNhdGlvbiBsaW5rIGJldHdlZW4gVk0gZ3Vlc3RzLlxuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBBRklVQ1ZcbiAgMTI6XHRcdGRlcGVuZHMgb24gUzM5MFxuICAxMzpcdFx0ZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWXG4gIDE0Olx0XHRwcm9tcHQgXCYjMzQ7QUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXCYjMzQ7XG4gIDE1Olx0XHRoZWxwXG4gIDE2Olx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgQUZfSVVDViBzb2NrZXQgYXBwbGljYXRpb25zXG4gIDE3Olx0XHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cbiAgMTg6XHRcdCAgSGlwZXJTb2NrZXRzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTkwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTMzkwIENvZGUgRGVwZW5kZW5jeSoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHRoaXMgY29kZSBpcyBjbGVhcmx5IGNvbnRpbmdlbnQgb24gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGNvbnRleHQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMgYWJvdXQgcmVhY2hhYmlsaXR5OiBJcyB0aGlzIHJlbGV2YW50IGNvZGUsIHNwZWNpZmljYWxseSB0aGUgQUZfSVVDViBzb2NrZXQgc3VwcG9ydCwgZ29pbmcgdG8gYmUgZXhlcmNpc2VkIGluIGEgdGVzdGluZyBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFPyBUaGFua2Z1bGx5LCBzeXprYWxsZXIgdGVzdHMgdGhlIFMzOTAgYXJjaGl0ZWN0dXJlIHdpdGhpbiBRRU1VLiBBaGEsIHdhaXQgYSBzZWNvbmQsIEkgbmVlZCB0byBiZSBwcmVjaXNlIGhlcmU7IHN5emthbGxlciYjMzk7cyB0ZXN0aW5nIG9mIHMzOTB4IGNvbWVzIGltbWVkaWF0ZWx5IHRvIG1pbmQuCgpUaGUgcHJvbXB0IGV4cGxpY2l0bHkgbWVudGlvbnMgJiMzNDtBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCkuJiMzNDsgU28sIGlzIHRoYXQgbGV2ZWwgb2Ygc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBhY2Nlc3NpYmxlIHdpdGhpbiBRRU1VPyBZZXMsIHRoYXQmIzM5O3MgYW5vdGhlciBjcml0aWNhbCBwb2ludC4gU3l6a2FsbGVyIHN1cHBvcnRzIHMzOTB4IGluc3RhbmNlcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4gQWxyaWdodCwgdG8gY29uZmlybSB0aGlzIGxldCBtZSBub3cgdmVyaWZ5IGlmIHRoZXJlIGFyZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIHNwZWNpZmljYWxseSBmb3IgQUZfSVVDVi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QUZfSVVDViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnPTExPWNvbmZpZyBBRklVQ1Zcbi0tXG5uZXQvaXVjdi9LY29uZmlnLTEzLVx0ZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWXG5uZXQvaXVjdi9LY29uZmlnOjE0Olx0cHJvbXB0IFwmIzM0O0FGX0lVQ1YgU29ja2V0IHN1cHBvcnQgKFMzOTAgLSB6L1ZNIGFuZCBIaXBlclNvY2tldHMgdHJhbnNwb3J0KVwmIzM0O1xubmV0L2l1Y3YvS2NvbmZpZy0xNS1cdGhlbHBcbm5ldC9pdWN2L0tjb25maWc6MTY6XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgQUZfSVVDViBzb2NrZXQgYXBwbGljYXRpb25zXG5uZXQvaXVjdi9LY29uZmlnLTE3LVx0ICBiYXNlZCBvbiB6L1ZNIGludGVyLXVzZXIgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIG9yIGJhc2VkIG9uXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTQyPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gaXVjdl9wcm90byA9IHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0MzpcdC5uYW1lXHRcdD0gXCYjMzQ7QUZfSVVDVlwmIzM0Oyxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00NC1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz00OT1zdGF0aWMgc3RydWN0IGl1Y3ZfaGFuZGxlciBhZl9pdWN2X2hhbmRsZXI7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNTAtXG5uZXQvaXVjdi9hZl9pdWN2LmM6NTE6Lyogc3BlY2lhbCBBRl9JVUNWIElQUk0gbWVzc2FnZXMgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYy01Mi1zdGF0aWMgY29uc3QgdTggaXBybV9zaHV0ZG93bls4XSA9XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTEwNz1zdGF0aWMgaW5saW5lIHZvaWQgbG93X25tY3B5KHVuc2lnbmVkIGNoYXIgKmRzdCwgY2hhciAqc3JjKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTgtICpcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTk6ICogRm9yIElVQ1ZfSVBSTURBVEEsIEFGX0lVQ1YgdXNlcyB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb24gdG8gdHJhbnNwb3J0IHNvY2tldFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyMC0gKiBkYXRhOlxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjY9c3RhdGljIGlubGluZSBpbnQgaXVjdl9iZWxvd19tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzEtXHRcdHJldHVybiAxO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE3MjpcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTczLVx0XHRyZXR1cm4gKGF0b21pY19yZWFkKFx1MDAyNml1Y3YtXHUwMDNlc2tic19pbl94bWl0KSBcdTAwM2MgaXVjdi1cdTAwM2VwYXRoLVx1MDAzZW1zZ2xpbSk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE5Nz1zdGF0aWMgaW50IGFmaXVjdl9oc19zZW5kKHN0cnVjdCBpdWN2X21lc3NhZ2UgKmltc2csIHN0cnVjdCBzb2NrICpzb2NrLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDctXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA4Olx0cGhzX2hkci1cdTAwM2VtYWdpYyA9IEVUSF9QX0FGX0lVQ1Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA5LVx0cGhzX2hkci1cdTAwM2V2ZXJzaW9uID0gMTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTAtXHRwaHNfaGRyLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjExOlx0aWYgKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEyLVx0XHRwaHNfaGRyLVx1MDAzZXdpbmRvdyA9IGl1Y3YtXHUwMDNlbXNnbGltaXQ7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzA6XHRkZXZfaGFyZF9oZWFkZXIoc2tiLCBza2ItXHUwMDNlZGV2LCBFVEhfUF9BRl9JVUNWLCBOVUxMLCBOVUxMLCBza2ItXHUwMDNlbGVuKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzEtXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTI0NC1cdH1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyNDU6XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yNDYtXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTI1MC1cdCAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjI1MTpcdGlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfV0lOIHx8ICFmbGFncykge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTI1Mi1cdFx0Y29uZmlybV9yZWN2ID0gYXRvbWljX3hjaGcoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdiwgMCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTI1NC1cdFx0aWYgKGNvbmZpcm1fcmVjdilcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyNTU6XHRcdFx0cGhzX2hkci1cdTAwM2VmbGFncyA9IHBoc19oZHItXHUwMDNlZmxhZ3MgfCBBRl9JVUNWX0ZMQUdfV0lOO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTI1Ni1cdH1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9Mzk4PXN0YXRpYyB2b2lkIGl1Y3Zfc29ja19jbG9zZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQxMS1cdGNhc2UgSVVDVl9DT05ORUNURUQ6XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDEyOlx0XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjQxMzpcdFx0XHRlcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX0ZJTik7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNDE0LVx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9ESVNDT05OO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz00Njk9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2Vybilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDk2LVx0aWYgKHByX2l1Y3YpXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDk3Olx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTgtXHRlbHNlXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDk5Olx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNTAwLVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz01ODU9c3RhdGljIGludCBpdWN2X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTk2LVx0aWYgKGFkZHJfbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2l1Y3YpIHx8XG5uZXQvaXVjdi9hZl9pdWN2LmM6NTk3Olx0ICAgIGFkZHItXHUwMDNlc2FfZmFtaWx5ICE9IEFGX0lVQ1YpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTk4LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjM2LVx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9CT1VORDtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2Mzc6XHRcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTYzOC1cdFx0XHRpZiAoIWl1Y3YtXHUwMDNlbXNnbGltaXQpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY1MC1cdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0JPVU5EO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjY1MTpcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNjUyLVx0XHRzay1cdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTY2OD1zdGF0aWMgaW50IGl1Y3Zfc29ja19hdXRvYmluZChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY3Ni1cdG1lbWNweShpdWN2LVx1MDAzZXNyY191c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6Njc3Olx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNjc4LVx0c2stXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz03MzY9c3RhdGljIGludCBpdWN2X3NvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzQzLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjc0NDpcdGlmIChhbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2l1Y3YpIHx8IGFkZHItXHUwMDNlc2FfZmFtaWx5ICE9IEFGX0lVQ1YpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzQ1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzUwLVx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfT1BFTiBcdTAwMjZcdTAwMjZcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NTE6XHQgICAgaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUilcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NTItXHRcdHJldHVybiAtRUJBREZEOyAvKiBleHBsaWNpdCBiaW5kIHJlcXVpcmVkICovXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc2OC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo3Njk6XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUilcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NzA6XHRcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNvY2stXHUwMDNlc2ssIEFGX0lVQ1ZfRkxBR19TWU4pO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTc3MS1cdGVsc2Vcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzgzLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjc4NDpcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVilcbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODUtXHRcdGl1Y3Zfc2V2ZXJfcGF0aChzaywgMCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTg3Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtODc4LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjg3OTpcdGFkZHItXHUwMDNlc2FfZmFtaWx5ID0gQUZfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy04ODAtXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTkxOT1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTAwMS1cdCAqIGZvciBTT0NLX1NUUkVBTSB3ZSBtaWdodCB3YW50IHRvIGltcHJvdmUgaXQgaW4gZnV0dXJlICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTAwMjpcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTAwMy1cdFx0aGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSAmIzQzO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDQ2LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNDc6XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNDgtXHRcdGF0b21pY19pbmMoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfc2VudCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTEyNDA9c3RhdGljIGludCBpdWN2X3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMTItXHRcdGNvbnN1bWVfc2tiKHNrYik7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTMxMzpcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzE0LVx0XHRcdGF0b21pY19pbmMoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdik7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMzctXHRcdFx0XHRpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzM4Olx0XHRcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSIFx1MDAyNlx1MDAyNlxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMzktXHRcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpIFx1MDAzZT1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTM0NS1cdFx0aWYgKHNlbmRfd2luKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTM0NjpcdFx0XHRlcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1dJTik7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTM0Ny1cdFx0XHRpZiAoZXJyKSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MjY9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1MS1cdCAgICBzay1cdTAwM2Vza19zdGF0ZSA9PSBJVUNWX0NPTk5FQ1RFRCkge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NTI6XHRcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDUzLVx0XHRcdHR4bXNnLmNsYXNzID0gMDtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3MC1cdFx0fSBlbHNlXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3MTpcdFx0XHRpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1NIVCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3Mi1cdH1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3NS1cdGlmIChob3cgPT0gUkNWX1NIVVRET1dOIHx8IGhvdyA9PSBTSFVURE9XTl9NQVNLKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3NjpcdFx0aWYgKChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIFx1MDAyNlx1MDAyNlxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzctXHRcdCAgICBpdWN2LVx1MDAzZXBhdGgpIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYxNT1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc0LVx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY3NTpcdG5pdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc2LVx0bnNrLVx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTg3Mj1zdGF0aWMgaW50IGFmaXVjdl9oc19jYWxsYmFja19zeW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODgyLVx0XHRhZml1Y3Zfc3dhcF9zcmNfZGVzdChza2IpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE4ODM6XHRcdHRyYW5zX2hkci1cdTAwM2VmbGFncyA9IEFGX0lVQ1ZfRkxBR19TWU4gfCBBRl9JVUNWX0ZMQUdfRklOO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE4ODQtXHRcdGVyciA9IGRldl9xdWV1ZV94bWl0KHNrYik7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4OTQtXHRcdGFmaXVjdl9zd2FwX3NyY19kZXN0KHNrYik7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTg5NTpcdFx0dHJhbnNfaGRyLVx1MDAzZWZsYWdzID0gQUZfSVVDVl9GTEFHX1NZTiB8IEFGX0lVQ1ZfRkxBR19GSU47XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg5Ni1cdFx0ZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkwNC1cdGl1Y3Zfc29ja19pbml0KG5zaywgc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE5MDU6XHRuaXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MDYtXHRuaXVjdi1cdTAwM2Vtc2dsaW1pdCA9IGl1Y3YtXHUwMDNlbXNnbGltaXQ7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MTgtXHRhZml1Y3Zfc3dhcF9zcmNfZGVzdChza2IpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE5MTk6XHR0cmFuc19oZHItXHUwMDNlZmxhZ3MgPSBBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0FDSztcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTIwLVx0dHJhbnNfaGRyLVx1MDAzZXdpbmRvdyA9IG5pdWN2LVx1MDAzZW1zZ2xpbWl0O1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMDY2PXN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDg5LVx0c2tfZm9yX2VhY2goc2ssIFx1MDAyNml1Y3Zfc2tfbGlzdC5oZWFkKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA5MDpcdFx0aWYgKHRyYW5zX2hkci1cdTAwM2VmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA5MS1cdFx0XHRpZiAoKCFtZW1jbXAoXHUwMDI2aXVjdl9zayhzayktXHUwMDNlc3JjX25hbWUsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMzAtXHRzd2l0Y2ggKHRyYW5zX2hkci1cdTAwM2VmbGFncykge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMzE6XHRjYXNlIEFGX0lVQ1ZfRkxBR19TWU46XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzMi1cdFx0LyogY29ubmVjdCByZXF1ZXN0ICovXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMzQtXHRcdGJyZWFrO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMzU6XHRjYXNlIChBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0FDSyk6XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzNi1cdFx0LyogY29ubmVjdCByZXF1ZXN0IGNvbmZpcm1lZCAqL1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTM4LVx0XHRicmVhaztcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTM5Olx0Y2FzZSAoQUZfSVVDVl9GTEFHX1NZTiB8IEFGX0lVQ1ZfRkxBR19GSU4pOlxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNDAtXHRcdC8qIGNvbm5lY3QgcmVxdWVzdCByZWZ1c2VkICovXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNDItXHRcdGJyZWFrO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxNDM6XHRjYXNlIChBRl9JVUNWX0ZMQUdfRklOKTpcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQ0LVx0XHQvKiBjbG9zZSByZXF1ZXN0ICovXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNDYtXHRcdGJyZWFrO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxNDc6XHRjYXNlIChBRl9JVUNWX0ZMQUdfV0lOKTpcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQ4LVx0XHRlcnIgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfd2luKHNrLCBza2IpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTUzLVx0XHRmYWxsdGhyb3VnaDtcdC8qIGFuZCByZWNlaXZlIG5vbi16ZXJvIGxlbmd0aCBkYXRhICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE1NDpcdGNhc2UgKEFGX0lVQ1ZfRkxBR19TSFQpOlxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNTUtXHRcdC8qIHNodXRkb3duIHJlcXVlc3QgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjIxND1zdGF0aWMgaW50IGFmaXVjdl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjI4LVx0XHRcdFx0aWYgKGV2ZW50ID09IE5FVERFVl9HT0lOR19ET1dOKVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMjk6XHRcdFx0XHRcdGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfRklOKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjMwLVx0XHRcdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0RJU0NPTk47XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyOTY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IGl1Y3Zfc29ja19mYW1pbHlfb3BzID0ge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIyOTc6XHQuZmFtaWx5XHQ9IEFGX0lVQ1YsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5OC1cdC5vd25lclx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjMwMj1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGl1Y3ZfcGFja2V0X3R5cGUgPSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMwMzpcdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfQUZfSVVDViksXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwNC1cdC5mdW5jID0gYWZpdWN2X2hzX3JjdixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3ODAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU29ja2V0IFJhY2UgQ29uZGl0aW9uIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhZml1Y3ZfaHNfc2VuZGAgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2Ag4oCTIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgYGNvbmZpcm1fcmVjdmAgdmFsdWUgaXMgcmVhZCwgYW5kIHRoZW4gYW4gYGF0b21pY19zdWJgIGlzIHBlcmZvcm1lZC4gVGhpcyBjYW4gbGVhZCB0byBgbXNnX3JlY3ZgIGdvaW5nIG5lZ2F0aXZlLCB3aGljaCBpcyBkZWZpbml0ZWx5IGEgYmFkIHRoaW5nIGluIHRoZSBzZW5kL3JlY2VpdmUgcGF0aC4gVGhlIGZpeCBjbGV2ZXJseSB1c2VzIGBhdG9taWNfeGNoZ2AgdG8gYXRvbWljYWxseSByZWFkIGFuZCBjbGVhciBgbXNnX3JlY3ZgLiBUaGF0JiMzOTtzIGEgY2xlYW4gd2F5IHRvIGVuc3VyZSBkYXRhIGludGVncml0eSwgd2hpY2ggSSBhcHByZWNpYXRlLgoKVGhlIHBhdGNoIGFsc28gbW92ZXMgYGl1Y3Zfc2VuZF9jdHJsYCBvdXQgb2YgdGhlIHNwaW5sb2NrIGluIGBpdWN2X3NvY2tfcmVjdm1zZ2AuIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5LCByaWdodD8gSSB3b25kZXIgaWYgdGhpcyBjaGFuZ2Ugd2FycmFudHMgc29tZSBmdXp6aW5nLiBHaXZlbiB0aGF0IGl0IGRpcmVjdGx5IGFkZHJlc3NlcyBhIGJ1ZyBpbiB0aGUgc29ja2V0IHNlbmQvcmVjZWl2ZSBwYXRoLCBhYnNvbHV0ZWx5LiBJdCYjMzk7cyBhbHdheXMgd29ydGh3aGlsZSB0byB0aG9yb3VnaGx5IHRlc3QgY3JpdGljYWwgaW5mcmFzdHJ1Y3R1cmUgbGlrZSB0aGlzLgoKV2FpdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWcuIFRoZSBjb25maWcgZm9yIHRoaXMgaXMgYEFGSVVDVmAsIG5vdCBgQUZfSVVDVmAg4oCTIGdvdCBpdC4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBuZXQvaXVjdi9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIFllcCwgaXQmIzM5O3MgYGNvbmZpZyBBRklVQ1ZgLgoKTGV0JiMzOTtzIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHByaW1hcnkgZm9jdXM6IGBhZml1Y3ZfaHNfc2VuZGAgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2AuIFRob3NlIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBpbiBtaW5kLgoKTm93LCBsZXQgbWUganVzdCBjb25maXJtIGBhZml1Y3ZfaHNfc2VuZGAgaXNuJiMzOTt0IGlubGluZSBvciBzdGF0aWMuIEFoLCBpdCYjMzk7cyBzdGF0aWMhIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJcyBpdCBhbiBBUEkgZW50cnlwb2ludCB0aGVuPyBJIHNob3VsZCBzZWUgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FmaXVjdl9oc19zZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz0xODI9c3RhdGljIHZvaWQgaXVjdl9zb2NrX3dha2VfbXNnbGltKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTk0LS8qXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTk1OiAqIGFmaXVjdl9oc19zZW5kKCkgLSBzZW5kIGEgbWVzc2FnZSB0aHJvdWdoIEhpcGVyU29ja2V0cyB0cmFuc3BvcnRcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTYtICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTk3OnN0YXRpYyBpbnQgYWZpdWN2X2hzX3NlbmQoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqaW1zZywgc3RydWN0IHNvY2sgKnNvY2ssXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTk4LVx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBmbGFncylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MzcyPXN0YXRpYyBpbnQgaXVjdl9zZW5kX2N0cmwoc3RydWN0IHNvY2sgKnNrLCB1OCBmbGFncylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzg5LVx0XHRza2JfcmVzZXJ2ZShza2IsIGJsZW4pO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjM5MDpcdFx0ZXJyID0gYWZpdWN2X2hzX3NlbmQoTlVMTCwgc2ssIHNrYiwgZmxhZ3MpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTM5MS1cdH1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTE5PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDQ4LVx0XHRhdG9taWNfaW5jKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3NlbnQpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNDk6XHRcdGVyciA9IGFmaXVjdl9oc19zZW5kKFx1MDAyNnR4bXNnLCBzaywgc2tiLCAwKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDUwLVx0XHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDExCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIFNvY2tldCBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBiZXN0IGZvY3VzIHN5bWJvbHMuIEkgc2VlIHRoYXQgYGFmaXVjdl9oc19zZW5kYCBpcyBjYWxsZWQgZnJvbSBgaXVjdl9zZW5kX2N0cmxgIGFuZCBgaXVjdl9zb2NrX3NlbmRtc2dgLiBIbW0sIGludGVyZXN0aW5nLiBBbmQsIGBpdWN2X3NvY2tfc2VuZG1zZ2AgaXMgY2xlYXJseSB0aGUgc2VuZG1zZyBjYWxsYmFjayBmb3IgdGhlIHNvY2tldCwgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2AgaXMgdGhlIHJlY3Ztc2cgY2FsbGJhY2suIEJvdGggb2YgdGhvc2Ugc29ja2V0IGZ1bmN0aW9ucyBsb29rIGxpa2UgZ29vZCBjYW5kaWRhdGVzIHRvIGNvbmNlbnRyYXRlIG9uIOKAkyB0aGV5IHJlcHJlc2VudCBrZXkgZW50cnkgcG9pbnRzIGZvciBkYXRhIHRyYW5zZmVyLiBXYWl0IGEgc2Vjb25kLCB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmllZCB0byBwcmVmZXIgbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQgZW50cnlwb2ludCBmdW5jdGlvbnMuIE9oLCByaWdodCEgYGFmaXVjdl9oc19zZW5kYCBpcyBzdGF0aWMuIFNpbmNlIGl0JiMzOTtzIHN0YXRpYywgaXQgaXMgcHJvYmFibHkgaW5saW5lZCBhbmQgZG9lc24mIzM5O3Qgb2ZmZXIgYSBkaXN0aW5jdCBzeW1ib2wuIFNvLCB0aGF0IGxlYXZlcyBgaXVjdl9zb2NrX3NlbmRtc2dgIGFuZCBgaXVjdl9zb2NrX3JlY3Ztc2dgIGFzIHRoZSBiZXR0ZXIgY2hvaWNlcy4gTm93IEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRob3NlIHR3byBzb2NrZXQgZnVuY3Rpb25zIGFyZSBzdGF0aWMgYXMgd2VsbCwgdG8gbWFrZSBzdXJlIEkgYW0gb24gdGhlIHJpZ2h0IHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l1Y3Zfc29ja19zZW5kbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz05MDg9c3RhdGljIGludCBpdWN2X3NlbmRfaXBybShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2csXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTkxOC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo5MTk6c3RhdGljIGludCBpdWN2X3NvY2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTIwLVx0XHRcdCAgICAgc2l6ZV90IGxlbilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpdWN2X3NvY2tfb3BzID0ge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjU1LVx0LmdldG5hbWVcdD0gaXVjdl9zb2NrX2dldG5hbWUsXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI1NjpcdC5zZW5kbXNnXHQ9IGl1Y3Zfc29ja19zZW5kbXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNTctXHQucmVjdm1zZ1x0PSBpdWN2X3NvY2tfcmVjdm1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3NzUKCQkJCQkJCW91dHB1dDogMTMxCgkJCQkJCQl0aG91Z2h0czogNDA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFGSVVDViBDb2RlIFBhdGgqKgoKT2theSwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucywgd2hpbGUgc3RhdGljLCBhcmUgYWN0aW5nIGFzIEFQSSBlbnRyeXBvaW50cyBiZWNhdXNlIHRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIGBwcm90b19vcHNgLiBUaGF0IG1ha2VzIGBpdWN2X3NvY2tfc2VuZG1zZ2AgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2AgaWRlYWwgY2FuZGlkYXRlcyBmb3IgZnV6emluZy4gV2FpdCwgYWN0dWFsbHksIGBhZml1Y3ZfaHNfc2VuZGAgY291bGQgYWxzbyBiZSBjb25zaWRlcmVkIGlmIGl0JiMzOTtzIGxhcmdlLCBidXQgYGl1Y3Zfc29ja19zZW5kbXNnYCBpcyBsaWtlbHkgdGhlIGJldHRlciBjaG9pY2UuIEl04oCZcyBpbXBvcnRhbnQgdG8gc3RpY2sgdG8gQVBJIGVudHJ5cG9pbnRzLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBBRklVQ1ZgIGRlcGVuZHMgb24gYFMzOTBgLCBhbmQgaXRzIHRyaXN0YXRlIGRlZmluaXRpb24gaGluZ2VzIG9uIGVpdGhlciBgUUVUSF9MM2Agb3IgYElVQ1ZgLiBTbywgYEFGSVVDVmAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBEb3VibGUtY2hlY2tpbmcgdGhhdCBpbiBgbmV0L2l1Y3YvS2NvbmZpZ2AgY29uZmlybXMgdGhpcy4gVGhlcmVmb3JlLCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlIHNldCB0byBgWyYjMzQ7QUZJVUNWJiMzNDtdYC4KCkhhbmcgb24sIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHBvaW50aW5nIG91dCB0aGF0IHdlIHNob3VsZCBleGNsdWRlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBCdXQgdGhlIGBTMzkwYCBjb2RlIGlzIHJlYWNoYWJsZSBpbiBRRU1VIGJlY2F1c2UgaXQgc3VwcG9ydHMgYHFlbXUtc3lzdGVtLXMzOTB4YCwgYW5kIHN5emthbGxlciBoYXMgYW4gYHMzOTB4YCB0YXJnZXQuIFNvLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGZhaXIgZ2FtZSBmb3IgZnV6emluZy4KCk9rYXksIGxldCYjMzk7cyBxdWlja2x5IHJldmlldyB0aGUgY29kZSBjaGFuZ2VzLiBCb3RoIGBhZml1Y3ZfaHNfc2VuZGAgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2AgYXJlIG1vZGlmaWVkLCBhbmQgdGhlIGNoYW5nZXMgYWRkcmVzcyBhIHJhY2UgY29uZGl0aW9uIHJlbGF0ZWQgdG8gdGhlIGBtc2dfcmVjdmAgYXRvbWljIHZhcmlhYmxlLiBUaGF0IGFsb25lIG1ha2VzIHRoaXMgYSB2ZXJ5IGludGVyZXN0aW5nIHRhcmdldCBmb3IgZnV6emluZy4gWWVzLCB0aGUgY2hhbmdlcyBsb29rIGxpa2UgdGhleSBmaXggYSByYWNlLgoKV2UmIzM5O3JlIGdvb2QgdG8gZ28uIFRpbWUgdG8gc2V0IHVwIHRoZSBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZJVUNWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXVjdl9zb2NrX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgQUZfSVVDViBzb2NrZXQgc2VuZCBhbmQgcmVjZWl2ZSBwYXRocyBieSB1c2luZyBhdG9taWNfeGNoZyBmb3IgdGhlIG1zZ19yZWN2IHZhcmlhYmxlIGFuZCBtb3ZpbmcgaXVjdl9zZW5kX2N0cmwgb3V0IG9mIGEgc3BpbmxvY2sgYmxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIHNvY2tldCBsb2dpYyBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyB0ZXN0YWJsZSBpbiBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRklVQ1YmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpdWN2X3NvY2tfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtpdWN2X3NvY2tfcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBBRl9JVUNWIHNvY2tldCBzZW5kIGFuZCByZWNlaXZlIHBhdGhzIGJ5IHVzaW5nIGF0b21pY194Y2hnIGZvciB0aGUgbXNnX3JlY3YgdmFyaWFibGUgYW5kIG1vdmluZyBpdWN2X3NlbmRfY3RybCBvdXQgb2YgYSBzcGlubG9jayBibG9jay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgc29ja2V0IGxvZ2ljIGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIHRlc3RhYmxlIGluIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kvbG9ja2luZyBpc3N1ZSBpbiB0aGUgQUZfSVVDViBzb2NrZXQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgaXQgZGVmZXJzIHRoZSBgaXVjdl9zZW5kX2N0cmwoKWAgY2FsbCBpbiBgaXVjdl9zb2NrX3JlY3Ztc2coKWAgdW50aWwgYWZ0ZXIgdGhlIGBpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrYCBzcGlubG9jayBpcyByZWxlYXNlZCwgcHJldmVudGluZyBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2sgaW52ZXJzaW9ucy4gSXQgYWxzbyBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBhZml1Y3ZfaHNfc2VuZCgpYCBieSB1c2luZyBgYXRvbWljX3hjaGcoKWAgdG8gY2xhaW0gcmVjZWl2ZSBjcmVkaXRzIGF0b21pY2FsbHkgcmlnaHQgYmVmb3JlIHRyYW5zbWlzc2lvbiwgaW5zdGVhZCBvZiByZWFkaW5nIGFuZCBsYXRlciBzdWJ0cmFjdGluZyB0aGUgdmFsdWUuIFxuXG5BbGwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzIGludm9sdmVkIChzdWNoIGFzIGBwaHNfaGRyYCBhbmQgYGNvbmZpcm1fcmVjdmApIGFyZSBmdWxseSBpbml0aWFsaXplZCAoZS5nLiwgYG1lbXNldChwaHNfaGRyLCAwLCBzaXplb2YoKnBoc19oZHIpKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIEtDU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmZjdlYTcxNzU1NDViNGRkOGQ3NDAzNzk2MWMzOWNkNjlhZDA3NDk2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTM6MTk6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmMKaW5kZXggZWEwNDdiYWI2NWU3Yy4uYTdjMGY2MGJiNWJmYyAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pdWN2L2FmX2l1Y3YuYwpAQCAtMjEwLDEyICYjNDM7MjEwLDYgQEAgc3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jaywKIAlwaHNfaGRyLSZndDtmbGFncyA9IGZsYWdzOwogCWlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKQogCQlwaHNfaGRyLSZndDt3aW5kb3cgPSBpdWN2LSZndDttc2dsaW1pdDsKLQllbHNlIGlmICgoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1dJTikgfHwgIWZsYWdzKSB7Ci0JCWNvbmZpcm1fcmVjdiA9IGF0b21pY19yZWFkKCZhbXA7aXVjdi0mZ3Q7bXNnX3JlY3YpOwotCQlwaHNfaGRyLSZndDt3aW5kb3cgPSBjb25maXJtX3JlY3Y7Ci0JCWlmIChjb25maXJtX3JlY3YpCi0JCQlwaHNfaGRyLSZndDtmbGFncyA9IHBoc19oZHItJmd0O2ZsYWdzIHwgQUZfSVVDVl9GTEFHX1dJTjsKLQl9CiAJbWVtY3B5KHBoc19oZHItJmd0O2Rlc3RVc2VySUQsIGl1Y3YtJmd0O2RzdF91c2VyX2lkLCA4KTsKIAltZW1jcHkocGhzX2hkci0mZ3Q7ZGVzdEFwcE5hbWUsIGl1Y3YtJmd0O2RzdF9uYW1lLCA4KTsKIAltZW1jcHkocGhzX2hkci0mZ3Q7c3JjVXNlcklELCBpdWN2LSZndDtzcmNfdXNlcl9pZCwgOCk7CkBAIC0yNTAsMTMgJiM0MzsyNDQsMjIgQEAgc3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jaywKIAl9CiAJc2tiLSZndDtwcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0FGX0lVQ1YpOwogCiYjNDM7CS8qIENsYWltIHRoZSByZWNlaXZlIGNyZWRpdCBoZXJlLCBub3Qgd2hpbGUgYnVpbGRpbmcgdGhlIGhlYWRlcjogZXZlcnkKJiM0MzsJICogd2F5IHRoaXMgZnJhbWUgY2FuIGJlIGRyb3BwZWQgaGFzIG5vdyBiZWVuIHJ1bGVkIG91dCwgc28gdGhlIHdpbmRvdwomIzQzOwkgKiBpcyB6ZXJvZWQgb25seSBmb3IgYXMgbG9uZyBhcyB0aGUgdHJhbnNtaXQgaXRzZWxmIHRha2VzLgomIzQzOwkgKi8KJiM0MzsJaWYgKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19XSU4gfHwgIWZsYWdzKSB7CiYjNDM7CQljb25maXJtX3JlY3YgPSBhdG9taWNfeGNoZygmYW1wO2l1Y3YtJmd0O21zZ19yZWN2LCAwKTsKJiM0MzsJCXBoc19oZHItJmd0O3dpbmRvdyA9IGNvbmZpcm1fcmVjdjsKJiM0MzsJCWlmIChjb25maXJtX3JlY3YpCiYjNDM7CQkJcGhzX2hkci0mZ3Q7ZmxhZ3MgPSBwaHNfaGRyLSZndDtmbGFncyB8IEFGX0lVQ1ZfRkxBR19XSU47CiYjNDM7CX0KJiM0MzsKIAlhdG9taWNfaW5jKCZhbXA7aXVjdi0mZ3Q7c2tic19pbl94bWl0KTsKIAllcnIgPSBkZXZfcXVldWVfeG1pdChza2IpOwogCWlmIChuZXRfeG1pdF9ldmFsKGVycikpIHsKIAkJYXRvbWljX2RlYygmYW1wO2l1Y3YtJmd0O3NrYnNfaW5feG1pdCk7Ci0JfSBlbHNlIHsKLQkJYXRvbWljX3N1Yihjb25maXJtX3JlY3YsICZhbXA7aXVjdi0mZ3Q7bXNnX3JlY3YpOwotCQlXQVJOX09OKGF0b21pY19yZWFkKCZhbXA7aXVjdi0mZ3Q7bXNnX3JlY3YpICZsdDsgMCk7CiYjNDM7CQlhdG9taWNfYWRkKGNvbmZpcm1fcmVjdiwgJmFtcDtpdWN2LSZndDttc2dfcmVjdik7CiAJfQogCXJldHVybiBuZXRfeG1pdF9ldmFsKGVycik7CiAKQEAgLTEyNDEsNiAmIzQzOzEyNDQsNyBAQCBzdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAlzdHJ1Y3QgaXVjdl9zb2NrICppdWN2ID0gaXVjdl9zayhzayk7CiAJdW5zaWduZWQgaW50IGNvcGllZCwgcmxlbjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqcnNrYiwgKmNza2I7CiYjNDM7CWJvb2wgc2VuZF93aW4gPSBmYWxzZTsKIAlpbnQgZXJyID0gMDsKIAl1MzIgb2Zmc2V0OwogCkBAIC0xMzMxLDE2ICYjNDM7MTMzNSwyMCBAQCBzdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmYW1wO2l1Y3YtJmd0O2JhY2tsb2dfc2tiX3EpKSB7CiAJCQlpZiAoIWxpc3RfZW1wdHkoJmFtcDtpdWN2LSZndDttZXNzYWdlX3EubGlzdCkpCiAJCQkJaXVjdl9wcm9jZXNzX21lc3NhZ2VfcShzayk7Ci0JCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtpdWN2LSZndDttc2dfcmVjdikgJmd0Oz0KLQkJCQkJCQlpdWN2LSZndDttc2dsaW1pdCAvIDIpIHsKLQkJCQllcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1dJTik7Ci0JCQkJaWYgKGVycikgewotCQkJCQlzay0mZ3Q7c2tfc3RhdGUgPSBJVUNWX0RJU0NPTk47Ci0JCQkJCXNrLSZndDtza19zdGF0ZV9jaGFuZ2Uoc2spOwotCQkJCX0KLQkJCX0KJiM0MzsJCQlpZiAoaXVjdi0mZ3Q7dHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIgJmFtcDsmYW1wOwomIzQzOwkJCSAgICBhdG9taWNfcmVhZCgmYW1wO2l1Y3YtJmd0O21zZ19yZWN2KSAmZ3Q7PQomIzQzOwkJCQkJCQlpdWN2LSZndDttc2dsaW1pdCAvIDIpCiYjNDM7CQkJCXNlbmRfd2luID0gdHJ1ZTsKIAkJfQogCQlzcGluX3VubG9ja19iaCgmYW1wO2l1Y3YtJmd0O21lc3NhZ2VfcS5sb2NrKTsKJiM0MzsKJiM0MzsJCWlmIChzZW5kX3dpbikgewomIzQzOwkJCWVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfV0lOKTsKJiM0MzsJCQlpZiAoZXJyKSB7CiYjNDM7CQkJCXNrLSZndDtza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjsKJiM0MzsJCQkJc2stJmd0O3NrX3N0YXRlX2NoYW5nZShzayk7CiYjNDM7CQkJfQomIzQzOwkJfQogCX0KIAogZG9uZToKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpdWN2IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2l1Y3YvYWZfaXVjdi5jYC4gSXQgc2VlbXMgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIGBhZml1Y3ZfaHNfc2VuZGAgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2AuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgYWZpdWN2X2hzX3NlbmRgIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgY2hhbmdlIGlzLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgc2hpZnRlZCB0aGUgd2luZG93IGNhbGN1bGF0aW9uIGxvZ2ljLgoKSW5pdGlhbGx5LCB0aGUgY29kZSBjaGVja2VkIGlmIGBmbGFnc2Agd2FzIGBBRl9JVUNWX0ZMQUdfV0lOYCBvciB6ZXJvLCB0aGVuIGNhbGN1bGF0ZWQgYGNvbmZpcm1fcmVjdmAsIHVzZWQgaXQgdG8gc2V0IHRoZSBgd2luZG93YCBmaWVsZCBpbiB0aGUgaGVhZGVyLCBhbmQgcG90ZW50aWFsbHkgc2V0IHRoZSBgQUZfSVVDVl9GTEFHX1dJTmAgZmxhZyBpbiB0aGUgaGVhZGVyLiBOb3csIHRoZXkmIzM5O3ZlIG1vdmVkIHRoYXQgbG9naWMgdG8gYSBwb2ludCByaWdodCBiZWZvcmUgYGRldl9xdWV1ZV94bWl0KHNrYilgLiBUaGUgY29tbWVudCBleHBsYWlucyB0aGlzIGFzIGNsYWltaW5nIHRoZSByZWNlaXZlIGNyZWRpdCBhdCBhIGxhdGVyIHN0YWdlLCBvbmNlIGl0JiMzOTtzIGNlcnRhaW4gdGhlIGZyYW1lIHdvbiYjMzk7dCBiZSBkcm9wcGVkLiBJdCBtYWtlcyBzZW5zZSBpbiBwcmluY2lwbGUgdG8gemVybyB0aGUgd2luZG93IGZvciBvbmx5IHRoZSB0cmFuc21pdCB0aW1lLgoKSG93ZXZlciwgYSByZWQgZmxhZyBwb3BwZWQgdXAgaW4gbXkgaGVhZC4gVGhleSYjMzk7cmUgdXNpbmcgYGF0b21pY194Y2hnYCBub3csIHdoaWNoIGlzIGdvb2QsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29kZSBmbG93LiBJZiBgZmxhZ3NgIGlzICpuZWl0aGVyKiBgQUZfSVVDVl9GTEFHX1dJTmAgbm9yIHplcm8sIHRoZW4gYGNvbmZpcm1fcmVjdmAgd29uJiMzOTt0IGJlIGluaXRpYWxpemVkICpiZWZvcmUqIGl0JiMzOTtzIHVzZWQuIFRoaXMgaXMgcG90ZW50aWFsbHkgYSBidWcsIHNvIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgZnVsbCBpbXBsZW1lbnRhdGlvbiBvZiBgYWZpdWN2X2hzX3NlbmRgLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHNvdXJjZSBjb2RlIG5vdyB0byBtYWtlIHN1cmUgdGhpcyBpc24mIzM5O3QgYW4gaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0XHRza193YWtlX2FzeW5jX3JjdShzaywgU09DS19XQUtFX1NQQUNFLCBQT0xMX09VVCk7XG4gMTkxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAxOTI6XHR9XG4gMTkzOlx0XG4gMTk0Olx0LypcbiAxOTU6XHQgKiBhZml1Y3ZfaHNfc2VuZCgpIC0gc2VuZCBhIG1lc3NhZ2UgdGhyb3VnaCBIaXBlclNvY2tldHMgdHJhbnNwb3J0XG4gMTk2Olx0ICovXG4gMTk3Olx0c3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jayxcbiAxOTg6XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggZmxhZ3MpXG4gMTk5Olx0e1xuIDIwMDpcdFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc29jayk7XG4gMjAxOlx0XHRzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIgKnBoc19oZHI7XG4gMjAyOlx0XHRpbnQgZXJyLCBjb25maXJtX3JlY3YgPSAwO1xuIDIwMzpcdFxuIDIwNDpcdFx0cGhzX2hkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpwaHNfaGRyKSk7XG4gMjA1Olx0XHRtZW1zZXQocGhzX2hkciwgMCwgc2l6ZW9mKCpwaHNfaGRyKSk7XG4gMjA2Olx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiAyMDc6XHRcbiAyMDg6XHRcdHBoc19oZHItXHUwMDNlbWFnaWMgPSBFVEhfUF9BRl9JVUNWO1xuIDIwOTpcdFx0cGhzX2hkci1cdTAwM2V2ZXJzaW9uID0gMTtcbiAyMTA6XHRcdHBoc19oZHItXHUwMDNlZmxhZ3MgPSBmbGFncztcbiAyMTE6XHRcdGlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKVxuIDIxMjpcdFx0XHRwaHNfaGRyLVx1MDAzZXdpbmRvdyA9IGl1Y3YtXHUwMDNlbXNnbGltaXQ7XG4gMjEzOlx0XHRtZW1jcHkocGhzX2hkci1cdTAwM2VkZXN0VXNlcklELCBpdWN2LVx1MDAzZWRzdF91c2VyX2lkLCA4KTtcbiAyMTQ6XHRcdG1lbWNweShwaHNfaGRyLVx1MDAzZWRlc3RBcHBOYW1lLCBpdWN2LVx1MDAzZWRzdF9uYW1lLCA4KTtcbiAyMTU6XHRcdG1lbWNweShwaHNfaGRyLVx1MDAzZXNyY1VzZXJJRCwgaXVjdi1cdTAwM2VzcmNfdXNlcl9pZCwgOCk7XG4gMjE2Olx0XHRtZW1jcHkocGhzX2hkci1cdTAwM2VzcmNBcHBOYW1lLCBpdWN2LVx1MDAzZXNyY19uYW1lLCA4KTtcbiAyMTc6XHRcdEFTQ0VCQyhwaHNfaGRyLVx1MDAzZWRlc3RVc2VySUQsIHNpemVvZihwaHNfaGRyLVx1MDAzZWRlc3RVc2VySUQpKTtcbiAyMTg6XHRcdEFTQ0VCQyhwaHNfaGRyLVx1MDAzZWRlc3RBcHBOYW1lLCBzaXplb2YocGhzX2hkci1cdTAwM2VkZXN0QXBwTmFtZSkpO1xuIDIxOTpcdFx0QVNDRUJDKHBoc19oZHItXHUwMDNlc3JjVXNlcklELCBzaXplb2YocGhzX2hkci1cdTAwM2VzcmNVc2VySUQpKTtcbiAyMjA6XHRcdEFTQ0VCQyhwaHNfaGRyLVx1MDAzZXNyY0FwcE5hbWUsIHNpemVvZihwaHNfaGRyLVx1MDAzZXNyY0FwcE5hbWUpKTtcbiAyMjE6XHRcdGlmIChpbXNnKVxuIDIyMjpcdFx0XHRtZW1jcHkoXHUwMDI2cGhzX2hkci1cdTAwM2VpdWN2X2hkciwgaW1zZywgc2l6ZW9mKHN0cnVjdCBpdWN2X21lc3NhZ2UpKTtcbiAyMjM6XHRcbiAyMjQ6XHRcdHNrYi1cdTAwM2VkZXYgPSBpdWN2LVx1MDAzZWhzX2RldjtcbiAyMjU6XHRcdGlmICghc2tiLVx1MDAzZWRldikge1xuIDIyNjpcdFx0XHRlcnIgPSAtRU5PREVWO1xuIDIyNzpcdFx0XHRnb3RvIGVycl9mcmVlO1xuIDIyODpcdFx0fVxuIDIyOTpcdFxuIDIzMDpcdFx0ZGV2X2hhcmRfaGVhZGVyKHNrYiwgc2tiLVx1MDAzZWRldiwgRVRIX1BfQUZfSVVDViwgTlVMTCwgTlVMTCwgc2tiLVx1MDAzZWxlbik7XG4gMjMxOlx0XG4gMjMyOlx0XHRpZiAoIShza2ItXHUwMDNlZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApIHx8ICFuZXRpZl9jYXJyaWVyX29rKHNrYi1cdTAwM2VkZXYpKSB7XG4gMjMzOlx0XHRcdGVyciA9IC1FTkVURE9XTjtcbiAyMzQ6XHRcdFx0Z290byBlcnJfZnJlZTtcbiAyMzU6XHRcdH1cbiAyMzY6XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzZSBza2ItXHUwMDNlZGV2LVx1MDAzZW10dSkge1xuIDIzNzpcdFx0XHRpZiAoc29jay1cdTAwM2Vza190eXBlID09IFNPQ0tfU0VRUEFDS0VUKSB7XG4gMjM4Olx0XHRcdFx0ZXJyID0gLUVNU0dTSVpFO1xuIDIzOTpcdFx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gMjQwOlx0XHRcdH1cbiAyNDE6XHRcdFx0ZXJyID0gcHNrYl90cmltKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VtdHUpO1xuIDI0MjpcdFx0XHRpZiAoZXJyKVxuIDI0MzpcdFx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gMjQ0Olx0XHR9XG4gMjQ1Olx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKTtcbiAyNDY6XHRcbiAyNDc6XHRcdC8qIENsYWltIHRoZSByZWNlaXZlIGNyZWRpdCBoZXJlLCBub3Qgd2hpbGUgYnVpbGRpbmcgdGhlIGhlYWRlcjogZXZlcnlcbiAyNDg6XHRcdCAqIHdheSB0aGlzIGZyYW1lIGNhbiBiZSBkcm9wcGVkIGhhcyBub3cgYmVlbiBydWxlZCBvdXQsIHNvIHRoZSB3aW5kb3dcbiAyNDk6XHRcdCAqIGlzIHplcm9lZCBvbmx5IGZvciBhcyBsb25nIGFzIHRoZSB0cmFuc21pdCBpdHNlbGYgdGFrZXMuXG4gMjUwOlx0XHQgKi9cbiAyNTE6XHRcdGlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfV0lOIHx8ICFmbGFncykge1xuIDI1MjpcdFx0XHRjb25maXJtX3JlY3YgPSBhdG9taWNfeGNoZyhcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2LCAwKTtcbiAyNTM6XHRcdFx0cGhzX2hkci1cdTAwM2V3aW5kb3cgPSBjb25maXJtX3JlY3Y7XG4gMjU0Olx0XHRcdGlmIChjb25maXJtX3JlY3YpXG4gMjU1Olx0XHRcdFx0cGhzX2hkci1cdTAwM2VmbGFncyA9IHBoc19oZHItXHUwMDNlZmxhZ3MgfCBBRl9JVUNWX0ZMQUdfV0lOO1xuIDI1NjpcdFx0fVxuIDI1NzpcdFxuIDI1ODpcdFx0YXRvbWljX2luYyhcdTAwMjZpdWN2LVx1MDAzZXNrYnNfaW5feG1pdCk7XG4gMjU5Olx0XHRlcnIgPSBkZXZfcXVldWVfeG1pdChza2IpO1xuIDI2MDpcdFx0aWYgKG5ldF94bWl0X2V2YWwoZXJyKSkge1xuIDI2MTpcdFx0XHRhdG9taWNfZGVjKFx1MDAyNml1Y3YtXHUwMDNlc2tic19pbl94bWl0KTtcbiAyNjI6XHRcdFx0YXRvbWljX2FkZChjb25maXJtX3JlY3YsIFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpO1xuIDI2MzpcdFx0fVxuIDI2NDpcdFx0cmV0dXJuIG5ldF94bWl0X2V2YWwoZXJyKTtcbiAyNjU6XHRcbiAyNjY6XHRlcnJfZnJlZTpcbiAyNjc6XHRcdGtmcmVlX3NrYihza2IpO1xuIDI2ODpcdFx0cmV0dXJuIGVycjtcbiAyNjk6XHR9XG4gMjcwOlx0XG4gMjcxOlx0c3RhdGljIHN0cnVjdCBzb2NrICpfX2l1Y3ZfZ2V0X3NvY2tfYnlfbmFtZShjaGFyICpubSlcbiAyNzI6XHR7XG4gMjczOlx0XHRzdHJ1Y3Qgc29jayAqc2s7XG4gMjc0Olx0XG4gMjc1Olx0XHRza19mb3JfZWFjaChzaywgXHUwMDI2aXVjdl9za19saXN0LmhlYWQpXG4gMjc2Olx0XHRcdGlmICghbWVtY21wKFx1MDAyNml1Y3Zfc2soc2spLVx1MDAzZXNyY19uYW1lLCBubSwgOCkpXG4gMjc3Olx0XHRcdFx0cmV0dXJuIHNrO1xuIDI3ODpcdFxuIDI3OTpcdFx0cmV0dXJuIE5VTEw7XG4gMjgwOlx0fVxuIDI4MTpcdFxuIDI4MjpcdHN0YXRpYyB2b2lkIGl1Y3Zfc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG4gMjgzOlx0e1xuIDI4NDpcdFx0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xuIDI4NTpcdFx0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNnNrLVx1MDAzZXNrX2Vycm9yX3F1ZXVlKTtcbiAyODY6XHRcbiAyODc6XHRcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7XG4gMjg4Olx0XHRcdHByX2VycihcJiMzNDtBdHRlbXB0IHRvIHJlbGVhc2UgYWxpdmUgaXVjdiBzb2NrZXQgJXBcXG5cJiMzNDssIHNrKTtcbiAyODk6XHRcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTYxCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFBvdGVudGlhbCBSaXNrcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhZml1Y3ZfaHNfc2VuZGAgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2AuIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByaWdodD8gV2UmIzM5O3JlIG1vZGlmeWluZyB0aGVzZSBmdW5jdGlvbnMsIGFuZCBhbnl0aW1lIHlvdSB0b3VjaCBkYXRhIHN0cnVjdHVyZXMsIHRoZXJlJiMzOTtzIGEgY2hhbmNlIG9mIGludHJvZHVjaW5nIGEgcmVhZCBvciB3cml0ZSBmcm9tIHVuaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggY2FuIGxlYWQgdG8gbmFzdHkgdnVsbmVyYWJpbGl0aWVzLgoKU3BlY2lmaWNhbGx5LCBpbiBgYWZpdWN2X2hzX3NlbmRgLCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgcGxheWluZyB3aXRoIHRoZSB0aW1pbmcgb2YgdGhlIHdpbmRvdyBjYWxjdWxhdGlvbiBhbmQgdGhlIHdheSBgaXVjdi0mZ3Q7bXNnX3JlY3ZgIGlzIGhhbmRsZWQuIFdlJiMzOTtyZSBpbml0aWFsaXppbmcgYGNvbmZpcm1fcmVjdmAgdG8gemVybywgYW5kIHRoZSB3aW5kb3cgY2FsY3VsYXRpb24gaXMgaGFwcGVuaW5nIGp1c3QgYmVmb3JlIGBkZXZfcXVldWVfeG1pdChza2IpYC4gVGhlIGNoYW5nZSB0byBgYXRvbWljX3hjaGdgIGluc3RlYWQgb2YgYGF0b21pY19yZWFkYCBhbmQgYGF0b21pY19zdWJgIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gbG9vayBpbnRvIGEgYml0IGRlZXBlciBsYXRlciBidXQgZG9lc24mIzM5O3QgaW1tZWRpYXRlbHkgc2NyZWFtIGRhbmdlci4KCkluIGBpdWN2X3NvY2tfcmVjdm1zZ2AsIHRoZSBkZWZlcnJhbCBvZiBgaXVjdl9zZW5kX2N0cmxgIHVudGlsIGFmdGVyIGBzcGluX3VubG9ja19iaCgmYW1wO2l1Y3YtJmd0O21lc3NhZ2VfcS5sb2NrKWAgaW1tZWRpYXRlbHkgZ290IG15IGF0dGVudGlvbi4gSXQmIzM5O3MgbGlrZWx5IHRyeWluZyB0byBhdm9pZCBhIGRlYWRsb2NrIG9yIGEgbG9jayBpbnZlcnNpb24gc2l0dWF0aW9uLiBUaGUgb3JkZXIgb2YgbG9ja2luZyBpcyBjcml0aWNhbCwgYW5kIGFueSBjaGFuZ2UgaW4gdGhpcyBhcmVhIG5lZWRzIHRvIGJlIGFuYWx5emVkIHdpdGggYSBmaW5lLXRvb3RoIGNvbWIuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCB3YXMgaWYgdGhlIGNoYW5nZSBpbiBgaXVjdl9zb2NrX3JlY3Ztc2dgIGV4cG9zZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBgcGhzX2hkci0mZ3Q7d2luZG93YCBhbmQgYHBoc19oZHItJmd0O2ZsYWdzYCwgYnV0IGBwaHNfaGRyYCBpcyBhbGxvY2F0ZWQgd2l0aCBgc2tiX3B1c2hgIGFuZCB6ZXJvZWQgb3V0IHdpdGggYG1lbXNldGAuIFNvLCB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4gTm90aGluZyB1bmluaXRpYWxpemVkIGluIGBwaHNfaGRyYC4gVGhhdCYjMzk7cyBhIHJlbGllZiEKCk9rYXksIHNvIGl0IGlzIGxpa2VseSBmaXhpbmcgYSBjb25jdXJyZW5jeSBpc3N1ZSwgYSBkZWFkbG9jayBvciBhIHJhY2UuIEJ5IG1vdmluZyB0aGUgY2FsbCB0byBgaXVjdl9zZW5kX2N0cmxgIGFmdGVyIHJlbGVhc2luZyB0aGUgc3BpbmxvY2ssIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoZXkmIzM5O3JlIHRyeWluZyB0byBwcmV2ZW50IGEgc2l0dWF0aW9uIHdoZXJlIGBpdWN2X3NlbmRfY3RybGAgY2FsbHMgYGFmaXVjdl9oc19zZW5kYCwgd2hpY2ggdGhlbiBjYWxscyBgZGV2X3F1ZXVlX3htaXRgLCB3aGljaCBtaWdodCBzbGVlcCBvciB0YWtlIG90aGVyIGxvY2tzLCB3aGlsZSB3ZSBzdGlsbCBoYXZlIGEgc3BpbmxvY2suCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBgY29uZmlybV9yZWN2YCBpcyBpbml0aWFsaXplZCB0byAwLiBgcGhzX2hkcmAgaXMgemVyb2VkLiBgc2VuZF93aW5gIGlzIGBmYWxzZWAuIExvb2tzIHNvbGlkLiBOb3BlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUuCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIHRoZSBsYWNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB0aGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBmaXggZm9yIGEgbG9ja2luZyBvciBjb25jdXJyZW5jeSBidWcg4oCTIGEgcmFjZSBjb25kaXRpb24sIG9yIHBlcmhhcHMgZXZlbiBhIGRlYWRsb2NrLiBJZiBpdCAqd2FzKiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIHVzZS1hZnRlci1mcmVlLCBLQVNBTiBvciBMT0NLREVQIGxpa2VseSB3b3VsZCYjMzk7dmUgZmxhZ2dlZCB0aGUgb3JpZ2luYWwgcHJvYmxlbS4gS01TQU4gaXMgZGVmaW5pdGVseSBub3QgcmVxdWlyZWQgaGVyZS4KCkkmIzM5O2xsIHF1aWNrbHkgcmV2aWV3IGBpdWN2X3NlbmRfY3RybGAganVzdCB0byBiZSBzdXJlLCBidXQgSSBmZWVsIHByZXR0eSBnb29kIGFib3V0IHRoaXMgb25lLiBJdCBsb29rcyBsaWtlIGEgY2xlYW4sIGZvY3VzZWQgY29uY3VycmVuY3kgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDA6XHRzdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbjEyNDE6XHRcdFx0XHQgICAgIHNpemVfdCBsZW4sIGludCBmbGFncylcbjEyNDI6XHR7XG4xMjQzOlx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuMTI0NDpcdFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xuMTI0NTpcdFx0dW5zaWduZWQgaW50IGNvcGllZCwgcmxlbjtcbjEyNDY6XHRcdHN0cnVjdCBza19idWZmICpza2IsICpyc2tiLCAqY3NrYjtcbjEyNDc6XHRcdGJvb2wgc2VuZF93aW4gPSBmYWxzZTtcbjEyNDg6XHRcdGludCBlcnIgPSAwO1xuMTI0OTpcdFx0dTMyIG9mZnNldDtcbjEyNTA6XHRcbjEyNTE6XHRcdGlmICgoc2stXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9ESVNDT05OKSBcdTAwMjZcdTAwMjZcbjEyNTI6XHRcdCAgICBza2JfcXVldWVfZW1wdHkoXHUwMDI2aXVjdi1cdTAwM2ViYWNrbG9nX3NrYl9xKSBcdTAwMjZcdTAwMjZcbjEyNTM6XHRcdCAgICBza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkgXHUwMDI2XHUwMDI2XG4xMjU0Olx0XHQgICAgbGlzdF9lbXB0eShcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5saXN0KSlcbjEyNTU6XHRcdFx0cmV0dXJuIDA7XG4xMjU2Olx0XG4xMjU3Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IChNU0dfT09CKSlcbjEyNTg6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTI1OTpcdFxuMTI2MDpcdFx0LyogcmVjZWl2ZS9kZXF1ZXVlIG5leHQgc2tiOlxuMTI2MTpcdFx0ICogdGhlIGZ1bmN0aW9uIHVuZGVyc3RhbmRzIE1TR19QRUVLIGFuZCwgdGh1cywgZG9lcyBub3QgZGVxdWV1ZSBza2JcbjEyNjI6XHRcdCAqIG9ubHkgcmVmY291bnQgaXMgaW5jcmVhc2VkLlxuMTI2MzpcdFx0ICovXG4xMjY0Olx0XHRza2IgPSBza2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MsIFx1MDAyNmVycik7XG4xMjY1Olx0XHRpZiAoIXNrYikge1xuMTI2NjpcdFx0XHRpZiAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTilcbjEyNjc6XHRcdFx0XHRyZXR1cm4gMDtcbjEyNjg6XHRcdFx0cmV0dXJuIGVycjtcbjEyNjk6XHRcdH1cbjEyNzA6XHRcbjEyNzE6XHRcdG9mZnNldCA9IElVQ1ZfU0tCX0NCKHNrYiktXHUwMDNlb2Zmc2V0O1xuMTI3MjpcdFx0cmxlbiAgID0gc2tiLVx1MDAzZWxlbiAtIG9mZnNldDtcdFx0LyogcmVhbCBsZW5ndGggb2Ygc2tiICovXG4xMjczOlx0XHRjb3BpZWQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHJsZW4sIGxlbik7XG4xMjc0Olx0XHRpZiAoIXJsZW4pXG4xMjc1Olx0XHRcdHNrLVx1MDAzZXNrX3NodXRkb3duID0gc2stXHUwMDNlc2tfc2h1dGRvd24gfCBSQ1ZfU0hVVERPV047XG4xMjc2Olx0XG4xMjc3Olx0XHRjc2tiID0gc2tiO1xuMTI3ODpcdFx0aWYgKHNrYl9jb3B5X2RhdGFncmFtX21zZyhjc2tiLCBvZmZzZXQsIG1zZywgY29waWVkKSkge1xuMTI3OTpcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMTI4MDpcdFx0XHRnb3RvIGVycl9vdXQ7XG4xMjgxOlx0XHR9XG4xMjgyOlx0XG4xMjgzOlx0XHQvKiBTT0NLX1NFUVBBQ0tFVDogc2V0IE1TR19UUlVOQyBpZiByZWN2IGJ1ZiBzaXplIGlzIHRvbyBzbWFsbCAqL1xuMTI4NDpcdFx0aWYgKHNrLVx1MDAzZXNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpIHtcbjEyODU6XHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgcmxlbilcbjEyODY6XHRcdFx0XHRtc2ctXHUwMDNlbXNnX2ZsYWdzIHw9IE1TR19UUlVOQztcbjEyODc6XHRcdFx0LyogZWFjaCBpdWN2IG1lc3NhZ2UgY29udGFpbnMgYSBjb21wbGV0ZSByZWNvcmQgKi9cbjEyODg6XHRcdFx0bXNnLVx1MDAzZW1zZ19mbGFncyB8PSBNU0dfRU9SO1xuMTI4OTpcdFx0fVxuMTI5MDpcdFxuMTI5MTpcdFx0LyogY3JlYXRlIGNvbnRyb2wgbWVzc2FnZSB0byBzdG9yZSBpdWN2IG1zZyB0YXJnZXQgY2xhc3M6XG4xMjkyOlx0XHQgKiBnZXQgdGhlIHRyZ2NscyBmcm9tIHRoZSBjb250cm9sIGJ1ZmZlciBvZiB0aGUgc2tiIGR1ZSB0b1xuMTI5MzpcdFx0ICogZnJhZ21lbnRhdGlvbiBvZiBvcmlnaW5hbCBpdWN2IG1lc3NhZ2UuICovXG4xMjk0Olx0XHRlcnIgPSBwdXRfY21zZyhtc2csIFNPTF9JVUNWLCBTQ01fSVVDVl9UUkdDTFMsXG4xMjk1Olx0XHRcdCAgICAgICBzaXplb2YoSVVDVl9TS0JfQ0Ioc2tiKS1cdTAwM2VjbGFzcyksXG4xMjk2Olx0XHRcdCAgICAgICAodm9pZCAqKVx1MDAyNklVQ1ZfU0tCX0NCKHNrYiktXHUwMDNlY2xhc3MpO1xuMTI5NzpcdFx0aWYgKGVycilcbjEyOTg6XHRcdFx0Z290byBlcnJfb3V0O1xuMTI5OTpcdFxuMTMwMDpcdFx0LyogTWFyayByZWFkIHBhcnQgb2Ygc2tiIGFzIHVzZWQgKi9cbjEzMDE6XHRcdGlmICghKGZsYWdzIFx1MDAyNiBNU0dfUEVFSykpIHtcbjEzMDI6XHRcbjEzMDM6XHRcdFx0LyogU09DS19TVFJFQU06IHJlLXF1ZXVlIHNrYiBpZiBpdCBjb250YWlucyB1bnJlY2VpdmVkIGRhdGEgKi9cbjEzMDQ6XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3R5cGUgPT0gU09DS19TVFJFQU0pIHtcbjEzMDU6XHRcdFx0XHRpZiAoY29waWVkIFx1MDAzYyBybGVuKSB7XG4xMzA2Olx0XHRcdFx0XHRJVUNWX1NLQl9DQihza2IpLVx1MDAzZW9mZnNldCA9IG9mZnNldCAmIzQzOyBjb3BpZWQ7XG4xMzA3Olx0XHRcdFx0XHRza2JfcXVldWVfaGVhZChcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLCBza2IpO1xuMTMwODpcdFx0XHRcdFx0Z290byBkb25lO1xuMTMwOTpcdFx0XHRcdH1cbjEzMTA6XHRcdFx0fVxuMTMxMTpcdFxuMTMxMjpcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuMTMxMzpcdFx0XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xuMTMxNDpcdFx0XHRcdGF0b21pY19pbmMoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdik7XG4xMzE1Olx0XHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpIFx1MDAzZSBpdWN2LVx1MDAzZW1zZ2xpbWl0KSB7XG4xMzE2Olx0XHRcdFx0XHRXQVJOX09OKDEpO1xuMTMxNzpcdFx0XHRcdFx0aXVjdl9zb2NrX2Nsb3NlKHNrKTtcbjEzMTg6XHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTMxOTpcdFx0XHRcdH1cbjEzMjA6XHRcdFx0fVxuMTMyMTpcdFxuMTMyMjpcdFx0XHQvKiBRdWV1ZSBiYWNrbG9nIHNrYnMgKi9cbjEzMjM6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xuMTMyNDpcdFx0XHRyc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2aXVjdi1cdTAwM2ViYWNrbG9nX3NrYl9xKTtcbjEzMjU6XHRcdFx0d2hpbGUgKHJza2IpIHtcbjEzMjY6XHRcdFx0XHRJVUNWX1NLQl9DQihyc2tiKS1cdTAwM2VvZmZzZXQgPSAwO1xuMTMyNzpcdFx0XHRcdGlmIChfX3NvY2tfcXVldWVfcmN2X3NrYihzaywgcnNrYikpIHtcbjEzMjg6XHRcdFx0XHRcdC8qIGhhbmRsZSByY3YgcXVldWUgZnVsbCAqL1xuMTMyOTpcdFx0XHRcdFx0c2tiX3F1ZXVlX2hlYWQoXHUwMDI2aXVjdi1cdTAwM2ViYWNrbG9nX3NrYl9xLFxuMTMzMDpcdFx0XHRcdFx0XHRcdHJza2IpO1xuMTMzMTpcdFx0XHRcdFx0YnJlYWs7XG4xMzMyOlx0XHRcdFx0fVxuMTMzMzpcdFx0XHRcdHJza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZpdWN2LVx1MDAzZWJhY2tsb2dfc2tiX3EpO1xuMTMzNDpcdFx0XHR9XG4xMzM1Olx0XHRcdGlmIChza2JfcXVldWVfZW1wdHkoXHUwMDI2aXVjdi1cdTAwM2ViYWNrbG9nX3NrYl9xKSkge1xuMTMzNjpcdFx0XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5saXN0KSlcbjEzMzc6XHRcdFx0XHRcdGl1Y3ZfcHJvY2Vzc19tZXNzYWdlX3Eoc2spO1xuMTMzODpcdFx0XHRcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSIFx1MDAyNlx1MDAyNlxuMTMzOTpcdFx0XHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2KSBcdTAwM2U9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NTMKCQkJCQkJCW91dHB1dDogMjY2CgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoKioKCk9rYXksIGxldCBtZSBicmVhayBkb3duIHRoaXMga2VybmVsIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCB0YXJnZXRzIGEgcmFjZSBjb25kaXRpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyBgbXNnX3JlY3ZgIGlzIGhhbmRsZWQuIEkgc3VzcGVjdCB0aGUgY29tbWl0IG1lc3NhZ2UgcHJvYmFibHkgaGlnaGxpZ2h0cyB0aGUgaXNzdWU6IGEgcG90ZW50aWFsIHJhY2Ugd2l0aGluIGBhZml1Y3ZfaHNfc2VuZGAgd2hlcmUgYSB2YWx1ZSBvZiBgbXNnX3JlY3ZgIGlzIHJlYWQsIGRlY3JlbWVudGVkIGJhc2VkIG9uIHRoYXQgcmVhZCwgYnV0IGFub3RoZXIgdGhyZWFkIGNvdWxkIG1vZGlmeSB0aGF0IHZhbHVlIGJldHdlZW4gdGhlIHJlYWQgYW5kIHRoZSBzdWJ0cmFjdGlvbiwgbGVhZGluZyB0byBpbmNvcnJlY3QgYWNjb3VudGluZyBvciBldmVuIGEgZGVhZGxvY2suCgpUaGUgc2Vjb25kIHBhcnQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBNb3ZpbmcgdGhlIGBpdWN2X3NlbmRfY3RybGAgY2FsbCBvdXRzaWRlIG9mIHRoZSBgc3Bpbl9sb2NrX2JoKCZhbXA7aXVjdi0mZ3Q7bWVzc2FnZV9xLmxvY2spYCBpcyBhIGNsYXNzaWMgZGVhZGxvY2sgcHJldmVudGlvbiBzdHJhdGVneS4gSSBzZWUgdGhhdCBgaXVjdl9zZW5kX2N0cmxgIGNhbGxzIGBhZml1Y3ZfaHNfc2VuZGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYGRldl9xdWV1ZV94bWl0YC4gYGRldl9xdWV1ZV94bWl0YCBpcyBub3RvcmlvdXMgZm9yIHBvdGVudGlhbGx5IHRha2luZyBsb2NrcyB0aGF0IGFyZSBpbmNvbXBhdGlibGUgd2l0aCBsb2NrcyBoZWxkIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBtZXNzYWdlIHF1ZXVlcyBhbmQgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuIFNvLCB0aGlzIGNoYW5nZSBsaWtlbHkgcHJldmVudHMgc2l0dWF0aW9ucyB3aGVyZSB0aGUga2VybmVsIG1pZ2h0IGJsb2NrIGluZGVmaW5pdGVseSwgd2FpdGluZyBmb3IgYSBsb2NrIGFscmVhZHkgaGVsZCBieSB0aGUgY3VycmVudCBjb250ZXh0LgoKQW5kIGZpbmFsbHksIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSSYjMzk7bGwgY29uZmlkZW50bHkgbWFyayB0aGUgYE5lZWRzS01TQU5gIGZsYWcgYXMgZmFsc2UgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kvbG9ja2luZyBpc3N1ZSBpbiB0aGUgQUZfSVVDViBzb2NrZXQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgaXQgZGVmZXJzIHRoZSBgaXVjdl9zZW5kX2N0cmwoKWAgY2FsbCBpbiBgaXVjdl9zb2NrX3JlY3Ztc2coKWAgdW50aWwgYWZ0ZXIgdGhlIGBpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrYCBzcGlubG9jayBpcyByZWxlYXNlZCwgcHJldmVudGluZyBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2sgaW52ZXJzaW9ucy4gSXQgYWxzbyBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBhZml1Y3ZfaHNfc2VuZCgpYCBieSB1c2luZyBgYXRvbWljX3hjaGcoKWAgdG8gY2xhaW0gcmVjZWl2ZSBjcmVkaXRzIGF0b21pY2FsbHkgcmlnaHQgYmVmb3JlIHRyYW5zbWlzc2lvbiwgaW5zdGVhZCBvZiByZWFkaW5nIGFuZCBsYXRlciBzdWJ0cmFjdGluZyB0aGUgdmFsdWUuIFxuXG5BbGwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzIGludm9sdmVkIChzdWNoIGFzIGBwaHNfaGRyYCBhbmQgYGNvbmZpcm1fcmVjdmApIGFyZSBmdWxseSBpbml0aWFsaXplZCAoZS5nLiwgYG1lbXNldChwaHNfaGRyLCAwLCBzaXplb2YoKnBoc19oZHIpKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIEtDU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kvbG9ja2luZyBpc3N1ZSBpbiB0aGUgQUZfSVVDViBzb2NrZXQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgaXQgZGVmZXJzIHRoZSBgaXVjdl9zZW5kX2N0cmwoKWAgY2FsbCBpbiBgaXVjdl9zb2NrX3JlY3Ztc2coKWAgdW50aWwgYWZ0ZXIgdGhlIGBpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrYCBzcGlubG9jayBpcyByZWxlYXNlZCwgcHJldmVudGluZyBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2sgaW52ZXJzaW9ucy4gSXQgYWxzbyBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBhZml1Y3ZfaHNfc2VuZCgpYCBieSB1c2luZyBgYXRvbWljX3hjaGcoKWAgdG8gY2xhaW0gcmVjZWl2ZSBjcmVkaXRzIGF0b21pY2FsbHkgcmlnaHQgYmVmb3JlIHRyYW5zbWlzc2lvbiwgaW5zdGVhZCBvZiByZWFkaW5nIGFuZCBsYXRlciBzdWJ0cmFjdGluZyB0aGUgdmFsdWUuIFxuXG5BbGwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzIGludm9sdmVkIChzdWNoIGFzIGBwaHNfaGRyYCBhbmQgYGNvbmZpcm1fcmVjdmApIGFyZSBmdWxseSBpbml0aWFsaXplZCAoZS5nLiwgYG1lbXNldChwaHNfaGRyLCAwLCBzaXplb2YoKnBoc19oZHIpKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIEtDU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzoxOTo1NS42NDUwNDk1NTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODAyMTA1MDczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRklVQ1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpdWN2X3NvY2tfc2VuZG1zZ1wiLFxuICAgIFwiaXVjdl9zb2NrX3JlY3Ztc2dcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5L2xvY2tpbmcgaXNzdWUgaW4gdGhlIEFGX0lVQ1Ygc29ja2V0IGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHksIGl0IGRlZmVycyB0aGUgYGl1Y3Zfc2VuZF9jdHJsKClgIGNhbGwgaW4gYGl1Y3Zfc29ja19yZWN2bXNnKClgIHVudGlsIGFmdGVyIHRoZSBgaXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxvY2tgIHNwaW5sb2NrIGlzIHJlbGVhc2VkLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgbG9jayBpbnZlcnNpb25zLiBJdCBhbHNvIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGFmaXVjdl9oc19zZW5kKClgIGJ5IHVzaW5nIGBhdG9taWNfeGNoZygpYCB0byBjbGFpbSByZWNlaXZlIGNyZWRpdHMgYXRvbWljYWxseSByaWdodCBiZWZvcmUgdHJhbnNtaXNzaW9uLCBpbnN0ZWFkIG9mIHJlYWRpbmcgYW5kIGxhdGVyIHN1YnRyYWN0aW5nIHRoZSB2YWx1ZS4gXFxuXFxuQWxsIHN0cnVjdHVyZXMgYW5kIHZhcmlhYmxlcyBpbnZvbHZlZCAoc3VjaCBhcyBgcGhzX2hkcmAgYW5kIGBjb25maXJtX3JlY3ZgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgKGUuZy4sIGBtZW1zZXQocGhzX2hkciwgMCwgc2l6ZW9mKCpwaHNfaGRyKSlgKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja2luZywgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGRlYWRsb2NrcywgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBvciBLQ1NBTi4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBBRl9JVUNWIHNvY2tldCBzZW5kIGFuZCByZWNlaXZlIHBhdGhzIGJ5IHVzaW5nIGF0b21pY194Y2hnIGZvciB0aGUgbXNnX3JlY3YgdmFyaWFibGUgYW5kIG1vdmluZyBpdWN2X3NlbmRfY3RybCBvdXQgb2YgYSBzcGlubG9jayBibG9jay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgc29ja2V0IGxvZ2ljIGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIHRlc3RhYmxlIGluIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjE5OjU1LjY0NTA1NjM5MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYzMDk1NzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZmY3ZWE3MTc1NTQ1YjRkZDhkNzQwMzc5NjFjMzljZDY5YWQwNzQ5NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMzoxOTo1NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmNcXG5pbmRleCBlYTA0N2JhYjY1ZTdjLi5hN2MwZjYwYmI1YmZjIDEwMDY0NFxcbi0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuY1xcbisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xcbkBAIC0yMTAsMTIgKzIxMCw2IEBAIHN0YXRpYyBpbnQgYWZpdWN2X2hzX3NlbmQoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqaW1zZywgc3RydWN0IHNvY2sgKnNvY2ssXFxuIFxcdHBoc19oZHItXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuIFxcdGlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKVxcbiBcXHRcXHRwaHNfaGRyLVxcdTAwM2V3aW5kb3cgPSBpdWN2LVxcdTAwM2Vtc2dsaW1pdDtcXG4tXFx0ZWxzZSBpZiAoKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19XSU4pIHx8ICFmbGFncykge1xcbi1cXHRcXHRjb25maXJtX3JlY3YgPSBhdG9taWNfcmVhZChcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YpO1xcbi1cXHRcXHRwaHNfaGRyLVxcdTAwM2V3aW5kb3cgPSBjb25maXJtX3JlY3Y7XFxuLVxcdFxcdGlmIChjb25maXJtX3JlY3YpXFxuLVxcdFxcdFxcdHBoc19oZHItXFx1MDAzZWZsYWdzID0gcGhzX2hkci1cXHUwMDNlZmxhZ3MgfCBBRl9JVUNWX0ZMQUdfV0lOO1xcbi1cXHR9XFxuIFxcdG1lbWNweShwaHNfaGRyLVxcdTAwM2VkZXN0VXNlcklELCBpdWN2LVxcdTAwM2Vkc3RfdXNlcl9pZCwgOCk7XFxuIFxcdG1lbWNweShwaHNfaGRyLVxcdTAwM2VkZXN0QXBwTmFtZSwgaXVjdi1cXHUwMDNlZHN0X25hbWUsIDgpO1xcbiBcXHRtZW1jcHkocGhzX2hkci1cXHUwMDNlc3JjVXNlcklELCBpdWN2LVxcdTAwM2VzcmNfdXNlcl9pZCwgOCk7XFxuQEAgLTI1MCwxMyArMjQ0LDIyIEBAIHN0YXRpYyBpbnQgYWZpdWN2X2hzX3NlbmQoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqaW1zZywgc3RydWN0IHNvY2sgKnNvY2ssXFxuIFxcdH1cXG4gXFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0FGX0lVQ1YpO1xcbiBcXG4rXFx0LyogQ2xhaW0gdGhlIHJlY2VpdmUgY3JlZGl0IGhlcmUsIG5vdCB3aGlsZSBidWlsZGluZyB0aGUgaGVhZGVyOiBldmVyeVxcbitcXHQgKiB3YXkgdGhpcyBmcmFtZSBjYW4gYmUgZHJvcHBlZCBoYXMgbm93IGJlZW4gcnVsZWQgb3V0LCBzbyB0aGUgd2luZG93XFxuK1xcdCAqIGlzIHplcm9lZCBvbmx5IGZvciBhcyBsb25nIGFzIHRoZSB0cmFuc21pdCBpdHNlbGYgdGFrZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1dJTiB8fCAhZmxhZ3MpIHtcXG4rXFx0XFx0Y29uZmlybV9yZWN2ID0gYXRvbWljX3hjaGcoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2LCAwKTtcXG4rXFx0XFx0cGhzX2hkci1cXHUwMDNld2luZG93ID0gY29uZmlybV9yZWN2O1xcbitcXHRcXHRpZiAoY29uZmlybV9yZWN2KVxcbitcXHRcXHRcXHRwaHNfaGRyLVxcdTAwM2VmbGFncyA9IHBoc19oZHItXFx1MDAzZWZsYWdzIHwgQUZfSVVDVl9GTEFHX1dJTjtcXG4rXFx0fVxcbitcXG4gXFx0YXRvbWljX2luYyhcXHUwMDI2aXVjdi1cXHUwMDNlc2tic19pbl94bWl0KTtcXG4gXFx0ZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTtcXG4gXFx0aWYgKG5ldF94bWl0X2V2YWwoZXJyKSkge1xcbiBcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZpdWN2LVxcdTAwM2Vza2JzX2luX3htaXQpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRhdG9taWNfc3ViKGNvbmZpcm1fcmVjdiwgXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2KTtcXG4tXFx0XFx0V0FSTl9PTihhdG9taWNfcmVhZChcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YpIFxcdTAwM2MgMCk7XFxuK1xcdFxcdGF0b21pY19hZGQoY29uZmlybV9yZWN2LCBcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YpO1xcbiBcXHR9XFxuIFxcdHJldHVybiBuZXRfeG1pdF9ldmFsKGVycik7XFxuIFxcbkBAIC0xMjQxLDYgKzEyNDQsNyBAQCBzdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4gXFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xcbiBcXHR1bnNpZ25lZCBpbnQgY29waWVkLCBybGVuO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqcnNrYiwgKmNza2I7XFxuK1xcdGJvb2wgc2VuZF93aW4gPSBmYWxzZTtcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcdHUzMiBvZmZzZXQ7XFxuIFxcbkBAIC0xMzMxLDE2ICsxMzM1LDIwIEBAIHN0YXRpYyBpbnQgaXVjdl9zb2NrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbiBcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZpdWN2LVxcdTAwM2ViYWNrbG9nX3NrYl9xKSkge1xcbiBcXHRcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5saXN0KSlcXG4gXFx0XFx0XFx0XFx0aXVjdl9wcm9jZXNzX21lc3NhZ2VfcShzayk7XFxuLVxcdFxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YpIFxcdTAwM2U9XFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdGl1Y3YtXFx1MDAzZW1zZ2xpbWl0IC8gMikge1xcbi1cXHRcXHRcXHRcXHRlcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1dJTik7XFxuLVxcdFxcdFxcdFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0XFx0XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gSVVDVl9ESVNDT05OO1xcbi1cXHRcXHRcXHRcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2KSBcXHUwMDNlPVxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRpdWN2LVxcdTAwM2Vtc2dsaW1pdCAvIDIpXFxuK1xcdFxcdFxcdFxcdHNlbmRfd2luID0gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xcbitcXG4rXFx0XFx0aWYgKHNlbmRfd2luKSB7XFxuK1xcdFxcdFxcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfV0lOKTtcXG4rXFx0XFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0RJU0NPTk47XFxuK1xcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gZG9uZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MTk6NTYuMjA4ODM5NTg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDM5OTc1MjEzNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZJVUNWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXVjdl9zb2NrX3NlbmRtc2dcIixcbiAgICBcIml1Y3Zfc29ja19yZWN2bXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgQUZfSVVDViBzb2NrZXQgc2VuZCBhbmQgcmVjZWl2ZSBwYXRocyBieSB1c2luZyBhdG9taWNfeGNoZyBmb3IgdGhlIG1zZ19yZWN2IHZhcmlhYmxlIGFuZCBtb3ZpbmcgaXVjdl9zZW5kX2N0cmwgb3V0IG9mIGEgc3BpbmxvY2sgYmxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIHNvY2tldCBsb2dpYyBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyB0ZXN0YWJsZSBpbiBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmZjdlYTcxNzU1NDViNGRkOGQ3NDAzNzk2MWMzOWNkNjlhZDA3NDk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTM6MTk6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbmluZGV4IGVhMDQ3YmFiNjVlN2MuLmE3YzBmNjBiYjViZmMgMTAwNjQ0XG4tLS0gYS9uZXQvaXVjdi9hZl9pdWN2LmNcbisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuQEAgLTIxMCwxMiArMjEwLDYgQEAgc3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jayxcbiBcdHBoc19oZHItXHUwMDNlZmxhZ3MgPSBmbGFncztcbiBcdGlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKVxuIFx0XHRwaHNfaGRyLVx1MDAzZXdpbmRvdyA9IGl1Y3YtXHUwMDNlbXNnbGltaXQ7XG4tXHRlbHNlIGlmICgoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1dJTikgfHwgIWZsYWdzKSB7XG4tXHRcdGNvbmZpcm1fcmVjdiA9IGF0b21pY19yZWFkKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpO1xuLVx0XHRwaHNfaGRyLVx1MDAzZXdpbmRvdyA9IGNvbmZpcm1fcmVjdjtcbi1cdFx0aWYgKGNvbmZpcm1fcmVjdilcbi1cdFx0XHRwaHNfaGRyLVx1MDAzZWZsYWdzID0gcGhzX2hkci1cdTAwM2VmbGFncyB8IEFGX0lVQ1ZfRkxBR19XSU47XG4tXHR9XG4gXHRtZW1jcHkocGhzX2hkci1cdTAwM2VkZXN0VXNlcklELCBpdWN2LVx1MDAzZWRzdF91c2VyX2lkLCA4KTtcbiBcdG1lbWNweShwaHNfaGRyLVx1MDAzZWRlc3RBcHBOYW1lLCBpdWN2LVx1MDAzZWRzdF9uYW1lLCA4KTtcbiBcdG1lbWNweShwaHNfaGRyLVx1MDAzZXNyY1VzZXJJRCwgaXVjdi1cdTAwM2VzcmNfdXNlcl9pZCwgOCk7XG5AQCAtMjUwLDEzICsyNDQsMjIgQEAgc3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jayxcbiBcdH1cbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0FGX0lVQ1YpO1xuIFxuK1x0LyogQ2xhaW0gdGhlIHJlY2VpdmUgY3JlZGl0IGhlcmUsIG5vdCB3aGlsZSBidWlsZGluZyB0aGUgaGVhZGVyOiBldmVyeVxuK1x0ICogd2F5IHRoaXMgZnJhbWUgY2FuIGJlIGRyb3BwZWQgaGFzIG5vdyBiZWVuIHJ1bGVkIG91dCwgc28gdGhlIHdpbmRvd1xuK1x0ICogaXMgemVyb2VkIG9ubHkgZm9yIGFzIGxvbmcgYXMgdGhlIHRyYW5zbWl0IGl0c2VsZiB0YWtlcy5cbitcdCAqL1xuK1x0aWYgKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19XSU4gfHwgIWZsYWdzKSB7XG4rXHRcdGNvbmZpcm1fcmVjdiA9IGF0b21pY194Y2hnKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YsIDApO1xuK1x0XHRwaHNfaGRyLVx1MDAzZXdpbmRvdyA9IGNvbmZpcm1fcmVjdjtcbitcdFx0aWYgKGNvbmZpcm1fcmVjdilcbitcdFx0XHRwaHNfaGRyLVx1MDAzZWZsYWdzID0gcGhzX2hkci1cdTAwM2VmbGFncyB8IEFGX0lVQ1ZfRkxBR19XSU47XG4rXHR9XG4rXG4gXHRhdG9taWNfaW5jKFx1MDAyNml1Y3YtXHUwMDNlc2tic19pbl94bWl0KTtcbiBcdGVyciA9IGRldl9xdWV1ZV94bWl0KHNrYik7XG4gXHRpZiAobmV0X3htaXRfZXZhbChlcnIpKSB7XG4gXHRcdGF0b21pY19kZWMoXHUwMDI2aXVjdi1cdTAwM2Vza2JzX2luX3htaXQpO1xuLVx0fSBlbHNlIHtcbi1cdFx0YXRvbWljX3N1Yihjb25maXJtX3JlY3YsIFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpO1xuLVx0XHRXQVJOX09OKGF0b21pY19yZWFkKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpIFx1MDAzYyAwKTtcbitcdFx0YXRvbWljX2FkZChjb25maXJtX3JlY3YsIFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpO1xuIFx0fVxuIFx0cmV0dXJuIG5ldF94bWl0X2V2YWwoZXJyKTtcbiBcbkBAIC0xMjQxLDYgKzEyNDQsNyBAQCBzdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBcdHN0cnVjdCBpdWN2X3NvY2sgKml1Y3YgPSBpdWN2X3NrKHNrKTtcbiBcdHVuc2lnbmVkIGludCBjb3BpZWQsIHJsZW47XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqcnNrYiwgKmNza2I7XG4rXHRib29sIHNlbmRfd2luID0gZmFsc2U7XG4gXHRpbnQgZXJyID0gMDtcbiBcdHUzMiBvZmZzZXQ7XG4gXG5AQCAtMTMzMSwxNiArMTMzNSwyMCBAQCBzdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZpdWN2LVx1MDAzZWJhY2tsb2dfc2tiX3EpKSB7XG4gXHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxpc3QpKVxuIFx0XHRcdFx0aXVjdl9wcm9jZXNzX21lc3NhZ2VfcShzayk7XG4tXHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpIFx1MDAzZT1cbi1cdFx0XHRcdFx0XHRcdGl1Y3YtXHUwMDNlbXNnbGltaXQgLyAyKSB7XG4tXHRcdFx0XHRlcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1dJTik7XG4tXHRcdFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9ESVNDT05OO1xuLVx0XHRcdFx0XHRzay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbitcdFx0XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUiBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdikgXHUwMDNlPVxuK1x0XHRcdFx0XHRcdFx0aXVjdi1cdTAwM2Vtc2dsaW1pdCAvIDIpXG4rXHRcdFx0XHRzZW5kX3dpbiA9IHRydWU7XG4gXHRcdH1cbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubG9jayk7XG4rXG4rXHRcdGlmIChzZW5kX3dpbikge1xuK1x0XHRcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfV0lOKTtcbitcdFx0XHRpZiAoZXJyKSB7XG4rXHRcdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjtcbitcdFx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4rXHRcdFx0fVxuK1x0XHR9XG4gXHR9XG4gXG4gZG9uZTpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjE5OjU2LjIwODg0MDgxM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzU0NTQxMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgTmV0L0lVQ1YgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYG5ldC9pdWN2L2FmX2l1Y3YuY2AuIFNwZWNpZmljYWxseSwgaXQncyBtb2RpZnlpbmcgYGFmaXVjdl9oc19zZW5kYCBhbmQgYGl1Y3Zfc29ja19yZWN2bXNnYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIHNvY2tldCBmYW1pbHkgY2hhbmdlIOKAkyBBRl9JVUNWLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJSaWdodCwgQUZfSVVDVi4uLiBpcyB0aGF0IGV2ZW4gZ29pbmcgdG8gYmUgcmVsZXZhbnQgaW4gbXkgc3RhbmRhcmQgdGVzdCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRT9cIiBJIG5lZWQgdG8gdmVyaWZ5IGlmIHRoYXQgc29ja2V0IGZhbWlseSBpcyBldmVuIHJlYWNoYWJsZSBpbiB0aG9zZSBzZXR0aW5ncyBiZWZvcmUgSSBnbyBkb3duIGEgcmFiYml0IGhvbGUuIEFoLCB5ZXMsIEFGX0lVQ1YgaXMgZm9yIHMzOTAsIHRoYXQncyByaWdodC4gQnV0IHRoZSBxdWVzdGlvbiBpczogaXMgaXQgKnNvbGVseSogZm9yIHMzOTA/IExldCdzIHZlcmlmeSB0aGF0LiBOZWVkIHRvIGNoZWNrIGBuZXQvaXVjdi9LY29uZmlnYCB0byBjb25maXJtIHRoZSBhcmNoaXRlY3R1cmUgZGVwZW5kZW5jeSBhbmQgYW55IGFzc29jaWF0ZWQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzoyMDowMC40ODQyOTg5NThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NzA3NDU5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUZfSVVDVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzoyMDowMC41OTMwMTQyNDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMxMjY0OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50IGRvd246XG5cbioqQ2hlY2tpbmcgb24gdGhlIEV4aXN0ZW5jZSBvZiBhIEtjb25maWcgRmlsZSoqXG5cbk9rYXksIHNvIEknbSB3b3JraW5nIHdpdGggdGhlIG5ldHdvcmsgSVVDViBjb2RlLCBhbmQgYSBuYW1lIGp1c3QgcG9wcGVkIGludG8gbXkgaGVhZDogYG5ldC9pdWN2L0tjb25maWdgLiAqQnV0IHdhaXQgYSBzZWNvbmQuLi4qIElzIGl0IGV2ZW4gdGhlcmU/IEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCBmaWxlIGV4aXN0cywgc28gSSBjYW4gY29udGludWUgd2l0aCB3aGF0ZXZlciBJIHdhcyBkb2luZy4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgYG5ldC9pdWN2L2AgZGlyZWN0b3J5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgS2NvbmZpZ2AgZmlsZSBpcyBhY3R1YWxseSBwcmVzZW50IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBhcyBpdCdzIGNyaXRpY2FsIHRvIHRoZSBidWlsZCBwcm9jZXNzIGluIHRoaXMgYXJlYS4gTm8gc2Vuc2UgaW4gY2hhc2luZyBnaG9zdHMhIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhlIGZpbGUncyBwcmVzZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjIwOjA0LjAyNDI4MTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwibmV0L2l1Y3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYWZfaXVjdi5jXCIsXG4gICAgXCJpdWN2LmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MjA6MDQuMDI0MzI1NzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTcyNzYxMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgeW91ciBzdW1tYXJ5LCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipLY29uZmlnIExvY2F0aW9uIERpbGVtbWEqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBwcm9qZWN0LCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQncyBuYWdnaW5nIGF0IG1lIGlzLCB3aGVyZSB0aGUgaGVjayBpcyB0aGUgS2NvbmZpZyBmaWxlPyBJdOKAmXMgZnVuZGFtZW50YWwgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBrZXJuZWwgKG9yIHdoYXRldmVyIHN5c3RlbSBJJ20gd29ya2luZyB3aXRoKS4gSXQncyB0aGUgY2VudHJhbCBwb2ludCwgdGhlIFJvc2V0dGEgU3RvbmUgb2YgaG93IGV2ZXJ5dGhpbmcgZml0cyB0b2dldGhlci4gSSBuZWVkIHRvIGdldCBteSBiZWFyaW5ncyBxdWlja2x5LiBXaXRob3V0IGl0LCBJJ20gZmx5aW5nIGJsaW5kLCBhbmQgdGhhdCdzIG5vdCBhY2NlcHRhYmxlLiBJcyBpdCBpbiB0aGUgcm9vdCBkaXJlY3Rvcnk/IEEgc3BlY2lmaWMgc3ViZGlyZWN0b3J5PyBEaWQgdGhleSB1c2UgdGhlIHN0YW5kYXJkIG5hbWluZyBjb252ZW50aW9ucywgb3IgYXJlIHdlIGRlYWxpbmcgd2l0aCBzb21lIGN1c3RvbSBzZXR1cCBoZXJlPyBUaGlzIGlzIGdvaW5nIHRvIHNldCB0aGUgdG9uZSBmb3IgdGhlIGVudGlyZSBjb25maWd1cmF0aW9uIHByb2Nlc3MsIHNvIEkgbmVlZCB0byBmaW5kIGl0IEFTQVAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MzUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzoyMDowNi45OTcwODk5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIzNDg3MzcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBRl9JVUNWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjIwOjA3LjExOTQ0NzIxOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzAwOTQwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBBRl9JVUNWYC4gR2l2ZW4gdGhhdCBJJ20gZGVhbGluZyB3aXRoIGtlcm5lbCBpbnRlcm5hbHMsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIHJpZ2h0PyBJdCdzIHRoZSBzdGFuZGFyZCB3YXkgdG8gZmluZCBvdXQgaG93IHRoaXMgcGFydGljdWxhciBwcm90b2NvbCBpcyBlbmFibGVkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gU28sIGxldCdzIGZpcmUgdXAgYSBzZWFyY2ggYWNyb3NzIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgYW5kIHNlZSB3aGF0IHdlIGNhbiB0dXJuIHVwIHdpdGggdGhhdCBleGFjdCBzdHJpbmcsIGBBRl9JVUNWYC4gSG9wZWZ1bGx5LCB0aGUgY29uZmlndXJhdGlvbiBrbm9icyB3aWxsIGJlIGNsZWFybHkgbGFiZWxlZCBhbmQgd2VsbC1kb2N1bWVudGVkLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIHBhdGggdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgaXMgY29udHJvbGxlZCBhbmQgaWYgdGhlcmUncyBhbnl0aGluZyBJIG5lZWQgdG8ga25vdyBhYm91dCBpdHMgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODQ5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MjA6MTAuMTg5NTQ0MDE4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY0MTY3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQUZfSVVDVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L0tjb25maWc9MTE9Y29uZmlnIEFGSVVDVlxcbi0tXFxubmV0L2l1Y3YvS2NvbmZpZy0xMy1cXHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZcXG5uZXQvaXVjdi9LY29uZmlnOjE0OlxcdHByb21wdCBcXFwiQUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXFxcIlxcbm5ldC9pdWN2L0tjb25maWctMTUtXFx0aGVscFxcbm5ldC9pdWN2L0tjb25maWc6MTY6XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIEFGX0lVQ1Ygc29ja2V0IGFwcGxpY2F0aW9uc1xcbm5ldC9pdWN2L0tjb25maWctMTctXFx0ICBiYXNlZCBvbiB6L1ZNIGludGVyLXVzZXIgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIG9yIGJhc2VkIG9uXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDI9c3RhdGljIHN0cnVjdCBwcm90byBpdWN2X3Byb3RvID0ge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0MzpcXHQubmFtZVxcdFxcdD0gXFxcIkFGX0lVQ1ZcXFwiLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00NC1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ5PXN0YXRpYyBzdHJ1Y3QgaXVjdl9oYW5kbGVyIGFmX2l1Y3ZfaGFuZGxlcjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTAtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjUxOi8qIHNwZWNpYWwgQUZfSVVDViBJUFJNIG1lc3NhZ2VzICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTUyLXN0YXRpYyBjb25zdCB1OCBpcHJtX3NodXRkb3duWzhdID1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xMDc9c3RhdGljIGlubGluZSB2b2lkIGxvd19ubWNweSh1bnNpZ25lZCBjaGFyICpkc3QsIGNoYXIgKnNyYylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTgtICpcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE5OiAqIEZvciBJVUNWX0lQUk1EQVRBLCBBRl9JVUNWIHVzZXMgdGhlIGZvbGxvd2luZyBjb252ZW50aW9uIHRvIHRyYW5zcG9ydCBzb2NrZXRcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTIwLSAqIGRhdGE6XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTY2PXN0YXRpYyBpbmxpbmUgaW50IGl1Y3ZfYmVsb3dfbXNnbGltKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzEtXFx0XFx0cmV0dXJuIDE7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE3MjpcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTczLVxcdFxcdHJldHVybiAoYXRvbWljX3JlYWQoXFx1MDAyNml1Y3YtXFx1MDAzZXNrYnNfaW5feG1pdCkgXFx1MDAzYyBpdWN2LVxcdTAwM2VwYXRoLVxcdTAwM2Vtc2dsaW0pO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE5Nz1zdGF0aWMgaW50IGFmaXVjdl9oc19zZW5kKHN0cnVjdCBpdWN2X21lc3NhZ2UgKmltc2csIHN0cnVjdCBzb2NrICpzb2NrLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNy1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA4OlxcdHBoc19oZHItXFx1MDAzZW1hZ2ljID0gRVRIX1BfQUZfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA5LVxcdHBoc19oZHItXFx1MDAzZXZlcnNpb24gPSAxO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTAtXFx0cGhzX2hkci1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjExOlxcdGlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTItXFx0XFx0cGhzX2hkci1cXHUwMDNld2luZG93ID0gaXVjdi1cXHUwMDNlbXNnbGltaXQ7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzA6XFx0ZGV2X2hhcmRfaGVhZGVyKHNrYiwgc2tiLVxcdTAwM2VkZXYsIEVUSF9QX0FGX0lVQ1YsIE5VTEwsIE5VTEwsIHNrYi1cXHUwMDNlbGVuKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMxLVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTI0NC1cXHR9XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjI0NTpcXHRza2ItXFx1MDAzZXByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfQUZfSVVDVik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTI0Ni1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yNTAtXFx0ICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjI1MTpcXHRpZiAoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1dJTiB8fCAhZmxhZ3MpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjUyLVxcdFxcdGNvbmZpcm1fcmVjdiA9IGF0b21pY194Y2hnKFxcdTAwMjZpdWN2LVxcdTAwM2Vtc2dfcmVjdiwgMCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjU0LVxcdFxcdGlmIChjb25maXJtX3JlY3YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjI1NTpcXHRcXHRcXHRwaHNfaGRyLVxcdTAwM2VmbGFncyA9IHBoc19oZHItXFx1MDAzZWZsYWdzIHwgQUZfSVVDVl9GTEFHX1dJTjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjU2LVxcdH1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0zOTg9c3RhdGljIHZvaWQgaXVjdl9zb2NrX2Nsb3NlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00MTEtXFx0Y2FzZSBJVUNWX0NPTk5FQ1RFRDpcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDEyOlxcdFxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0MTM6XFx0XFx0XFx0ZXJyID0gaXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19GSU4pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00MTQtXFx0XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gSVVDVl9ESVNDT05OO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ2OT1zdGF0aWMgc3RydWN0IHNvY2sgKml1Y3Zfc29ja19hbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8sIGdmcF90IHByaW8sIGludCBrZXJuKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5Ni1cXHRpZiAocHJfaXVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDk3OlxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDk4LVxcdGVsc2VcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDk5OlxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTUwMC1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz01ODU9c3RhdGljIGludCBpdWN2X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy01OTYtXFx0aWYgKGFkZHJfbGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pdWN2KSB8fFxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo1OTc6XFx0ICAgIGFkZHItXFx1MDAzZXNhX2ZhbWlseSAhPSBBRl9JVUNWKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy01OTgtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjM2LVxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IElVQ1ZfQk9VTkQ7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjYzNzpcXHRcXHRcXHRpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MzgtXFx0XFx0XFx0aWYgKCFpdWN2LVxcdTAwM2Vtc2dsaW1pdClcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NTAtXFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gSVVDVl9CT1VORDtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjUxOlxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjUyLVxcdFxcdHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjY4PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzYtXFx0bWVtY3B5KGl1Y3YtXFx1MDAzZXNyY191c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY3NzpcXHRpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY3OC1cXHRzay1cXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTczNj1zdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc0My1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzQ0OlxcdGlmIChhbGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pdWN2KSB8fCBhZGRyLVxcdTAwM2VzYV9mYW1pbHkgIT0gQUZfSVVDVilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzQ1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc1MC1cXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IElVQ1ZfT1BFTiBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NTE6XFx0ICAgIGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NTItXFx0XFx0cmV0dXJuIC1FQkFERkQ7IC8qIGV4cGxpY2l0IGJpbmQgcmVxdWlyZWQgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NjgtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjc2OTpcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjc3MDpcXHRcXHRlcnIgPSBpdWN2X3NlbmRfY3RybChzb2NrLVxcdTAwM2VzaywgQUZfSVVDVl9GTEFHX1NZTik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc3MS1cXHRlbHNlXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzgzLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3ODQ6XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODUtXFx0XFx0aXVjdl9zZXZlcl9wYXRoKHNrLCAwKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz04NzI9c3RhdGljIGludCBpdWN2X3NvY2tfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtODc4LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo4Nzk6XFx0YWRkci1cXHUwMDNlc2FfZmFtaWx5ID0gQUZfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtODgwLVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTkxOT1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDAxLVxcdCAqIGZvciBTT0NLX1NUUkVBTSB3ZSBtaWdodCB3YW50IHRvIGltcHJvdmUgaXQgaW4gZnV0dXJlICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwMDI6XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwMDMtXFx0XFx0aGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSArXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA0Ni1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA0NzpcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA0OC1cXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZpdWN2LVxcdTAwM2Vtc2dfc2VudCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTI0MD1zdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzEyLVxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEzMTM6XFx0XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMTQtXFx0XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMzctXFx0XFx0XFx0XFx0aXVjdl9wcm9jZXNzX21lc3NhZ2VfcShzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEzMzg6XFx0XFx0XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSIFxcdTAwMjZcXHUwMDI2XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMzktXFx0XFx0XFx0ICAgIGF0b21pY19yZWFkKFxcdTAwMjZpdWN2LVxcdTAwM2Vtc2dfcmVjdikgXFx1MDAzZT1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzQ1LVxcdFxcdGlmIChzZW5kX3dpbikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzQ2OlxcdFxcdFxcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfV0lOKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTM0Ny1cXHRcXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTQyNj1zdGF0aWMgaW50IGl1Y3Zfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NTEtXFx0ICAgIHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBJVUNWX0NPTk5FQ1RFRCkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDUyOlxcdFxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NTMtXFx0XFx0XFx0dHhtc2cuY2xhc3MgPSAwO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzAtXFx0XFx0fSBlbHNlXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NzE6XFx0XFx0XFx0aXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19TSFQpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDcyLVxcdH1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc1LVxcdGlmIChob3cgPT0gUkNWX1NIVVRET1dOIHx8IGhvdyA9PSBTSFVURE9XTl9NQVNLKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NzY6XFx0XFx0aWYgKChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc3LVxcdFxcdCAgICBpdWN2LVxcdTAwM2VwYXRoKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYxNT1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzQtXFx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NzU6XFx0bml1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ni1cXHRuc2stXFx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xODcyPXN0YXRpYyBpbnQgYWZpdWN2X2hzX2NhbGxiYWNrX3N5bihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg4Mi1cXHRcXHRhZml1Y3Zfc3dhcF9zcmNfZGVzdChza2IpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODgzOlxcdFxcdHRyYW5zX2hkci1cXHUwMDNlZmxhZ3MgPSBBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0ZJTjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg4NC1cXHRcXHRlcnIgPSBkZXZfcXVldWVfeG1pdChza2IpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4OTQtXFx0XFx0YWZpdWN2X3N3YXBfc3JjX2Rlc3Qoc2tiKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTg5NTpcXHRcXHR0cmFuc19oZHItXFx1MDAzZWZsYWdzID0gQUZfSVVDVl9GTEFHX1NZTiB8IEFGX0lVQ1ZfRkxBR19GSU47XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4OTYtXFx0XFx0ZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTA0LVxcdGl1Y3Zfc29ja19pbml0KG5zaywgc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxOTA1OlxcdG5pdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTA2LVxcdG5pdWN2LVxcdTAwM2Vtc2dsaW1pdCA9IGl1Y3YtXFx1MDAzZW1zZ2xpbWl0O1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MTgtXFx0YWZpdWN2X3N3YXBfc3JjX2Rlc3Qoc2tiKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTkxOTpcXHR0cmFuc19oZHItXFx1MDAzZWZsYWdzID0gQUZfSVVDVl9GTEFHX1NZTiB8IEFGX0lVQ1ZfRkxBR19BQ0s7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MjAtXFx0dHJhbnNfaGRyLVxcdTAwM2V3aW5kb3cgPSBuaXVjdi1cXHUwMDNlbXNnbGltaXQ7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjA2Nj1zdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDg5LVxcdHNrX2Zvcl9lYWNoKHNrLCBcXHUwMDI2aXVjdl9za19saXN0LmhlYWQpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA5MDpcXHRcXHRpZiAodHJhbnNfaGRyLVxcdTAwM2VmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwOTEtXFx0XFx0XFx0aWYgKCghbWVtY21wKFxcdTAwMjZpdWN2X3NrKHNrKS1cXHUwMDNlc3JjX25hbWUsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzMC1cXHRzd2l0Y2ggKHRyYW5zX2hkci1cXHUwMDNlZmxhZ3MpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjEzMTpcXHRjYXNlIEFGX0lVQ1ZfRkxBR19TWU46XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMzItXFx0XFx0LyogY29ubmVjdCByZXF1ZXN0ICovXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzNC1cXHRcXHRicmVhaztcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjEzNTpcXHRjYXNlIChBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0FDSyk6XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMzYtXFx0XFx0LyogY29ubmVjdCByZXF1ZXN0IGNvbmZpcm1lZCAqL1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMzgtXFx0XFx0YnJlYWs7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMzk6XFx0Y2FzZSAoQUZfSVVDVl9GTEFHX1NZTiB8IEFGX0lVQ1ZfRkxBR19GSU4pOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQwLVxcdFxcdC8qIGNvbm5lY3QgcmVxdWVzdCByZWZ1c2VkICovXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0Mi1cXHRcXHRicmVhaztcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE0MzpcXHRjYXNlIChBRl9JVUNWX0ZMQUdfRklOKTpcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0NC1cXHRcXHQvKiBjbG9zZSByZXF1ZXN0ICovXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0Ni1cXHRcXHRicmVhaztcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE0NzpcXHRjYXNlIChBRl9JVUNWX0ZMQUdfV0lOKTpcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0OC1cXHRcXHRlcnIgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfd2luKHNrLCBza2IpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNTMtXFx0XFx0ZmFsbHRocm91Z2g7XFx0LyogYW5kIHJlY2VpdmUgbm9uLXplcm8gbGVuZ3RoIGRhdGEgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE1NDpcXHRjYXNlIChBRl9JVUNWX0ZMQUdfU0hUKTpcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE1NS1cXHRcXHQvKiBzaHV0ZG93biByZXF1ZXN0ICovXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjIxND1zdGF0aWMgaW50IGFmaXVjdl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMjgtXFx0XFx0XFx0XFx0aWYgKGV2ZW50ID09IE5FVERFVl9HT0lOR19ET1dOKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjI5OlxcdFxcdFxcdFxcdFxcdGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfRklOKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIzMC1cXHRcXHRcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0RJU0NPTk47XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgaXVjdl9zb2NrX2ZhbWlseV9vcHMgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyOTc6XFx0LmZhbWlseVxcdD0gQUZfSVVDVixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5OC1cXHQub3duZXJcXHQ9IFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIzMDI9c3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpdWN2X3BhY2tldF90eXBlID0ge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzAzOlxcdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfQUZfSVVDViksXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDQtXFx0LmZ1bmMgPSBhZml1Y3ZfaHNfcmN2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzoyMDoxMC4zMTU5NjYxNTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5MjEyOTkwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQUZfSVVDViBTb2NrZXQgRmFtaWx5KipcblxuUmlnaHQsIHNvICpBRl9JVUNWKi4uLiB0aGF0J3MgYSBzb2NrZXQgZmFtaWx5LCBvZiBjb3Vyc2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGV0YWlscy4gTGV0IG1lIHBpbnBvaW50IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBLY29uZmlnIGZpbGUgc2hvdWxkIGJlIGluIGBuZXQvaXVjdi9LY29uZmlnYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gTGV0J3MgZGl2ZSBpbiBhbmQgdGFrZSBhIGxvb2sgYXQgYG5ldC9pdWN2L0tjb25maWdgIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgYXZhaWxhYmxlIGFuZCBob3cgaXQncyBkZWZpbmVkLiBJJ2xsIGJydXNoIHVwIG9uIGl0cyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MjA6MTMuOTA4MDk4MjUxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIElVQ1ZcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gUzM5MFxcbiAgIDQ6XFx0XFx0ZGVmX3RyaXN0YXRlIHkgaWYgUzM5MFxcbiAgIDU6XFx0XFx0cHJvbXB0IFxcXCJJVUNWIHN1cHBvcnQgKFMzOTAgLSB6L1ZNIG9ubHkpXFxcIlxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIGludGVyLXVzZXIgY29tbXVuaWNhdGlvblxcbiAgIDg6XFx0XFx0ICB1bmRlciBWTSBvciBWSUYuIElmIHlvdSBydW4gb24gei9WTSwgc2F5IFxcXCJZXFxcIiB0byBlbmFibGUgYSBmYXN0XFxuICAgOTpcXHRcXHQgIGNvbW11bmljYXRpb24gbGluayBiZXR3ZWVuIFZNIGd1ZXN0cy5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIEFGSVVDVlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBTMzkwXFxuICAxMzpcXHRcXHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZcXG4gIDE0OlxcdFxcdHByb21wdCBcXFwiQUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXFxcIlxcbiAgMTU6XFx0XFx0aGVscFxcbiAgMTY6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIEFGX0lVQ1Ygc29ja2V0IGFwcGxpY2F0aW9uc1xcbiAgMTc6XFx0XFx0ICBiYXNlZCBvbiB6L1ZNIGludGVyLXVzZXIgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIG9yIGJhc2VkIG9uXFxuICAxODpcXHRcXHQgIEhpcGVyU29ja2V0cy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MjA6MTMuOTA4MjA0NTIxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NjY0Mjg2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFMzOTAgQ29kZSBEZXBlbmRlbmN5KipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCB0aGlzIGNvZGUgaXMgY2xlYXJseSBjb250aW5nZW50IG9uIHRoZSBTMzkwIGFyY2hpdGVjdHVyZS4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgYWx3YXlzIGFib3V0IHJlYWNoYWJpbGl0eTogSXMgdGhpcyByZWxldmFudCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIEFGX0lVQ1Ygc29ja2V0IHN1cHBvcnQsIGdvaW5nIHRvIGJlIGV4ZXJjaXNlZCBpbiBhIHRlc3RpbmcgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRT8gVGhhbmtmdWxseSwgc3l6a2FsbGVyIHRlc3RzIHRoZSBTMzkwIGFyY2hpdGVjdHVyZSB3aXRoaW4gUUVNVS4gQWhhLCB3YWl0IGEgc2Vjb25kLCBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlOyBzeXprYWxsZXIncyB0ZXN0aW5nIG9mIHMzOTB4IGNvbWVzIGltbWVkaWF0ZWx5IHRvIG1pbmQuXG5cblRoZSBwcm9tcHQgZXhwbGljaXRseSBtZW50aW9ucyBcIkFGX0lVQ1YgU29ja2V0IHN1cHBvcnQgKFMzOTAgLSB6L1ZNIGFuZCBIaXBlclNvY2tldHMgdHJhbnNwb3J0KS5cIiBTbywgaXMgdGhhdCBsZXZlbCBvZiBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGFjY2Vzc2libGUgd2l0aGluIFFFTVU/IFllcywgdGhhdCdzIGFub3RoZXIgY3JpdGljYWwgcG9pbnQuIFN5emthbGxlciBzdXBwb3J0cyBzMzkweCBpbnN0YW5jZXMuIFRoYXQncyBhIGdvb2Qgc2lnbi4gQWxyaWdodCwgdG8gY29uZmlybSB0aGlzIGxldCBtZSBub3cgdmVyaWZ5IGlmIHRoZXJlIGFyZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIHNwZWNpZmljYWxseSBmb3IgQUZfSVVDVi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk5MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjIwOjE4Ljc3NDYzNzYxNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk5OTQ1NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQUZfSVVDVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvS2NvbmZpZz0xMT1jb25maWcgQUZJVUNWXFxuLS1cXG5uZXQvaXVjdi9LY29uZmlnLTEzLVxcdGRlZl90cmlzdGF0ZSBtIGlmIFFFVEhfTDMgfHwgSVVDVlxcbm5ldC9pdWN2L0tjb25maWc6MTQ6XFx0cHJvbXB0IFxcXCJBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydClcXFwiXFxubmV0L2l1Y3YvS2NvbmZpZy0xNS1cXHRoZWxwXFxubmV0L2l1Y3YvS2NvbmZpZzoxNjpcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgQUZfSVVDViBzb2NrZXQgYXBwbGljYXRpb25zXFxubmV0L2l1Y3YvS2NvbmZpZy0xNy1cXHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz00Mj1zdGF0aWMgc3RydWN0IHByb3RvIGl1Y3ZfcHJvdG8gPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQzOlxcdC5uYW1lXFx0XFx0PSBcXFwiQUZfSVVDVlxcXCIsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ0LVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDk9c3RhdGljIHN0cnVjdCBpdWN2X2hhbmRsZXIgYWZfaXVjdl9oYW5kbGVyO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy01MC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NTE6Lyogc3BlY2lhbCBBRl9JVUNWIElQUk0gbWVzc2FnZXMgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTItc3RhdGljIGNvbnN0IHU4IGlwcm1fc2h1dGRvd25bOF0gPVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTEwNz1zdGF0aWMgaW5saW5lIHZvaWQgbG93X25tY3B5KHVuc2lnbmVkIGNoYXIgKmRzdCwgY2hhciAqc3JjKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExOC0gKlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTk6ICogRm9yIElVQ1ZfSVBSTURBVEEsIEFGX0lVQ1YgdXNlcyB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb24gdG8gdHJhbnNwb3J0IHNvY2tldFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjAtICogZGF0YTpcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjY9c3RhdGljIGlubGluZSBpbnQgaXVjdl9iZWxvd19tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MS1cXHRcXHRyZXR1cm4gMTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTcyOlxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzMtXFx0XFx0cmV0dXJuIChhdG9taWNfcmVhZChcXHUwMDI2aXVjdi1cXHUwMDNlc2tic19pbl94bWl0KSBcXHUwMDNjIGl1Y3YtXFx1MDAzZXBhdGgtXFx1MDAzZW1zZ2xpbSk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTk3PXN0YXRpYyBpbnQgYWZpdWN2X2hzX3NlbmQoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqaW1zZywgc3RydWN0IHNvY2sgKnNvY2ssXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA3LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDg6XFx0cGhzX2hkci1cXHUwMDNlbWFnaWMgPSBFVEhfUF9BRl9JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDktXFx0cGhzX2hkci1cXHUwMDNldmVyc2lvbiA9IDE7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMC1cXHRwaHNfaGRyLVxcdTAwM2VmbGFncyA9IGZsYWdzO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTE6XFx0aWYgKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMi1cXHRcXHRwaHNfaGRyLVxcdTAwM2V3aW5kb3cgPSBpdWN2LVxcdTAwM2Vtc2dsaW1pdDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjktXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDpcXHRkZXZfaGFyZF9oZWFkZXIoc2tiLCBza2ItXFx1MDAzZWRldiwgRVRIX1BfQUZfSVVDViwgTlVMTCwgTlVMTCwgc2tiLVxcdTAwM2VsZW4pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzEtXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjQ0LVxcdH1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjQ1OlxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjQ2LVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTI1MC1cXHQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjUxOlxcdGlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfV0lOIHx8ICFmbGFncykge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yNTItXFx0XFx0Y29uZmlybV9yZWN2ID0gYXRvbWljX3hjaGcoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2LCAwKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yNTQtXFx0XFx0aWYgKGNvbmZpcm1fcmVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjU1OlxcdFxcdFxcdHBoc19oZHItXFx1MDAzZWZsYWdzID0gcGhzX2hkci1cXHUwMDNlZmxhZ3MgfCBBRl9JVUNWX0ZMQUdfV0lOO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yNTYtXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTM5OD1zdGF0aWMgdm9pZCBpdWN2X3NvY2tfY2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQxMS1cXHRjYXNlIElVQ1ZfQ09OTkVDVEVEOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0MTI6XFx0XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQxMzpcXHRcXHRcXHRlcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX0ZJTik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQxNC1cXHRcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0RJU0NPTk47XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY5PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDk2LVxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTc6XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTgtXFx0ZWxzZVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTk6XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19ISVBFUjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTAwLVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTU4NT1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTU5Ni1cXHRpZiAoYWRkcl9sZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2l1Y3YpIHx8XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjU5NzpcXHQgICAgYWRkci1cXHUwMDNlc2FfZmFtaWx5ICE9IEFGX0lVQ1YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTU5OC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MzYtXFx0XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gSVVDVl9CT1VORDtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjM3OlxcdFxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTYzOC1cXHRcXHRcXHRpZiAoIWl1Y3YtXFx1MDAzZW1zZ2xpbWl0KVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY1MC1cXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0JPVU5EO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2NTE6XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NTItXFx0XFx0c2stXFx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz02Njg9c3RhdGljIGludCBpdWN2X3NvY2tfYXV0b2JpbmQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY3Ni1cXHRtZW1jcHkoaXVjdi1cXHUwMDNlc3JjX3VzZXJfaWQsIGl1Y3ZfdXNlcmlkLCA4KTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6Njc3OlxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjc4LVxcdHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NzM2PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzQzLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NDQ6XFx0aWYgKGFsZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2l1Y3YpIHx8IGFkZHItXFx1MDAzZXNhX2ZhbWlseSAhPSBBRl9JVUNWKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NDUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzUwLVxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9PUEVOIFxcdTAwMjZcXHUwMDI2XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjc1MTpcXHQgICAgaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc1Mi1cXHRcXHRyZXR1cm4gLUVCQURGRDsgLyogZXhwbGljaXQgYmluZCByZXF1aXJlZCAqL1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc2OC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzY5OlxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUilcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzcwOlxcdFxcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNvY2stXFx1MDAzZXNrLCBBRl9JVUNWX0ZMQUdfU1lOKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzcxLVxcdGVsc2VcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODMtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjc4NDpcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4NS1cXHRcXHRpdWN2X3NldmVyX3BhdGgoc2ssIDApO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTg3Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy04NzgtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjg3OTpcXHRhZGRyLVxcdTAwM2VzYV9mYW1pbHkgPSBBRl9JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy04ODAtXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTE5PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwMDEtXFx0ICogZm9yIFNPQ0tfU1RSRUFNIHdlIG1pZ2h0IHdhbnQgdG8gaW1wcm92ZSBpdCBpbiBmdXR1cmUgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTAwMjpcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTAwMy1cXHRcXHRoZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIpICtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDQ2LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDQ3OlxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDQ4LVxcdFxcdGF0b21pY19pbmMoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19zZW50KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xMjQwPXN0YXRpYyBpbnQgaXVjdl9zb2NrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMTItXFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTMxMzpcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMxNC1cXHRcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZpdWN2LVxcdTAwM2Vtc2dfcmVjdik7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMzNy1cXHRcXHRcXHRcXHRpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKHNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTMzODpcXHRcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMzOS1cXHRcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2KSBcXHUwMDNlPVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzNDUtXFx0XFx0aWYgKHNlbmRfd2luKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEzNDY6XFx0XFx0XFx0ZXJyID0gaXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19XSU4pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzQ3LVxcdFxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNDI2PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1MS1cXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlID09IElVQ1ZfQ09OTkVDVEVEKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NTI6XFx0XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1My1cXHRcXHRcXHR0eG1zZy5jbGFzcyA9IDA7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3MC1cXHRcXHR9IGVsc2VcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3MTpcXHRcXHRcXHRpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1NIVCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzItXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzUtXFx0aWYgKGhvdyA9PSBSQ1ZfU0hVVERPV04gfHwgaG93ID09IFNIVVRET1dOX01BU0spIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3NjpcXHRcXHRpZiAoKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzctXFx0XFx0ICAgIGl1Y3YtXFx1MDAzZXBhdGgpIHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjE1PXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3NC1cXHRpdWN2X3NvY2tfaW5pdChuc2ssIHNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY3NTpcXHRuaXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc2LVxcdG5zay1cXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4NzI9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODgyLVxcdFxcdGFmaXVjdl9zd2FwX3NyY19kZXN0KHNrYik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE4ODM6XFx0XFx0dHJhbnNfaGRyLVxcdTAwM2VmbGFncyA9IEFGX0lVQ1ZfRkxBR19TWU4gfCBBRl9JVUNWX0ZMQUdfRklOO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODg0LVxcdFxcdGVyciA9IGRldl9xdWV1ZV94bWl0KHNrYik7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg5NC1cXHRcXHRhZml1Y3Zfc3dhcF9zcmNfZGVzdChza2IpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODk1OlxcdFxcdHRyYW5zX2hkci1cXHUwMDNlZmxhZ3MgPSBBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0ZJTjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg5Ni1cXHRcXHRlcnIgPSBkZXZfcXVldWVfeG1pdChza2IpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MDQtXFx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE5MDU6XFx0bml1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MDYtXFx0bml1Y3YtXFx1MDAzZW1zZ2xpbWl0ID0gaXVjdi1cXHUwMDNlbXNnbGltaXQ7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkxOC1cXHRhZml1Y3Zfc3dhcF9zcmNfZGVzdChza2IpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxOTE5OlxcdHRyYW5zX2hkci1cXHUwMDNlZmxhZ3MgPSBBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0FDSztcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkyMC1cXHR0cmFuc19oZHItXFx1MDAzZXdpbmRvdyA9IG5pdWN2LVxcdTAwM2Vtc2dsaW1pdDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMDY2PXN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwODktXFx0c2tfZm9yX2VhY2goc2ssIFxcdTAwMjZpdWN2X3NrX2xpc3QuaGVhZCkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDkwOlxcdFxcdGlmICh0cmFuc19oZHItXFx1MDAzZWZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA5MS1cXHRcXHRcXHRpZiAoKCFtZW1jbXAoXFx1MDAyNml1Y3Zfc2soc2spLVxcdTAwM2VzcmNfbmFtZSxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTMwLVxcdHN3aXRjaCAodHJhbnNfaGRyLVxcdTAwM2VmbGFncykge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTMxOlxcdGNhc2UgQUZfSVVDVl9GTEFHX1NZTjpcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzMi1cXHRcXHQvKiBjb25uZWN0IHJlcXVlc3QgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTM0LVxcdFxcdGJyZWFrO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTM1OlxcdGNhc2UgKEFGX0lVQ1ZfRkxBR19TWU4gfCBBRl9JVUNWX0ZMQUdfQUNLKTpcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzNi1cXHRcXHQvKiBjb25uZWN0IHJlcXVlc3QgY29uZmlybWVkICovXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzOC1cXHRcXHRicmVhaztcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjEzOTpcXHRjYXNlIChBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0ZJTik6XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNDAtXFx0XFx0LyogY29ubmVjdCByZXF1ZXN0IHJlZnVzZWQgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQyLVxcdFxcdGJyZWFrO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTQzOlxcdGNhc2UgKEFGX0lVQ1ZfRkxBR19GSU4pOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQ0LVxcdFxcdC8qIGNsb3NlIHJlcXVlc3QgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQ2LVxcdFxcdGJyZWFrO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTQ3OlxcdGNhc2UgKEFGX0lVQ1ZfRkxBR19XSU4pOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQ4LVxcdFxcdGVyciA9IGFmaXVjdl9oc19jYWxsYmFja193aW4oc2ssIHNrYik7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE1My1cXHRcXHRmYWxsdGhyb3VnaDtcXHQvKiBhbmQgcmVjZWl2ZSBub24temVybyBsZW5ndGggZGF0YSAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTU0OlxcdGNhc2UgKEFGX0lVQ1ZfRkxBR19TSFQpOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTU1LVxcdFxcdC8qIHNodXRkb3duIHJlcXVlc3QgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjE0PXN0YXRpYyBpbnQgYWZpdWN2X25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIyOC1cXHRcXHRcXHRcXHRpZiAoZXZlbnQgPT0gTkVUREVWX0dPSU5HX0RPV04pXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMjk6XFx0XFx0XFx0XFx0XFx0aXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19GSU4pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjMwLVxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI5NzpcXHQuZmFtaWx5XFx0PSBBRl9JVUNWLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk4LVxcdC5vd25lclxcdD0gVEhJU19NT0RVTEUsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjMwMj1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGl1Y3ZfcGFja2V0X3R5cGUgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDM6XFx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwNC1cXHQuZnVuYyA9IGFmaXVjdl9oc19yY3YsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjIwOjE4Ljg0NDY0MTE2OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQ2MTIzOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNvY2tldCBSYWNlIENvbmRpdGlvbiBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhZml1Y3ZfaHNfc2VuZGAgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2Ag4oCTIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGl0J3MgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBgY29uZmlybV9yZWN2YCB2YWx1ZSBpcyByZWFkLCBhbmQgdGhlbiBhbiBgYXRvbWljX3N1YmAgaXMgcGVyZm9ybWVkLiBUaGlzIGNhbiBsZWFkIHRvIGBtc2dfcmVjdmAgZ29pbmcgbmVnYXRpdmUsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBiYWQgdGhpbmcgaW4gdGhlIHNlbmQvcmVjZWl2ZSBwYXRoLiBUaGUgZml4IGNsZXZlcmx5IHVzZXMgYGF0b21pY194Y2hnYCB0byBhdG9taWNhbGx5IHJlYWQgYW5kIGNsZWFyIGBtc2dfcmVjdmAuIFRoYXQncyBhIGNsZWFuIHdheSB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHksIHdoaWNoIEkgYXBwcmVjaWF0ZS5cblxuVGhlIHBhdGNoIGFsc28gbW92ZXMgYGl1Y3Zfc2VuZF9jdHJsYCBvdXQgb2YgdGhlIHNwaW5sb2NrIGluIGBpdWN2X3NvY2tfcmVjdm1zZ2AuIFRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHksIHJpZ2h0PyBJIHdvbmRlciBpZiB0aGlzIGNoYW5nZSB3YXJyYW50cyBzb21lIGZ1enppbmcuIEdpdmVuIHRoYXQgaXQgZGlyZWN0bHkgYWRkcmVzc2VzIGEgYnVnIGluIHRoZSBzb2NrZXQgc2VuZC9yZWNlaXZlIHBhdGgsIGFic29sdXRlbHkuIEl0J3MgYWx3YXlzIHdvcnRod2hpbGUgdG8gdGhvcm91Z2hseSB0ZXN0IGNyaXRpY2FsIGluZnJhc3RydWN0dXJlIGxpa2UgdGhpcy5cblxuV2FpdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWcuIFRoZSBjb25maWcgZm9yIHRoaXMgaXMgYEFGSVVDVmAsIG5vdCBgQUZfSVVDVmAg4oCTIGdvdCBpdC4gSSdsbCBkb3VibGUtY2hlY2sgYG5ldC9pdWN2L0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gWWVwLCBpdCdzIGBjb25maWcgQUZJVUNWYC5cblxuTGV0J3MgcXVpY2tseSBpZGVudGlmeSB0aGUgcHJpbWFyeSBmb2N1czogYGFmaXVjdl9oc19zZW5kYCBhbmQgYGl1Y3Zfc29ja19yZWN2bXNnYC4gVGhvc2UgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGluIG1pbmQuXG5cbk5vdywgbGV0IG1lIGp1c3QgY29uZmlybSBgYWZpdWN2X2hzX3NlbmRgIGlzbid0IGlubGluZSBvciBzdGF0aWMuIEFoLCBpdCdzIHN0YXRpYyEgVGhhdCdzIGltcG9ydGFudC4gSXMgaXQgYW4gQVBJIGVudHJ5cG9pbnQgdGhlbj8gSSBzaG91bGQgc2VlIHdoZXJlIGl0J3MgY2FsbGVkIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzgwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjIwOjI1Ljg5MDc2OTMwNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NDgzNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmaXVjdl9oc19zZW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9MTgyPXN0YXRpYyB2b2lkIGl1Y3Zfc29ja193YWtlX21zZ2xpbShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTk0LS8qXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE5NTogKiBhZml1Y3ZfaHNfc2VuZCgpIC0gc2VuZCBhIG1lc3NhZ2UgdGhyb3VnaCBIaXBlclNvY2tldHMgdHJhbnNwb3J0XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5Ni0gKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTk3OnN0YXRpYyBpbnQgYWZpdWN2X2hzX3NlbmQoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqaW1zZywgc3RydWN0IHNvY2sgKnNvY2ssXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5OC1cXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBmbGFncylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0zNzI9c3RhdGljIGludCBpdWN2X3NlbmRfY3RybChzdHJ1Y3Qgc29jayAqc2ssIHU4IGZsYWdzKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTM4OS1cXHRcXHRza2JfcmVzZXJ2ZShza2IsIGJsZW4pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzozOTA6XFx0XFx0ZXJyID0gYWZpdWN2X2hzX3NlbmQoTlVMTCwgc2ssIHNrYiwgZmxhZ3MpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zOTEtXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTkxOT1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDQ4LVxcdFxcdGF0b21pY19pbmMoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19zZW50KTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA0OTpcXHRcXHRlcnIgPSBhZml1Y3ZfaHNfc2VuZChcXHUwMDI2dHhtc2csIHNrLCBza2IsIDApO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDUwLVxcdFxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MjA6MjUuOTk4MjU5NjAzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzE4MTk1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gU29ja2V0IE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBiZXN0IGZvY3VzIHN5bWJvbHMuIEkgc2VlIHRoYXQgYGFmaXVjdl9oc19zZW5kYCBpcyBjYWxsZWQgZnJvbSBgaXVjdl9zZW5kX2N0cmxgIGFuZCBgaXVjdl9zb2NrX3NlbmRtc2dgLiBIbW0sIGludGVyZXN0aW5nLiBBbmQsIGBpdWN2X3NvY2tfc2VuZG1zZ2AgaXMgY2xlYXJseSB0aGUgc2VuZG1zZyBjYWxsYmFjayBmb3IgdGhlIHNvY2tldCwgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2AgaXMgdGhlIHJlY3Ztc2cgY2FsbGJhY2suIEJvdGggb2YgdGhvc2Ugc29ja2V0IGZ1bmN0aW9ucyBsb29rIGxpa2UgZ29vZCBjYW5kaWRhdGVzIHRvIGNvbmNlbnRyYXRlIG9uIOKAkyB0aGV5IHJlcHJlc2VudCBrZXkgZW50cnkgcG9pbnRzIGZvciBkYXRhIHRyYW5zZmVyLiBXYWl0IGEgc2Vjb25kLCB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmllZCB0byBwcmVmZXIgbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQgZW50cnlwb2ludCBmdW5jdGlvbnMuIE9oLCByaWdodCEgYGFmaXVjdl9oc19zZW5kYCBpcyBzdGF0aWMuIFNpbmNlIGl0J3Mgc3RhdGljLCBpdCBpcyBwcm9iYWJseSBpbmxpbmVkIGFuZCBkb2Vzbid0IG9mZmVyIGEgZGlzdGluY3Qgc3ltYm9sLiBTbywgdGhhdCBsZWF2ZXMgYGl1Y3Zfc29ja19zZW5kbXNnYCBhbmQgYGl1Y3Zfc29ja19yZWN2bXNnYCBhcyB0aGUgYmV0dGVyIGNob2ljZXMuIE5vdyBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aG9zZSB0d28gc29ja2V0IGZ1bmN0aW9ucyBhcmUgc3RhdGljIGFzIHdlbGwsIHRvIG1ha2Ugc3VyZSBJIGFtIG9uIHRoZSByaWdodCBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAxMSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzoyMDozMS4zMzAwODMwNThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MzQ1MzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIml1Y3Zfc29ja19zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9OTA4PXN0YXRpYyBpbnQgaXVjdl9zZW5kX2lwcm0oc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgc3RydWN0IGl1Y3ZfbWVzc2FnZSAqbXNnLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTkxOC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6OTE5OnN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy05MjAtXFx0XFx0XFx0ICAgICBzaXplX3QgbGVuKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaXVjdl9zb2NrX29wcyA9IHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjU1LVxcdC5nZXRuYW1lXFx0PSBpdWN2X3NvY2tfZ2V0bmFtZSxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI1NjpcXHQuc2VuZG1zZ1xcdD0gaXVjdl9zb2NrX3NlbmRtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNTctXFx0LnJlY3Ztc2dcXHQ9IGl1Y3Zfc29ja19yZWN2bXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzoyMDozMS40MTg0MzU0NTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODYzNjI1MTM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBRklVQ1YgQ29kZSBQYXRoKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucywgd2hpbGUgc3RhdGljLCBhcmUgYWN0aW5nIGFzIEFQSSBlbnRyeXBvaW50cyBiZWNhdXNlIHRoZXkncmUgYXNzaWduZWQgdG8gYHByb3RvX29wc2AuIFRoYXQgbWFrZXMgYGl1Y3Zfc29ja19zZW5kbXNnYCBhbmQgYGl1Y3Zfc29ja19yZWN2bXNnYCBpZGVhbCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBXYWl0LCBhY3R1YWxseSwgYGFmaXVjdl9oc19zZW5kYCBjb3VsZCBhbHNvIGJlIGNvbnNpZGVyZWQgaWYgaXQncyBsYXJnZSwgYnV0IGBpdWN2X3NvY2tfc2VuZG1zZ2AgaXMgbGlrZWx5IHRoZSBiZXR0ZXIgY2hvaWNlLiBJdOKAmXMgaW1wb3J0YW50IHRvIHN0aWNrIHRvIEFQSSBlbnRyeXBvaW50cy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYEFGSVVDVmAgZGVwZW5kcyBvbiBgUzM5MGAsIGFuZCBpdHMgdHJpc3RhdGUgZGVmaW5pdGlvbiBoaW5nZXMgb24gZWl0aGVyIGBRRVRIX0wzYCBvciBgSVVDVmAuIFNvLCBgQUZJVUNWYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24uIERvdWJsZS1jaGVja2luZyB0aGF0IGluIGBuZXQvaXVjdi9LY29uZmlnYCBjb25maXJtcyB0aGlzLiBUaGVyZWZvcmUsIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgc2V0IHRvIGBbXCJBRklVQ1ZcIl1gLlxuXG5IYW5nIG9uLCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBwb2ludGluZyBvdXQgdGhhdCB3ZSBzaG91bGQgZXhjbHVkZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQnV0IHRoZSBgUzM5MGAgY29kZSBpcyByZWFjaGFibGUgaW4gUUVNVSBiZWNhdXNlIGl0IHN1cHBvcnRzIGBxZW11LXN5c3RlbS1zMzkweGAsIGFuZCBzeXprYWxsZXIgaGFzIGFuIGBzMzkweGAgdGFyZ2V0LiBTbywgaXQncyBkZWZpbml0ZWx5IGZhaXIgZ2FtZSBmb3IgZnV6emluZy5cblxuT2theSwgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGNvZGUgY2hhbmdlcy4gQm90aCBgYWZpdWN2X2hzX3NlbmRgIGFuZCBgaXVjdl9zb2NrX3JlY3Ztc2dgIGFyZSBtb2RpZmllZCwgYW5kIHRoZSBjaGFuZ2VzIGFkZHJlc3MgYSByYWNlIGNvbmRpdGlvbiByZWxhdGVkIHRvIHRoZSBgbXNnX3JlY3ZgIGF0b21pYyB2YXJpYWJsZS4gVGhhdCBhbG9uZSBtYWtlcyB0aGlzIGEgdmVyeSBpbnRlcmVzdGluZyB0YXJnZXQgZm9yIGZ1enppbmcuIFllcywgdGhlIGNoYW5nZXMgbG9vayBsaWtlIHRoZXkgZml4IGEgcmFjZS5cblxuV2UncmUgZ29vZCB0byBnby4gVGltZSB0byBzZXQgdXAgdGhlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Nzc1LCJPdXRwdXRUb2tlbnMiOjEzMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzoyMDo0MC4wNTQ2OTAxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTY2ODM5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZJVUNWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXVjdl9zb2NrX3NlbmRtc2dcIixcbiAgICBcIml1Y3Zfc29ja19yZWN2bXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgQUZfSVVDViBzb2NrZXQgc2VuZCBhbmQgcmVjZWl2ZSBwYXRocyBieSB1c2luZyBhdG9taWNfeGNoZyBmb3IgdGhlIG1zZ19yZWN2IHZhcmlhYmxlIGFuZCBtb3ZpbmcgaXVjdl9zZW5kX2N0cmwgb3V0IG9mIGEgc3BpbmxvY2sgYmxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIHNvY2tldCBsb2dpYyBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyB0ZXN0YWJsZSBpbiBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGSVVDVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIml1Y3Zfc29ja19zZW5kbXNnXCIsXG4gICAgXCJpdWN2X3NvY2tfcmVjdm1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIEFGX0lVQ1Ygc29ja2V0IHNlbmQgYW5kIHJlY2VpdmUgcGF0aHMgYnkgdXNpbmcgYXRvbWljX3hjaGcgZm9yIHRoZSBtc2dfcmVjdiB2YXJpYWJsZSBhbmQgbW92aW5nIGl1Y3Zfc2VuZF9jdHJsIG91dCBvZiBhIHNwaW5sb2NrIGJsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBzb2NrZXQgbG9naWMgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgd2hpY2ggaXMgdGVzdGFibGUgaW4gUUVNVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MjA6NDAuMjA2MzY0MzE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ1OTcyMjQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjIwOjQwLjIwNjgyNTYwNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMzQ1OTI1NTYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kvbG9ja2luZyBpc3N1ZSBpbiB0aGUgQUZfSVVDViBzb2NrZXQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgaXQgZGVmZXJzIHRoZSBgaXVjdl9zZW5kX2N0cmwoKWAgY2FsbCBpbiBgaXVjdl9zb2NrX3JlY3Ztc2coKWAgdW50aWwgYWZ0ZXIgdGhlIGBpdWN2LVxcdTAwM2VtZXNzYWdlX3EubG9ja2Agc3BpbmxvY2sgaXMgcmVsZWFzZWQsIHByZXZlbnRpbmcgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBsb2NrIGludmVyc2lvbnMuIEl0IGFsc28gZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgYWZpdWN2X2hzX3NlbmQoKWAgYnkgdXNpbmcgYGF0b21pY194Y2hnKClgIHRvIGNsYWltIHJlY2VpdmUgY3JlZGl0cyBhdG9taWNhbGx5IHJpZ2h0IGJlZm9yZSB0cmFuc21pc3Npb24sIGluc3RlYWQgb2YgcmVhZGluZyBhbmQgbGF0ZXIgc3VidHJhY3RpbmcgdGhlIHZhbHVlLiBcXG5cXG5BbGwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzIGludm9sdmVkIChzdWNoIGFzIGBwaHNfaGRyYCBhbmQgYGNvbmZpcm1fcmVjdmApIGFyZSBmdWxseSBpbml0aWFsaXplZCAoZS5nLiwgYG1lbXNldChwaHNfaGRyLCAwLCBzaXplb2YoKnBoc19oZHIpKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIEtDU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZmN2VhNzE3NTU0NWI0ZGQ4ZDc0MDM3OTYxYzM5Y2Q2OWFkMDc0OTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMzoxOTo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuaW5kZXggZWEwNDdiYWI2NWU3Yy4uYTdjMGY2MGJiNWJmYyAxMDA2NDRcbi0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuY1xuKysrIGIvbmV0L2l1Y3YvYWZfaXVjdi5jXG5AQCAtMjEwLDEyICsyMTAsNiBAQCBzdGF0aWMgaW50IGFmaXVjdl9oc19zZW5kKHN0cnVjdCBpdWN2X21lc3NhZ2UgKmltc2csIHN0cnVjdCBzb2NrICpzb2NrLFxuIFx0cGhzX2hkci1cdTAwM2VmbGFncyA9IGZsYWdzO1xuIFx0aWYgKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pXG4gXHRcdHBoc19oZHItXHUwMDNld2luZG93ID0gaXVjdi1cdTAwM2Vtc2dsaW1pdDtcbi1cdGVsc2UgaWYgKChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfV0lOKSB8fCAhZmxhZ3MpIHtcbi1cdFx0Y29uZmlybV9yZWN2ID0gYXRvbWljX3JlYWQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdik7XG4tXHRcdHBoc19oZHItXHUwMDNld2luZG93ID0gY29uZmlybV9yZWN2O1xuLVx0XHRpZiAoY29uZmlybV9yZWN2KVxuLVx0XHRcdHBoc19oZHItXHUwMDNlZmxhZ3MgPSBwaHNfaGRyLVx1MDAzZWZsYWdzIHwgQUZfSVVDVl9GTEFHX1dJTjtcbi1cdH1cbiBcdG1lbWNweShwaHNfaGRyLVx1MDAzZWRlc3RVc2VySUQsIGl1Y3YtXHUwMDNlZHN0X3VzZXJfaWQsIDgpO1xuIFx0bWVtY3B5KHBoc19oZHItXHUwMDNlZGVzdEFwcE5hbWUsIGl1Y3YtXHUwMDNlZHN0X25hbWUsIDgpO1xuIFx0bWVtY3B5KHBoc19oZHItXHUwMDNlc3JjVXNlcklELCBpdWN2LVx1MDAzZXNyY191c2VyX2lkLCA4KTtcbkBAIC0yNTAsMTMgKzI0NCwyMiBAQCBzdGF0aWMgaW50IGFmaXVjdl9oc19zZW5kKHN0cnVjdCBpdWN2X21lc3NhZ2UgKmltc2csIHN0cnVjdCBzb2NrICpzb2NrLFxuIFx0fVxuIFx0c2tiLVx1MDAzZXByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfQUZfSVVDVik7XG4gXG4rXHQvKiBDbGFpbSB0aGUgcmVjZWl2ZSBjcmVkaXQgaGVyZSwgbm90IHdoaWxlIGJ1aWxkaW5nIHRoZSBoZWFkZXI6IGV2ZXJ5XG4rXHQgKiB3YXkgdGhpcyBmcmFtZSBjYW4gYmUgZHJvcHBlZCBoYXMgbm93IGJlZW4gcnVsZWQgb3V0LCBzbyB0aGUgd2luZG93XG4rXHQgKiBpcyB6ZXJvZWQgb25seSBmb3IgYXMgbG9uZyBhcyB0aGUgdHJhbnNtaXQgaXRzZWxmIHRha2VzLlxuK1x0ICovXG4rXHRpZiAoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1dJTiB8fCAhZmxhZ3MpIHtcbitcdFx0Y29uZmlybV9yZWN2ID0gYXRvbWljX3hjaGcoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdiwgMCk7XG4rXHRcdHBoc19oZHItXHUwMDNld2luZG93ID0gY29uZmlybV9yZWN2O1xuK1x0XHRpZiAoY29uZmlybV9yZWN2KVxuK1x0XHRcdHBoc19oZHItXHUwMDNlZmxhZ3MgPSBwaHNfaGRyLVx1MDAzZWZsYWdzIHwgQUZfSVVDVl9GTEFHX1dJTjtcbitcdH1cbitcbiBcdGF0b21pY19pbmMoXHUwMDI2aXVjdi1cdTAwM2Vza2JzX2luX3htaXQpO1xuIFx0ZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTtcbiBcdGlmIChuZXRfeG1pdF9ldmFsKGVycikpIHtcbiBcdFx0YXRvbWljX2RlYyhcdTAwMjZpdWN2LVx1MDAzZXNrYnNfaW5feG1pdCk7XG4tXHR9IGVsc2Uge1xuLVx0XHRhdG9taWNfc3ViKGNvbmZpcm1fcmVjdiwgXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdik7XG4tXHRcdFdBUk5fT04oYXRvbWljX3JlYWQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdikgXHUwMDNjIDApO1xuK1x0XHRhdG9taWNfYWRkKGNvbmZpcm1fcmVjdiwgXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdik7XG4gXHR9XG4gXHRyZXR1cm4gbmV0X3htaXRfZXZhbChlcnIpO1xuIFxuQEAgLTEyNDEsNiArMTI0NCw3IEBAIHN0YXRpYyBpbnQgaXVjdl9zb2NrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuIFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xuIFx0dW5zaWduZWQgaW50IGNvcGllZCwgcmxlbjtcbiBcdHN0cnVjdCBza19idWZmICpza2IsICpyc2tiLCAqY3NrYjtcbitcdGJvb2wgc2VuZF93aW4gPSBmYWxzZTtcbiBcdGludCBlcnIgPSAwO1xuIFx0dTMyIG9mZnNldDtcbiBcbkBAIC0xMzMxLDE2ICsxMzM1LDIwIEBAIHN0YXRpYyBpbnQgaXVjdl9zb2NrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuIFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNml1Y3YtXHUwMDNlYmFja2xvZ19za2JfcSkpIHtcbiBcdFx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubGlzdCkpXG4gXHRcdFx0XHRpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKHNrKTtcbi1cdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdikgXHUwMDNlPVxuLVx0XHRcdFx0XHRcdFx0aXVjdi1cdTAwM2Vtc2dsaW1pdCAvIDIpIHtcbi1cdFx0XHRcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfV0lOKTtcbi1cdFx0XHRcdGlmIChlcnIpIHtcbi1cdFx0XHRcdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0RJU0NPTk47XG4tXHRcdFx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fVxuK1x0XHRcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2KSBcdTAwM2U9XG4rXHRcdFx0XHRcdFx0XHRpdWN2LVx1MDAzZW1zZ2xpbWl0IC8gMilcbitcdFx0XHRcdHNlbmRfd2luID0gdHJ1ZTtcbiBcdFx0fVxuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcbitcbitcdFx0aWYgKHNlbmRfd2luKSB7XG4rXHRcdFx0ZXJyID0gaXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19XSU4pO1xuK1x0XHRcdGlmIChlcnIpIHtcbitcdFx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9ESVNDT05OO1xuK1x0XHRcdFx0c2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbitcdFx0XHR9XG4rXHRcdH1cbiBcdH1cbiBcbiBkb25lOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MjA6NDAuMjA2ODI2Mzg0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3Nzk1ODA2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpdWN2IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9pdWN2L2FmX2l1Y3YuY2AuIEl0IHNlZW1zIHRoZXkncmUgbW9kaWZ5aW5nIGBhZml1Y3ZfaHNfc2VuZGAgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2AuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgYWZpdWN2X2hzX3NlbmRgIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBjaGFuZ2UgaXMuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5J3ZlIHNoaWZ0ZWQgdGhlIHdpbmRvdyBjYWxjdWxhdGlvbiBsb2dpYy5cblxuSW5pdGlhbGx5LCB0aGUgY29kZSBjaGVja2VkIGlmIGBmbGFnc2Agd2FzIGBBRl9JVUNWX0ZMQUdfV0lOYCBvciB6ZXJvLCB0aGVuIGNhbGN1bGF0ZWQgYGNvbmZpcm1fcmVjdmAsIHVzZWQgaXQgdG8gc2V0IHRoZSBgd2luZG93YCBmaWVsZCBpbiB0aGUgaGVhZGVyLCBhbmQgcG90ZW50aWFsbHkgc2V0IHRoZSBgQUZfSVVDVl9GTEFHX1dJTmAgZmxhZyBpbiB0aGUgaGVhZGVyLiBOb3csIHRoZXkndmUgbW92ZWQgdGhhdCBsb2dpYyB0byBhIHBvaW50IHJpZ2h0IGJlZm9yZSBgZGV2X3F1ZXVlX3htaXQoc2tiKWAuIFRoZSBjb21tZW50IGV4cGxhaW5zIHRoaXMgYXMgY2xhaW1pbmcgdGhlIHJlY2VpdmUgY3JlZGl0IGF0IGEgbGF0ZXIgc3RhZ2UsIG9uY2UgaXQncyBjZXJ0YWluIHRoZSBmcmFtZSB3b24ndCBiZSBkcm9wcGVkLiBJdCBtYWtlcyBzZW5zZSBpbiBwcmluY2lwbGUgdG8gemVybyB0aGUgd2luZG93IGZvciBvbmx5IHRoZSB0cmFuc21pdCB0aW1lLlxuXG5Ib3dldmVyLCBhIHJlZCBmbGFnIHBvcHBlZCB1cCBpbiBteSBoZWFkLiBUaGV5J3JlIHVzaW5nIGBhdG9taWNfeGNoZ2Agbm93LCB3aGljaCBpcyBnb29kLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvZGUgZmxvdy4gSWYgYGZsYWdzYCBpcyAqbmVpdGhlciogYEFGX0lVQ1ZfRkxBR19XSU5gIG5vciB6ZXJvLCB0aGVuIGBjb25maXJtX3JlY3ZgIHdvbid0IGJlIGluaXRpYWxpemVkICpiZWZvcmUqIGl0J3MgdXNlZC4gVGhpcyBpcyBwb3RlbnRpYWxseSBhIGJ1Zywgc28gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBmdWxsIGltcGxlbWVudGF0aW9uIG9mIGBhZml1Y3ZfaHNfc2VuZGAuIEknbSBnb2luZyB0byBzY2FuIHRoZSBzb3VyY2UgY29kZSBub3cgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QgYW4gaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzoyMDo0Ni45ODY0MTA0NjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMjY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHRza193YWtlX2FzeW5jX3JjdShzaywgU09DS19XQUtFX1NQQUNFLCBQT0xMX09VVCk7XFxuIDE5MTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMTkyOlxcdH1cXG4gMTkzOlxcdFxcbiAxOTQ6XFx0LypcXG4gMTk1OlxcdCAqIGFmaXVjdl9oc19zZW5kKCkgLSBzZW5kIGEgbWVzc2FnZSB0aHJvdWdoIEhpcGVyU29ja2V0cyB0cmFuc3BvcnRcXG4gMTk2OlxcdCAqL1xcbiAxOTc6XFx0c3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jayxcXG4gMTk4OlxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IGZsYWdzKVxcbiAxOTk6XFx0e1xcbiAyMDA6XFx0XFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc29jayk7XFxuIDIwMTpcXHRcXHRzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIgKnBoc19oZHI7XFxuIDIwMjpcXHRcXHRpbnQgZXJyLCBjb25maXJtX3JlY3YgPSAwO1xcbiAyMDM6XFx0XFxuIDIwNDpcXHRcXHRwaHNfaGRyID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKnBoc19oZHIpKTtcXG4gMjA1OlxcdFxcdG1lbXNldChwaHNfaGRyLCAwLCBzaXplb2YoKnBoc19oZHIpKTtcXG4gMjA2OlxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRwaHNfaGRyLVxcdTAwM2VtYWdpYyA9IEVUSF9QX0FGX0lVQ1Y7XFxuIDIwOTpcXHRcXHRwaHNfaGRyLVxcdTAwM2V2ZXJzaW9uID0gMTtcXG4gMjEwOlxcdFxcdHBoc19oZHItXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuIDIxMTpcXHRcXHRpZiAoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1NZTilcXG4gMjEyOlxcdFxcdFxcdHBoc19oZHItXFx1MDAzZXdpbmRvdyA9IGl1Y3YtXFx1MDAzZW1zZ2xpbWl0O1xcbiAyMTM6XFx0XFx0bWVtY3B5KHBoc19oZHItXFx1MDAzZWRlc3RVc2VySUQsIGl1Y3YtXFx1MDAzZWRzdF91c2VyX2lkLCA4KTtcXG4gMjE0OlxcdFxcdG1lbWNweShwaHNfaGRyLVxcdTAwM2VkZXN0QXBwTmFtZSwgaXVjdi1cXHUwMDNlZHN0X25hbWUsIDgpO1xcbiAyMTU6XFx0XFx0bWVtY3B5KHBoc19oZHItXFx1MDAzZXNyY1VzZXJJRCwgaXVjdi1cXHUwMDNlc3JjX3VzZXJfaWQsIDgpO1xcbiAyMTY6XFx0XFx0bWVtY3B5KHBoc19oZHItXFx1MDAzZXNyY0FwcE5hbWUsIGl1Y3YtXFx1MDAzZXNyY19uYW1lLCA4KTtcXG4gMjE3OlxcdFxcdEFTQ0VCQyhwaHNfaGRyLVxcdTAwM2VkZXN0VXNlcklELCBzaXplb2YocGhzX2hkci1cXHUwMDNlZGVzdFVzZXJJRCkpO1xcbiAyMTg6XFx0XFx0QVNDRUJDKHBoc19oZHItXFx1MDAzZWRlc3RBcHBOYW1lLCBzaXplb2YocGhzX2hkci1cXHUwMDNlZGVzdEFwcE5hbWUpKTtcXG4gMjE5OlxcdFxcdEFTQ0VCQyhwaHNfaGRyLVxcdTAwM2VzcmNVc2VySUQsIHNpemVvZihwaHNfaGRyLVxcdTAwM2VzcmNVc2VySUQpKTtcXG4gMjIwOlxcdFxcdEFTQ0VCQyhwaHNfaGRyLVxcdTAwM2VzcmNBcHBOYW1lLCBzaXplb2YocGhzX2hkci1cXHUwMDNlc3JjQXBwTmFtZSkpO1xcbiAyMjE6XFx0XFx0aWYgKGltc2cpXFxuIDIyMjpcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnBoc19oZHItXFx1MDAzZWl1Y3ZfaGRyLCBpbXNnLCBzaXplb2Yoc3RydWN0IGl1Y3ZfbWVzc2FnZSkpO1xcbiAyMjM6XFx0XFxuIDIyNDpcXHRcXHRza2ItXFx1MDAzZWRldiA9IGl1Y3YtXFx1MDAzZWhzX2RldjtcXG4gMjI1OlxcdFxcdGlmICghc2tiLVxcdTAwM2VkZXYpIHtcXG4gMjI2OlxcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuIDIyNzpcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiAyMjg6XFx0XFx0fVxcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHRkZXZfaGFyZF9oZWFkZXIoc2tiLCBza2ItXFx1MDAzZWRldiwgRVRIX1BfQUZfSVVDViwgTlVMTCwgTlVMTCwgc2tiLVxcdTAwM2VsZW4pO1xcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHRpZiAoIShza2ItXFx1MDAzZWRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApIHx8ICFuZXRpZl9jYXJyaWVyX29rKHNrYi1cXHUwMDNlZGV2KSkge1xcbiAyMzM6XFx0XFx0XFx0ZXJyID0gLUVORVRET1dOO1xcbiAyMzQ6XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4gMjM1OlxcdFxcdH1cXG4gMjM2OlxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNlIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VtdHUpIHtcXG4gMjM3OlxcdFxcdFxcdGlmIChzb2NrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfU0VRUEFDS0VUKSB7XFxuIDIzODpcXHRcXHRcXHRcXHRlcnIgPSAtRU1TR1NJWkU7XFxuIDIzOTpcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiAyNDA6XFx0XFx0XFx0fVxcbiAyNDE6XFx0XFx0XFx0ZXJyID0gcHNrYl90cmltKHNrYiwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZW10dSk7XFxuIDI0MjpcXHRcXHRcXHRpZiAoZXJyKVxcbiAyNDM6XFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4gMjQ0OlxcdFxcdH1cXG4gMjQ1OlxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKTtcXG4gMjQ2OlxcdFxcbiAyNDc6XFx0XFx0LyogQ2xhaW0gdGhlIHJlY2VpdmUgY3JlZGl0IGhlcmUsIG5vdCB3aGlsZSBidWlsZGluZyB0aGUgaGVhZGVyOiBldmVyeVxcbiAyNDg6XFx0XFx0ICogd2F5IHRoaXMgZnJhbWUgY2FuIGJlIGRyb3BwZWQgaGFzIG5vdyBiZWVuIHJ1bGVkIG91dCwgc28gdGhlIHdpbmRvd1xcbiAyNDk6XFx0XFx0ICogaXMgemVyb2VkIG9ubHkgZm9yIGFzIGxvbmcgYXMgdGhlIHRyYW5zbWl0IGl0c2VsZiB0YWtlcy5cXG4gMjUwOlxcdFxcdCAqL1xcbiAyNTE6XFx0XFx0aWYgKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19XSU4gfHwgIWZsYWdzKSB7XFxuIDI1MjpcXHRcXHRcXHRjb25maXJtX3JlY3YgPSBhdG9taWNfeGNoZyhcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YsIDApO1xcbiAyNTM6XFx0XFx0XFx0cGhzX2hkci1cXHUwMDNld2luZG93ID0gY29uZmlybV9yZWN2O1xcbiAyNTQ6XFx0XFx0XFx0aWYgKGNvbmZpcm1fcmVjdilcXG4gMjU1OlxcdFxcdFxcdFxcdHBoc19oZHItXFx1MDAzZWZsYWdzID0gcGhzX2hkci1cXHUwMDNlZmxhZ3MgfCBBRl9JVUNWX0ZMQUdfV0lOO1xcbiAyNTY6XFx0XFx0fVxcbiAyNTc6XFx0XFxuIDI1ODpcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZpdWN2LVxcdTAwM2Vza2JzX2luX3htaXQpO1xcbiAyNTk6XFx0XFx0ZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTtcXG4gMjYwOlxcdFxcdGlmIChuZXRfeG1pdF9ldmFsKGVycikpIHtcXG4gMjYxOlxcdFxcdFxcdGF0b21pY19kZWMoXFx1MDAyNml1Y3YtXFx1MDAzZXNrYnNfaW5feG1pdCk7XFxuIDI2MjpcXHRcXHRcXHRhdG9taWNfYWRkKGNvbmZpcm1fcmVjdiwgXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2KTtcXG4gMjYzOlxcdFxcdH1cXG4gMjY0OlxcdFxcdHJldHVybiBuZXRfeG1pdF9ldmFsKGVycik7XFxuIDI2NTpcXHRcXG4gMjY2OlxcdGVycl9mcmVlOlxcbiAyNjc6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDI2ODpcXHRcXHRyZXR1cm4gZXJyO1xcbiAyNjk6XFx0fVxcbiAyNzA6XFx0XFxuIDI3MTpcXHRzdGF0aWMgc3RydWN0IHNvY2sgKl9faXVjdl9nZXRfc29ja19ieV9uYW1lKGNoYXIgKm5tKVxcbiAyNzI6XFx0e1xcbiAyNzM6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbiAyNzQ6XFx0XFxuIDI3NTpcXHRcXHRza19mb3JfZWFjaChzaywgXFx1MDAyNml1Y3Zfc2tfbGlzdC5oZWFkKVxcbiAyNzY6XFx0XFx0XFx0aWYgKCFtZW1jbXAoXFx1MDAyNml1Y3Zfc2soc2spLVxcdTAwM2VzcmNfbmFtZSwgbm0sIDgpKVxcbiAyNzc6XFx0XFx0XFx0XFx0cmV0dXJuIHNrO1xcbiAyNzg6XFx0XFxuIDI3OTpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMjgwOlxcdH1cXG4gMjgxOlxcdFxcbiAyODI6XFx0c3RhdGljIHZvaWQgaXVjdl9zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcXG4gMjgzOlxcdHtcXG4gMjg0OlxcdFxcdHNrYl9xdWV1ZV9wdXJnZShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xcbiAyODU6XFx0XFx0c2tiX3F1ZXVlX3B1cmdlKFxcdTAwMjZzay1cXHUwMDNlc2tfZXJyb3JfcXVldWUpO1xcbiAyODY6XFx0XFxuIDI4NzpcXHRcXHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xcbiAyODg6XFx0XFx0XFx0cHJfZXJyKFxcXCJBdHRlbXB0IHRvIHJlbGVhc2UgYWxpdmUgaXVjdiBzb2NrZXQgJXBcXFxcblxcXCIsIHNrKTtcXG4gMjg5OlxcdFxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MjA6NDYuOTg3NjM2MTM4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MjQ4MTk3MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgUG90ZW50aWFsIFJpc2tzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYWZpdWN2X2hzX3NlbmRgIGFuZCBgaXVjdl9zb2NrX3JlY3Ztc2dgLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmlnaHQ/IFdlJ3JlIG1vZGlmeWluZyB0aGVzZSBmdW5jdGlvbnMsIGFuZCBhbnl0aW1lIHlvdSB0b3VjaCBkYXRhIHN0cnVjdHVyZXMsIHRoZXJlJ3MgYSBjaGFuY2Ugb2YgaW50cm9kdWNpbmcgYSByZWFkIG9yIHdyaXRlIGZyb20gdW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBjYW4gbGVhZCB0byBuYXN0eSB2dWxuZXJhYmlsaXRpZXMuXG5cblNwZWNpZmljYWxseSwgaW4gYGFmaXVjdl9oc19zZW5kYCwgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHBsYXlpbmcgd2l0aCB0aGUgdGltaW5nIG9mIHRoZSB3aW5kb3cgY2FsY3VsYXRpb24gYW5kIHRoZSB3YXkgYGl1Y3YtXHUwMDNlbXNnX3JlY3ZgIGlzIGhhbmRsZWQuIFdlJ3JlIGluaXRpYWxpemluZyBgY29uZmlybV9yZWN2YCB0byB6ZXJvLCBhbmQgdGhlIHdpbmRvdyBjYWxjdWxhdGlvbiBpcyBoYXBwZW5pbmcganVzdCBiZWZvcmUgYGRldl9xdWV1ZV94bWl0KHNrYilgLiBUaGUgY2hhbmdlIHRvIGBhdG9taWNfeGNoZ2AgaW5zdGVhZCBvZiBgYXRvbWljX3JlYWRgIGFuZCBgYXRvbWljX3N1YmAgaXMgc29tZXRoaW5nIEkgbmVlZCB0byBsb29rIGludG8gYSBiaXQgZGVlcGVyIGxhdGVyIGJ1dCBkb2Vzbid0IGltbWVkaWF0ZWx5IHNjcmVhbSBkYW5nZXIuXG5cbkluIGBpdWN2X3NvY2tfcmVjdm1zZ2AsIHRoZSBkZWZlcnJhbCBvZiBgaXVjdl9zZW5kX2N0cmxgIHVudGlsIGFmdGVyIGBzcGluX3VubG9ja19iaChcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrKWAgaW1tZWRpYXRlbHkgZ290IG15IGF0dGVudGlvbi4gSXQncyBsaWtlbHkgdHJ5aW5nIHRvIGF2b2lkIGEgZGVhZGxvY2sgb3IgYSBsb2NrIGludmVyc2lvbiBzaXR1YXRpb24uIFRoZSBvcmRlciBvZiBsb2NraW5nIGlzIGNyaXRpY2FsLCBhbmQgYW55IGNoYW5nZSBpbiB0aGlzIGFyZWEgbmVlZHMgdG8gYmUgYW5hbHl6ZWQgd2l0aCBhIGZpbmUtdG9vdGggY29tYi5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgd2FzIGlmIHRoZSBjaGFuZ2UgaW4gYGl1Y3Zfc29ja19yZWN2bXNnYCBleHBvc2VkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHBoc19oZHItXHUwMDNld2luZG93YCBhbmQgYHBoc19oZHItXHUwMDNlZmxhZ3NgLCBidXQgYHBoc19oZHJgIGlzIGFsbG9jYXRlZCB3aXRoIGBza2JfcHVzaGAgYW5kIHplcm9lZCBvdXQgd2l0aCBgbWVtc2V0YC4gU28sIHdlJ3JlIGdvb2QgdGhlcmUuIE5vdGhpbmcgdW5pbml0aWFsaXplZCBpbiBgcGhzX2hkcmAuIFRoYXQncyBhIHJlbGllZiFcblxuT2theSwgc28gaXQgaXMgbGlrZWx5IGZpeGluZyBhIGNvbmN1cnJlbmN5IGlzc3VlLCBhIGRlYWRsb2NrIG9yIGEgcmFjZS4gQnkgbW92aW5nIHRoZSBjYWxsIHRvIGBpdWN2X3NlbmRfY3RybGAgYWZ0ZXIgcmVsZWFzaW5nIHRoZSBzcGlubG9jaywgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGV5J3JlIHRyeWluZyB0byBwcmV2ZW50IGEgc2l0dWF0aW9uIHdoZXJlIGBpdWN2X3NlbmRfY3RybGAgY2FsbHMgYGFmaXVjdl9oc19zZW5kYCwgd2hpY2ggdGhlbiBjYWxscyBgZGV2X3F1ZXVlX3htaXRgLCB3aGljaCBtaWdodCBzbGVlcCBvciB0YWtlIG90aGVyIGxvY2tzLCB3aGlsZSB3ZSBzdGlsbCBoYXZlIGEgc3BpbmxvY2suXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gYGNvbmZpcm1fcmVjdmAgaXMgaW5pdGlhbGl6ZWQgdG8gMC4gYHBoc19oZHJgIGlzIHplcm9lZC4gYHNlbmRfd2luYCBpcyBgZmFsc2VgLiBMb29rcyBzb2xpZC4gTm9wZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBoZXJlLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIHRoZSBsYWNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB0aGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBmaXggZm9yIGEgbG9ja2luZyBvciBjb25jdXJyZW5jeSBidWcg4oCTIGEgcmFjZSBjb25kaXRpb24sIG9yIHBlcmhhcHMgZXZlbiBhIGRlYWRsb2NrLiBJZiBpdCAqd2FzKiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIHVzZS1hZnRlci1mcmVlLCBLQVNBTiBvciBMT0NLREVQIGxpa2VseSB3b3VsZCd2ZSBmbGFnZ2VkIHRoZSBvcmlnaW5hbCBwcm9ibGVtLiBLTVNBTiBpcyBkZWZpbml0ZWx5IG5vdCByZXF1aXJlZCBoZXJlLlxuXG5JJ2xsIHF1aWNrbHkgcmV2aWV3IGBpdWN2X3NlbmRfY3RybGAganVzdCB0byBiZSBzdXJlLCBidXQgSSBmZWVsIHByZXR0eSBnb29kIGFib3V0IHRoaXMgb25lLiBJdCBsb29rcyBsaWtlIGEgY2xlYW4sIGZvY3VzZWQgY29uY3VycmVuY3kgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTYxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MjA6NTYuNDEyNDU4MTA3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI0MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNDA6XFx0c3RhdGljIGludCBpdWN2X3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuMTI0MTpcXHRcXHRcXHRcXHQgICAgIHNpemVfdCBsZW4sIGludCBmbGFncylcXG4xMjQyOlxcdHtcXG4xMjQzOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbjEyNDQ6XFx0XFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xcbjEyNDU6XFx0XFx0dW5zaWduZWQgaW50IGNvcGllZCwgcmxlbjtcXG4xMjQ2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IsICpyc2tiLCAqY3NrYjtcXG4xMjQ3OlxcdFxcdGJvb2wgc2VuZF93aW4gPSBmYWxzZTtcXG4xMjQ4OlxcdFxcdGludCBlcnIgPSAwO1xcbjEyNDk6XFx0XFx0dTMyIG9mZnNldDtcXG4xMjUwOlxcdFxcbjEyNTE6XFx0XFx0aWYgKChzay1cXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9ESVNDT05OKSBcXHUwMDI2XFx1MDAyNlxcbjEyNTI6XFx0XFx0ICAgIHNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2aXVjdi1cXHUwMDNlYmFja2xvZ19za2JfcSkgXFx1MDAyNlxcdTAwMjZcXG4xMjUzOlxcdFxcdCAgICBza2JfcXVldWVfZW1wdHkoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSBcXHUwMDI2XFx1MDAyNlxcbjEyNTQ6XFx0XFx0ICAgIGxpc3RfZW1wdHkoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5saXN0KSlcXG4xMjU1OlxcdFxcdFxcdHJldHVybiAwO1xcbjEyNTY6XFx0XFxuMTI1NzpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiAoTVNHX09PQikpXFxuMTI1ODpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTI1OTpcXHRcXG4xMjYwOlxcdFxcdC8qIHJlY2VpdmUvZGVxdWV1ZSBuZXh0IHNrYjpcXG4xMjYxOlxcdFxcdCAqIHRoZSBmdW5jdGlvbiB1bmRlcnN0YW5kcyBNU0dfUEVFSyBhbmQsIHRodXMsIGRvZXMgbm90IGRlcXVldWUgc2tiXFxuMTI2MjpcXHRcXHQgKiBvbmx5IHJlZmNvdW50IGlzIGluY3JlYXNlZC5cXG4xMjYzOlxcdFxcdCAqL1xcbjEyNjQ6XFx0XFx0c2tiID0gc2tiX3JlY3ZfZGF0YWdyYW0oc2ssIGZsYWdzLCBcXHUwMDI2ZXJyKTtcXG4xMjY1OlxcdFxcdGlmICghc2tiKSB7XFxuMTI2NjpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgUkNWX1NIVVRET1dOKVxcbjEyNjc6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTI2ODpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEyNjk6XFx0XFx0fVxcbjEyNzA6XFx0XFxuMTI3MTpcXHRcXHRvZmZzZXQgPSBJVUNWX1NLQl9DQihza2IpLVxcdTAwM2VvZmZzZXQ7XFxuMTI3MjpcXHRcXHRybGVuICAgPSBza2ItXFx1MDAzZWxlbiAtIG9mZnNldDtcXHRcXHQvKiByZWFsIGxlbmd0aCBvZiBza2IgKi9cXG4xMjczOlxcdFxcdGNvcGllZCA9IG1pbl90KHVuc2lnbmVkIGludCwgcmxlbiwgbGVuKTtcXG4xMjc0OlxcdFxcdGlmICghcmxlbilcXG4xMjc1OlxcdFxcdFxcdHNrLVxcdTAwM2Vza19zaHV0ZG93biA9IHNrLVxcdTAwM2Vza19zaHV0ZG93biB8IFJDVl9TSFVURE9XTjtcXG4xMjc2OlxcdFxcbjEyNzc6XFx0XFx0Y3NrYiA9IHNrYjtcXG4xMjc4OlxcdFxcdGlmIChza2JfY29weV9kYXRhZ3JhbV9tc2coY3NrYiwgb2Zmc2V0LCBtc2csIGNvcGllZCkpIHtcXG4xMjc5OlxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMTI4MDpcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuMTI4MTpcXHRcXHR9XFxuMTI4MjpcXHRcXG4xMjgzOlxcdFxcdC8qIFNPQ0tfU0VRUEFDS0VUOiBzZXQgTVNHX1RSVU5DIGlmIHJlY3YgYnVmIHNpemUgaXMgdG9vIHNtYWxsICovXFxuMTI4NDpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpIHtcXG4xMjg1OlxcdFxcdFxcdGlmIChjb3BpZWQgXFx1MDAzYyBybGVuKVxcbjEyODY6XFx0XFx0XFx0XFx0bXNnLVxcdTAwM2Vtc2dfZmxhZ3MgfD0gTVNHX1RSVU5DO1xcbjEyODc6XFx0XFx0XFx0LyogZWFjaCBpdWN2IG1lc3NhZ2UgY29udGFpbnMgYSBjb21wbGV0ZSByZWNvcmQgKi9cXG4xMjg4OlxcdFxcdFxcdG1zZy1cXHUwMDNlbXNnX2ZsYWdzIHw9IE1TR19FT1I7XFxuMTI4OTpcXHRcXHR9XFxuMTI5MDpcXHRcXG4xMjkxOlxcdFxcdC8qIGNyZWF0ZSBjb250cm9sIG1lc3NhZ2UgdG8gc3RvcmUgaXVjdiBtc2cgdGFyZ2V0IGNsYXNzOlxcbjEyOTI6XFx0XFx0ICogZ2V0IHRoZSB0cmdjbHMgZnJvbSB0aGUgY29udHJvbCBidWZmZXIgb2YgdGhlIHNrYiBkdWUgdG9cXG4xMjkzOlxcdFxcdCAqIGZyYWdtZW50YXRpb24gb2Ygb3JpZ2luYWwgaXVjdiBtZXNzYWdlLiAqL1xcbjEyOTQ6XFx0XFx0ZXJyID0gcHV0X2Ntc2cobXNnLCBTT0xfSVVDViwgU0NNX0lVQ1ZfVFJHQ0xTLFxcbjEyOTU6XFx0XFx0XFx0ICAgICAgIHNpemVvZihJVUNWX1NLQl9DQihza2IpLVxcdTAwM2VjbGFzcyksXFxuMTI5NjpcXHRcXHRcXHQgICAgICAgKHZvaWQgKilcXHUwMDI2SVVDVl9TS0JfQ0Ioc2tiKS1cXHUwMDNlY2xhc3MpO1xcbjEyOTc6XFx0XFx0aWYgKGVycilcXG4xMjk4OlxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4xMjk5OlxcdFxcbjEzMDA6XFx0XFx0LyogTWFyayByZWFkIHBhcnQgb2Ygc2tiIGFzIHVzZWQgKi9cXG4xMzAxOlxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgTVNHX1BFRUspKSB7XFxuMTMwMjpcXHRcXG4xMzAzOlxcdFxcdFxcdC8qIFNPQ0tfU1RSRUFNOiByZS1xdWV1ZSBza2IgaWYgaXQgY29udGFpbnMgdW5yZWNlaXZlZCBkYXRhICovXFxuMTMwNDpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19TVFJFQU0pIHtcXG4xMzA1OlxcdFxcdFxcdFxcdGlmIChjb3BpZWQgXFx1MDAzYyBybGVuKSB7XFxuMTMwNjpcXHRcXHRcXHRcXHRcXHRJVUNWX1NLQl9DQihza2IpLVxcdTAwM2VvZmZzZXQgPSBvZmZzZXQgKyBjb3BpZWQ7XFxuMTMwNzpcXHRcXHRcXHRcXHRcXHRza2JfcXVldWVfaGVhZChcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUsIHNrYik7XFxuMTMwODpcXHRcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuMTMwOTpcXHRcXHRcXHRcXHR9XFxuMTMxMDpcXHRcXHRcXHR9XFxuMTMxMTpcXHRcXG4xMzEyOlxcdFxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuMTMxMzpcXHRcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcXG4xMzE0OlxcdFxcdFxcdFxcdGF0b21pY19pbmMoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2KTtcXG4xMzE1OlxcdFxcdFxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YpIFxcdTAwM2UgaXVjdi1cXHUwMDNlbXNnbGltaXQpIHtcXG4xMzE2OlxcdFxcdFxcdFxcdFxcdFdBUk5fT04oMSk7XFxuMTMxNzpcXHRcXHRcXHRcXHRcXHRpdWN2X3NvY2tfY2xvc2Uoc2spO1xcbjEzMTg6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTMxOTpcXHRcXHRcXHRcXHR9XFxuMTMyMDpcXHRcXHRcXHR9XFxuMTMyMTpcXHRcXG4xMzIyOlxcdFxcdFxcdC8qIFF1ZXVlIGJhY2tsb2cgc2ticyAqL1xcbjEzMjM6XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpdWN2LVxcdTAwM2VtZXNzYWdlX3EubG9jayk7XFxuMTMyNDpcXHRcXHRcXHRyc2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNml1Y3YtXFx1MDAzZWJhY2tsb2dfc2tiX3EpO1xcbjEzMjU6XFx0XFx0XFx0d2hpbGUgKHJza2IpIHtcXG4xMzI2OlxcdFxcdFxcdFxcdElVQ1ZfU0tCX0NCKHJza2IpLVxcdTAwM2VvZmZzZXQgPSAwO1xcbjEzMjc6XFx0XFx0XFx0XFx0aWYgKF9fc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCByc2tiKSkge1xcbjEzMjg6XFx0XFx0XFx0XFx0XFx0LyogaGFuZGxlIHJjdiBxdWV1ZSBmdWxsICovXFxuMTMyOTpcXHRcXHRcXHRcXHRcXHRza2JfcXVldWVfaGVhZChcXHUwMDI2aXVjdi1cXHUwMDNlYmFja2xvZ19za2JfcSxcXG4xMzMwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHJza2IpO1xcbjEzMzE6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTMzMjpcXHRcXHRcXHRcXHR9XFxuMTMzMzpcXHRcXHRcXHRcXHRyc2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNml1Y3YtXFx1MDAzZWJhY2tsb2dfc2tiX3EpO1xcbjEzMzQ6XFx0XFx0XFx0fVxcbjEzMzU6XFx0XFx0XFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2aXVjdi1cXHUwMDNlYmFja2xvZ19za2JfcSkpIHtcXG4xMzM2OlxcdFxcdFxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxpc3QpKVxcbjEzMzc6XFx0XFx0XFx0XFx0XFx0aXVjdl9wcm9jZXNzX21lc3NhZ2VfcShzayk7XFxuMTMzODpcXHRcXHRcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIgXFx1MDAyNlxcdTAwMjZcXG4xMzM5OlxcdFxcdFxcdFxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YpIFxcdTAwM2U9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjIwOjU2LjQxMjYyOTg2N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjUzNDE2Njk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoKipcblxuT2theSwgbGV0IG1lIGJyZWFrIGRvd24gdGhpcyBrZXJuZWwgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IHRhcmdldHMgYSByYWNlIGNvbmRpdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IGBtc2dfcmVjdmAgaXMgaGFuZGxlZC4gSSBzdXNwZWN0IHRoZSBjb21taXQgbWVzc2FnZSBwcm9iYWJseSBoaWdobGlnaHRzIHRoZSBpc3N1ZTogYSBwb3RlbnRpYWwgcmFjZSB3aXRoaW4gYGFmaXVjdl9oc19zZW5kYCB3aGVyZSBhIHZhbHVlIG9mIGBtc2dfcmVjdmAgaXMgcmVhZCwgZGVjcmVtZW50ZWQgYmFzZWQgb24gdGhhdCByZWFkLCBidXQgYW5vdGhlciB0aHJlYWQgY291bGQgbW9kaWZ5IHRoYXQgdmFsdWUgYmV0d2VlbiB0aGUgcmVhZCBhbmQgdGhlIHN1YnRyYWN0aW9uLCBsZWFkaW5nIHRvIGluY29ycmVjdCBhY2NvdW50aW5nIG9yIGV2ZW4gYSBkZWFkbG9jay5cblxuVGhlIHNlY29uZCBwYXJ0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gTW92aW5nIHRoZSBgaXVjdl9zZW5kX2N0cmxgIGNhbGwgb3V0c2lkZSBvZiB0aGUgYHNwaW5fbG9ja19iaChcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrKWAgaXMgYSBjbGFzc2ljIGRlYWRsb2NrIHByZXZlbnRpb24gc3RyYXRlZ3kuIEkgc2VlIHRoYXQgYGl1Y3Zfc2VuZF9jdHJsYCBjYWxscyBgYWZpdWN2X2hzX3NlbmRgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBkZXZfcXVldWVfeG1pdGAuIGBkZXZfcXVldWVfeG1pdGAgaXMgbm90b3Jpb3VzIGZvciBwb3RlbnRpYWxseSB0YWtpbmcgbG9ja3MgdGhhdCBhcmUgaW5jb21wYXRpYmxlIHdpdGggbG9ja3MgaGVsZCB3aGVuIGludGVyYWN0aW5nIHdpdGggbWVzc2FnZSBxdWV1ZXMgYW5kIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBTbywgdGhpcyBjaGFuZ2UgbGlrZWx5IHByZXZlbnRzIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGtlcm5lbCBtaWdodCBibG9jayBpbmRlZmluaXRlbHksIHdhaXRpbmcgZm9yIGEgbG9jayBhbHJlYWR5IGhlbGQgYnkgdGhlIGN1cnJlbnQgY29udGV4dC5cblxuQW5kIGZpbmFsbHksIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSSdsbCBjb25maWRlbnRseSBtYXJrIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBhcyBmYWxzZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDUzLCJPdXRwdXRUb2tlbnMiOjI2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjIxOjAzLjY2NjA1MDY3MloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kvbG9ja2luZyBpc3N1ZSBpbiB0aGUgQUZfSVVDViBzb2NrZXQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgaXQgZGVmZXJzIHRoZSBgaXVjdl9zZW5kX2N0cmwoKWAgY2FsbCBpbiBgaXVjdl9zb2NrX3JlY3Ztc2coKWAgdW50aWwgYWZ0ZXIgdGhlIGBpdWN2LVxcdTAwM2VtZXNzYWdlX3EubG9ja2Agc3BpbmxvY2sgaXMgcmVsZWFzZWQsIHByZXZlbnRpbmcgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBsb2NrIGludmVyc2lvbnMuIEl0IGFsc28gZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgYWZpdWN2X2hzX3NlbmQoKWAgYnkgdXNpbmcgYGF0b21pY194Y2hnKClgIHRvIGNsYWltIHJlY2VpdmUgY3JlZGl0cyBhdG9taWNhbGx5IHJpZ2h0IGJlZm9yZSB0cmFuc21pc3Npb24sIGluc3RlYWQgb2YgcmVhZGluZyBhbmQgbGF0ZXIgc3VidHJhY3RpbmcgdGhlIHZhbHVlLiBcXG5cXG5BbGwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzIGludm9sdmVkIChzdWNoIGFzIGBwaHNfaGRyYCBhbmQgYGNvbmZpcm1fcmVjdmApIGFyZSBmdWxseSBpbml0aWFsaXplZCAoZS5nLiwgYG1lbXNldChwaHNfaGRyLCAwLCBzaXplb2YoKnBoc19oZHIpKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIEtDU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5L2xvY2tpbmcgaXNzdWUgaW4gdGhlIEFGX0lVQ1Ygc29ja2V0IGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHksIGl0IGRlZmVycyB0aGUgYGl1Y3Zfc2VuZF9jdHJsKClgIGNhbGwgaW4gYGl1Y3Zfc29ja19yZWN2bXNnKClgIHVudGlsIGFmdGVyIHRoZSBgaXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxvY2tgIHNwaW5sb2NrIGlzIHJlbGVhc2VkLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgbG9jayBpbnZlcnNpb25zLiBJdCBhbHNvIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGFmaXVjdl9oc19zZW5kKClgIGJ5IHVzaW5nIGBhdG9taWNfeGNoZygpYCB0byBjbGFpbSByZWNlaXZlIGNyZWRpdHMgYXRvbWljYWxseSByaWdodCBiZWZvcmUgdHJhbnNtaXNzaW9uLCBpbnN0ZWFkIG9mIHJlYWRpbmcgYW5kIGxhdGVyIHN1YnRyYWN0aW5nIHRoZSB2YWx1ZS4gXFxuXFxuQWxsIHN0cnVjdHVyZXMgYW5kIHZhcmlhYmxlcyBpbnZvbHZlZCAoc3VjaCBhcyBgcGhzX2hkcmAgYW5kIGBjb25maXJtX3JlY3ZgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgKGUuZy4sIGBtZW1zZXQocGhzX2hkciwgMCwgc2l6ZW9mKCpwaHNfaGRyKSlgKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja2luZywgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGRlYWRsb2NrcywgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBvciBLQ1NBTi4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowpgxrj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 13:17:26 +0000 UTC FinishedAt: 2026-08-21 13:21:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "series_id": "96782cac-8a33-4480-8f4e-871b36c189b6" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "iucv_sock_sendmsg", "iucv_sock_recvmsg" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGSVVDViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2l1Y3Zfc29ja19zZW5kbXNnJiMzNDssCiAgICAmIzM0O2l1Y3Zfc29ja19yZWN2bXNnJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kvbG9ja2luZyBpc3N1ZSBpbiB0aGUgQUZfSVVDViBzb2NrZXQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgaXQgZGVmZXJzIHRoZSBgaXVjdl9zZW5kX2N0cmwoKWAgY2FsbCBpbiBgaXVjdl9zb2NrX3JlY3Ztc2coKWAgdW50aWwgYWZ0ZXIgdGhlIGBpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrYCBzcGlubG9jayBpcyByZWxlYXNlZCwgcHJldmVudGluZyBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2sgaW52ZXJzaW9ucy4gSXQgYWxzbyBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBhZml1Y3ZfaHNfc2VuZCgpYCBieSB1c2luZyBgYXRvbWljX3hjaGcoKWAgdG8gY2xhaW0gcmVjZWl2ZSBjcmVkaXRzIGF0b21pY2FsbHkgcmlnaHQgYmVmb3JlIHRyYW5zbWlzc2lvbiwgaW5zdGVhZCBvZiByZWFkaW5nIGFuZCBsYXRlciBzdWJ0cmFjdGluZyB0aGUgdmFsdWUuIFxuXG5BbGwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzIGludm9sdmVkIChzdWNoIGFzIGBwaHNfaGRyYCBhbmQgYGNvbmZpcm1fcmVjdmApIGFyZSBmdWxseSBpbml0aWFsaXplZCAoZS5nLiwgYG1lbXNldChwaHNfaGRyLCAwLCBzaXplb2YoKnBoc19oZHIpKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIEtDU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBBRl9JVUNWIHNvY2tldCBzZW5kIGFuZCByZWNlaXZlIHBhdGhzIGJ5IHVzaW5nIGF0b21pY194Y2hnIGZvciB0aGUgbXNnX3JlY3YgdmFyaWFibGUgYW5kIG1vdmluZyBpdWN2X3NlbmRfY3RybCBvdXQgb2YgYSBzcGlubG9jayBibG9jay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgc29ja2V0IGxvZ2ljIGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIHRlc3RhYmxlIGluIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmZjdlYTcxNzU1NDViNGRkOGQ3NDAzNzk2MWMzOWNkNjlhZDA3NDk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTM6MTk6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jXG5pbmRleCBlYTA0N2JhYjY1ZTdjLi5hN2MwZjYwYmI1YmZjIDEwMDY0NFxuLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbkBAIC0yMTAsMTIgJiM0MzsyMTAsNiBAQCBzdGF0aWMgaW50IGFmaXVjdl9oc19zZW5kKHN0cnVjdCBpdWN2X21lc3NhZ2UgKmltc2csIHN0cnVjdCBzb2NrICpzb2NrLFxuIFx0cGhzX2hkci1cdTAwM2VmbGFncyA9IGZsYWdzO1xuIFx0aWYgKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pXG4gXHRcdHBoc19oZHItXHUwMDNld2luZG93ID0gaXVjdi1cdTAwM2Vtc2dsaW1pdDtcbi1cdGVsc2UgaWYgKChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfV0lOKSB8fCAhZmxhZ3MpIHtcbi1cdFx0Y29uZmlybV9yZWN2ID0gYXRvbWljX3JlYWQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdik7XG4tXHRcdHBoc19oZHItXHUwMDNld2luZG93ID0gY29uZmlybV9yZWN2O1xuLVx0XHRpZiAoY29uZmlybV9yZWN2KVxuLVx0XHRcdHBoc19oZHItXHUwMDNlZmxhZ3MgPSBwaHNfaGRyLVx1MDAzZWZsYWdzIHwgQUZfSVVDVl9GTEFHX1dJTjtcbi1cdH1cbiBcdG1lbWNweShwaHNfaGRyLVx1MDAzZWRlc3RVc2VySUQsIGl1Y3YtXHUwMDNlZHN0X3VzZXJfaWQsIDgpO1xuIFx0bWVtY3B5KHBoc19oZHItXHUwMDNlZGVzdEFwcE5hbWUsIGl1Y3YtXHUwMDNlZHN0X25hbWUsIDgpO1xuIFx0bWVtY3B5KHBoc19oZHItXHUwMDNlc3JjVXNlcklELCBpdWN2LVx1MDAzZXNyY191c2VyX2lkLCA4KTtcbkBAIC0yNTAsMTMgJiM0MzsyNDQsMjIgQEAgc3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jayxcbiBcdH1cbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0FGX0lVQ1YpO1xuIFxuJiM0MztcdC8qIENsYWltIHRoZSByZWNlaXZlIGNyZWRpdCBoZXJlLCBub3Qgd2hpbGUgYnVpbGRpbmcgdGhlIGhlYWRlcjogZXZlcnlcbiYjNDM7XHQgKiB3YXkgdGhpcyBmcmFtZSBjYW4gYmUgZHJvcHBlZCBoYXMgbm93IGJlZW4gcnVsZWQgb3V0LCBzbyB0aGUgd2luZG93XG4mIzQzO1x0ICogaXMgemVyb2VkIG9ubHkgZm9yIGFzIGxvbmcgYXMgdGhlIHRyYW5zbWl0IGl0c2VsZiB0YWtlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1dJTiB8fCAhZmxhZ3MpIHtcbiYjNDM7XHRcdGNvbmZpcm1fcmVjdiA9IGF0b21pY194Y2hnKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YsIDApO1xuJiM0MztcdFx0cGhzX2hkci1cdTAwM2V3aW5kb3cgPSBjb25maXJtX3JlY3Y7XG4mIzQzO1x0XHRpZiAoY29uZmlybV9yZWN2KVxuJiM0MztcdFx0XHRwaHNfaGRyLVx1MDAzZWZsYWdzID0gcGhzX2hkci1cdTAwM2VmbGFncyB8IEFGX0lVQ1ZfRkxBR19XSU47XG4mIzQzO1x0fVxuJiM0MztcbiBcdGF0b21pY19pbmMoXHUwMDI2aXVjdi1cdTAwM2Vza2JzX2luX3htaXQpO1xuIFx0ZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTtcbiBcdGlmIChuZXRfeG1pdF9ldmFsKGVycikpIHtcbiBcdFx0YXRvbWljX2RlYyhcdTAwMjZpdWN2LVx1MDAzZXNrYnNfaW5feG1pdCk7XG4tXHR9IGVsc2Uge1xuLVx0XHRhdG9taWNfc3ViKGNvbmZpcm1fcmVjdiwgXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdik7XG4tXHRcdFdBUk5fT04oYXRvbWljX3JlYWQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdikgXHUwMDNjIDApO1xuJiM0MztcdFx0YXRvbWljX2FkZChjb25maXJtX3JlY3YsIFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpO1xuIFx0fVxuIFx0cmV0dXJuIG5ldF94bWl0X2V2YWwoZXJyKTtcbiBcbkBAIC0xMjQxLDYgJiM0MzsxMjQ0LDcgQEAgc3RhdGljIGludCBpdWN2X3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4gXHRzdHJ1Y3QgaXVjdl9zb2NrICppdWN2ID0gaXVjdl9zayhzayk7XG4gXHR1bnNpZ25lZCBpbnQgY29waWVkLCBybGVuO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgKnJza2IsICpjc2tiO1xuJiM0MztcdGJvb2wgc2VuZF93aW4gPSBmYWxzZTtcbiBcdGludCBlcnIgPSAwO1xuIFx0dTMyIG9mZnNldDtcbiBcbkBAIC0xMzMxLDE2ICYjNDM7MTMzNSwyMCBAQCBzdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZpdWN2LVx1MDAzZWJhY2tsb2dfc2tiX3EpKSB7XG4gXHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxpc3QpKVxuIFx0XHRcdFx0aXVjdl9wcm9jZXNzX21lc3NhZ2VfcShzayk7XG4tXHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpIFx1MDAzZT1cbi1cdFx0XHRcdFx0XHRcdGl1Y3YtXHUwMDNlbXNnbGltaXQgLyAyKSB7XG4tXHRcdFx0XHRlcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1dJTik7XG4tXHRcdFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9ESVNDT05OO1xuLVx0XHRcdFx0XHRzay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2KSBcdTAwM2U9XG4mIzQzO1x0XHRcdFx0XHRcdFx0aXVjdi1cdTAwM2Vtc2dsaW1pdCAvIDIpXG4mIzQzO1x0XHRcdFx0c2VuZF93aW4gPSB0cnVlO1xuIFx0XHR9XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzZW5kX3dpbikge1xuJiM0MztcdFx0XHRlcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1dJTik7XG4mIzQzO1x0XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjtcbiYjNDM7XHRcdFx0XHRzay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gZG9uZTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZJVUNWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXVjdl9zb2NrX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgQUZfSVVDViBzb2NrZXQgc2VuZCBhbmQgcmVjZWl2ZSBwYXRocyBieSB1c2luZyBhdG9taWNfeGNoZyBmb3IgdGhlIG1zZ19yZWN2IHZhcmlhYmxlIGFuZCBtb3ZpbmcgaXVjdl9zZW5kX2N0cmwgb3V0IG9mIGEgc3BpbmxvY2sgYmxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIHNvY2tldCBsb2dpYyBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyB0ZXN0YWJsZSBpbiBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmY3ZWE3MTc1NTQ1YjRkZDhkNzQwMzc5NjFjMzljZDY5YWQwNzQ5NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDEzOjE5OjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jCmluZGV4IGVhMDQ3YmFiNjVlN2MuLmE3YzBmNjBiYjViZmMgMTAwNjQ0Ci0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXVjdi9hZl9pdWN2LmMKQEAgLTIxMCwxMiAmIzQzOzIxMCw2IEBAIHN0YXRpYyBpbnQgYWZpdWN2X2hzX3NlbmQoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqaW1zZywgc3RydWN0IHNvY2sgKnNvY2ssCiAJcGhzX2hkci0mZ3Q7ZmxhZ3MgPSBmbGFnczsKIAlpZiAoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1NZTikKIAkJcGhzX2hkci0mZ3Q7d2luZG93ID0gaXVjdi0mZ3Q7bXNnbGltaXQ7Ci0JZWxzZSBpZiAoKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19XSU4pIHx8ICFmbGFncykgewotCQljb25maXJtX3JlY3YgPSBhdG9taWNfcmVhZCgmYW1wO2l1Y3YtJmd0O21zZ19yZWN2KTsKLQkJcGhzX2hkci0mZ3Q7d2luZG93ID0gY29uZmlybV9yZWN2OwotCQlpZiAoY29uZmlybV9yZWN2KQotCQkJcGhzX2hkci0mZ3Q7ZmxhZ3MgPSBwaHNfaGRyLSZndDtmbGFncyB8IEFGX0lVQ1ZfRkxBR19XSU47Ci0JfQogCW1lbWNweShwaHNfaGRyLSZndDtkZXN0VXNlcklELCBpdWN2LSZndDtkc3RfdXNlcl9pZCwgOCk7CiAJbWVtY3B5KHBoc19oZHItJmd0O2Rlc3RBcHBOYW1lLCBpdWN2LSZndDtkc3RfbmFtZSwgOCk7CiAJbWVtY3B5KHBoc19oZHItJmd0O3NyY1VzZXJJRCwgaXVjdi0mZ3Q7c3JjX3VzZXJfaWQsIDgpOwpAQCAtMjUwLDEzICYjNDM7MjQ0LDIyIEBAIHN0YXRpYyBpbnQgYWZpdWN2X2hzX3NlbmQoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqaW1zZywgc3RydWN0IHNvY2sgKnNvY2ssCiAJfQogCXNrYi0mZ3Q7cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKTsKIAomIzQzOwkvKiBDbGFpbSB0aGUgcmVjZWl2ZSBjcmVkaXQgaGVyZSwgbm90IHdoaWxlIGJ1aWxkaW5nIHRoZSBoZWFkZXI6IGV2ZXJ5CiYjNDM7CSAqIHdheSB0aGlzIGZyYW1lIGNhbiBiZSBkcm9wcGVkIGhhcyBub3cgYmVlbiBydWxlZCBvdXQsIHNvIHRoZSB3aW5kb3cKJiM0MzsJICogaXMgemVyb2VkIG9ubHkgZm9yIGFzIGxvbmcgYXMgdGhlIHRyYW5zbWl0IGl0c2VsZiB0YWtlcy4KJiM0MzsJICovCiYjNDM7CWlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfV0lOIHx8ICFmbGFncykgewomIzQzOwkJY29uZmlybV9yZWN2ID0gYXRvbWljX3hjaGcoJmFtcDtpdWN2LSZndDttc2dfcmVjdiwgMCk7CiYjNDM7CQlwaHNfaGRyLSZndDt3aW5kb3cgPSBjb25maXJtX3JlY3Y7CiYjNDM7CQlpZiAoY29uZmlybV9yZWN2KQomIzQzOwkJCXBoc19oZHItJmd0O2ZsYWdzID0gcGhzX2hkci0mZ3Q7ZmxhZ3MgfCBBRl9JVUNWX0ZMQUdfV0lOOwomIzQzOwl9CiYjNDM7CiAJYXRvbWljX2luYygmYW1wO2l1Y3YtJmd0O3NrYnNfaW5feG1pdCk7CiAJZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTsKIAlpZiAobmV0X3htaXRfZXZhbChlcnIpKSB7CiAJCWF0b21pY19kZWMoJmFtcDtpdWN2LSZndDtza2JzX2luX3htaXQpOwotCX0gZWxzZSB7Ci0JCWF0b21pY19zdWIoY29uZmlybV9yZWN2LCAmYW1wO2l1Y3YtJmd0O21zZ19yZWN2KTsKLQkJV0FSTl9PTihhdG9taWNfcmVhZCgmYW1wO2l1Y3YtJmd0O21zZ19yZWN2KSAmbHQ7IDApOwomIzQzOwkJYXRvbWljX2FkZChjb25maXJtX3JlY3YsICZhbXA7aXVjdi0mZ3Q7bXNnX3JlY3YpOwogCX0KIAlyZXR1cm4gbmV0X3htaXRfZXZhbChlcnIpOwogCkBAIC0xMjQxLDYgJiM0MzsxMjQ0LDcgQEAgc3RhdGljIGludCBpdWN2X3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCiAJc3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spOwogCXVuc2lnbmVkIGludCBjb3BpZWQsIHJsZW47CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnJza2IsICpjc2tiOwomIzQzOwlib29sIHNlbmRfd2luID0gZmFsc2U7CiAJaW50IGVyciA9IDA7CiAJdTMyIG9mZnNldDsKIApAQCAtMTMzMSwxNiAmIzQzOzEzMzUsMjAgQEAgc3RhdGljIGludCBpdWN2X3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCiAJCWlmIChza2JfcXVldWVfZW1wdHkoJmFtcDtpdWN2LSZndDtiYWNrbG9nX3NrYl9xKSkgewogCQkJaWYgKCFsaXN0X2VtcHR5KCZhbXA7aXVjdi0mZ3Q7bWVzc2FnZV9xLmxpc3QpKQogCQkJCWl1Y3ZfcHJvY2Vzc19tZXNzYWdlX3Eoc2spOwotCQkJaWYgKGF0b21pY19yZWFkKCZhbXA7aXVjdi0mZ3Q7bXNnX3JlY3YpICZndDs9Ci0JCQkJCQkJaXVjdi0mZ3Q7bXNnbGltaXQgLyAyKSB7Ci0JCQkJZXJyID0gaXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19XSU4pOwotCQkJCWlmIChlcnIpIHsKLQkJCQkJc2stJmd0O3NrX3N0YXRlID0gSVVDVl9ESVNDT05OOwotCQkJCQlzay0mZ3Q7c2tfc3RhdGVfY2hhbmdlKHNrKTsKLQkJCQl9Ci0JCQl9CiYjNDM7CQkJaWYgKGl1Y3YtJmd0O3RyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgYXRvbWljX3JlYWQoJmFtcDtpdWN2LSZndDttc2dfcmVjdikgJmd0Oz0KJiM0MzsJCQkJCQkJaXVjdi0mZ3Q7bXNnbGltaXQgLyAyKQomIzQzOwkJCQlzZW5kX3dpbiA9IHRydWU7CiAJCX0KIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDtpdWN2LSZndDttZXNzYWdlX3EubG9jayk7CiYjNDM7CiYjNDM7CQlpZiAoc2VuZF93aW4pIHsKJiM0MzsJCQllcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1dJTik7CiYjNDM7CQkJaWYgKGVycikgewomIzQzOwkJCQlzay0mZ3Q7c2tfc3RhdGUgPSBJVUNWX0RJU0NPTk47CiYjNDM7CQkJCXNrLSZndDtza19zdGF0ZV9jaGFuZ2Uoc2spOwomIzQzOwkJCX0KJiM0MzsJCX0KIAl9CiAKIGRvbmU6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgTmV0L0lVQ1YgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSB0b3VjaGluZyBgbmV0L2l1Y3YvYWZfaXVjdi5jYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBtb2RpZnlpbmcgYGFmaXVjdl9oc19zZW5kYCBhbmQgYGl1Y3Zfc29ja19yZWN2bXNnYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIHNvY2tldCBmYW1pbHkgY2hhbmdlIOKAkyBBRl9JVUNWLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgQUZfSVVDVi4uLiBpcyB0aGF0IGV2ZW4gZ29pbmcgdG8gYmUgcmVsZXZhbnQgaW4gbXkgc3RhbmRhcmQgdGVzdCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRT8mIzM0OyBJIG5lZWQgdG8gdmVyaWZ5IGlmIHRoYXQgc29ja2V0IGZhbWlseSBpcyBldmVuIHJlYWNoYWJsZSBpbiB0aG9zZSBzZXR0aW5ncyBiZWZvcmUgSSBnbyBkb3duIGEgcmFiYml0IGhvbGUuIEFoLCB5ZXMsIEFGX0lVQ1YgaXMgZm9yIHMzOTAsIHRoYXQmIzM5O3MgcmlnaHQuIEJ1dCB0aGUgcXVlc3Rpb24gaXM6IGlzIGl0ICpzb2xlbHkqIGZvciBzMzkwPyBMZXQmIzM5O3MgdmVyaWZ5IHRoYXQuIE5lZWQgdG8gY2hlY2sgYG5ldC9pdWN2L0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGFyY2hpdGVjdHVyZSBkZXBlbmRlbmN5IGFuZCBhbnkgYXNzb2NpYXRlZCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBRl9JVUNWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5NQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudCBkb3duOgoKKipDaGVja2luZyBvbiB0aGUgRXhpc3RlbmNlIG9mIGEgS2NvbmZpZyBGaWxlKioKCk9rYXksIHNvIEkmIzM5O20gd29ya2luZyB3aXRoIHRoZSBuZXR3b3JrIElVQ1YgY29kZSwgYW5kIGEgbmFtZSBqdXN0IHBvcHBlZCBpbnRvIG15IGhlYWQ6IGBuZXQvaXVjdi9LY29uZmlnYC4gKkJ1dCB3YWl0IGEgc2Vjb25kLi4uKiBJcyBpdCBldmVuIHRoZXJlPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgZmlsZSBleGlzdHMsIHNvIEkgY2FuIGNvbnRpbnVlIHdpdGggd2hhdGV2ZXIgSSB3YXMgZG9pbmcuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBuZXQvaXVjdi9gIGRpcmVjdG9yeSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYEtjb25maWdgIGZpbGUgaXMgYWN0dWFsbHkgcHJlc2VudCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgYXMgaXQmIzM5O3MgY3JpdGljYWwgdG8gdGhlIGJ1aWxkIHByb2Nlc3MgaW4gdGhpcyBhcmVhLiBObyBzZW5zZSBpbiBjaGFzaW5nIGdob3N0cyEgSSYjMzk7bGwgcXVpY2tseSB2ZXJpZnkgdGhlIGZpbGUmIzM5O3MgcHJlc2VuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7bmV0L2l1Y3YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDthZl9pdWN2LmMmIzM0OywKICAgICYjMzQ7aXVjdi5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjM1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB5b3VyIHN1bW1hcnksIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipLY29uZmlnIExvY2F0aW9uIERpbGVtbWEqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHByb2plY3QsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCYjMzk7cyBuYWdnaW5nIGF0IG1lIGlzLCB3aGVyZSB0aGUgaGVjayBpcyB0aGUgS2NvbmZpZyBmaWxlPyBJdOKAmXMgZnVuZGFtZW50YWwgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBrZXJuZWwgKG9yIHdoYXRldmVyIHN5c3RlbSBJJiMzOTttIHdvcmtpbmcgd2l0aCkuIEl0JiMzOTtzIHRoZSBjZW50cmFsIHBvaW50LCB0aGUgUm9zZXR0YSBTdG9uZSBvZiBob3cgZXZlcnl0aGluZyBmaXRzIHRvZ2V0aGVyLiBJIG5lZWQgdG8gZ2V0IG15IGJlYXJpbmdzIHF1aWNrbHkuIFdpdGhvdXQgaXQsIEkmIzM5O20gZmx5aW5nIGJsaW5kLCBhbmQgdGhhdCYjMzk7cyBub3QgYWNjZXB0YWJsZS4gSXMgaXQgaW4gdGhlIHJvb3QgZGlyZWN0b3J5PyBBIHNwZWNpZmljIHN1YmRpcmVjdG9yeT8gRGlkIHRoZXkgdXNlIHRoZSBzdGFuZGFyZCBuYW1pbmcgY29udmVudGlvbnMsIG9yIGFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZSBjdXN0b20gc2V0dXAgaGVyZT8gVGhpcyBpcyBnb2luZyB0byBzZXQgdGhlIHRvbmUgZm9yIHRoZSBlbnRpcmUgY29uZmlndXJhdGlvbiBwcm9jZXNzLCBzbyBJIG5lZWQgdG8gZmluZCBpdCBBU0FQLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFGX0lVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQ5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBBRl9JVUNWYC4gR2l2ZW4gdGhhdCBJJiMzOTttIGRlYWxpbmcgd2l0aCBrZXJuZWwgaW50ZXJuYWxzLCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcy4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgcmlnaHQ/IEl0JiMzOTtzIHRoZSBzdGFuZGFyZCB3YXkgdG8gZmluZCBvdXQgaG93IHRoaXMgcGFydGljdWxhciBwcm90b2NvbCBpcyBlbmFibGVkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gU28sIGxldCYjMzk7cyBmaXJlIHVwIGEgc2VhcmNoIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gdHVybiB1cCB3aXRoIHRoYXQgZXhhY3Qgc3RyaW5nLCBgQUZfSVVDVmAuIEhvcGVmdWxseSwgdGhlIGNvbmZpZ3VyYXRpb24ga25vYnMgd2lsbCBiZSBjbGVhcmx5IGxhYmVsZWQgYW5kIHdlbGwtZG9jdW1lbnRlZC4gVGhpcyBzaG91bGQgYmUgYSBxdWljayBwYXRoIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydCBvZiB0aGUga2VybmVsIGlzIGNvbnRyb2xsZWQgYW5kIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIEkgbmVlZCB0byBrbm93IGFib3V0IGl0cyBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FGX0lVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWc9MTE9Y29uZmlnIEFGSVVDVlxuLS1cbm5ldC9pdWN2L0tjb25maWctMTMtXHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1Zcbm5ldC9pdWN2L0tjb25maWc6MTQ6XHRwcm9tcHQgXCYjMzQ7QUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXCYjMzQ7XG5uZXQvaXVjdi9LY29uZmlnLTE1LVx0aGVscFxubmV0L2l1Y3YvS2NvbmZpZzoxNjpcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBBRl9JVUNWIHNvY2tldCBhcHBsaWNhdGlvbnNcbm5ldC9pdWN2L0tjb25maWctMTctXHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDI9c3RhdGljIHN0cnVjdCBwcm90byBpdWN2X3Byb3RvID0ge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjQzOlx0Lm5hbWVcdFx0PSBcJiMzNDtBRl9JVUNWXCYjMzQ7LFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ0LVx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ5PXN0YXRpYyBzdHJ1Y3QgaXVjdl9oYW5kbGVyIGFmX2l1Y3ZfaGFuZGxlcjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy01MC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo1MTovKiBzcGVjaWFsIEFGX0lVQ1YgSVBSTSBtZXNzYWdlcyAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jLTUyLXN0YXRpYyBjb25zdCB1OCBpcHJtX3NodXRkb3duWzhdID1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTA3PXN0YXRpYyBpbmxpbmUgdm9pZCBsb3dfbm1jcHkodW5zaWduZWQgY2hhciAqZHN0LCBjaGFyICpzcmMpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTExOC0gKlxubmV0L2l1Y3YvYWZfaXVjdi5jOjExOTogKiBGb3IgSVVDVl9JUFJNREFUQSwgQUZfSVVDViB1c2VzIHRoZSBmb2xsb3dpbmcgY29udmVudGlvbiB0byB0cmFuc3BvcnQgc29ja2V0XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTIwLSAqIGRhdGE6XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2Nj1zdGF0aWMgaW5saW5lIGludCBpdWN2X2JlbG93X21zZ2xpbShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MS1cdFx0cmV0dXJuIDE7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTcyOlx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVilcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzMtXHRcdHJldHVybiAoYXRvbWljX3JlYWQoXHUwMDI2aXVjdi1cdTAwM2Vza2JzX2luX3htaXQpIFx1MDAzYyBpdWN2LVx1MDAzZXBhdGgtXHUwMDNlbXNnbGltKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTk3PXN0YXRpYyBpbnQgYWZpdWN2X2hzX3NlbmQoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqaW1zZywgc3RydWN0IHNvY2sgKnNvY2ssXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNy1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDg6XHRwaHNfaGRyLVx1MDAzZW1hZ2ljID0gRVRIX1BfQUZfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDktXHRwaHNfaGRyLVx1MDAzZXZlcnNpb24gPSAxO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMC1cdHBoc19oZHItXHUwMDNlZmxhZ3MgPSBmbGFncztcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTE6XHRpZiAoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1NZTilcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTItXHRcdHBoc19oZHItXHUwMDNld2luZG93ID0gaXVjdi1cdTAwM2Vtc2dsaW1pdDtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDpcdGRldl9oYXJkX2hlYWRlcihza2IsIHNrYi1cdTAwM2VkZXYsIEVUSF9QX0FGX0lVQ1YsIE5VTEwsIE5VTEwsIHNrYi1cdTAwM2VsZW4pO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMS1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjQ0LVx0fVxubmV0L2l1Y3YvYWZfaXVjdi5jOjI0NTpcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0FGX0lVQ1YpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTI0Ni1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjUwLVx0ICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjUxOlx0aWYgKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19XSU4gfHwgIWZsYWdzKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjUyLVx0XHRjb25maXJtX3JlY3YgPSBhdG9taWNfeGNoZyhcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2LCAwKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjU0LVx0XHRpZiAoY29uZmlybV9yZWN2KVxubmV0L2l1Y3YvYWZfaXVjdi5jOjI1NTpcdFx0XHRwaHNfaGRyLVx1MDAzZWZsYWdzID0gcGhzX2hkci1cdTAwM2VmbGFncyB8IEFGX0lVQ1ZfRkxBR19XSU47XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjU2LVx0fVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0zOTg9c3RhdGljIHZvaWQgaXVjdl9zb2NrX2Nsb3NlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDExLVx0Y2FzZSBJVUNWX0NPTk5FQ1RFRDpcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0MTI6XHRcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDEzOlx0XHRcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfRklOKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00MTQtXHRcdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0RJU0NPTk47XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ2OT1zdGF0aWMgc3RydWN0IHNvY2sgKml1Y3Zfc29ja19hbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8sIGdmcF90IHByaW8sIGludCBrZXJuKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTYtXHRpZiAocHJfaXVjdilcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTc6XHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5OC1cdGVsc2Vcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTk6XHRcdGl1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19ISVBFUjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy01MDAtXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTU4NT1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy01OTYtXHRpZiAoYWRkcl9sZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXVjdikgfHxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo1OTc6XHQgICAgYWRkci1cdTAwM2VzYV9mYW1pbHkgIT0gQUZfSVVDVilcbm5ldC9pdWN2L2FmX2l1Y3YuYy01OTgtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02MzYtXHRcdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0JPVU5EO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjYzNzpcdFx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNjM4LVx0XHRcdGlmICghaXVjdi1cdTAwM2Vtc2dsaW1pdClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjUwLVx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IElVQ1ZfQk9VTkQ7XG5uZXQvaXVjdi9hZl9pdWN2LmM6NjUxOlx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NTItXHRcdHNrLVx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjY4PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjc2LVx0bWVtY3B5KGl1Y3YtXHUwMDNlc3JjX3VzZXJfaWQsIGl1Y3ZfdXNlcmlkLCA4KTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2Nzc6XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzgtXHRzay1cdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTczNj1zdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03NDMtXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzQ0Olx0aWYgKGFsZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXVjdikgfHwgYWRkci1cdTAwM2VzYV9mYW1pbHkgIT0gQUZfSVVDVilcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NDUtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03NTAtXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9PUEVOIFx1MDAyNlx1MDAyNlxubmV0L2l1Y3YvYWZfaXVjdi5jOjc1MTpcdCAgICBpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc1Mi1cdFx0cmV0dXJuIC1FQkFERkQ7IC8qIGV4cGxpY2l0IGJpbmQgcmVxdWlyZWQgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzY4LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjc2OTpcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxubmV0L2l1Y3YvYWZfaXVjdi5jOjc3MDpcdFx0ZXJyID0gaXVjdl9zZW5kX2N0cmwoc29jay1cdTAwM2VzaywgQUZfSVVDVl9GTEFHX1NZTik7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNzcxLVx0ZWxzZVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODMtXG5uZXQvaXVjdi9hZl9pdWN2LmM6Nzg0Olx0aWYgKGVyciBcdTAwMjZcdTAwMjYgaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4NS1cdFx0aXVjdl9zZXZlcl9wYXRoKHNrLCAwKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9ODcyPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy04NzgtXG5uZXQvaXVjdi9hZl9pdWN2LmM6ODc5Olx0YWRkci1cdTAwM2VzYV9mYW1pbHkgPSBBRl9JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTg4MC1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTE5PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDAxLVx0ICogZm9yIFNPQ0tfU1RSRUFNIHdlIG1pZ2h0IHdhbnQgdG8gaW1wcm92ZSBpdCBpbiBmdXR1cmUgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDAyOlx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDAzLVx0XHRoZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIpICYjNDM7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNDYtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA0NzpcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA0OC1cdFx0YXRvbWljX2luYyhcdTAwMjZpdWN2LVx1MDAzZW1zZ19zZW50KTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTI0MD1zdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMxMi1cdFx0Y29uc3VtZV9za2Ioc2tiKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzEzOlx0XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMTQtXHRcdFx0YXRvbWljX2luYyhcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2KTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMzNy1cdFx0XHRcdGl1Y3ZfcHJvY2Vzc19tZXNzYWdlX3Eoc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjEzMzg6XHRcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIgXHUwMDI2XHUwMDI2XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMzOS1cdFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdikgXHUwMDNlPVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzQ1LVx0XHRpZiAoc2VuZF93aW4pIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzQ2Olx0XHRcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfV0lOKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzQ3LVx0XHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTQyNj1zdGF0aWMgaW50IGl1Y3Zfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDUxLVx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfQ09OTkVDVEVEKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ1MjpcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NTMtXHRcdFx0dHhtc2cuY2xhc3MgPSAwO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDcwLVx0XHR9IGVsc2Vcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDcxOlx0XHRcdGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfU0hUKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDcyLVx0fVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc1LVx0aWYgKGhvdyA9PSBSQ1ZfU0hVVERPV04gfHwgaG93ID09IFNIVVRET1dOX01BU0spIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDc2Olx0XHRpZiAoKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVikgXHUwMDI2XHUwMDI2XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3Ny1cdFx0ICAgIGl1Y3YtXHUwMDNlcGF0aCkge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjE1PXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzQtXHRpdWN2X3NvY2tfaW5pdChuc2ssIHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjc1Olx0bml1Y3YtXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzYtXHRuc2stXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xODcyPXN0YXRpYyBpbnQgYWZpdWN2X2hzX2NhbGxiYWNrX3N5bihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4ODItXHRcdGFmaXVjdl9zd2FwX3NyY19kZXN0KHNrYik7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTg4MzpcdFx0dHJhbnNfaGRyLVx1MDAzZWZsYWdzID0gQUZfSVVDVl9GTEFHX1NZTiB8IEFGX0lVQ1ZfRkxBR19GSU47XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg4NC1cdFx0ZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg5NC1cdFx0YWZpdWN2X3N3YXBfc3JjX2Rlc3Qoc2tiKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODk1Olx0XHR0cmFuc19oZHItXHUwMDNlZmxhZ3MgPSBBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0ZJTjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODk2LVx0XHRlcnIgPSBkZXZfcXVldWVfeG1pdChza2IpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTA0LVx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTkwNTpcdG5pdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkwNi1cdG5pdWN2LVx1MDAzZW1zZ2xpbWl0ID0gaXVjdi1cdTAwM2Vtc2dsaW1pdDtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkxOC1cdGFmaXVjdl9zd2FwX3NyY19kZXN0KHNrYik7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTkxOTpcdHRyYW5zX2hkci1cdTAwM2VmbGFncyA9IEFGX0lVQ1ZfRkxBR19TWU4gfCBBRl9JVUNWX0ZMQUdfQUNLO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MjAtXHR0cmFuc19oZHItXHUwMDNld2luZG93ID0gbml1Y3YtXHUwMDNlbXNnbGltaXQ7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIwNjY9c3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwODktXHRza19mb3JfZWFjaChzaywgXHUwMDI2aXVjdl9za19saXN0LmhlYWQpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDkwOlx0XHRpZiAodHJhbnNfaGRyLVx1MDAzZWZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDkxLVx0XHRcdGlmICgoIW1lbWNtcChcdTAwMjZpdWN2X3NrKHNrKS1cdTAwM2VzcmNfbmFtZSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzMC1cdHN3aXRjaCAodHJhbnNfaGRyLVx1MDAzZWZsYWdzKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjEzMTpcdGNhc2UgQUZfSVVDVl9GTEFHX1NZTjpcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTMyLVx0XHQvKiBjb25uZWN0IHJlcXVlc3QgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzNC1cdFx0YnJlYWs7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjEzNTpcdGNhc2UgKEFGX0lVQ1ZfRkxBR19TWU4gfCBBRl9JVUNWX0ZMQUdfQUNLKTpcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTM2LVx0XHQvKiBjb25uZWN0IHJlcXVlc3QgY29uZmlybWVkICovXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMzgtXHRcdGJyZWFrO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMzk6XHRjYXNlIChBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0ZJTik6XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0MC1cdFx0LyogY29ubmVjdCByZXF1ZXN0IHJlZnVzZWQgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0Mi1cdFx0YnJlYWs7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE0MzpcdGNhc2UgKEFGX0lVQ1ZfRkxBR19GSU4pOlxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNDQtXHRcdC8qIGNsb3NlIHJlcXVlc3QgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0Ni1cdFx0YnJlYWs7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE0NzpcdGNhc2UgKEFGX0lVQ1ZfRkxBR19XSU4pOlxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNDgtXHRcdGVyciA9IGFmaXVjdl9oc19jYWxsYmFja193aW4oc2ssIHNrYik7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNTMtXHRcdGZhbGx0aHJvdWdoO1x0LyogYW5kIHJlY2VpdmUgbm9uLXplcm8gbGVuZ3RoIGRhdGEgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTU0Olx0Y2FzZSAoQUZfSVVDVl9GTEFHX1NIVCk6XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE1NS1cdFx0Lyogc2h1dGRvd24gcmVxdWVzdCAqL1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjE0PXN0YXRpYyBpbnQgYWZpdWN2X25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMjgtXHRcdFx0XHRpZiAoZXZlbnQgPT0gTkVUREVWX0dPSU5HX0RPV04pXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIyOTpcdFx0XHRcdFx0aXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19GSU4pO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMzAtXHRcdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgaXVjdl9zb2NrX2ZhbWlseV9vcHMgPSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI5NzpcdC5mYW1pbHlcdD0gQUZfSVVDVixcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk4LVx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMzAyPXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXVjdl9wYWNrZXRfdHlwZSA9IHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzAzOlx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzA0LVx0LmZ1bmMgPSBhZml1Y3ZfaHNfcmN2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgQUZfSVVDViBTb2NrZXQgRmFtaWx5KioKClJpZ2h0LCBzbyAqQUZfSVVDViouLi4gdGhhdCYjMzk7cyBhIHNvY2tldCBmYW1pbHksIG9mIGNvdXJzZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZXRhaWxzLiBMZXQgbWUgcGlucG9pbnQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIEtjb25maWcgZmlsZSBzaG91bGQgYmUgaW4gYG5ldC9pdWN2L0tjb25maWdgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBMZXQmIzM5O3MgZGl2ZSBpbiBhbmQgdGFrZSBhIGxvb2sgYXQgYG5ldC9pdWN2L0tjb25maWdgIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGF2YWlsYWJsZSBhbmQgaG93IGl0JiMzOTtzIGRlZmluZWQuIEkmIzM5O2xsIGJydXNoIHVwIG9uIGl0cyBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIElVQ1ZcbiAgIDM6XHRcdGRlcGVuZHMgb24gUzM5MFxuICAgNDpcdFx0ZGVmX3RyaXN0YXRlIHkgaWYgUzM5MFxuICAgNTpcdFx0cHJvbXB0IFwmIzM0O0lVQ1Ygc3VwcG9ydCAoUzM5MCAtIHovVk0gb25seSlcJiMzNDtcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBpbnRlci11c2VyIGNvbW11bmljYXRpb25cbiAgIDg6XHRcdCAgdW5kZXIgVk0gb3IgVklGLiBJZiB5b3UgcnVuIG9uIHovVk0sIHNheSBcJiMzNDtZXCYjMzQ7IHRvIGVuYWJsZSBhIGZhc3RcbiAgIDk6XHRcdCAgY29tbXVuaWNhdGlvbiBsaW5rIGJldHdlZW4gVk0gZ3Vlc3RzLlxuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBBRklVQ1ZcbiAgMTI6XHRcdGRlcGVuZHMgb24gUzM5MFxuICAxMzpcdFx0ZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWXG4gIDE0Olx0XHRwcm9tcHQgXCYjMzQ7QUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXCYjMzQ7XG4gIDE1Olx0XHRoZWxwXG4gIDE2Olx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgQUZfSVVDViBzb2NrZXQgYXBwbGljYXRpb25zXG4gIDE3Olx0XHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cbiAgMTg6XHRcdCAgSGlwZXJTb2NrZXRzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTkwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTMzkwIENvZGUgRGVwZW5kZW5jeSoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHRoaXMgY29kZSBpcyBjbGVhcmx5IGNvbnRpbmdlbnQgb24gdGhlIFMzOTAgYXJjaGl0ZWN0dXJlLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGNvbnRleHQuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMgYWJvdXQgcmVhY2hhYmlsaXR5OiBJcyB0aGlzIHJlbGV2YW50IGNvZGUsIHNwZWNpZmljYWxseSB0aGUgQUZfSVVDViBzb2NrZXQgc3VwcG9ydCwgZ29pbmcgdG8gYmUgZXhlcmNpc2VkIGluIGEgdGVzdGluZyBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFPyBUaGFua2Z1bGx5LCBzeXprYWxsZXIgdGVzdHMgdGhlIFMzOTAgYXJjaGl0ZWN0dXJlIHdpdGhpbiBRRU1VLiBBaGEsIHdhaXQgYSBzZWNvbmQsIEkgbmVlZCB0byBiZSBwcmVjaXNlIGhlcmU7IHN5emthbGxlciYjMzk7cyB0ZXN0aW5nIG9mIHMzOTB4IGNvbWVzIGltbWVkaWF0ZWx5IHRvIG1pbmQuCgpUaGUgcHJvbXB0IGV4cGxpY2l0bHkgbWVudGlvbnMgJiMzNDtBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCkuJiMzNDsgU28sIGlzIHRoYXQgbGV2ZWwgb2Ygc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBhY2Nlc3NpYmxlIHdpdGhpbiBRRU1VPyBZZXMsIHRoYXQmIzM5O3MgYW5vdGhlciBjcml0aWNhbCBwb2ludC4gU3l6a2FsbGVyIHN1cHBvcnRzIHMzOTB4IGluc3RhbmNlcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbi4gQWxyaWdodCwgdG8gY29uZmlybSB0aGlzIGxldCBtZSBub3cgdmVyaWZ5IGlmIHRoZXJlIGFyZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIHNwZWNpZmljYWxseSBmb3IgQUZfSVVDVi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QUZfSVVDViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnPTExPWNvbmZpZyBBRklVQ1Zcbi0tXG5uZXQvaXVjdi9LY29uZmlnLTEzLVx0ZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWXG5uZXQvaXVjdi9LY29uZmlnOjE0Olx0cHJvbXB0IFwmIzM0O0FGX0lVQ1YgU29ja2V0IHN1cHBvcnQgKFMzOTAgLSB6L1ZNIGFuZCBIaXBlclNvY2tldHMgdHJhbnNwb3J0KVwmIzM0O1xubmV0L2l1Y3YvS2NvbmZpZy0xNS1cdGhlbHBcbm5ldC9pdWN2L0tjb25maWc6MTY6XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgQUZfSVVDViBzb2NrZXQgYXBwbGljYXRpb25zXG5uZXQvaXVjdi9LY29uZmlnLTE3LVx0ICBiYXNlZCBvbiB6L1ZNIGludGVyLXVzZXIgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIG9yIGJhc2VkIG9uXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTQyPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gaXVjdl9wcm90byA9IHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0MzpcdC5uYW1lXHRcdD0gXCYjMzQ7QUZfSVVDVlwmIzM0Oyxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00NC1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz00OT1zdGF0aWMgc3RydWN0IGl1Y3ZfaGFuZGxlciBhZl9pdWN2X2hhbmRsZXI7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNTAtXG5uZXQvaXVjdi9hZl9pdWN2LmM6NTE6Lyogc3BlY2lhbCBBRl9JVUNWIElQUk0gbWVzc2FnZXMgKi9cbm5ldC9pdWN2L2FmX2l1Y3YuYy01Mi1zdGF0aWMgY29uc3QgdTggaXBybV9zaHV0ZG93bls4XSA9XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTEwNz1zdGF0aWMgaW5saW5lIHZvaWQgbG93X25tY3B5KHVuc2lnbmVkIGNoYXIgKmRzdCwgY2hhciAqc3JjKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTgtICpcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTk6ICogRm9yIElVQ1ZfSVBSTURBVEEsIEFGX0lVQ1YgdXNlcyB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb24gdG8gdHJhbnNwb3J0IHNvY2tldFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEyMC0gKiBkYXRhOlxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjY9c3RhdGljIGlubGluZSBpbnQgaXVjdl9iZWxvd19tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzEtXHRcdHJldHVybiAxO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE3MjpcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTczLVx0XHRyZXR1cm4gKGF0b21pY19yZWFkKFx1MDAyNml1Y3YtXHUwMDNlc2tic19pbl94bWl0KSBcdTAwM2MgaXVjdi1cdTAwM2VwYXRoLVx1MDAzZW1zZ2xpbSk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE5Nz1zdGF0aWMgaW50IGFmaXVjdl9oc19zZW5kKHN0cnVjdCBpdWN2X21lc3NhZ2UgKmltc2csIHN0cnVjdCBzb2NrICpzb2NrLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDctXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA4Olx0cGhzX2hkci1cdTAwM2VtYWdpYyA9IEVUSF9QX0FGX0lVQ1Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA5LVx0cGhzX2hkci1cdTAwM2V2ZXJzaW9uID0gMTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTAtXHRwaHNfaGRyLVx1MDAzZWZsYWdzID0gZmxhZ3M7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjExOlx0aWYgKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEyLVx0XHRwaHNfaGRyLVx1MDAzZXdpbmRvdyA9IGl1Y3YtXHUwMDNlbXNnbGltaXQ7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzA6XHRkZXZfaGFyZF9oZWFkZXIoc2tiLCBza2ItXHUwMDNlZGV2LCBFVEhfUF9BRl9JVUNWLCBOVUxMLCBOVUxMLCBza2ItXHUwMDNlbGVuKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzEtXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTI0NC1cdH1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyNDU6XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yNDYtXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTI1MC1cdCAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjI1MTpcdGlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfV0lOIHx8ICFmbGFncykge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTI1Mi1cdFx0Y29uZmlybV9yZWN2ID0gYXRvbWljX3hjaGcoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdiwgMCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTI1NC1cdFx0aWYgKGNvbmZpcm1fcmVjdilcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyNTU6XHRcdFx0cGhzX2hkci1cdTAwM2VmbGFncyA9IHBoc19oZHItXHUwMDNlZmxhZ3MgfCBBRl9JVUNWX0ZMQUdfV0lOO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTI1Ni1cdH1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9Mzk4PXN0YXRpYyB2b2lkIGl1Y3Zfc29ja19jbG9zZShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTQxMS1cdGNhc2UgSVVDVl9DT05ORUNURUQ6XG5uZXQvaXVjdi9hZl9pdWN2LmM6NDEyOlx0XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjQxMzpcdFx0XHRlcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX0ZJTik7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNDE0LVx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9ESVNDT05OO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz00Njk9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2Vybilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDk2LVx0aWYgKHByX2l1Y3YpXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDk3Olx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTgtXHRlbHNlXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDk5Olx0XHRpdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNTAwLVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz01ODU9c3RhdGljIGludCBpdWN2X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTk2LVx0aWYgKGFkZHJfbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2l1Y3YpIHx8XG5uZXQvaXVjdi9hZl9pdWN2LmM6NTk3Olx0ICAgIGFkZHItXHUwMDNlc2FfZmFtaWx5ICE9IEFGX0lVQ1YpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTk4LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjM2LVx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9CT1VORDtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2Mzc6XHRcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTYzOC1cdFx0XHRpZiAoIWl1Y3YtXHUwMDNlbXNnbGltaXQpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY1MC1cdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0JPVU5EO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjY1MTpcdFx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNjUyLVx0XHRzay1cdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTY2OD1zdGF0aWMgaW50IGl1Y3Zfc29ja19hdXRvYmluZChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTY3Ni1cdG1lbWNweShpdWN2LVx1MDAzZXNyY191c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6Njc3Olx0aXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNjc4LVx0c2stXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz03MzY9c3RhdGljIGludCBpdWN2X3NvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzQzLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjc0NDpcdGlmIChhbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2l1Y3YpIHx8IGFkZHItXHUwMDNlc2FfZmFtaWx5ICE9IEFGX0lVQ1YpXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzQ1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzUwLVx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IElVQ1ZfT1BFTiBcdTAwMjZcdTAwMjZcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NTE6XHQgICAgaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUilcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NTItXHRcdHJldHVybiAtRUJBREZEOyAvKiBleHBsaWNpdCBiaW5kIHJlcXVpcmVkICovXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTc2OC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo3Njk6XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUilcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NzA6XHRcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNvY2stXHUwMDNlc2ssIEFGX0lVQ1ZfRkxBR19TWU4pO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTc3MS1cdGVsc2Vcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzgzLVxubmV0L2l1Y3YvYWZfaXVjdi5jOjc4NDpcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVilcbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODUtXHRcdGl1Y3Zfc2V2ZXJfcGF0aChzaywgMCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTg3Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcixcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtODc4LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjg3OTpcdGFkZHItXHUwMDNlc2FfZmFtaWx5ID0gQUZfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy04ODAtXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTkxOT1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTAwMS1cdCAqIGZvciBTT0NLX1NUUkVBTSB3ZSBtaWdodCB3YW50IHRvIGltcHJvdmUgaXQgaW4gZnV0dXJlICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTAwMjpcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTAwMy1cdFx0aGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSAmIzQzO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDQ2LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNDc6XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTEwNDgtXHRcdGF0b21pY19pbmMoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfc2VudCk7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTEyNDA9c3RhdGljIGludCBpdWN2X3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMTItXHRcdGNvbnN1bWVfc2tiKHNrYik7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTMxMzpcdFx0aWYgKGl1Y3YtXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzE0LVx0XHRcdGF0b21pY19pbmMoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdik7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMzctXHRcdFx0XHRpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzM4Olx0XHRcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSIFx1MDAyNlx1MDAyNlxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMzktXHRcdFx0ICAgIGF0b21pY19yZWFkKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpIFx1MDAzZT1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTM0NS1cdFx0aWYgKHNlbmRfd2luKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTM0NjpcdFx0XHRlcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1dJTik7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTM0Ny1cdFx0XHRpZiAoZXJyKSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE0MjY9c3RhdGljIGludCBpdWN2X3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1MS1cdCAgICBzay1cdTAwM2Vza19zdGF0ZSA9PSBJVUNWX0NPTk5FQ1RFRCkge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NTI6XHRcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDUzLVx0XHRcdHR4bXNnLmNsYXNzID0gMDtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3MC1cdFx0fSBlbHNlXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3MTpcdFx0XHRpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1NIVCk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3Mi1cdH1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3NS1cdGlmIChob3cgPT0gUkNWX1NIVVRET1dOIHx8IGhvdyA9PSBTSFVURE9XTl9NQVNLKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3NjpcdFx0aWYgKChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIFx1MDAyNlx1MDAyNlxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzctXHRcdCAgICBpdWN2LVx1MDAzZXBhdGgpIHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYxNT1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc0LVx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY3NTpcdG5pdWN2LVx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc2LVx0bnNrLVx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTg3Mj1zdGF0aWMgaW50IGFmaXVjdl9oc19jYWxsYmFja19zeW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODgyLVx0XHRhZml1Y3Zfc3dhcF9zcmNfZGVzdChza2IpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE4ODM6XHRcdHRyYW5zX2hkci1cdTAwM2VmbGFncyA9IEFGX0lVQ1ZfRkxBR19TWU4gfCBBRl9JVUNWX0ZMQUdfRklOO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE4ODQtXHRcdGVyciA9IGRldl9xdWV1ZV94bWl0KHNrYik7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4OTQtXHRcdGFmaXVjdl9zd2FwX3NyY19kZXN0KHNrYik7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTg5NTpcdFx0dHJhbnNfaGRyLVx1MDAzZWZsYWdzID0gQUZfSVVDVl9GTEFHX1NZTiB8IEFGX0lVQ1ZfRkxBR19GSU47XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg5Ni1cdFx0ZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkwNC1cdGl1Y3Zfc29ja19pbml0KG5zaywgc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE5MDU6XHRuaXVjdi1cdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MDYtXHRuaXVjdi1cdTAwM2Vtc2dsaW1pdCA9IGl1Y3YtXHUwMDNlbXNnbGltaXQ7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MTgtXHRhZml1Y3Zfc3dhcF9zcmNfZGVzdChza2IpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjE5MTk6XHR0cmFuc19oZHItXHUwMDNlZmxhZ3MgPSBBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0FDSztcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTIwLVx0dHJhbnNfaGRyLVx1MDAzZXdpbmRvdyA9IG5pdWN2LVx1MDAzZW1zZ2xpbWl0O1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMDY2PXN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDg5LVx0c2tfZm9yX2VhY2goc2ssIFx1MDAyNml1Y3Zfc2tfbGlzdC5oZWFkKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA5MDpcdFx0aWYgKHRyYW5zX2hkci1cdTAwM2VmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKSB7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA5MS1cdFx0XHRpZiAoKCFtZW1jbXAoXHUwMDI2aXVjdl9zayhzayktXHUwMDNlc3JjX25hbWUsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMzAtXHRzd2l0Y2ggKHRyYW5zX2hkci1cdTAwM2VmbGFncykge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMzE6XHRjYXNlIEFGX0lVQ1ZfRkxBR19TWU46XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzMi1cdFx0LyogY29ubmVjdCByZXF1ZXN0ICovXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMzQtXHRcdGJyZWFrO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMzU6XHRjYXNlIChBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0FDSyk6XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzNi1cdFx0LyogY29ubmVjdCByZXF1ZXN0IGNvbmZpcm1lZCAqL1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTM4LVx0XHRicmVhaztcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTM5Olx0Y2FzZSAoQUZfSVVDVl9GTEFHX1NZTiB8IEFGX0lVQ1ZfRkxBR19GSU4pOlxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNDAtXHRcdC8qIGNvbm5lY3QgcmVxdWVzdCByZWZ1c2VkICovXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNDItXHRcdGJyZWFrO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxNDM6XHRjYXNlIChBRl9JVUNWX0ZMQUdfRklOKTpcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQ0LVx0XHQvKiBjbG9zZSByZXF1ZXN0ICovXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNDYtXHRcdGJyZWFrO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxNDc6XHRjYXNlIChBRl9JVUNWX0ZMQUdfV0lOKTpcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQ4LVx0XHRlcnIgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfd2luKHNrLCBza2IpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTUzLVx0XHRmYWxsdGhyb3VnaDtcdC8qIGFuZCByZWNlaXZlIG5vbi16ZXJvIGxlbmd0aCBkYXRhICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE1NDpcdGNhc2UgKEFGX0lVQ1ZfRkxBR19TSFQpOlxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNTUtXHRcdC8qIHNodXRkb3duIHJlcXVlc3QgKi9cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjIxND1zdGF0aWMgaW50IGFmaXVjdl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjI4LVx0XHRcdFx0aWYgKGV2ZW50ID09IE5FVERFVl9HT0lOR19ET1dOKVxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMjk6XHRcdFx0XHRcdGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfRklOKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjMwLVx0XHRcdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0RJU0NPTk47XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyOTY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IGl1Y3Zfc29ja19mYW1pbHlfb3BzID0ge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIyOTc6XHQuZmFtaWx5XHQ9IEFGX0lVQ1YsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5OC1cdC5vd25lclx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjMwMj1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGl1Y3ZfcGFja2V0X3R5cGUgPSB7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjMwMzpcdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfQUZfSVVDViksXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwNC1cdC5mdW5jID0gYWZpdWN2X2hzX3JjdixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3ODAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU29ja2V0IFJhY2UgQ29uZGl0aW9uIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhZml1Y3ZfaHNfc2VuZGAgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2Ag4oCTIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgYGNvbmZpcm1fcmVjdmAgdmFsdWUgaXMgcmVhZCwgYW5kIHRoZW4gYW4gYGF0b21pY19zdWJgIGlzIHBlcmZvcm1lZC4gVGhpcyBjYW4gbGVhZCB0byBgbXNnX3JlY3ZgIGdvaW5nIG5lZ2F0aXZlLCB3aGljaCBpcyBkZWZpbml0ZWx5IGEgYmFkIHRoaW5nIGluIHRoZSBzZW5kL3JlY2VpdmUgcGF0aC4gVGhlIGZpeCBjbGV2ZXJseSB1c2VzIGBhdG9taWNfeGNoZ2AgdG8gYXRvbWljYWxseSByZWFkIGFuZCBjbGVhciBgbXNnX3JlY3ZgLiBUaGF0JiMzOTtzIGEgY2xlYW4gd2F5IHRvIGVuc3VyZSBkYXRhIGludGVncml0eSwgd2hpY2ggSSBhcHByZWNpYXRlLgoKVGhlIHBhdGNoIGFsc28gbW92ZXMgYGl1Y3Zfc2VuZF9jdHJsYCBvdXQgb2YgdGhlIHNwaW5sb2NrIGluIGBpdWN2X3NvY2tfcmVjdm1zZ2AuIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5LCByaWdodD8gSSB3b25kZXIgaWYgdGhpcyBjaGFuZ2Ugd2FycmFudHMgc29tZSBmdXp6aW5nLiBHaXZlbiB0aGF0IGl0IGRpcmVjdGx5IGFkZHJlc3NlcyBhIGJ1ZyBpbiB0aGUgc29ja2V0IHNlbmQvcmVjZWl2ZSBwYXRoLCBhYnNvbHV0ZWx5LiBJdCYjMzk7cyBhbHdheXMgd29ydGh3aGlsZSB0byB0aG9yb3VnaGx5IHRlc3QgY3JpdGljYWwgaW5mcmFzdHJ1Y3R1cmUgbGlrZSB0aGlzLgoKV2FpdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWcuIFRoZSBjb25maWcgZm9yIHRoaXMgaXMgYEFGSVVDVmAsIG5vdCBgQUZfSVVDVmAg4oCTIGdvdCBpdC4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBuZXQvaXVjdi9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIFllcCwgaXQmIzM5O3MgYGNvbmZpZyBBRklVQ1ZgLgoKTGV0JiMzOTtzIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHByaW1hcnkgZm9jdXM6IGBhZml1Y3ZfaHNfc2VuZGAgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2AuIFRob3NlIGFyZSB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBpbiBtaW5kLgoKTm93LCBsZXQgbWUganVzdCBjb25maXJtIGBhZml1Y3ZfaHNfc2VuZGAgaXNuJiMzOTt0IGlubGluZSBvciBzdGF0aWMuIEFoLCBpdCYjMzk7cyBzdGF0aWMhIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJcyBpdCBhbiBBUEkgZW50cnlwb2ludCB0aGVuPyBJIHNob3VsZCBzZWUgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FmaXVjdl9oc19zZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz0xODI9c3RhdGljIHZvaWQgaXVjdl9zb2NrX3dha2VfbXNnbGltKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTk0LS8qXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTk1OiAqIGFmaXVjdl9oc19zZW5kKCkgLSBzZW5kIGEgbWVzc2FnZSB0aHJvdWdoIEhpcGVyU29ja2V0cyB0cmFuc3BvcnRcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTYtICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTk3OnN0YXRpYyBpbnQgYWZpdWN2X2hzX3NlbmQoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqaW1zZywgc3RydWN0IHNvY2sgKnNvY2ssXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTk4LVx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBmbGFncylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MzcyPXN0YXRpYyBpbnQgaXVjdl9zZW5kX2N0cmwoc3RydWN0IHNvY2sgKnNrLCB1OCBmbGFncylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzg5LVx0XHRza2JfcmVzZXJ2ZShza2IsIGJsZW4pO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjM5MDpcdFx0ZXJyID0gYWZpdWN2X2hzX3NlbmQoTlVMTCwgc2ssIHNrYiwgZmxhZ3MpO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTM5MS1cdH1cbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTE5PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDQ4LVx0XHRhdG9taWNfaW5jKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3NlbnQpO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjEwNDk6XHRcdGVyciA9IGFmaXVjdl9oc19zZW5kKFx1MDAyNnR4bXNnLCBzaywgc2tiLCAwKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDUwLVx0XHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDExCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIFNvY2tldCBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBiZXN0IGZvY3VzIHN5bWJvbHMuIEkgc2VlIHRoYXQgYGFmaXVjdl9oc19zZW5kYCBpcyBjYWxsZWQgZnJvbSBgaXVjdl9zZW5kX2N0cmxgIGFuZCBgaXVjdl9zb2NrX3NlbmRtc2dgLiBIbW0sIGludGVyZXN0aW5nLiBBbmQsIGBpdWN2X3NvY2tfc2VuZG1zZ2AgaXMgY2xlYXJseSB0aGUgc2VuZG1zZyBjYWxsYmFjayBmb3IgdGhlIHNvY2tldCwgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2AgaXMgdGhlIHJlY3Ztc2cgY2FsbGJhY2suIEJvdGggb2YgdGhvc2Ugc29ja2V0IGZ1bmN0aW9ucyBsb29rIGxpa2UgZ29vZCBjYW5kaWRhdGVzIHRvIGNvbmNlbnRyYXRlIG9uIOKAkyB0aGV5IHJlcHJlc2VudCBrZXkgZW50cnkgcG9pbnRzIGZvciBkYXRhIHRyYW5zZmVyLiBXYWl0IGEgc2Vjb25kLCB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmllZCB0byBwcmVmZXIgbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQgZW50cnlwb2ludCBmdW5jdGlvbnMuIE9oLCByaWdodCEgYGFmaXVjdl9oc19zZW5kYCBpcyBzdGF0aWMuIFNpbmNlIGl0JiMzOTtzIHN0YXRpYywgaXQgaXMgcHJvYmFibHkgaW5saW5lZCBhbmQgZG9lc24mIzM5O3Qgb2ZmZXIgYSBkaXN0aW5jdCBzeW1ib2wuIFNvLCB0aGF0IGxlYXZlcyBgaXVjdl9zb2NrX3NlbmRtc2dgIGFuZCBgaXVjdl9zb2NrX3JlY3Ztc2dgIGFzIHRoZSBiZXR0ZXIgY2hvaWNlcy4gTm93IEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRob3NlIHR3byBzb2NrZXQgZnVuY3Rpb25zIGFyZSBzdGF0aWMgYXMgd2VsbCwgdG8gbWFrZSBzdXJlIEkgYW0gb24gdGhlIHJpZ2h0IHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l1Y3Zfc29ja19zZW5kbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz05MDg9c3RhdGljIGludCBpdWN2X3NlbmRfaXBybShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCBzdHJ1Y3QgaXVjdl9tZXNzYWdlICptc2csXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTkxOC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo5MTk6c3RhdGljIGludCBpdWN2X3NvY2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTIwLVx0XHRcdCAgICAgc2l6ZV90IGxlbilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI0Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpdWN2X3NvY2tfb3BzID0ge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjU1LVx0LmdldG5hbWVcdD0gaXVjdl9zb2NrX2dldG5hbWUsXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI1NjpcdC5zZW5kbXNnXHQ9IGl1Y3Zfc29ja19zZW5kbXNnLFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNTctXHQucmVjdm1zZ1x0PSBpdWN2X3NvY2tfcmVjdm1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3NzUKCQkJCQkJCW91dHB1dDogMTMxCgkJCQkJCQl0aG91Z2h0czogNDA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFGSVVDViBDb2RlIFBhdGgqKgoKT2theSwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucywgd2hpbGUgc3RhdGljLCBhcmUgYWN0aW5nIGFzIEFQSSBlbnRyeXBvaW50cyBiZWNhdXNlIHRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIGBwcm90b19vcHNgLiBUaGF0IG1ha2VzIGBpdWN2X3NvY2tfc2VuZG1zZ2AgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2AgaWRlYWwgY2FuZGlkYXRlcyBmb3IgZnV6emluZy4gV2FpdCwgYWN0dWFsbHksIGBhZml1Y3ZfaHNfc2VuZGAgY291bGQgYWxzbyBiZSBjb25zaWRlcmVkIGlmIGl0JiMzOTtzIGxhcmdlLCBidXQgYGl1Y3Zfc29ja19zZW5kbXNnYCBpcyBsaWtlbHkgdGhlIGJldHRlciBjaG9pY2UuIEl04oCZcyBpbXBvcnRhbnQgdG8gc3RpY2sgdG8gQVBJIGVudHJ5cG9pbnRzLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBBRklVQ1ZgIGRlcGVuZHMgb24gYFMzOTBgLCBhbmQgaXRzIHRyaXN0YXRlIGRlZmluaXRpb24gaGluZ2VzIG9uIGVpdGhlciBgUUVUSF9MM2Agb3IgYElVQ1ZgLiBTbywgYEFGSVVDVmAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBEb3VibGUtY2hlY2tpbmcgdGhhdCBpbiBgbmV0L2l1Y3YvS2NvbmZpZ2AgY29uZmlybXMgdGhpcy4gVGhlcmVmb3JlLCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlIHNldCB0byBgWyYjMzQ7QUZJVUNWJiMzNDtdYC4KCkhhbmcgb24sIHRoZSBpbnN0cnVjdGlvbnMgYXJlIHBvaW50aW5nIG91dCB0aGF0IHdlIHNob3VsZCBleGNsdWRlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBCdXQgdGhlIGBTMzkwYCBjb2RlIGlzIHJlYWNoYWJsZSBpbiBRRU1VIGJlY2F1c2UgaXQgc3VwcG9ydHMgYHFlbXUtc3lzdGVtLXMzOTB4YCwgYW5kIHN5emthbGxlciBoYXMgYW4gYHMzOTB4YCB0YXJnZXQuIFNvLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGZhaXIgZ2FtZSBmb3IgZnV6emluZy4KCk9rYXksIGxldCYjMzk7cyBxdWlja2x5IHJldmlldyB0aGUgY29kZSBjaGFuZ2VzLiBCb3RoIGBhZml1Y3ZfaHNfc2VuZGAgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2AgYXJlIG1vZGlmaWVkLCBhbmQgdGhlIGNoYW5nZXMgYWRkcmVzcyBhIHJhY2UgY29uZGl0aW9uIHJlbGF0ZWQgdG8gdGhlIGBtc2dfcmVjdmAgYXRvbWljIHZhcmlhYmxlLiBUaGF0IGFsb25lIG1ha2VzIHRoaXMgYSB2ZXJ5IGludGVyZXN0aW5nIHRhcmdldCBmb3IgZnV6emluZy4gWWVzLCB0aGUgY2hhbmdlcyBsb29rIGxpa2UgdGhleSBmaXggYSByYWNlLgoKV2UmIzM5O3JlIGdvb2QgdG8gZ28uIFRpbWUgdG8gc2V0IHVwIHRoZSBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZJVUNWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXVjdl9zb2NrX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX3JlY3Ztc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgQUZfSVVDViBzb2NrZXQgc2VuZCBhbmQgcmVjZWl2ZSBwYXRocyBieSB1c2luZyBhdG9taWNfeGNoZyBmb3IgdGhlIG1zZ19yZWN2IHZhcmlhYmxlIGFuZCBtb3ZpbmcgaXVjdl9zZW5kX2N0cmwgb3V0IG9mIGEgc3BpbmxvY2sgYmxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIHNvY2tldCBsb2dpYyBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyB0ZXN0YWJsZSBpbiBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRklVQ1YmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpdWN2X3NvY2tfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtpdWN2X3NvY2tfcmVjdm1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBBRl9JVUNWIHNvY2tldCBzZW5kIGFuZCByZWNlaXZlIHBhdGhzIGJ5IHVzaW5nIGF0b21pY194Y2hnIGZvciB0aGUgbXNnX3JlY3YgdmFyaWFibGUgYW5kIG1vdmluZyBpdWN2X3NlbmRfY3RybCBvdXQgb2YgYSBzcGlubG9jayBibG9jay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgc29ja2V0IGxvZ2ljIGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIHRlc3RhYmxlIGluIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kvbG9ja2luZyBpc3N1ZSBpbiB0aGUgQUZfSVVDViBzb2NrZXQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgaXQgZGVmZXJzIHRoZSBgaXVjdl9zZW5kX2N0cmwoKWAgY2FsbCBpbiBgaXVjdl9zb2NrX3JlY3Ztc2coKWAgdW50aWwgYWZ0ZXIgdGhlIGBpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrYCBzcGlubG9jayBpcyByZWxlYXNlZCwgcHJldmVudGluZyBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2sgaW52ZXJzaW9ucy4gSXQgYWxzbyBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBhZml1Y3ZfaHNfc2VuZCgpYCBieSB1c2luZyBgYXRvbWljX3hjaGcoKWAgdG8gY2xhaW0gcmVjZWl2ZSBjcmVkaXRzIGF0b21pY2FsbHkgcmlnaHQgYmVmb3JlIHRyYW5zbWlzc2lvbiwgaW5zdGVhZCBvZiByZWFkaW5nIGFuZCBsYXRlciBzdWJ0cmFjdGluZyB0aGUgdmFsdWUuIFxuXG5BbGwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzIGludm9sdmVkIChzdWNoIGFzIGBwaHNfaGRyYCBhbmQgYGNvbmZpcm1fcmVjdmApIGFyZSBmdWxseSBpbml0aWFsaXplZCAoZS5nLiwgYG1lbXNldChwaHNfaGRyLCAwLCBzaXplb2YoKnBoc19oZHIpKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIEtDU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmZjdlYTcxNzU1NDViNGRkOGQ3NDAzNzk2MWMzOWNkNjlhZDA3NDk2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTM6MTk6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmMKaW5kZXggZWEwNDdiYWI2NWU3Yy4uYTdjMGY2MGJiNWJmYyAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pdWN2L2FmX2l1Y3YuYwpAQCAtMjEwLDEyICYjNDM7MjEwLDYgQEAgc3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jaywKIAlwaHNfaGRyLSZndDtmbGFncyA9IGZsYWdzOwogCWlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKQogCQlwaHNfaGRyLSZndDt3aW5kb3cgPSBpdWN2LSZndDttc2dsaW1pdDsKLQllbHNlIGlmICgoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1dJTikgfHwgIWZsYWdzKSB7Ci0JCWNvbmZpcm1fcmVjdiA9IGF0b21pY19yZWFkKCZhbXA7aXVjdi0mZ3Q7bXNnX3JlY3YpOwotCQlwaHNfaGRyLSZndDt3aW5kb3cgPSBjb25maXJtX3JlY3Y7Ci0JCWlmIChjb25maXJtX3JlY3YpCi0JCQlwaHNfaGRyLSZndDtmbGFncyA9IHBoc19oZHItJmd0O2ZsYWdzIHwgQUZfSVVDVl9GTEFHX1dJTjsKLQl9CiAJbWVtY3B5KHBoc19oZHItJmd0O2Rlc3RVc2VySUQsIGl1Y3YtJmd0O2RzdF91c2VyX2lkLCA4KTsKIAltZW1jcHkocGhzX2hkci0mZ3Q7ZGVzdEFwcE5hbWUsIGl1Y3YtJmd0O2RzdF9uYW1lLCA4KTsKIAltZW1jcHkocGhzX2hkci0mZ3Q7c3JjVXNlcklELCBpdWN2LSZndDtzcmNfdXNlcl9pZCwgOCk7CkBAIC0yNTAsMTMgJiM0MzsyNDQsMjIgQEAgc3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jaywKIAl9CiAJc2tiLSZndDtwcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0FGX0lVQ1YpOwogCiYjNDM7CS8qIENsYWltIHRoZSByZWNlaXZlIGNyZWRpdCBoZXJlLCBub3Qgd2hpbGUgYnVpbGRpbmcgdGhlIGhlYWRlcjogZXZlcnkKJiM0MzsJICogd2F5IHRoaXMgZnJhbWUgY2FuIGJlIGRyb3BwZWQgaGFzIG5vdyBiZWVuIHJ1bGVkIG91dCwgc28gdGhlIHdpbmRvdwomIzQzOwkgKiBpcyB6ZXJvZWQgb25seSBmb3IgYXMgbG9uZyBhcyB0aGUgdHJhbnNtaXQgaXRzZWxmIHRha2VzLgomIzQzOwkgKi8KJiM0MzsJaWYgKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19XSU4gfHwgIWZsYWdzKSB7CiYjNDM7CQljb25maXJtX3JlY3YgPSBhdG9taWNfeGNoZygmYW1wO2l1Y3YtJmd0O21zZ19yZWN2LCAwKTsKJiM0MzsJCXBoc19oZHItJmd0O3dpbmRvdyA9IGNvbmZpcm1fcmVjdjsKJiM0MzsJCWlmIChjb25maXJtX3JlY3YpCiYjNDM7CQkJcGhzX2hkci0mZ3Q7ZmxhZ3MgPSBwaHNfaGRyLSZndDtmbGFncyB8IEFGX0lVQ1ZfRkxBR19XSU47CiYjNDM7CX0KJiM0MzsKIAlhdG9taWNfaW5jKCZhbXA7aXVjdi0mZ3Q7c2tic19pbl94bWl0KTsKIAllcnIgPSBkZXZfcXVldWVfeG1pdChza2IpOwogCWlmIChuZXRfeG1pdF9ldmFsKGVycikpIHsKIAkJYXRvbWljX2RlYygmYW1wO2l1Y3YtJmd0O3NrYnNfaW5feG1pdCk7Ci0JfSBlbHNlIHsKLQkJYXRvbWljX3N1Yihjb25maXJtX3JlY3YsICZhbXA7aXVjdi0mZ3Q7bXNnX3JlY3YpOwotCQlXQVJOX09OKGF0b21pY19yZWFkKCZhbXA7aXVjdi0mZ3Q7bXNnX3JlY3YpICZsdDsgMCk7CiYjNDM7CQlhdG9taWNfYWRkKGNvbmZpcm1fcmVjdiwgJmFtcDtpdWN2LSZndDttc2dfcmVjdik7CiAJfQogCXJldHVybiBuZXRfeG1pdF9ldmFsKGVycik7CiAKQEAgLTEyNDEsNiAmIzQzOzEyNDQsNyBAQCBzdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAlzdHJ1Y3QgaXVjdl9zb2NrICppdWN2ID0gaXVjdl9zayhzayk7CiAJdW5zaWduZWQgaW50IGNvcGllZCwgcmxlbjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqcnNrYiwgKmNza2I7CiYjNDM7CWJvb2wgc2VuZF93aW4gPSBmYWxzZTsKIAlpbnQgZXJyID0gMDsKIAl1MzIgb2Zmc2V0OwogCkBAIC0xMzMxLDE2ICYjNDM7MTMzNSwyMCBAQCBzdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmYW1wO2l1Y3YtJmd0O2JhY2tsb2dfc2tiX3EpKSB7CiAJCQlpZiAoIWxpc3RfZW1wdHkoJmFtcDtpdWN2LSZndDttZXNzYWdlX3EubGlzdCkpCiAJCQkJaXVjdl9wcm9jZXNzX21lc3NhZ2VfcShzayk7Ci0JCQlpZiAoYXRvbWljX3JlYWQoJmFtcDtpdWN2LSZndDttc2dfcmVjdikgJmd0Oz0KLQkJCQkJCQlpdWN2LSZndDttc2dsaW1pdCAvIDIpIHsKLQkJCQllcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1dJTik7Ci0JCQkJaWYgKGVycikgewotCQkJCQlzay0mZ3Q7c2tfc3RhdGUgPSBJVUNWX0RJU0NPTk47Ci0JCQkJCXNrLSZndDtza19zdGF0ZV9jaGFuZ2Uoc2spOwotCQkJCX0KLQkJCX0KJiM0MzsJCQlpZiAoaXVjdi0mZ3Q7dHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIgJmFtcDsmYW1wOwomIzQzOwkJCSAgICBhdG9taWNfcmVhZCgmYW1wO2l1Y3YtJmd0O21zZ19yZWN2KSAmZ3Q7PQomIzQzOwkJCQkJCQlpdWN2LSZndDttc2dsaW1pdCAvIDIpCiYjNDM7CQkJCXNlbmRfd2luID0gdHJ1ZTsKIAkJfQogCQlzcGluX3VubG9ja19iaCgmYW1wO2l1Y3YtJmd0O21lc3NhZ2VfcS5sb2NrKTsKJiM0MzsKJiM0MzsJCWlmIChzZW5kX3dpbikgewomIzQzOwkJCWVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfV0lOKTsKJiM0MzsJCQlpZiAoZXJyKSB7CiYjNDM7CQkJCXNrLSZndDtza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjsKJiM0MzsJCQkJc2stJmd0O3NrX3N0YXRlX2NoYW5nZShzayk7CiYjNDM7CQkJfQomIzQzOwkJfQogCX0KIAogZG9uZToKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpdWN2IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2l1Y3YvYWZfaXVjdi5jYC4gSXQgc2VlbXMgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIGBhZml1Y3ZfaHNfc2VuZGAgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2AuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgYWZpdWN2X2hzX3NlbmRgIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgY2hhbmdlIGlzLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgc2hpZnRlZCB0aGUgd2luZG93IGNhbGN1bGF0aW9uIGxvZ2ljLgoKSW5pdGlhbGx5LCB0aGUgY29kZSBjaGVja2VkIGlmIGBmbGFnc2Agd2FzIGBBRl9JVUNWX0ZMQUdfV0lOYCBvciB6ZXJvLCB0aGVuIGNhbGN1bGF0ZWQgYGNvbmZpcm1fcmVjdmAsIHVzZWQgaXQgdG8gc2V0IHRoZSBgd2luZG93YCBmaWVsZCBpbiB0aGUgaGVhZGVyLCBhbmQgcG90ZW50aWFsbHkgc2V0IHRoZSBgQUZfSVVDVl9GTEFHX1dJTmAgZmxhZyBpbiB0aGUgaGVhZGVyLiBOb3csIHRoZXkmIzM5O3ZlIG1vdmVkIHRoYXQgbG9naWMgdG8gYSBwb2ludCByaWdodCBiZWZvcmUgYGRldl9xdWV1ZV94bWl0KHNrYilgLiBUaGUgY29tbWVudCBleHBsYWlucyB0aGlzIGFzIGNsYWltaW5nIHRoZSByZWNlaXZlIGNyZWRpdCBhdCBhIGxhdGVyIHN0YWdlLCBvbmNlIGl0JiMzOTtzIGNlcnRhaW4gdGhlIGZyYW1lIHdvbiYjMzk7dCBiZSBkcm9wcGVkLiBJdCBtYWtlcyBzZW5zZSBpbiBwcmluY2lwbGUgdG8gemVybyB0aGUgd2luZG93IGZvciBvbmx5IHRoZSB0cmFuc21pdCB0aW1lLgoKSG93ZXZlciwgYSByZWQgZmxhZyBwb3BwZWQgdXAgaW4gbXkgaGVhZC4gVGhleSYjMzk7cmUgdXNpbmcgYGF0b21pY194Y2hnYCBub3csIHdoaWNoIGlzIGdvb2QsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29kZSBmbG93LiBJZiBgZmxhZ3NgIGlzICpuZWl0aGVyKiBgQUZfSVVDVl9GTEFHX1dJTmAgbm9yIHplcm8sIHRoZW4gYGNvbmZpcm1fcmVjdmAgd29uJiMzOTt0IGJlIGluaXRpYWxpemVkICpiZWZvcmUqIGl0JiMzOTtzIHVzZWQuIFRoaXMgaXMgcG90ZW50aWFsbHkgYSBidWcsIHNvIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgZnVsbCBpbXBsZW1lbnRhdGlvbiBvZiBgYWZpdWN2X2hzX3NlbmRgLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHNvdXJjZSBjb2RlIG5vdyB0byBtYWtlIHN1cmUgdGhpcyBpc24mIzM5O3QgYW4gaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0XHRza193YWtlX2FzeW5jX3JjdShzaywgU09DS19XQUtFX1NQQUNFLCBQT0xMX09VVCk7XG4gMTkxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAxOTI6XHR9XG4gMTkzOlx0XG4gMTk0Olx0LypcbiAxOTU6XHQgKiBhZml1Y3ZfaHNfc2VuZCgpIC0gc2VuZCBhIG1lc3NhZ2UgdGhyb3VnaCBIaXBlclNvY2tldHMgdHJhbnNwb3J0XG4gMTk2Olx0ICovXG4gMTk3Olx0c3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jayxcbiAxOTg6XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggZmxhZ3MpXG4gMTk5Olx0e1xuIDIwMDpcdFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc29jayk7XG4gMjAxOlx0XHRzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIgKnBoc19oZHI7XG4gMjAyOlx0XHRpbnQgZXJyLCBjb25maXJtX3JlY3YgPSAwO1xuIDIwMzpcdFxuIDIwNDpcdFx0cGhzX2hkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpwaHNfaGRyKSk7XG4gMjA1Olx0XHRtZW1zZXQocGhzX2hkciwgMCwgc2l6ZW9mKCpwaHNfaGRyKSk7XG4gMjA2Olx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiAyMDc6XHRcbiAyMDg6XHRcdHBoc19oZHItXHUwMDNlbWFnaWMgPSBFVEhfUF9BRl9JVUNWO1xuIDIwOTpcdFx0cGhzX2hkci1cdTAwM2V2ZXJzaW9uID0gMTtcbiAyMTA6XHRcdHBoc19oZHItXHUwMDNlZmxhZ3MgPSBmbGFncztcbiAyMTE6XHRcdGlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKVxuIDIxMjpcdFx0XHRwaHNfaGRyLVx1MDAzZXdpbmRvdyA9IGl1Y3YtXHUwMDNlbXNnbGltaXQ7XG4gMjEzOlx0XHRtZW1jcHkocGhzX2hkci1cdTAwM2VkZXN0VXNlcklELCBpdWN2LVx1MDAzZWRzdF91c2VyX2lkLCA4KTtcbiAyMTQ6XHRcdG1lbWNweShwaHNfaGRyLVx1MDAzZWRlc3RBcHBOYW1lLCBpdWN2LVx1MDAzZWRzdF9uYW1lLCA4KTtcbiAyMTU6XHRcdG1lbWNweShwaHNfaGRyLVx1MDAzZXNyY1VzZXJJRCwgaXVjdi1cdTAwM2VzcmNfdXNlcl9pZCwgOCk7XG4gMjE2Olx0XHRtZW1jcHkocGhzX2hkci1cdTAwM2VzcmNBcHBOYW1lLCBpdWN2LVx1MDAzZXNyY19uYW1lLCA4KTtcbiAyMTc6XHRcdEFTQ0VCQyhwaHNfaGRyLVx1MDAzZWRlc3RVc2VySUQsIHNpemVvZihwaHNfaGRyLVx1MDAzZWRlc3RVc2VySUQpKTtcbiAyMTg6XHRcdEFTQ0VCQyhwaHNfaGRyLVx1MDAzZWRlc3RBcHBOYW1lLCBzaXplb2YocGhzX2hkci1cdTAwM2VkZXN0QXBwTmFtZSkpO1xuIDIxOTpcdFx0QVNDRUJDKHBoc19oZHItXHUwMDNlc3JjVXNlcklELCBzaXplb2YocGhzX2hkci1cdTAwM2VzcmNVc2VySUQpKTtcbiAyMjA6XHRcdEFTQ0VCQyhwaHNfaGRyLVx1MDAzZXNyY0FwcE5hbWUsIHNpemVvZihwaHNfaGRyLVx1MDAzZXNyY0FwcE5hbWUpKTtcbiAyMjE6XHRcdGlmIChpbXNnKVxuIDIyMjpcdFx0XHRtZW1jcHkoXHUwMDI2cGhzX2hkci1cdTAwM2VpdWN2X2hkciwgaW1zZywgc2l6ZW9mKHN0cnVjdCBpdWN2X21lc3NhZ2UpKTtcbiAyMjM6XHRcbiAyMjQ6XHRcdHNrYi1cdTAwM2VkZXYgPSBpdWN2LVx1MDAzZWhzX2RldjtcbiAyMjU6XHRcdGlmICghc2tiLVx1MDAzZWRldikge1xuIDIyNjpcdFx0XHRlcnIgPSAtRU5PREVWO1xuIDIyNzpcdFx0XHRnb3RvIGVycl9mcmVlO1xuIDIyODpcdFx0fVxuIDIyOTpcdFxuIDIzMDpcdFx0ZGV2X2hhcmRfaGVhZGVyKHNrYiwgc2tiLVx1MDAzZWRldiwgRVRIX1BfQUZfSVVDViwgTlVMTCwgTlVMTCwgc2tiLVx1MDAzZWxlbik7XG4gMjMxOlx0XG4gMjMyOlx0XHRpZiAoIShza2ItXHUwMDNlZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApIHx8ICFuZXRpZl9jYXJyaWVyX29rKHNrYi1cdTAwM2VkZXYpKSB7XG4gMjMzOlx0XHRcdGVyciA9IC1FTkVURE9XTjtcbiAyMzQ6XHRcdFx0Z290byBlcnJfZnJlZTtcbiAyMzU6XHRcdH1cbiAyMzY6XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzZSBza2ItXHUwMDNlZGV2LVx1MDAzZW10dSkge1xuIDIzNzpcdFx0XHRpZiAoc29jay1cdTAwM2Vza190eXBlID09IFNPQ0tfU0VRUEFDS0VUKSB7XG4gMjM4Olx0XHRcdFx0ZXJyID0gLUVNU0dTSVpFO1xuIDIzOTpcdFx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gMjQwOlx0XHRcdH1cbiAyNDE6XHRcdFx0ZXJyID0gcHNrYl90cmltKHNrYiwgc2tiLVx1MDAzZWRldi1cdTAwM2VtdHUpO1xuIDI0MjpcdFx0XHRpZiAoZXJyKVxuIDI0MzpcdFx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gMjQ0Olx0XHR9XG4gMjQ1Olx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKTtcbiAyNDY6XHRcbiAyNDc6XHRcdC8qIENsYWltIHRoZSByZWNlaXZlIGNyZWRpdCBoZXJlLCBub3Qgd2hpbGUgYnVpbGRpbmcgdGhlIGhlYWRlcjogZXZlcnlcbiAyNDg6XHRcdCAqIHdheSB0aGlzIGZyYW1lIGNhbiBiZSBkcm9wcGVkIGhhcyBub3cgYmVlbiBydWxlZCBvdXQsIHNvIHRoZSB3aW5kb3dcbiAyNDk6XHRcdCAqIGlzIHplcm9lZCBvbmx5IGZvciBhcyBsb25nIGFzIHRoZSB0cmFuc21pdCBpdHNlbGYgdGFrZXMuXG4gMjUwOlx0XHQgKi9cbiAyNTE6XHRcdGlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfV0lOIHx8ICFmbGFncykge1xuIDI1MjpcdFx0XHRjb25maXJtX3JlY3YgPSBhdG9taWNfeGNoZyhcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2LCAwKTtcbiAyNTM6XHRcdFx0cGhzX2hkci1cdTAwM2V3aW5kb3cgPSBjb25maXJtX3JlY3Y7XG4gMjU0Olx0XHRcdGlmIChjb25maXJtX3JlY3YpXG4gMjU1Olx0XHRcdFx0cGhzX2hkci1cdTAwM2VmbGFncyA9IHBoc19oZHItXHUwMDNlZmxhZ3MgfCBBRl9JVUNWX0ZMQUdfV0lOO1xuIDI1NjpcdFx0fVxuIDI1NzpcdFxuIDI1ODpcdFx0YXRvbWljX2luYyhcdTAwMjZpdWN2LVx1MDAzZXNrYnNfaW5feG1pdCk7XG4gMjU5Olx0XHRlcnIgPSBkZXZfcXVldWVfeG1pdChza2IpO1xuIDI2MDpcdFx0aWYgKG5ldF94bWl0X2V2YWwoZXJyKSkge1xuIDI2MTpcdFx0XHRhdG9taWNfZGVjKFx1MDAyNml1Y3YtXHUwMDNlc2tic19pbl94bWl0KTtcbiAyNjI6XHRcdFx0YXRvbWljX2FkZChjb25maXJtX3JlY3YsIFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpO1xuIDI2MzpcdFx0fVxuIDI2NDpcdFx0cmV0dXJuIG5ldF94bWl0X2V2YWwoZXJyKTtcbiAyNjU6XHRcbiAyNjY6XHRlcnJfZnJlZTpcbiAyNjc6XHRcdGtmcmVlX3NrYihza2IpO1xuIDI2ODpcdFx0cmV0dXJuIGVycjtcbiAyNjk6XHR9XG4gMjcwOlx0XG4gMjcxOlx0c3RhdGljIHN0cnVjdCBzb2NrICpfX2l1Y3ZfZ2V0X3NvY2tfYnlfbmFtZShjaGFyICpubSlcbiAyNzI6XHR7XG4gMjczOlx0XHRzdHJ1Y3Qgc29jayAqc2s7XG4gMjc0Olx0XG4gMjc1Olx0XHRza19mb3JfZWFjaChzaywgXHUwMDI2aXVjdl9za19saXN0LmhlYWQpXG4gMjc2Olx0XHRcdGlmICghbWVtY21wKFx1MDAyNml1Y3Zfc2soc2spLVx1MDAzZXNyY19uYW1lLCBubSwgOCkpXG4gMjc3Olx0XHRcdFx0cmV0dXJuIHNrO1xuIDI3ODpcdFxuIDI3OTpcdFx0cmV0dXJuIE5VTEw7XG4gMjgwOlx0fVxuIDI4MTpcdFxuIDI4MjpcdHN0YXRpYyB2b2lkIGl1Y3Zfc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG4gMjgzOlx0e1xuIDI4NDpcdFx0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xuIDI4NTpcdFx0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNnNrLVx1MDAzZXNrX2Vycm9yX3F1ZXVlKTtcbiAyODY6XHRcbiAyODc6XHRcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7XG4gMjg4Olx0XHRcdHByX2VycihcJiMzNDtBdHRlbXB0IHRvIHJlbGVhc2UgYWxpdmUgaXVjdiBzb2NrZXQgJXBcXG5cJiMzNDssIHNrKTtcbiAyODk6XHRcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTYxCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFBvdGVudGlhbCBSaXNrcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhZml1Y3ZfaHNfc2VuZGAgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2AuIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCByaWdodD8gV2UmIzM5O3JlIG1vZGlmeWluZyB0aGVzZSBmdW5jdGlvbnMsIGFuZCBhbnl0aW1lIHlvdSB0b3VjaCBkYXRhIHN0cnVjdHVyZXMsIHRoZXJlJiMzOTtzIGEgY2hhbmNlIG9mIGludHJvZHVjaW5nIGEgcmVhZCBvciB3cml0ZSBmcm9tIHVuaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggY2FuIGxlYWQgdG8gbmFzdHkgdnVsbmVyYWJpbGl0aWVzLgoKU3BlY2lmaWNhbGx5LCBpbiBgYWZpdWN2X2hzX3NlbmRgLCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgcGxheWluZyB3aXRoIHRoZSB0aW1pbmcgb2YgdGhlIHdpbmRvdyBjYWxjdWxhdGlvbiBhbmQgdGhlIHdheSBgaXVjdi0mZ3Q7bXNnX3JlY3ZgIGlzIGhhbmRsZWQuIFdlJiMzOTtyZSBpbml0aWFsaXppbmcgYGNvbmZpcm1fcmVjdmAgdG8gemVybywgYW5kIHRoZSB3aW5kb3cgY2FsY3VsYXRpb24gaXMgaGFwcGVuaW5nIGp1c3QgYmVmb3JlIGBkZXZfcXVldWVfeG1pdChza2IpYC4gVGhlIGNoYW5nZSB0byBgYXRvbWljX3hjaGdgIGluc3RlYWQgb2YgYGF0b21pY19yZWFkYCBhbmQgYGF0b21pY19zdWJgIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gbG9vayBpbnRvIGEgYml0IGRlZXBlciBsYXRlciBidXQgZG9lc24mIzM5O3QgaW1tZWRpYXRlbHkgc2NyZWFtIGRhbmdlci4KCkluIGBpdWN2X3NvY2tfcmVjdm1zZ2AsIHRoZSBkZWZlcnJhbCBvZiBgaXVjdl9zZW5kX2N0cmxgIHVudGlsIGFmdGVyIGBzcGluX3VubG9ja19iaCgmYW1wO2l1Y3YtJmd0O21lc3NhZ2VfcS5sb2NrKWAgaW1tZWRpYXRlbHkgZ290IG15IGF0dGVudGlvbi4gSXQmIzM5O3MgbGlrZWx5IHRyeWluZyB0byBhdm9pZCBhIGRlYWRsb2NrIG9yIGEgbG9jayBpbnZlcnNpb24gc2l0dWF0aW9uLiBUaGUgb3JkZXIgb2YgbG9ja2luZyBpcyBjcml0aWNhbCwgYW5kIGFueSBjaGFuZ2UgaW4gdGhpcyBhcmVhIG5lZWRzIHRvIGJlIGFuYWx5emVkIHdpdGggYSBmaW5lLXRvb3RoIGNvbWIuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCB3YXMgaWYgdGhlIGNoYW5nZSBpbiBgaXVjdl9zb2NrX3JlY3Ztc2dgIGV4cG9zZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBgcGhzX2hkci0mZ3Q7d2luZG93YCBhbmQgYHBoc19oZHItJmd0O2ZsYWdzYCwgYnV0IGBwaHNfaGRyYCBpcyBhbGxvY2F0ZWQgd2l0aCBgc2tiX3B1c2hgIGFuZCB6ZXJvZWQgb3V0IHdpdGggYG1lbXNldGAuIFNvLCB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4gTm90aGluZyB1bmluaXRpYWxpemVkIGluIGBwaHNfaGRyYC4gVGhhdCYjMzk7cyBhIHJlbGllZiEKCk9rYXksIHNvIGl0IGlzIGxpa2VseSBmaXhpbmcgYSBjb25jdXJyZW5jeSBpc3N1ZSwgYSBkZWFkbG9jayBvciBhIHJhY2UuIEJ5IG1vdmluZyB0aGUgY2FsbCB0byBgaXVjdl9zZW5kX2N0cmxgIGFmdGVyIHJlbGVhc2luZyB0aGUgc3BpbmxvY2ssIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoZXkmIzM5O3JlIHRyeWluZyB0byBwcmV2ZW50IGEgc2l0dWF0aW9uIHdoZXJlIGBpdWN2X3NlbmRfY3RybGAgY2FsbHMgYGFmaXVjdl9oc19zZW5kYCwgd2hpY2ggdGhlbiBjYWxscyBgZGV2X3F1ZXVlX3htaXRgLCB3aGljaCBtaWdodCBzbGVlcCBvciB0YWtlIG90aGVyIGxvY2tzLCB3aGlsZSB3ZSBzdGlsbCBoYXZlIGEgc3BpbmxvY2suCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBgY29uZmlybV9yZWN2YCBpcyBpbml0aWFsaXplZCB0byAwLiBgcGhzX2hkcmAgaXMgemVyb2VkLiBgc2VuZF93aW5gIGlzIGBmYWxzZWAuIExvb2tzIHNvbGlkLiBOb3BlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUuCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIHRoZSBsYWNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB0aGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBmaXggZm9yIGEgbG9ja2luZyBvciBjb25jdXJyZW5jeSBidWcg4oCTIGEgcmFjZSBjb25kaXRpb24sIG9yIHBlcmhhcHMgZXZlbiBhIGRlYWRsb2NrLiBJZiBpdCAqd2FzKiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIHVzZS1hZnRlci1mcmVlLCBLQVNBTiBvciBMT0NLREVQIGxpa2VseSB3b3VsZCYjMzk7dmUgZmxhZ2dlZCB0aGUgb3JpZ2luYWwgcHJvYmxlbS4gS01TQU4gaXMgZGVmaW5pdGVseSBub3QgcmVxdWlyZWQgaGVyZS4KCkkmIzM5O2xsIHF1aWNrbHkgcmV2aWV3IGBpdWN2X3NlbmRfY3RybGAganVzdCB0byBiZSBzdXJlLCBidXQgSSBmZWVsIHByZXR0eSBnb29kIGFib3V0IHRoaXMgb25lLiBJdCBsb29rcyBsaWtlIGEgY2xlYW4sIGZvY3VzZWQgY29uY3VycmVuY3kgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDA6XHRzdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbjEyNDE6XHRcdFx0XHQgICAgIHNpemVfdCBsZW4sIGludCBmbGFncylcbjEyNDI6XHR7XG4xMjQzOlx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuMTI0NDpcdFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xuMTI0NTpcdFx0dW5zaWduZWQgaW50IGNvcGllZCwgcmxlbjtcbjEyNDY6XHRcdHN0cnVjdCBza19idWZmICpza2IsICpyc2tiLCAqY3NrYjtcbjEyNDc6XHRcdGJvb2wgc2VuZF93aW4gPSBmYWxzZTtcbjEyNDg6XHRcdGludCBlcnIgPSAwO1xuMTI0OTpcdFx0dTMyIG9mZnNldDtcbjEyNTA6XHRcbjEyNTE6XHRcdGlmICgoc2stXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9ESVNDT05OKSBcdTAwMjZcdTAwMjZcbjEyNTI6XHRcdCAgICBza2JfcXVldWVfZW1wdHkoXHUwMDI2aXVjdi1cdTAwM2ViYWNrbG9nX3NrYl9xKSBcdTAwMjZcdTAwMjZcbjEyNTM6XHRcdCAgICBza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkgXHUwMDI2XHUwMDI2XG4xMjU0Olx0XHQgICAgbGlzdF9lbXB0eShcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5saXN0KSlcbjEyNTU6XHRcdFx0cmV0dXJuIDA7XG4xMjU2Olx0XG4xMjU3Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IChNU0dfT09CKSlcbjEyNTg6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTI1OTpcdFxuMTI2MDpcdFx0LyogcmVjZWl2ZS9kZXF1ZXVlIG5leHQgc2tiOlxuMTI2MTpcdFx0ICogdGhlIGZ1bmN0aW9uIHVuZGVyc3RhbmRzIE1TR19QRUVLIGFuZCwgdGh1cywgZG9lcyBub3QgZGVxdWV1ZSBza2JcbjEyNjI6XHRcdCAqIG9ubHkgcmVmY291bnQgaXMgaW5jcmVhc2VkLlxuMTI2MzpcdFx0ICovXG4xMjY0Olx0XHRza2IgPSBza2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MsIFx1MDAyNmVycik7XG4xMjY1Olx0XHRpZiAoIXNrYikge1xuMTI2NjpcdFx0XHRpZiAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTilcbjEyNjc6XHRcdFx0XHRyZXR1cm4gMDtcbjEyNjg6XHRcdFx0cmV0dXJuIGVycjtcbjEyNjk6XHRcdH1cbjEyNzA6XHRcbjEyNzE6XHRcdG9mZnNldCA9IElVQ1ZfU0tCX0NCKHNrYiktXHUwMDNlb2Zmc2V0O1xuMTI3MjpcdFx0cmxlbiAgID0gc2tiLVx1MDAzZWxlbiAtIG9mZnNldDtcdFx0LyogcmVhbCBsZW5ndGggb2Ygc2tiICovXG4xMjczOlx0XHRjb3BpZWQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHJsZW4sIGxlbik7XG4xMjc0Olx0XHRpZiAoIXJsZW4pXG4xMjc1Olx0XHRcdHNrLVx1MDAzZXNrX3NodXRkb3duID0gc2stXHUwMDNlc2tfc2h1dGRvd24gfCBSQ1ZfU0hVVERPV047XG4xMjc2Olx0XG4xMjc3Olx0XHRjc2tiID0gc2tiO1xuMTI3ODpcdFx0aWYgKHNrYl9jb3B5X2RhdGFncmFtX21zZyhjc2tiLCBvZmZzZXQsIG1zZywgY29waWVkKSkge1xuMTI3OTpcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMTI4MDpcdFx0XHRnb3RvIGVycl9vdXQ7XG4xMjgxOlx0XHR9XG4xMjgyOlx0XG4xMjgzOlx0XHQvKiBTT0NLX1NFUVBBQ0tFVDogc2V0IE1TR19UUlVOQyBpZiByZWN2IGJ1ZiBzaXplIGlzIHRvbyBzbWFsbCAqL1xuMTI4NDpcdFx0aWYgKHNrLVx1MDAzZXNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpIHtcbjEyODU6XHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgcmxlbilcbjEyODY6XHRcdFx0XHRtc2ctXHUwMDNlbXNnX2ZsYWdzIHw9IE1TR19UUlVOQztcbjEyODc6XHRcdFx0LyogZWFjaCBpdWN2IG1lc3NhZ2UgY29udGFpbnMgYSBjb21wbGV0ZSByZWNvcmQgKi9cbjEyODg6XHRcdFx0bXNnLVx1MDAzZW1zZ19mbGFncyB8PSBNU0dfRU9SO1xuMTI4OTpcdFx0fVxuMTI5MDpcdFxuMTI5MTpcdFx0LyogY3JlYXRlIGNvbnRyb2wgbWVzc2FnZSB0byBzdG9yZSBpdWN2IG1zZyB0YXJnZXQgY2xhc3M6XG4xMjkyOlx0XHQgKiBnZXQgdGhlIHRyZ2NscyBmcm9tIHRoZSBjb250cm9sIGJ1ZmZlciBvZiB0aGUgc2tiIGR1ZSB0b1xuMTI5MzpcdFx0ICogZnJhZ21lbnRhdGlvbiBvZiBvcmlnaW5hbCBpdWN2IG1lc3NhZ2UuICovXG4xMjk0Olx0XHRlcnIgPSBwdXRfY21zZyhtc2csIFNPTF9JVUNWLCBTQ01fSVVDVl9UUkdDTFMsXG4xMjk1Olx0XHRcdCAgICAgICBzaXplb2YoSVVDVl9TS0JfQ0Ioc2tiKS1cdTAwM2VjbGFzcyksXG4xMjk2Olx0XHRcdCAgICAgICAodm9pZCAqKVx1MDAyNklVQ1ZfU0tCX0NCKHNrYiktXHUwMDNlY2xhc3MpO1xuMTI5NzpcdFx0aWYgKGVycilcbjEyOTg6XHRcdFx0Z290byBlcnJfb3V0O1xuMTI5OTpcdFxuMTMwMDpcdFx0LyogTWFyayByZWFkIHBhcnQgb2Ygc2tiIGFzIHVzZWQgKi9cbjEzMDE6XHRcdGlmICghKGZsYWdzIFx1MDAyNiBNU0dfUEVFSykpIHtcbjEzMDI6XHRcbjEzMDM6XHRcdFx0LyogU09DS19TVFJFQU06IHJlLXF1ZXVlIHNrYiBpZiBpdCBjb250YWlucyB1bnJlY2VpdmVkIGRhdGEgKi9cbjEzMDQ6XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3R5cGUgPT0gU09DS19TVFJFQU0pIHtcbjEzMDU6XHRcdFx0XHRpZiAoY29waWVkIFx1MDAzYyBybGVuKSB7XG4xMzA2Olx0XHRcdFx0XHRJVUNWX1NLQl9DQihza2IpLVx1MDAzZW9mZnNldCA9IG9mZnNldCAmIzQzOyBjb3BpZWQ7XG4xMzA3Olx0XHRcdFx0XHRza2JfcXVldWVfaGVhZChcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLCBza2IpO1xuMTMwODpcdFx0XHRcdFx0Z290byBkb25lO1xuMTMwOTpcdFx0XHRcdH1cbjEzMTA6XHRcdFx0fVxuMTMxMTpcdFxuMTMxMjpcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuMTMxMzpcdFx0XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xuMTMxNDpcdFx0XHRcdGF0b21pY19pbmMoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdik7XG4xMzE1Olx0XHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpIFx1MDAzZSBpdWN2LVx1MDAzZW1zZ2xpbWl0KSB7XG4xMzE2Olx0XHRcdFx0XHRXQVJOX09OKDEpO1xuMTMxNzpcdFx0XHRcdFx0aXVjdl9zb2NrX2Nsb3NlKHNrKTtcbjEzMTg6XHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTMxOTpcdFx0XHRcdH1cbjEzMjA6XHRcdFx0fVxuMTMyMTpcdFxuMTMyMjpcdFx0XHQvKiBRdWV1ZSBiYWNrbG9nIHNrYnMgKi9cbjEzMjM6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xuMTMyNDpcdFx0XHRyc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2aXVjdi1cdTAwM2ViYWNrbG9nX3NrYl9xKTtcbjEzMjU6XHRcdFx0d2hpbGUgKHJza2IpIHtcbjEzMjY6XHRcdFx0XHRJVUNWX1NLQl9DQihyc2tiKS1cdTAwM2VvZmZzZXQgPSAwO1xuMTMyNzpcdFx0XHRcdGlmIChfX3NvY2tfcXVldWVfcmN2X3NrYihzaywgcnNrYikpIHtcbjEzMjg6XHRcdFx0XHRcdC8qIGhhbmRsZSByY3YgcXVldWUgZnVsbCAqL1xuMTMyOTpcdFx0XHRcdFx0c2tiX3F1ZXVlX2hlYWQoXHUwMDI2aXVjdi1cdTAwM2ViYWNrbG9nX3NrYl9xLFxuMTMzMDpcdFx0XHRcdFx0XHRcdHJza2IpO1xuMTMzMTpcdFx0XHRcdFx0YnJlYWs7XG4xMzMyOlx0XHRcdFx0fVxuMTMzMzpcdFx0XHRcdHJza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZpdWN2LVx1MDAzZWJhY2tsb2dfc2tiX3EpO1xuMTMzNDpcdFx0XHR9XG4xMzM1Olx0XHRcdGlmIChza2JfcXVldWVfZW1wdHkoXHUwMDI2aXVjdi1cdTAwM2ViYWNrbG9nX3NrYl9xKSkge1xuMTMzNjpcdFx0XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5saXN0KSlcbjEzMzc6XHRcdFx0XHRcdGl1Y3ZfcHJvY2Vzc19tZXNzYWdlX3Eoc2spO1xuMTMzODpcdFx0XHRcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSIFx1MDAyNlx1MDAyNlxuMTMzOTpcdFx0XHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2KSBcdTAwM2U9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEzOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NTMKCQkJCQkJCW91dHB1dDogMjY2CgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoKioKCk9rYXksIGxldCBtZSBicmVhayBkb3duIHRoaXMga2VybmVsIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCB0YXJnZXRzIGEgcmFjZSBjb25kaXRpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyBgbXNnX3JlY3ZgIGlzIGhhbmRsZWQuIEkgc3VzcGVjdCB0aGUgY29tbWl0IG1lc3NhZ2UgcHJvYmFibHkgaGlnaGxpZ2h0cyB0aGUgaXNzdWU6IGEgcG90ZW50aWFsIHJhY2Ugd2l0aGluIGBhZml1Y3ZfaHNfc2VuZGAgd2hlcmUgYSB2YWx1ZSBvZiBgbXNnX3JlY3ZgIGlzIHJlYWQsIGRlY3JlbWVudGVkIGJhc2VkIG9uIHRoYXQgcmVhZCwgYnV0IGFub3RoZXIgdGhyZWFkIGNvdWxkIG1vZGlmeSB0aGF0IHZhbHVlIGJldHdlZW4gdGhlIHJlYWQgYW5kIHRoZSBzdWJ0cmFjdGlvbiwgbGVhZGluZyB0byBpbmNvcnJlY3QgYWNjb3VudGluZyBvciBldmVuIGEgZGVhZGxvY2suCgpUaGUgc2Vjb25kIHBhcnQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBNb3ZpbmcgdGhlIGBpdWN2X3NlbmRfY3RybGAgY2FsbCBvdXRzaWRlIG9mIHRoZSBgc3Bpbl9sb2NrX2JoKCZhbXA7aXVjdi0mZ3Q7bWVzc2FnZV9xLmxvY2spYCBpcyBhIGNsYXNzaWMgZGVhZGxvY2sgcHJldmVudGlvbiBzdHJhdGVneS4gSSBzZWUgdGhhdCBgaXVjdl9zZW5kX2N0cmxgIGNhbGxzIGBhZml1Y3ZfaHNfc2VuZGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYGRldl9xdWV1ZV94bWl0YC4gYGRldl9xdWV1ZV94bWl0YCBpcyBub3RvcmlvdXMgZm9yIHBvdGVudGlhbGx5IHRha2luZyBsb2NrcyB0aGF0IGFyZSBpbmNvbXBhdGlibGUgd2l0aCBsb2NrcyBoZWxkIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBtZXNzYWdlIHF1ZXVlcyBhbmQgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuIFNvLCB0aGlzIGNoYW5nZSBsaWtlbHkgcHJldmVudHMgc2l0dWF0aW9ucyB3aGVyZSB0aGUga2VybmVsIG1pZ2h0IGJsb2NrIGluZGVmaW5pdGVseSwgd2FpdGluZyBmb3IgYSBsb2NrIGFscmVhZHkgaGVsZCBieSB0aGUgY3VycmVudCBjb250ZXh0LgoKQW5kIGZpbmFsbHksIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSSYjMzk7bGwgY29uZmlkZW50bHkgbWFyayB0aGUgYE5lZWRzS01TQU5gIGZsYWcgYXMgZmFsc2UgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kvbG9ja2luZyBpc3N1ZSBpbiB0aGUgQUZfSVVDViBzb2NrZXQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgaXQgZGVmZXJzIHRoZSBgaXVjdl9zZW5kX2N0cmwoKWAgY2FsbCBpbiBgaXVjdl9zb2NrX3JlY3Ztc2coKWAgdW50aWwgYWZ0ZXIgdGhlIGBpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrYCBzcGlubG9jayBpcyByZWxlYXNlZCwgcHJldmVudGluZyBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2sgaW52ZXJzaW9ucy4gSXQgYWxzbyBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBhZml1Y3ZfaHNfc2VuZCgpYCBieSB1c2luZyBgYXRvbWljX3hjaGcoKWAgdG8gY2xhaW0gcmVjZWl2ZSBjcmVkaXRzIGF0b21pY2FsbHkgcmlnaHQgYmVmb3JlIHRyYW5zbWlzc2lvbiwgaW5zdGVhZCBvZiByZWFkaW5nIGFuZCBsYXRlciBzdWJ0cmFjdGluZyB0aGUgdmFsdWUuIFxuXG5BbGwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzIGludm9sdmVkIChzdWNoIGFzIGBwaHNfaGRyYCBhbmQgYGNvbmZpcm1fcmVjdmApIGFyZSBmdWxseSBpbml0aWFsaXplZCAoZS5nLiwgYG1lbXNldChwaHNfaGRyLCAwLCBzaXplb2YoKnBoc19oZHIpKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIEtDU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kvbG9ja2luZyBpc3N1ZSBpbiB0aGUgQUZfSVVDViBzb2NrZXQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgaXQgZGVmZXJzIHRoZSBgaXVjdl9zZW5kX2N0cmwoKWAgY2FsbCBpbiBgaXVjdl9zb2NrX3JlY3Ztc2coKWAgdW50aWwgYWZ0ZXIgdGhlIGBpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrYCBzcGlubG9jayBpcyByZWxlYXNlZCwgcHJldmVudGluZyBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2sgaW52ZXJzaW9ucy4gSXQgYWxzbyBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBhZml1Y3ZfaHNfc2VuZCgpYCBieSB1c2luZyBgYXRvbWljX3hjaGcoKWAgdG8gY2xhaW0gcmVjZWl2ZSBjcmVkaXRzIGF0b21pY2FsbHkgcmlnaHQgYmVmb3JlIHRyYW5zbWlzc2lvbiwgaW5zdGVhZCBvZiByZWFkaW5nIGFuZCBsYXRlciBzdWJ0cmFjdGluZyB0aGUgdmFsdWUuIFxuXG5BbGwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzIGludm9sdmVkIChzdWNoIGFzIGBwaHNfaGRyYCBhbmQgYGNvbmZpcm1fcmVjdmApIGFyZSBmdWxseSBpbml0aWFsaXplZCAoZS5nLiwgYG1lbXNldChwaHNfaGRyLCAwLCBzaXplb2YoKnBoc19oZHIpKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIEtDU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzoxOTo1NS42NDUwNDk1NTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODAyMTA1MDczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRklVQ1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpdWN2X3NvY2tfc2VuZG1zZ1wiLFxuICAgIFwiaXVjdl9zb2NrX3JlY3Ztc2dcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5L2xvY2tpbmcgaXNzdWUgaW4gdGhlIEFGX0lVQ1Ygc29ja2V0IGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHksIGl0IGRlZmVycyB0aGUgYGl1Y3Zfc2VuZF9jdHJsKClgIGNhbGwgaW4gYGl1Y3Zfc29ja19yZWN2bXNnKClgIHVudGlsIGFmdGVyIHRoZSBgaXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxvY2tgIHNwaW5sb2NrIGlzIHJlbGVhc2VkLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgbG9jayBpbnZlcnNpb25zLiBJdCBhbHNvIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGFmaXVjdl9oc19zZW5kKClgIGJ5IHVzaW5nIGBhdG9taWNfeGNoZygpYCB0byBjbGFpbSByZWNlaXZlIGNyZWRpdHMgYXRvbWljYWxseSByaWdodCBiZWZvcmUgdHJhbnNtaXNzaW9uLCBpbnN0ZWFkIG9mIHJlYWRpbmcgYW5kIGxhdGVyIHN1YnRyYWN0aW5nIHRoZSB2YWx1ZS4gXFxuXFxuQWxsIHN0cnVjdHVyZXMgYW5kIHZhcmlhYmxlcyBpbnZvbHZlZCAoc3VjaCBhcyBgcGhzX2hkcmAgYW5kIGBjb25maXJtX3JlY3ZgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgKGUuZy4sIGBtZW1zZXQocGhzX2hkciwgMCwgc2l6ZW9mKCpwaHNfaGRyKSlgKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja2luZywgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGRlYWRsb2NrcywgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBvciBLQ1NBTi4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSBBRl9JVUNWIHNvY2tldCBzZW5kIGFuZCByZWNlaXZlIHBhdGhzIGJ5IHVzaW5nIGF0b21pY194Y2hnIGZvciB0aGUgbXNnX3JlY3YgdmFyaWFibGUgYW5kIG1vdmluZyBpdWN2X3NlbmRfY3RybCBvdXQgb2YgYSBzcGlubG9jayBibG9jay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgc29ja2V0IGxvZ2ljIGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIHRlc3RhYmxlIGluIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjE5OjU1LjY0NTA1NjM5MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYzMDk1NzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZmY3ZWE3MTc1NTQ1YjRkZDhkNzQwMzc5NjFjMzljZDY5YWQwNzQ5NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMzoxOTo1NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmNcXG5pbmRleCBlYTA0N2JhYjY1ZTdjLi5hN2MwZjYwYmI1YmZjIDEwMDY0NFxcbi0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuY1xcbisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xcbkBAIC0yMTAsMTIgKzIxMCw2IEBAIHN0YXRpYyBpbnQgYWZpdWN2X2hzX3NlbmQoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqaW1zZywgc3RydWN0IHNvY2sgKnNvY2ssXFxuIFxcdHBoc19oZHItXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuIFxcdGlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKVxcbiBcXHRcXHRwaHNfaGRyLVxcdTAwM2V3aW5kb3cgPSBpdWN2LVxcdTAwM2Vtc2dsaW1pdDtcXG4tXFx0ZWxzZSBpZiAoKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19XSU4pIHx8ICFmbGFncykge1xcbi1cXHRcXHRjb25maXJtX3JlY3YgPSBhdG9taWNfcmVhZChcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YpO1xcbi1cXHRcXHRwaHNfaGRyLVxcdTAwM2V3aW5kb3cgPSBjb25maXJtX3JlY3Y7XFxuLVxcdFxcdGlmIChjb25maXJtX3JlY3YpXFxuLVxcdFxcdFxcdHBoc19oZHItXFx1MDAzZWZsYWdzID0gcGhzX2hkci1cXHUwMDNlZmxhZ3MgfCBBRl9JVUNWX0ZMQUdfV0lOO1xcbi1cXHR9XFxuIFxcdG1lbWNweShwaHNfaGRyLVxcdTAwM2VkZXN0VXNlcklELCBpdWN2LVxcdTAwM2Vkc3RfdXNlcl9pZCwgOCk7XFxuIFxcdG1lbWNweShwaHNfaGRyLVxcdTAwM2VkZXN0QXBwTmFtZSwgaXVjdi1cXHUwMDNlZHN0X25hbWUsIDgpO1xcbiBcXHRtZW1jcHkocGhzX2hkci1cXHUwMDNlc3JjVXNlcklELCBpdWN2LVxcdTAwM2VzcmNfdXNlcl9pZCwgOCk7XFxuQEAgLTI1MCwxMyArMjQ0LDIyIEBAIHN0YXRpYyBpbnQgYWZpdWN2X2hzX3NlbmQoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqaW1zZywgc3RydWN0IHNvY2sgKnNvY2ssXFxuIFxcdH1cXG4gXFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0FGX0lVQ1YpO1xcbiBcXG4rXFx0LyogQ2xhaW0gdGhlIHJlY2VpdmUgY3JlZGl0IGhlcmUsIG5vdCB3aGlsZSBidWlsZGluZyB0aGUgaGVhZGVyOiBldmVyeVxcbitcXHQgKiB3YXkgdGhpcyBmcmFtZSBjYW4gYmUgZHJvcHBlZCBoYXMgbm93IGJlZW4gcnVsZWQgb3V0LCBzbyB0aGUgd2luZG93XFxuK1xcdCAqIGlzIHplcm9lZCBvbmx5IGZvciBhcyBsb25nIGFzIHRoZSB0cmFuc21pdCBpdHNlbGYgdGFrZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1dJTiB8fCAhZmxhZ3MpIHtcXG4rXFx0XFx0Y29uZmlybV9yZWN2ID0gYXRvbWljX3hjaGcoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2LCAwKTtcXG4rXFx0XFx0cGhzX2hkci1cXHUwMDNld2luZG93ID0gY29uZmlybV9yZWN2O1xcbitcXHRcXHRpZiAoY29uZmlybV9yZWN2KVxcbitcXHRcXHRcXHRwaHNfaGRyLVxcdTAwM2VmbGFncyA9IHBoc19oZHItXFx1MDAzZWZsYWdzIHwgQUZfSVVDVl9GTEFHX1dJTjtcXG4rXFx0fVxcbitcXG4gXFx0YXRvbWljX2luYyhcXHUwMDI2aXVjdi1cXHUwMDNlc2tic19pbl94bWl0KTtcXG4gXFx0ZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTtcXG4gXFx0aWYgKG5ldF94bWl0X2V2YWwoZXJyKSkge1xcbiBcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZpdWN2LVxcdTAwM2Vza2JzX2luX3htaXQpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRhdG9taWNfc3ViKGNvbmZpcm1fcmVjdiwgXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2KTtcXG4tXFx0XFx0V0FSTl9PTihhdG9taWNfcmVhZChcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YpIFxcdTAwM2MgMCk7XFxuK1xcdFxcdGF0b21pY19hZGQoY29uZmlybV9yZWN2LCBcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YpO1xcbiBcXHR9XFxuIFxcdHJldHVybiBuZXRfeG1pdF9ldmFsKGVycik7XFxuIFxcbkBAIC0xMjQxLDYgKzEyNDQsNyBAQCBzdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4gXFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xcbiBcXHR1bnNpZ25lZCBpbnQgY29waWVkLCBybGVuO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqcnNrYiwgKmNza2I7XFxuK1xcdGJvb2wgc2VuZF93aW4gPSBmYWxzZTtcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcdHUzMiBvZmZzZXQ7XFxuIFxcbkBAIC0xMzMxLDE2ICsxMzM1LDIwIEBAIHN0YXRpYyBpbnQgaXVjdl9zb2NrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbiBcXHRcXHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZpdWN2LVxcdTAwM2ViYWNrbG9nX3NrYl9xKSkge1xcbiBcXHRcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5saXN0KSlcXG4gXFx0XFx0XFx0XFx0aXVjdl9wcm9jZXNzX21lc3NhZ2VfcShzayk7XFxuLVxcdFxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YpIFxcdTAwM2U9XFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdGl1Y3YtXFx1MDAzZW1zZ2xpbWl0IC8gMikge1xcbi1cXHRcXHRcXHRcXHRlcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1dJTik7XFxuLVxcdFxcdFxcdFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0XFx0XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gSVVDVl9ESVNDT05OO1xcbi1cXHRcXHRcXHRcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2KSBcXHUwMDNlPVxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRpdWN2LVxcdTAwM2Vtc2dsaW1pdCAvIDIpXFxuK1xcdFxcdFxcdFxcdHNlbmRfd2luID0gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxvY2spO1xcbitcXG4rXFx0XFx0aWYgKHNlbmRfd2luKSB7XFxuK1xcdFxcdFxcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfV0lOKTtcXG4rXFx0XFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0RJU0NPTk47XFxuK1xcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gZG9uZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MTk6NTYuMjA4ODM5NTg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDM5OTc1MjEzNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZJVUNWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXVjdl9zb2NrX3NlbmRtc2dcIixcbiAgICBcIml1Y3Zfc29ja19yZWN2bXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgQUZfSVVDViBzb2NrZXQgc2VuZCBhbmQgcmVjZWl2ZSBwYXRocyBieSB1c2luZyBhdG9taWNfeGNoZyBmb3IgdGhlIG1zZ19yZWN2IHZhcmlhYmxlIGFuZCBtb3ZpbmcgaXVjdl9zZW5kX2N0cmwgb3V0IG9mIGEgc3BpbmxvY2sgYmxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIHNvY2tldCBsb2dpYyBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyB0ZXN0YWJsZSBpbiBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmZjdlYTcxNzU1NDViNGRkOGQ3NDAzNzk2MWMzOWNkNjlhZDA3NDk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTM6MTk6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbmluZGV4IGVhMDQ3YmFiNjVlN2MuLmE3YzBmNjBiYjViZmMgMTAwNjQ0XG4tLS0gYS9uZXQvaXVjdi9hZl9pdWN2LmNcbisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuQEAgLTIxMCwxMiArMjEwLDYgQEAgc3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jayxcbiBcdHBoc19oZHItXHUwMDNlZmxhZ3MgPSBmbGFncztcbiBcdGlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKVxuIFx0XHRwaHNfaGRyLVx1MDAzZXdpbmRvdyA9IGl1Y3YtXHUwMDNlbXNnbGltaXQ7XG4tXHRlbHNlIGlmICgoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1dJTikgfHwgIWZsYWdzKSB7XG4tXHRcdGNvbmZpcm1fcmVjdiA9IGF0b21pY19yZWFkKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpO1xuLVx0XHRwaHNfaGRyLVx1MDAzZXdpbmRvdyA9IGNvbmZpcm1fcmVjdjtcbi1cdFx0aWYgKGNvbmZpcm1fcmVjdilcbi1cdFx0XHRwaHNfaGRyLVx1MDAzZWZsYWdzID0gcGhzX2hkci1cdTAwM2VmbGFncyB8IEFGX0lVQ1ZfRkxBR19XSU47XG4tXHR9XG4gXHRtZW1jcHkocGhzX2hkci1cdTAwM2VkZXN0VXNlcklELCBpdWN2LVx1MDAzZWRzdF91c2VyX2lkLCA4KTtcbiBcdG1lbWNweShwaHNfaGRyLVx1MDAzZWRlc3RBcHBOYW1lLCBpdWN2LVx1MDAzZWRzdF9uYW1lLCA4KTtcbiBcdG1lbWNweShwaHNfaGRyLVx1MDAzZXNyY1VzZXJJRCwgaXVjdi1cdTAwM2VzcmNfdXNlcl9pZCwgOCk7XG5AQCAtMjUwLDEzICsyNDQsMjIgQEAgc3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jayxcbiBcdH1cbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0FGX0lVQ1YpO1xuIFxuK1x0LyogQ2xhaW0gdGhlIHJlY2VpdmUgY3JlZGl0IGhlcmUsIG5vdCB3aGlsZSBidWlsZGluZyB0aGUgaGVhZGVyOiBldmVyeVxuK1x0ICogd2F5IHRoaXMgZnJhbWUgY2FuIGJlIGRyb3BwZWQgaGFzIG5vdyBiZWVuIHJ1bGVkIG91dCwgc28gdGhlIHdpbmRvd1xuK1x0ICogaXMgemVyb2VkIG9ubHkgZm9yIGFzIGxvbmcgYXMgdGhlIHRyYW5zbWl0IGl0c2VsZiB0YWtlcy5cbitcdCAqL1xuK1x0aWYgKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19XSU4gfHwgIWZsYWdzKSB7XG4rXHRcdGNvbmZpcm1fcmVjdiA9IGF0b21pY194Y2hnKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YsIDApO1xuK1x0XHRwaHNfaGRyLVx1MDAzZXdpbmRvdyA9IGNvbmZpcm1fcmVjdjtcbitcdFx0aWYgKGNvbmZpcm1fcmVjdilcbitcdFx0XHRwaHNfaGRyLVx1MDAzZWZsYWdzID0gcGhzX2hkci1cdTAwM2VmbGFncyB8IEFGX0lVQ1ZfRkxBR19XSU47XG4rXHR9XG4rXG4gXHRhdG9taWNfaW5jKFx1MDAyNml1Y3YtXHUwMDNlc2tic19pbl94bWl0KTtcbiBcdGVyciA9IGRldl9xdWV1ZV94bWl0KHNrYik7XG4gXHRpZiAobmV0X3htaXRfZXZhbChlcnIpKSB7XG4gXHRcdGF0b21pY19kZWMoXHUwMDI2aXVjdi1cdTAwM2Vza2JzX2luX3htaXQpO1xuLVx0fSBlbHNlIHtcbi1cdFx0YXRvbWljX3N1Yihjb25maXJtX3JlY3YsIFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpO1xuLVx0XHRXQVJOX09OKGF0b21pY19yZWFkKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpIFx1MDAzYyAwKTtcbitcdFx0YXRvbWljX2FkZChjb25maXJtX3JlY3YsIFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpO1xuIFx0fVxuIFx0cmV0dXJuIG5ldF94bWl0X2V2YWwoZXJyKTtcbiBcbkBAIC0xMjQxLDYgKzEyNDQsNyBAQCBzdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBcdHN0cnVjdCBpdWN2X3NvY2sgKml1Y3YgPSBpdWN2X3NrKHNrKTtcbiBcdHVuc2lnbmVkIGludCBjb3BpZWQsIHJsZW47XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqcnNrYiwgKmNza2I7XG4rXHRib29sIHNlbmRfd2luID0gZmFsc2U7XG4gXHRpbnQgZXJyID0gMDtcbiBcdHUzMiBvZmZzZXQ7XG4gXG5AQCAtMTMzMSwxNiArMTMzNSwyMCBAQCBzdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZpdWN2LVx1MDAzZWJhY2tsb2dfc2tiX3EpKSB7XG4gXHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNml1Y3YtXHUwMDNlbWVzc2FnZV9xLmxpc3QpKVxuIFx0XHRcdFx0aXVjdl9wcm9jZXNzX21lc3NhZ2VfcShzayk7XG4tXHRcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNml1Y3YtXHUwMDNlbXNnX3JlY3YpIFx1MDAzZT1cbi1cdFx0XHRcdFx0XHRcdGl1Y3YtXHUwMDNlbXNnbGltaXQgLyAyKSB7XG4tXHRcdFx0XHRlcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1dJTik7XG4tXHRcdFx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9ESVNDT05OO1xuLVx0XHRcdFx0XHRzay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbitcdFx0XHRpZiAoaXVjdi1cdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUiBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgYXRvbWljX3JlYWQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdikgXHUwMDNlPVxuK1x0XHRcdFx0XHRcdFx0aXVjdi1cdTAwM2Vtc2dsaW1pdCAvIDIpXG4rXHRcdFx0XHRzZW5kX3dpbiA9IHRydWU7XG4gXHRcdH1cbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubG9jayk7XG4rXG4rXHRcdGlmIChzZW5kX3dpbikge1xuK1x0XHRcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfV0lOKTtcbitcdFx0XHRpZiAoZXJyKSB7XG4rXHRcdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjtcbitcdFx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4rXHRcdFx0fVxuK1x0XHR9XG4gXHR9XG4gXG4gZG9uZTpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjE5OjU2LjIwODg0MDgxM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzU0NTQxMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgTmV0L0lVQ1YgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYG5ldC9pdWN2L2FmX2l1Y3YuY2AuIFNwZWNpZmljYWxseSwgaXQncyBtb2RpZnlpbmcgYGFmaXVjdl9oc19zZW5kYCBhbmQgYGl1Y3Zfc29ja19yZWN2bXNnYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIHNvY2tldCBmYW1pbHkgY2hhbmdlIOKAkyBBRl9JVUNWLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJSaWdodCwgQUZfSVVDVi4uLiBpcyB0aGF0IGV2ZW4gZ29pbmcgdG8gYmUgcmVsZXZhbnQgaW4gbXkgc3RhbmRhcmQgdGVzdCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRT9cIiBJIG5lZWQgdG8gdmVyaWZ5IGlmIHRoYXQgc29ja2V0IGZhbWlseSBpcyBldmVuIHJlYWNoYWJsZSBpbiB0aG9zZSBzZXR0aW5ncyBiZWZvcmUgSSBnbyBkb3duIGEgcmFiYml0IGhvbGUuIEFoLCB5ZXMsIEFGX0lVQ1YgaXMgZm9yIHMzOTAsIHRoYXQncyByaWdodC4gQnV0IHRoZSBxdWVzdGlvbiBpczogaXMgaXQgKnNvbGVseSogZm9yIHMzOTA/IExldCdzIHZlcmlmeSB0aGF0LiBOZWVkIHRvIGNoZWNrIGBuZXQvaXVjdi9LY29uZmlnYCB0byBjb25maXJtIHRoZSBhcmNoaXRlY3R1cmUgZGVwZW5kZW5jeSBhbmQgYW55IGFzc29jaWF0ZWQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzoyMDowMC40ODQyOTg5NThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NzA3NDU5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUZfSVVDVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzoyMDowMC41OTMwMTQyNDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMxMjY0OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50IGRvd246XG5cbioqQ2hlY2tpbmcgb24gdGhlIEV4aXN0ZW5jZSBvZiBhIEtjb25maWcgRmlsZSoqXG5cbk9rYXksIHNvIEknbSB3b3JraW5nIHdpdGggdGhlIG5ldHdvcmsgSVVDViBjb2RlLCBhbmQgYSBuYW1lIGp1c3QgcG9wcGVkIGludG8gbXkgaGVhZDogYG5ldC9pdWN2L0tjb25maWdgLiAqQnV0IHdhaXQgYSBzZWNvbmQuLi4qIElzIGl0IGV2ZW4gdGhlcmU/IEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCBmaWxlIGV4aXN0cywgc28gSSBjYW4gY29udGludWUgd2l0aCB3aGF0ZXZlciBJIHdhcyBkb2luZy4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgYG5ldC9pdWN2L2AgZGlyZWN0b3J5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgS2NvbmZpZ2AgZmlsZSBpcyBhY3R1YWxseSBwcmVzZW50IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBhcyBpdCdzIGNyaXRpY2FsIHRvIHRoZSBidWlsZCBwcm9jZXNzIGluIHRoaXMgYXJlYS4gTm8gc2Vuc2UgaW4gY2hhc2luZyBnaG9zdHMhIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhlIGZpbGUncyBwcmVzZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjIwOjA0LjAyNDI4MTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwibmV0L2l1Y3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYWZfaXVjdi5jXCIsXG4gICAgXCJpdWN2LmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MjA6MDQuMDI0MzI1NzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTcyNzYxMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgeW91ciBzdW1tYXJ5LCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipLY29uZmlnIExvY2F0aW9uIERpbGVtbWEqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBwcm9qZWN0LCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQncyBuYWdnaW5nIGF0IG1lIGlzLCB3aGVyZSB0aGUgaGVjayBpcyB0aGUgS2NvbmZpZyBmaWxlPyBJdOKAmXMgZnVuZGFtZW50YWwgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBrZXJuZWwgKG9yIHdoYXRldmVyIHN5c3RlbSBJJ20gd29ya2luZyB3aXRoKS4gSXQncyB0aGUgY2VudHJhbCBwb2ludCwgdGhlIFJvc2V0dGEgU3RvbmUgb2YgaG93IGV2ZXJ5dGhpbmcgZml0cyB0b2dldGhlci4gSSBuZWVkIHRvIGdldCBteSBiZWFyaW5ncyBxdWlja2x5LiBXaXRob3V0IGl0LCBJJ20gZmx5aW5nIGJsaW5kLCBhbmQgdGhhdCdzIG5vdCBhY2NlcHRhYmxlLiBJcyBpdCBpbiB0aGUgcm9vdCBkaXJlY3Rvcnk/IEEgc3BlY2lmaWMgc3ViZGlyZWN0b3J5PyBEaWQgdGhleSB1c2UgdGhlIHN0YW5kYXJkIG5hbWluZyBjb252ZW50aW9ucywgb3IgYXJlIHdlIGRlYWxpbmcgd2l0aCBzb21lIGN1c3RvbSBzZXR1cCBoZXJlPyBUaGlzIGlzIGdvaW5nIHRvIHNldCB0aGUgdG9uZSBmb3IgdGhlIGVudGlyZSBjb25maWd1cmF0aW9uIHByb2Nlc3MsIHNvIEkgbmVlZCB0byBmaW5kIGl0IEFTQVAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MzUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzoyMDowNi45OTcwODk5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIzNDg3MzcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBRl9JVUNWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjIwOjA3LjExOTQ0NzIxOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzAwOTQwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBBRl9JVUNWYC4gR2l2ZW4gdGhhdCBJJ20gZGVhbGluZyB3aXRoIGtlcm5lbCBpbnRlcm5hbHMsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIHJpZ2h0PyBJdCdzIHRoZSBzdGFuZGFyZCB3YXkgdG8gZmluZCBvdXQgaG93IHRoaXMgcGFydGljdWxhciBwcm90b2NvbCBpcyBlbmFibGVkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gU28sIGxldCdzIGZpcmUgdXAgYSBzZWFyY2ggYWNyb3NzIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgYW5kIHNlZSB3aGF0IHdlIGNhbiB0dXJuIHVwIHdpdGggdGhhdCBleGFjdCBzdHJpbmcsIGBBRl9JVUNWYC4gSG9wZWZ1bGx5LCB0aGUgY29uZmlndXJhdGlvbiBrbm9icyB3aWxsIGJlIGNsZWFybHkgbGFiZWxlZCBhbmQgd2VsbC1kb2N1bWVudGVkLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIHBhdGggdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgaXMgY29udHJvbGxlZCBhbmQgaWYgdGhlcmUncyBhbnl0aGluZyBJIG5lZWQgdG8ga25vdyBhYm91dCBpdHMgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODQ5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MjA6MTAuMTg5NTQ0MDE4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY0MTY3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQUZfSVVDVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L0tjb25maWc9MTE9Y29uZmlnIEFGSVVDVlxcbi0tXFxubmV0L2l1Y3YvS2NvbmZpZy0xMy1cXHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZcXG5uZXQvaXVjdi9LY29uZmlnOjE0OlxcdHByb21wdCBcXFwiQUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXFxcIlxcbm5ldC9pdWN2L0tjb25maWctMTUtXFx0aGVscFxcbm5ldC9pdWN2L0tjb25maWc6MTY6XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIEFGX0lVQ1Ygc29ja2V0IGFwcGxpY2F0aW9uc1xcbm5ldC9pdWN2L0tjb25maWctMTctXFx0ICBiYXNlZCBvbiB6L1ZNIGludGVyLXVzZXIgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIG9yIGJhc2VkIG9uXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDI9c3RhdGljIHN0cnVjdCBwcm90byBpdWN2X3Byb3RvID0ge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0MzpcXHQubmFtZVxcdFxcdD0gXFxcIkFGX0lVQ1ZcXFwiLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00NC1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ5PXN0YXRpYyBzdHJ1Y3QgaXVjdl9oYW5kbGVyIGFmX2l1Y3ZfaGFuZGxlcjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTAtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjUxOi8qIHNwZWNpYWwgQUZfSVVDViBJUFJNIG1lc3NhZ2VzICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTUyLXN0YXRpYyBjb25zdCB1OCBpcHJtX3NodXRkb3duWzhdID1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xMDc9c3RhdGljIGlubGluZSB2b2lkIGxvd19ubWNweSh1bnNpZ25lZCBjaGFyICpkc3QsIGNoYXIgKnNyYylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMTgtICpcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTE5OiAqIEZvciBJVUNWX0lQUk1EQVRBLCBBRl9JVUNWIHVzZXMgdGhlIGZvbGxvd2luZyBjb252ZW50aW9uIHRvIHRyYW5zcG9ydCBzb2NrZXRcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTIwLSAqIGRhdGE6XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTY2PXN0YXRpYyBpbmxpbmUgaW50IGl1Y3ZfYmVsb3dfbXNnbGltKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzEtXFx0XFx0cmV0dXJuIDE7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE3MjpcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSVVDVilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTczLVxcdFxcdHJldHVybiAoYXRvbWljX3JlYWQoXFx1MDAyNml1Y3YtXFx1MDAzZXNrYnNfaW5feG1pdCkgXFx1MDAzYyBpdWN2LVxcdTAwM2VwYXRoLVxcdTAwM2Vtc2dsaW0pO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE5Nz1zdGF0aWMgaW50IGFmaXVjdl9oc19zZW5kKHN0cnVjdCBpdWN2X21lc3NhZ2UgKmltc2csIHN0cnVjdCBzb2NrICpzb2NrLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNy1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA4OlxcdHBoc19oZHItXFx1MDAzZW1hZ2ljID0gRVRIX1BfQUZfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA5LVxcdHBoc19oZHItXFx1MDAzZXZlcnNpb24gPSAxO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTAtXFx0cGhzX2hkci1cXHUwMDNlZmxhZ3MgPSBmbGFncztcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjExOlxcdGlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTItXFx0XFx0cGhzX2hkci1cXHUwMDNld2luZG93ID0gaXVjdi1cXHUwMDNlbXNnbGltaXQ7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzA6XFx0ZGV2X2hhcmRfaGVhZGVyKHNrYiwgc2tiLVxcdTAwM2VkZXYsIEVUSF9QX0FGX0lVQ1YsIE5VTEwsIE5VTEwsIHNrYi1cXHUwMDNlbGVuKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMxLVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTI0NC1cXHR9XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjI0NTpcXHRza2ItXFx1MDAzZXByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfQUZfSVVDVik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTI0Ni1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yNTAtXFx0ICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjI1MTpcXHRpZiAoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1dJTiB8fCAhZmxhZ3MpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjUyLVxcdFxcdGNvbmZpcm1fcmVjdiA9IGF0b21pY194Y2hnKFxcdTAwMjZpdWN2LVxcdTAwM2Vtc2dfcmVjdiwgMCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjU0LVxcdFxcdGlmIChjb25maXJtX3JlY3YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjI1NTpcXHRcXHRcXHRwaHNfaGRyLVxcdTAwM2VmbGFncyA9IHBoc19oZHItXFx1MDAzZWZsYWdzIHwgQUZfSVVDVl9GTEFHX1dJTjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjU2LVxcdH1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0zOTg9c3RhdGljIHZvaWQgaXVjdl9zb2NrX2Nsb3NlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy00MTEtXFx0Y2FzZSBJVUNWX0NPTk5FQ1RFRDpcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDEyOlxcdFxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0MTM6XFx0XFx0XFx0ZXJyID0gaXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19GSU4pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00MTQtXFx0XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gSVVDVl9ESVNDT05OO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTQ2OT1zdGF0aWMgc3RydWN0IHNvY2sgKml1Y3Zfc29ja19hbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8sIGdmcF90IHByaW8sIGludCBrZXJuKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ5Ni1cXHRpZiAocHJfaXVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDk3OlxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDk4LVxcdGVsc2VcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NDk5OlxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTUwMC1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz01ODU9c3RhdGljIGludCBpdWN2X3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy01OTYtXFx0aWYgKGFkZHJfbGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pdWN2KSB8fFxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo1OTc6XFx0ICAgIGFkZHItXFx1MDAzZXNhX2ZhbWlseSAhPSBBRl9JVUNWKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy01OTgtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjM2LVxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IElVQ1ZfQk9VTkQ7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjYzNzpcXHRcXHRcXHRpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MzgtXFx0XFx0XFx0aWYgKCFpdWN2LVxcdTAwM2Vtc2dsaW1pdClcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NTAtXFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gSVVDVl9CT1VORDtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjUxOlxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjUyLVxcdFxcdHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjY4PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NzYtXFx0bWVtY3B5KGl1Y3YtXFx1MDAzZXNyY191c2VyX2lkLCBpdWN2X3VzZXJpZCwgOCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY3NzpcXHRpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0lVQ1Y7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY3OC1cXHRzay1cXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTczNj1zdGF0aWMgaW50IGl1Y3Zfc29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc0My1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzQ0OlxcdGlmIChhbGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pdWN2KSB8fCBhZGRyLVxcdTAwM2VzYV9mYW1pbHkgIT0gQUZfSVVDVilcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzQ1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc1MC1cXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IElVQ1ZfT1BFTiBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NTE6XFx0ICAgIGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NTItXFx0XFx0cmV0dXJuIC1FQkFERkQ7IC8qIGV4cGxpY2l0IGJpbmQgcmVxdWlyZWQgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NjgtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjc2OTpcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjc3MDpcXHRcXHRlcnIgPSBpdWN2X3NlbmRfY3RybChzb2NrLVxcdTAwM2VzaywgQUZfSVVDVl9GTEFHX1NZTik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc3MS1cXHRlbHNlXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzgzLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3ODQ6XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODUtXFx0XFx0aXVjdl9zZXZlcl9wYXRoKHNrLCAwKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz04NzI9c3RhdGljIGludCBpdWN2X3NvY2tfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtODc4LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo4Nzk6XFx0YWRkci1cXHUwMDNlc2FfZmFtaWx5ID0gQUZfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtODgwLVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTkxOT1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDAxLVxcdCAqIGZvciBTT0NLX1NUUkVBTSB3ZSBtaWdodCB3YW50IHRvIGltcHJvdmUgaXQgaW4gZnV0dXJlICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEwMDI6XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwMDMtXFx0XFx0aGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGFmX2l1Y3ZfdHJhbnNfaGRyKSArXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA0Ni1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA0NzpcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTA0OC1cXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZpdWN2LVxcdTAwM2Vtc2dfc2VudCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTI0MD1zdGF0aWMgaW50IGl1Y3Zfc29ja19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzEyLVxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEzMTM6XFx0XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMTQtXFx0XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMzctXFx0XFx0XFx0XFx0aXVjdl9wcm9jZXNzX21lc3NhZ2VfcShzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEzMzg6XFx0XFx0XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSIFxcdTAwMjZcXHUwMDI2XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMzktXFx0XFx0XFx0ICAgIGF0b21pY19yZWFkKFxcdTAwMjZpdWN2LVxcdTAwM2Vtc2dfcmVjdikgXFx1MDAzZT1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzQ1LVxcdFxcdGlmIChzZW5kX3dpbikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMzQ2OlxcdFxcdFxcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfV0lOKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTM0Ny1cXHRcXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTQyNj1zdGF0aWMgaW50IGl1Y3Zfc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NTEtXFx0ICAgIHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBJVUNWX0NPTk5FQ1RFRCkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNDUyOlxcdFxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NTMtXFx0XFx0XFx0dHhtc2cuY2xhc3MgPSAwO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzAtXFx0XFx0fSBlbHNlXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NzE6XFx0XFx0XFx0aXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19TSFQpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDcyLVxcdH1cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc1LVxcdGlmIChob3cgPT0gUkNWX1NIVVRET1dOIHx8IGhvdyA9PSBTSFVURE9XTl9NQVNLKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NzY6XFx0XFx0aWYgKChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNDc3LVxcdFxcdCAgICBpdWN2LVxcdTAwM2VwYXRoKSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTYxNT1zdGF0aWMgaW50IGl1Y3ZfY2FsbGJhY2tfY29ubnJlcShzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2NzQtXFx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2NzU6XFx0bml1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3Ni1cXHRuc2stXFx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xODcyPXN0YXRpYyBpbnQgYWZpdWN2X2hzX2NhbGxiYWNrX3N5bihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg4Mi1cXHRcXHRhZml1Y3Zfc3dhcF9zcmNfZGVzdChza2IpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODgzOlxcdFxcdHRyYW5zX2hkci1cXHUwMDNlZmxhZ3MgPSBBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0ZJTjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg4NC1cXHRcXHRlcnIgPSBkZXZfcXVldWVfeG1pdChza2IpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4OTQtXFx0XFx0YWZpdWN2X3N3YXBfc3JjX2Rlc3Qoc2tiKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTg5NTpcXHRcXHR0cmFuc19oZHItXFx1MDAzZWZsYWdzID0gQUZfSVVDVl9GTEFHX1NZTiB8IEFGX0lVQ1ZfRkxBR19GSU47XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE4OTYtXFx0XFx0ZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTA0LVxcdGl1Y3Zfc29ja19pbml0KG5zaywgc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxOTA1OlxcdG5pdWN2LVxcdTAwM2V0cmFuc3BvcnQgPSBBRl9JVUNWX1RSQU5TX0hJUEVSO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xOTA2LVxcdG5pdWN2LVxcdTAwM2Vtc2dsaW1pdCA9IGl1Y3YtXFx1MDAzZW1zZ2xpbWl0O1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MTgtXFx0YWZpdWN2X3N3YXBfc3JjX2Rlc3Qoc2tiKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTkxOTpcXHR0cmFuc19oZHItXFx1MDAzZWZsYWdzID0gQUZfSVVDVl9GTEFHX1NZTiB8IEFGX0lVQ1ZfRkxBR19BQ0s7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MjAtXFx0dHJhbnNfaGRyLVxcdTAwM2V3aW5kb3cgPSBuaXVjdi1cXHUwMDNlbXNnbGltaXQ7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjA2Nj1zdGF0aWMgaW50IGFmaXVjdl9oc19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDg5LVxcdHNrX2Zvcl9lYWNoKHNrLCBcXHUwMDI2aXVjdl9za19saXN0LmhlYWQpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA5MDpcXHRcXHRpZiAodHJhbnNfaGRyLVxcdTAwM2VmbGFncyA9PSBBRl9JVUNWX0ZMQUdfU1lOKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwOTEtXFx0XFx0XFx0aWYgKCghbWVtY21wKFxcdTAwMjZpdWN2X3NrKHNrKS1cXHUwMDNlc3JjX25hbWUsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzMC1cXHRzd2l0Y2ggKHRyYW5zX2hkci1cXHUwMDNlZmxhZ3MpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjEzMTpcXHRjYXNlIEFGX0lVQ1ZfRkxBR19TWU46XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMzItXFx0XFx0LyogY29ubmVjdCByZXF1ZXN0ICovXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzNC1cXHRcXHRicmVhaztcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjEzNTpcXHRjYXNlIChBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0FDSyk6XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMzYtXFx0XFx0LyogY29ubmVjdCByZXF1ZXN0IGNvbmZpcm1lZCAqL1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMzgtXFx0XFx0YnJlYWs7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMzk6XFx0Y2FzZSAoQUZfSVVDVl9GTEFHX1NZTiB8IEFGX0lVQ1ZfRkxBR19GSU4pOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQwLVxcdFxcdC8qIGNvbm5lY3QgcmVxdWVzdCByZWZ1c2VkICovXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0Mi1cXHRcXHRicmVhaztcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE0MzpcXHRjYXNlIChBRl9JVUNWX0ZMQUdfRklOKTpcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0NC1cXHRcXHQvKiBjbG9zZSByZXF1ZXN0ICovXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0Ni1cXHRcXHRicmVhaztcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE0NzpcXHRjYXNlIChBRl9JVUNWX0ZMQUdfV0lOKTpcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE0OC1cXHRcXHRlcnIgPSBhZml1Y3ZfaHNfY2FsbGJhY2tfd2luKHNrLCBza2IpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNTMtXFx0XFx0ZmFsbHRocm91Z2g7XFx0LyogYW5kIHJlY2VpdmUgbm9uLXplcm8gbGVuZ3RoIGRhdGEgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjE1NDpcXHRjYXNlIChBRl9JVUNWX0ZMQUdfU0hUKTpcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE1NS1cXHRcXHQvKiBzaHV0ZG93biByZXF1ZXN0ICovXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjIxND1zdGF0aWMgaW50IGFmaXVjdl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMjgtXFx0XFx0XFx0XFx0aWYgKGV2ZW50ID09IE5FVERFVl9HT0lOR19ET1dOKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjI5OlxcdFxcdFxcdFxcdFxcdGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfRklOKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIzMC1cXHRcXHRcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0RJU0NPTk47XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgaXVjdl9zb2NrX2ZhbWlseV9vcHMgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyOTc6XFx0LmZhbWlseVxcdD0gQUZfSVVDVixcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5OC1cXHQub3duZXJcXHQ9IFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIzMDI9c3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpdWN2X3BhY2tldF90eXBlID0ge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMzAzOlxcdC50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfQUZfSVVDViksXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIzMDQtXFx0LmZ1bmMgPSBhZml1Y3ZfaHNfcmN2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzoyMDoxMC4zMTU5NjYxNTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5MjEyOTkwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQUZfSVVDViBTb2NrZXQgRmFtaWx5KipcblxuUmlnaHQsIHNvICpBRl9JVUNWKi4uLiB0aGF0J3MgYSBzb2NrZXQgZmFtaWx5LCBvZiBjb3Vyc2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGV0YWlscy4gTGV0IG1lIHBpbnBvaW50IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBLY29uZmlnIGZpbGUgc2hvdWxkIGJlIGluIGBuZXQvaXVjdi9LY29uZmlnYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gTGV0J3MgZGl2ZSBpbiBhbmQgdGFrZSBhIGxvb2sgYXQgYG5ldC9pdWN2L0tjb25maWdgIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgYXZhaWxhYmxlIGFuZCBob3cgaXQncyBkZWZpbmVkLiBJJ2xsIGJydXNoIHVwIG9uIGl0cyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MjA6MTMuOTA4MDk4MjUxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIElVQ1ZcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gUzM5MFxcbiAgIDQ6XFx0XFx0ZGVmX3RyaXN0YXRlIHkgaWYgUzM5MFxcbiAgIDU6XFx0XFx0cHJvbXB0IFxcXCJJVUNWIHN1cHBvcnQgKFMzOTAgLSB6L1ZNIG9ubHkpXFxcIlxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIGludGVyLXVzZXIgY29tbXVuaWNhdGlvblxcbiAgIDg6XFx0XFx0ICB1bmRlciBWTSBvciBWSUYuIElmIHlvdSBydW4gb24gei9WTSwgc2F5IFxcXCJZXFxcIiB0byBlbmFibGUgYSBmYXN0XFxuICAgOTpcXHRcXHQgIGNvbW11bmljYXRpb24gbGluayBiZXR3ZWVuIFZNIGd1ZXN0cy5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIEFGSVVDVlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBTMzkwXFxuICAxMzpcXHRcXHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZcXG4gIDE0OlxcdFxcdHByb21wdCBcXFwiQUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXFxcIlxcbiAgMTU6XFx0XFx0aGVscFxcbiAgMTY6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIEFGX0lVQ1Ygc29ja2V0IGFwcGxpY2F0aW9uc1xcbiAgMTc6XFx0XFx0ICBiYXNlZCBvbiB6L1ZNIGludGVyLXVzZXIgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIG9yIGJhc2VkIG9uXFxuICAxODpcXHRcXHQgIEhpcGVyU29ja2V0cy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MjA6MTMuOTA4MjA0NTIxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NjY0Mjg2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFMzOTAgQ29kZSBEZXBlbmRlbmN5KipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCB0aGlzIGNvZGUgaXMgY2xlYXJseSBjb250aW5nZW50IG9uIHRoZSBTMzkwIGFyY2hpdGVjdHVyZS4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgYWx3YXlzIGFib3V0IHJlYWNoYWJpbGl0eTogSXMgdGhpcyByZWxldmFudCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIEFGX0lVQ1Ygc29ja2V0IHN1cHBvcnQsIGdvaW5nIHRvIGJlIGV4ZXJjaXNlZCBpbiBhIHRlc3RpbmcgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRT8gVGhhbmtmdWxseSwgc3l6a2FsbGVyIHRlc3RzIHRoZSBTMzkwIGFyY2hpdGVjdHVyZSB3aXRoaW4gUUVNVS4gQWhhLCB3YWl0IGEgc2Vjb25kLCBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlOyBzeXprYWxsZXIncyB0ZXN0aW5nIG9mIHMzOTB4IGNvbWVzIGltbWVkaWF0ZWx5IHRvIG1pbmQuXG5cblRoZSBwcm9tcHQgZXhwbGljaXRseSBtZW50aW9ucyBcIkFGX0lVQ1YgU29ja2V0IHN1cHBvcnQgKFMzOTAgLSB6L1ZNIGFuZCBIaXBlclNvY2tldHMgdHJhbnNwb3J0KS5cIiBTbywgaXMgdGhhdCBsZXZlbCBvZiBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGFjY2Vzc2libGUgd2l0aGluIFFFTVU/IFllcywgdGhhdCdzIGFub3RoZXIgY3JpdGljYWwgcG9pbnQuIFN5emthbGxlciBzdXBwb3J0cyBzMzkweCBpbnN0YW5jZXMuIFRoYXQncyBhIGdvb2Qgc2lnbi4gQWxyaWdodCwgdG8gY29uZmlybSB0aGlzIGxldCBtZSBub3cgdmVyaWZ5IGlmIHRoZXJlIGFyZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIHNwZWNpZmljYWxseSBmb3IgQUZfSVVDVi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk5MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjIwOjE4Ljc3NDYzNzYxNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk5OTQ1NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQUZfSVVDVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvS2NvbmZpZz0xMT1jb25maWcgQUZJVUNWXFxuLS1cXG5uZXQvaXVjdi9LY29uZmlnLTEzLVxcdGRlZl90cmlzdGF0ZSBtIGlmIFFFVEhfTDMgfHwgSVVDVlxcbm5ldC9pdWN2L0tjb25maWc6MTQ6XFx0cHJvbXB0IFxcXCJBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydClcXFwiXFxubmV0L2l1Y3YvS2NvbmZpZy0xNS1cXHRoZWxwXFxubmV0L2l1Y3YvS2NvbmZpZzoxNjpcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgQUZfSVVDViBzb2NrZXQgYXBwbGljYXRpb25zXFxubmV0L2l1Y3YvS2NvbmZpZy0xNy1cXHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz00Mj1zdGF0aWMgc3RydWN0IHByb3RvIGl1Y3ZfcHJvdG8gPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQzOlxcdC5uYW1lXFx0XFx0PSBcXFwiQUZfSVVDVlxcXCIsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQ0LVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDk9c3RhdGljIHN0cnVjdCBpdWN2X2hhbmRsZXIgYWZfaXVjdl9oYW5kbGVyO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy01MC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NTE6Lyogc3BlY2lhbCBBRl9JVUNWIElQUk0gbWVzc2FnZXMgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTItc3RhdGljIGNvbnN0IHU4IGlwcm1fc2h1dGRvd25bOF0gPVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTEwNz1zdGF0aWMgaW5saW5lIHZvaWQgbG93X25tY3B5KHVuc2lnbmVkIGNoYXIgKmRzdCwgY2hhciAqc3JjKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTExOC0gKlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMTk6ICogRm9yIElVQ1ZfSVBSTURBVEEsIEFGX0lVQ1YgdXNlcyB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb24gdG8gdHJhbnNwb3J0IHNvY2tldFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMjAtICogZGF0YTpcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjY9c3RhdGljIGlubGluZSBpbnQgaXVjdl9iZWxvd19tc2dsaW0oc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE3MS1cXHRcXHRyZXR1cm4gMTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTcyOlxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19JVUNWKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNzMtXFx0XFx0cmV0dXJuIChhdG9taWNfcmVhZChcXHUwMDI2aXVjdi1cXHUwMDNlc2tic19pbl94bWl0KSBcXHUwMDNjIGl1Y3YtXFx1MDAzZXBhdGgtXFx1MDAzZW1zZ2xpbSk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MTk3PXN0YXRpYyBpbnQgYWZpdWN2X2hzX3NlbmQoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqaW1zZywgc3RydWN0IHNvY2sgKnNvY2ssXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA3LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDg6XFx0cGhzX2hkci1cXHUwMDNlbWFnaWMgPSBFVEhfUF9BRl9JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDktXFx0cGhzX2hkci1cXHUwMDNldmVyc2lvbiA9IDE7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMC1cXHRwaHNfaGRyLVxcdTAwM2VmbGFncyA9IGZsYWdzO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTE6XFx0aWYgKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxMi1cXHRcXHRwaHNfaGRyLVxcdTAwM2V3aW5kb3cgPSBpdWN2LVxcdTAwM2Vtc2dsaW1pdDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjktXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDpcXHRkZXZfaGFyZF9oZWFkZXIoc2tiLCBza2ItXFx1MDAzZWRldiwgRVRIX1BfQUZfSVVDViwgTlVMTCwgTlVMTCwgc2tiLVxcdTAwM2VsZW4pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMzEtXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjQ0LVxcdH1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjQ1OlxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjQ2LVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTI1MC1cXHQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjUxOlxcdGlmIChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfV0lOIHx8ICFmbGFncykge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yNTItXFx0XFx0Y29uZmlybV9yZWN2ID0gYXRvbWljX3hjaGcoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2LCAwKTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yNTQtXFx0XFx0aWYgKGNvbmZpcm1fcmVjdilcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjU1OlxcdFxcdFxcdHBoc19oZHItXFx1MDAzZWZsYWdzID0gcGhzX2hkci1cXHUwMDNlZmxhZ3MgfCBBRl9JVUNWX0ZMQUdfV0lOO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yNTYtXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTM5OD1zdGF0aWMgdm9pZCBpdWN2X3NvY2tfY2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQxMS1cXHRjYXNlIElVQ1ZfQ09OTkVDVEVEOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0MTI6XFx0XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjQxMzpcXHRcXHRcXHRlcnIgPSBpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX0ZJTik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTQxNC1cXHRcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0RJU0NPTk47XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY5PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNDk2LVxcdGlmIChwcl9pdWN2KVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTc6XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy00OTgtXFx0ZWxzZVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo0OTk6XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19ISVBFUjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTAwLVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTU4NT1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTU5Ni1cXHRpZiAoYWRkcl9sZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2l1Y3YpIHx8XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjU5NzpcXHQgICAgYWRkci1cXHUwMDNlc2FfZmFtaWx5ICE9IEFGX0lVQ1YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTU5OC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MzYtXFx0XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gSVVDVl9CT1VORDtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjM3OlxcdFxcdFxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTYzOC1cXHRcXHRcXHRpZiAoIWl1Y3YtXFx1MDAzZW1zZ2xpbWl0KVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY1MC1cXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0JPVU5EO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2NTE6XFx0XFx0aXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NTItXFx0XFx0c2stXFx1MDAzZXNrX2FsbG9jYXRpb24gfD0gR0ZQX0RNQTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz02Njg9c3RhdGljIGludCBpdWN2X3NvY2tfYXV0b2JpbmQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY3Ni1cXHRtZW1jcHkoaXVjdi1cXHUwMDNlc3JjX3VzZXJfaWQsIGl1Y3ZfdXNlcmlkLCA4KTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6Njc3OlxcdGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSVVDVjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjc4LVxcdHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uIHw9IEdGUF9ETUE7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NzM2PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzQzLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo3NDQ6XFx0aWYgKGFsZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2l1Y3YpIHx8IGFkZHItXFx1MDAzZXNhX2ZhbWlseSAhPSBBRl9JVUNWKVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03NDUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzUwLVxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9PUEVOIFxcdTAwMjZcXHUwMDI2XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjc1MTpcXHQgICAgaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc1Mi1cXHRcXHRyZXR1cm4gLUVCQURGRDsgLyogZXhwbGljaXQgYmluZCByZXF1aXJlZCAqL1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc2OC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzY5OlxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUilcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NzcwOlxcdFxcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNvY2stXFx1MDAzZXNrLCBBRl9JVUNWX0ZMQUdfU1lOKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNzcxLVxcdGVsc2VcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy03ODMtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjc4NDpcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTc4NS1cXHRcXHRpdWN2X3NldmVyX3BhdGgoc2ssIDApO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTg3Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcixcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy04NzgtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjg3OTpcXHRhZGRyLVxcdTAwM2VzYV9mYW1pbHkgPSBBRl9JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy04ODAtXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9OTE5PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEwMDEtXFx0ICogZm9yIFNPQ0tfU1RSRUFNIHdlIG1pZ2h0IHdhbnQgdG8gaW1wcm92ZSBpdCBpbiBmdXR1cmUgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTAwMjpcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTAwMy1cXHRcXHRoZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIpICtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDQ2LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxMDQ3OlxcdGlmIChpdWN2LVxcdTAwM2V0cmFuc3BvcnQgPT0gQUZfSVVDVl9UUkFOU19ISVBFUikge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDQ4LVxcdFxcdGF0b21pY19pbmMoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19zZW50KTtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xMjQwPXN0YXRpYyBpbnQgaXVjdl9zb2NrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzMTItXFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTMxMzpcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMxNC1cXHRcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZpdWN2LVxcdTAwM2Vtc2dfcmVjdik7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMzNy1cXHRcXHRcXHRcXHRpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKHNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTMzODpcXHRcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTMzOS1cXHRcXHRcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2KSBcXHUwMDNlPVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTEzNDUtXFx0XFx0aWYgKHNlbmRfd2luKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjEzNDY6XFx0XFx0XFx0ZXJyID0gaXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19XSU4pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMzQ3LVxcdFxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNDI2PXN0YXRpYyBpbnQgaXVjdl9zb2NrX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1MS1cXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlID09IElVQ1ZfQ09OTkVDVEVEKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE0NTI6XFx0XFx0aWYgKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ1My1cXHRcXHRcXHR0eG1zZy5jbGFzcyA9IDA7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTQ3MC1cXHRcXHR9IGVsc2VcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3MTpcXHRcXHRcXHRpdWN2X3NlbmRfY3RybChzaywgQUZfSVVDVl9GTEFHX1NIVCk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzItXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzUtXFx0aWYgKGhvdyA9PSBSQ1ZfU0hVVERPV04gfHwgaG93ID09IFNIVVRET1dOX01BU0spIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTQ3NjpcXHRcXHRpZiAoKGl1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0lVQ1YpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE0NzctXFx0XFx0ICAgIGl1Y3YtXFx1MDAzZXBhdGgpIHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0xNjE1PXN0YXRpYyBpbnQgaXVjdl9jYWxsYmFja19jb25ucmVxKHN0cnVjdCBpdWN2X3BhdGggKnBhdGgsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTY3NC1cXHRpdWN2X3NvY2tfaW5pdChuc2ssIHNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTY3NTpcXHRuaXVjdi1cXHUwMDNldHJhbnNwb3J0ID0gQUZfSVVDVl9UUkFOU19JVUNWO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjc2LVxcdG5zay1cXHUwMDNlc2tfYWxsb2NhdGlvbiB8PSBHRlBfRE1BO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE4NzI9c3RhdGljIGludCBhZml1Y3ZfaHNfY2FsbGJhY2tfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODgyLVxcdFxcdGFmaXVjdl9zd2FwX3NyY19kZXN0KHNrYik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE4ODM6XFx0XFx0dHJhbnNfaGRyLVxcdTAwM2VmbGFncyA9IEFGX0lVQ1ZfRkxBR19TWU4gfCBBRl9JVUNWX0ZMQUdfRklOO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xODg0LVxcdFxcdGVyciA9IGRldl9xdWV1ZV94bWl0KHNrYik7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg5NC1cXHRcXHRhZml1Y3Zfc3dhcF9zcmNfZGVzdChza2IpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxODk1OlxcdFxcdHRyYW5zX2hkci1cXHUwMDNlZmxhZ3MgPSBBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0ZJTjtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTg5Ni1cXHRcXHRlcnIgPSBkZXZfcXVldWVfeG1pdChza2IpO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MDQtXFx0aXVjdl9zb2NrX2luaXQobnNrLCBzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE5MDU6XFx0bml1Y3YtXFx1MDAzZXRyYW5zcG9ydCA9IEFGX0lVQ1ZfVFJBTlNfSElQRVI7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5MDYtXFx0bml1Y3YtXFx1MDAzZW1zZ2xpbWl0ID0gaXVjdi1cXHUwMDNlbXNnbGltaXQ7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkxOC1cXHRhZml1Y3Zfc3dhcF9zcmNfZGVzdChza2IpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxOTE5OlxcdHRyYW5zX2hkci1cXHUwMDNlZmxhZ3MgPSBBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0FDSztcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTkyMC1cXHR0cmFuc19oZHItXFx1MDAzZXdpbmRvdyA9IG5pdWN2LVxcdTAwM2Vtc2dsaW1pdDtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMDY2PXN0YXRpYyBpbnQgYWZpdWN2X2hzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwODktXFx0c2tfZm9yX2VhY2goc2ssIFxcdTAwMjZpdWN2X3NrX2xpc3QuaGVhZCkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMDkwOlxcdFxcdGlmICh0cmFuc19oZHItXFx1MDAzZWZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA5MS1cXHRcXHRcXHRpZiAoKCFtZW1jbXAoXFx1MDAyNml1Y3Zfc2soc2spLVxcdTAwM2VzcmNfbmFtZSxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTMwLVxcdHN3aXRjaCAodHJhbnNfaGRyLVxcdTAwM2VmbGFncykge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTMxOlxcdGNhc2UgQUZfSVVDVl9GTEFHX1NZTjpcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzMi1cXHRcXHQvKiBjb25uZWN0IHJlcXVlc3QgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTM0LVxcdFxcdGJyZWFrO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTM1OlxcdGNhc2UgKEFGX0lVQ1ZfRkxBR19TWU4gfCBBRl9JVUNWX0ZMQUdfQUNLKTpcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzNi1cXHRcXHQvKiBjb25uZWN0IHJlcXVlc3QgY29uZmlybWVkICovXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjEzOC1cXHRcXHRicmVhaztcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjEzOTpcXHRjYXNlIChBRl9JVUNWX0ZMQUdfU1lOIHwgQUZfSVVDVl9GTEFHX0ZJTik6XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIxNDAtXFx0XFx0LyogY29ubmVjdCByZXF1ZXN0IHJlZnVzZWQgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQyLVxcdFxcdGJyZWFrO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTQzOlxcdGNhc2UgKEFGX0lVQ1ZfRkxBR19GSU4pOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQ0LVxcdFxcdC8qIGNsb3NlIHJlcXVlc3QgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQ2LVxcdFxcdGJyZWFrO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTQ3OlxcdGNhc2UgKEFGX0lVQ1ZfRkxBR19XSU4pOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTQ4LVxcdFxcdGVyciA9IGFmaXVjdl9oc19jYWxsYmFja193aW4oc2ssIHNrYik7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjE1My1cXHRcXHRmYWxsdGhyb3VnaDtcXHQvKiBhbmQgcmVjZWl2ZSBub24temVybyBsZW5ndGggZGF0YSAqL1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMTU0OlxcdGNhc2UgKEFGX0lVQ1ZfRkxBR19TSFQpOlxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTU1LVxcdFxcdC8qIHNodXRkb3duIHJlcXVlc3QgKi9cXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjE0PXN0YXRpYyBpbnQgYWZpdWN2X25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIyOC1cXHRcXHRcXHRcXHRpZiAoZXZlbnQgPT0gTkVUREVWX0dPSU5HX0RPV04pXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMjk6XFx0XFx0XFx0XFx0XFx0aXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19GSU4pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjMwLVxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IElVQ1ZfRElTQ09OTjtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI5NzpcXHQuZmFtaWx5XFx0PSBBRl9JVUNWLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk4LVxcdC5vd25lclxcdD0gVEhJU19NT0RVTEUsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjMwMj1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGl1Y3ZfcGFja2V0X3R5cGUgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIzMDM6XFx0LnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKSxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjMwNC1cXHQuZnVuYyA9IGFmaXVjdl9oc19yY3YsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjIwOjE4Ljg0NDY0MTE2OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQ2MTIzOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNvY2tldCBSYWNlIENvbmRpdGlvbiBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhZml1Y3ZfaHNfc2VuZGAgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2Ag4oCTIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIGl0J3MgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBgY29uZmlybV9yZWN2YCB2YWx1ZSBpcyByZWFkLCBhbmQgdGhlbiBhbiBgYXRvbWljX3N1YmAgaXMgcGVyZm9ybWVkLiBUaGlzIGNhbiBsZWFkIHRvIGBtc2dfcmVjdmAgZ29pbmcgbmVnYXRpdmUsIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBiYWQgdGhpbmcgaW4gdGhlIHNlbmQvcmVjZWl2ZSBwYXRoLiBUaGUgZml4IGNsZXZlcmx5IHVzZXMgYGF0b21pY194Y2hnYCB0byBhdG9taWNhbGx5IHJlYWQgYW5kIGNsZWFyIGBtc2dfcmVjdmAuIFRoYXQncyBhIGNsZWFuIHdheSB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHksIHdoaWNoIEkgYXBwcmVjaWF0ZS5cblxuVGhlIHBhdGNoIGFsc28gbW92ZXMgYGl1Y3Zfc2VuZF9jdHJsYCBvdXQgb2YgdGhlIHNwaW5sb2NrIGluIGBpdWN2X3NvY2tfcmVjdm1zZ2AuIFRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHksIHJpZ2h0PyBJIHdvbmRlciBpZiB0aGlzIGNoYW5nZSB3YXJyYW50cyBzb21lIGZ1enppbmcuIEdpdmVuIHRoYXQgaXQgZGlyZWN0bHkgYWRkcmVzc2VzIGEgYnVnIGluIHRoZSBzb2NrZXQgc2VuZC9yZWNlaXZlIHBhdGgsIGFic29sdXRlbHkuIEl0J3MgYWx3YXlzIHdvcnRod2hpbGUgdG8gdGhvcm91Z2hseSB0ZXN0IGNyaXRpY2FsIGluZnJhc3RydWN0dXJlIGxpa2UgdGhpcy5cblxuV2FpdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWcuIFRoZSBjb25maWcgZm9yIHRoaXMgaXMgYEFGSVVDVmAsIG5vdCBgQUZfSVVDVmAg4oCTIGdvdCBpdC4gSSdsbCBkb3VibGUtY2hlY2sgYG5ldC9pdWN2L0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gWWVwLCBpdCdzIGBjb25maWcgQUZJVUNWYC5cblxuTGV0J3MgcXVpY2tseSBpZGVudGlmeSB0aGUgcHJpbWFyeSBmb2N1czogYGFmaXVjdl9oc19zZW5kYCBhbmQgYGl1Y3Zfc29ja19yZWN2bXNnYC4gVGhvc2UgYXJlIHRoZSBrZXkgc3ltYm9scyB0byBrZWVwIGluIG1pbmQuXG5cbk5vdywgbGV0IG1lIGp1c3QgY29uZmlybSBgYWZpdWN2X2hzX3NlbmRgIGlzbid0IGlubGluZSBvciBzdGF0aWMuIEFoLCBpdCdzIHN0YXRpYyEgVGhhdCdzIGltcG9ydGFudC4gSXMgaXQgYW4gQVBJIGVudHJ5cG9pbnQgdGhlbj8gSSBzaG91bGQgc2VlIHdoZXJlIGl0J3MgY2FsbGVkIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzgwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjIwOjI1Ljg5MDc2OTMwNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NDgzNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFmaXVjdl9oc19zZW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9MTgyPXN0YXRpYyB2b2lkIGl1Y3Zfc29ja193YWtlX21zZ2xpbShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTk0LS8qXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE5NTogKiBhZml1Y3ZfaHNfc2VuZCgpIC0gc2VuZCBhIG1lc3NhZ2UgdGhyb3VnaCBIaXBlclNvY2tldHMgdHJhbnNwb3J0XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5Ni0gKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTk3OnN0YXRpYyBpbnQgYWZpdWN2X2hzX3NlbmQoc3RydWN0IGl1Y3ZfbWVzc2FnZSAqaW1zZywgc3RydWN0IHNvY2sgKnNvY2ssXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE5OC1cXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBmbGFncylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0zNzI9c3RhdGljIGludCBpdWN2X3NlbmRfY3RybChzdHJ1Y3Qgc29jayAqc2ssIHU4IGZsYWdzKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTM4OS1cXHRcXHRza2JfcmVzZXJ2ZShza2IsIGJsZW4pO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzozOTA6XFx0XFx0ZXJyID0gYWZpdWN2X2hzX3NlbmQoTlVMTCwgc2ssIHNrYiwgZmxhZ3MpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zOTEtXFx0fVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTkxOT1zdGF0aWMgaW50IGl1Y3Zfc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDQ4LVxcdFxcdGF0b21pY19pbmMoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19zZW50KTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTA0OTpcXHRcXHRlcnIgPSBhZml1Y3ZfaHNfc2VuZChcXHUwMDI2dHhtc2csIHNrLCBza2IsIDApO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xMDUwLVxcdFxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MjA6MjUuOTk4MjU5NjAzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzE4MTk1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gU29ja2V0IE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBiZXN0IGZvY3VzIHN5bWJvbHMuIEkgc2VlIHRoYXQgYGFmaXVjdl9oc19zZW5kYCBpcyBjYWxsZWQgZnJvbSBgaXVjdl9zZW5kX2N0cmxgIGFuZCBgaXVjdl9zb2NrX3NlbmRtc2dgLiBIbW0sIGludGVyZXN0aW5nLiBBbmQsIGBpdWN2X3NvY2tfc2VuZG1zZ2AgaXMgY2xlYXJseSB0aGUgc2VuZG1zZyBjYWxsYmFjayBmb3IgdGhlIHNvY2tldCwgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2AgaXMgdGhlIHJlY3Ztc2cgY2FsbGJhY2suIEJvdGggb2YgdGhvc2Ugc29ja2V0IGZ1bmN0aW9ucyBsb29rIGxpa2UgZ29vZCBjYW5kaWRhdGVzIHRvIGNvbmNlbnRyYXRlIG9uIOKAkyB0aGV5IHJlcHJlc2VudCBrZXkgZW50cnkgcG9pbnRzIGZvciBkYXRhIHRyYW5zZmVyLiBXYWl0IGEgc2Vjb25kLCB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmllZCB0byBwcmVmZXIgbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQgZW50cnlwb2ludCBmdW5jdGlvbnMuIE9oLCByaWdodCEgYGFmaXVjdl9oc19zZW5kYCBpcyBzdGF0aWMuIFNpbmNlIGl0J3Mgc3RhdGljLCBpdCBpcyBwcm9iYWJseSBpbmxpbmVkIGFuZCBkb2Vzbid0IG9mZmVyIGEgZGlzdGluY3Qgc3ltYm9sLiBTbywgdGhhdCBsZWF2ZXMgYGl1Y3Zfc29ja19zZW5kbXNnYCBhbmQgYGl1Y3Zfc29ja19yZWN2bXNnYCBhcyB0aGUgYmV0dGVyIGNob2ljZXMuIE5vdyBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aG9zZSB0d28gc29ja2V0IGZ1bmN0aW9ucyBhcmUgc3RhdGljIGFzIHdlbGwsIHRvIG1ha2Ugc3VyZSBJIGFtIG9uIHRoZSByaWdodCBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAxMSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzoyMDozMS4zMzAwODMwNThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MzQ1MzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIml1Y3Zfc29ja19zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9OTA4PXN0YXRpYyBpbnQgaXVjdl9zZW5kX2lwcm0oc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgc3RydWN0IGl1Y3ZfbWVzc2FnZSAqbXNnLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTkxOC1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6OTE5OnN0YXRpYyBpbnQgaXVjdl9zb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy05MjAtXFx0XFx0XFx0ICAgICBzaXplX3QgbGVuKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaXVjdl9zb2NrX29wcyA9IHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjU1LVxcdC5nZXRuYW1lXFx0PSBpdWN2X3NvY2tfZ2V0bmFtZSxcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI1NjpcXHQuc2VuZG1zZ1xcdD0gaXVjdl9zb2NrX3NlbmRtc2csXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNTctXFx0LnJlY3Ztc2dcXHQ9IGl1Y3Zfc29ja19yZWN2bXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzoyMDozMS40MTg0MzU0NTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODYzNjI1MTM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBRklVQ1YgQ29kZSBQYXRoKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucywgd2hpbGUgc3RhdGljLCBhcmUgYWN0aW5nIGFzIEFQSSBlbnRyeXBvaW50cyBiZWNhdXNlIHRoZXkncmUgYXNzaWduZWQgdG8gYHByb3RvX29wc2AuIFRoYXQgbWFrZXMgYGl1Y3Zfc29ja19zZW5kbXNnYCBhbmQgYGl1Y3Zfc29ja19yZWN2bXNnYCBpZGVhbCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBXYWl0LCBhY3R1YWxseSwgYGFmaXVjdl9oc19zZW5kYCBjb3VsZCBhbHNvIGJlIGNvbnNpZGVyZWQgaWYgaXQncyBsYXJnZSwgYnV0IGBpdWN2X3NvY2tfc2VuZG1zZ2AgaXMgbGlrZWx5IHRoZSBiZXR0ZXIgY2hvaWNlLiBJdOKAmXMgaW1wb3J0YW50IHRvIHN0aWNrIHRvIEFQSSBlbnRyeXBvaW50cy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYEFGSVVDVmAgZGVwZW5kcyBvbiBgUzM5MGAsIGFuZCBpdHMgdHJpc3RhdGUgZGVmaW5pdGlvbiBoaW5nZXMgb24gZWl0aGVyIGBRRVRIX0wzYCBvciBgSVVDVmAuIFNvLCBgQUZJVUNWYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb24uIERvdWJsZS1jaGVja2luZyB0aGF0IGluIGBuZXQvaXVjdi9LY29uZmlnYCBjb25maXJtcyB0aGlzLiBUaGVyZWZvcmUsIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgc2V0IHRvIGBbXCJBRklVQ1ZcIl1gLlxuXG5IYW5nIG9uLCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBwb2ludGluZyBvdXQgdGhhdCB3ZSBzaG91bGQgZXhjbHVkZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQnV0IHRoZSBgUzM5MGAgY29kZSBpcyByZWFjaGFibGUgaW4gUUVNVSBiZWNhdXNlIGl0IHN1cHBvcnRzIGBxZW11LXN5c3RlbS1zMzkweGAsIGFuZCBzeXprYWxsZXIgaGFzIGFuIGBzMzkweGAgdGFyZ2V0LiBTbywgaXQncyBkZWZpbml0ZWx5IGZhaXIgZ2FtZSBmb3IgZnV6emluZy5cblxuT2theSwgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhlIGNvZGUgY2hhbmdlcy4gQm90aCBgYWZpdWN2X2hzX3NlbmRgIGFuZCBgaXVjdl9zb2NrX3JlY3Ztc2dgIGFyZSBtb2RpZmllZCwgYW5kIHRoZSBjaGFuZ2VzIGFkZHJlc3MgYSByYWNlIGNvbmRpdGlvbiByZWxhdGVkIHRvIHRoZSBgbXNnX3JlY3ZgIGF0b21pYyB2YXJpYWJsZS4gVGhhdCBhbG9uZSBtYWtlcyB0aGlzIGEgdmVyeSBpbnRlcmVzdGluZyB0YXJnZXQgZm9yIGZ1enppbmcuIFllcywgdGhlIGNoYW5nZXMgbG9vayBsaWtlIHRoZXkgZml4IGEgcmFjZS5cblxuV2UncmUgZ29vZCB0byBnby4gVGltZSB0byBzZXQgdXAgdGhlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Nzc1LCJPdXRwdXRUb2tlbnMiOjEzMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzoyMDo0MC4wNTQ2OTAxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTY2ODM5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZJVUNWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXVjdl9zb2NrX3NlbmRtc2dcIixcbiAgICBcIml1Y3Zfc29ja19yZWN2bXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgQUZfSVVDViBzb2NrZXQgc2VuZCBhbmQgcmVjZWl2ZSBwYXRocyBieSB1c2luZyBhdG9taWNfeGNoZyBmb3IgdGhlIG1zZ19yZWN2IHZhcmlhYmxlIGFuZCBtb3ZpbmcgaXVjdl9zZW5kX2N0cmwgb3V0IG9mIGEgc3BpbmxvY2sgYmxvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIHNvY2tldCBsb2dpYyBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyB0ZXN0YWJsZSBpbiBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGSVVDVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIml1Y3Zfc29ja19zZW5kbXNnXCIsXG4gICAgXCJpdWN2X3NvY2tfcmVjdm1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIEFGX0lVQ1Ygc29ja2V0IHNlbmQgYW5kIHJlY2VpdmUgcGF0aHMgYnkgdXNpbmcgYXRvbWljX3hjaGcgZm9yIHRoZSBtc2dfcmVjdiB2YXJpYWJsZSBhbmQgbW92aW5nIGl1Y3Zfc2VuZF9jdHJsIG91dCBvZiBhIHNwaW5sb2NrIGJsb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBzb2NrZXQgbG9naWMgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSwgd2hpY2ggaXMgdGVzdGFibGUgaW4gUUVNVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MjA6NDAuMjA2MzY0MzE0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ1OTcyMjQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjIwOjQwLjIwNjgyNTYwNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMzQ1OTI1NTYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kvbG9ja2luZyBpc3N1ZSBpbiB0aGUgQUZfSVVDViBzb2NrZXQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgaXQgZGVmZXJzIHRoZSBgaXVjdl9zZW5kX2N0cmwoKWAgY2FsbCBpbiBgaXVjdl9zb2NrX3JlY3Ztc2coKWAgdW50aWwgYWZ0ZXIgdGhlIGBpdWN2LVxcdTAwM2VtZXNzYWdlX3EubG9ja2Agc3BpbmxvY2sgaXMgcmVsZWFzZWQsIHByZXZlbnRpbmcgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBsb2NrIGludmVyc2lvbnMuIEl0IGFsc28gZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgYWZpdWN2X2hzX3NlbmQoKWAgYnkgdXNpbmcgYGF0b21pY194Y2hnKClgIHRvIGNsYWltIHJlY2VpdmUgY3JlZGl0cyBhdG9taWNhbGx5IHJpZ2h0IGJlZm9yZSB0cmFuc21pc3Npb24sIGluc3RlYWQgb2YgcmVhZGluZyBhbmQgbGF0ZXIgc3VidHJhY3RpbmcgdGhlIHZhbHVlLiBcXG5cXG5BbGwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzIGludm9sdmVkIChzdWNoIGFzIGBwaHNfaGRyYCBhbmQgYGNvbmZpcm1fcmVjdmApIGFyZSBmdWxseSBpbml0aWFsaXplZCAoZS5nLiwgYG1lbXNldChwaHNfaGRyLCAwLCBzaXplb2YoKnBoc19oZHIpKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIEtDU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZmN2VhNzE3NTU0NWI0ZGQ4ZDc0MDM3OTYxYzM5Y2Q2OWFkMDc0OTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMzoxOTo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuaW5kZXggZWEwNDdiYWI2NWU3Yy4uYTdjMGY2MGJiNWJmYyAxMDA2NDRcbi0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuY1xuKysrIGIvbmV0L2l1Y3YvYWZfaXVjdi5jXG5AQCAtMjEwLDEyICsyMTAsNiBAQCBzdGF0aWMgaW50IGFmaXVjdl9oc19zZW5kKHN0cnVjdCBpdWN2X21lc3NhZ2UgKmltc2csIHN0cnVjdCBzb2NrICpzb2NrLFxuIFx0cGhzX2hkci1cdTAwM2VmbGFncyA9IGZsYWdzO1xuIFx0aWYgKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pXG4gXHRcdHBoc19oZHItXHUwMDNld2luZG93ID0gaXVjdi1cdTAwM2Vtc2dsaW1pdDtcbi1cdGVsc2UgaWYgKChmbGFncyA9PSBBRl9JVUNWX0ZMQUdfV0lOKSB8fCAhZmxhZ3MpIHtcbi1cdFx0Y29uZmlybV9yZWN2ID0gYXRvbWljX3JlYWQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdik7XG4tXHRcdHBoc19oZHItXHUwMDNld2luZG93ID0gY29uZmlybV9yZWN2O1xuLVx0XHRpZiAoY29uZmlybV9yZWN2KVxuLVx0XHRcdHBoc19oZHItXHUwMDNlZmxhZ3MgPSBwaHNfaGRyLVx1MDAzZWZsYWdzIHwgQUZfSVVDVl9GTEFHX1dJTjtcbi1cdH1cbiBcdG1lbWNweShwaHNfaGRyLVx1MDAzZWRlc3RVc2VySUQsIGl1Y3YtXHUwMDNlZHN0X3VzZXJfaWQsIDgpO1xuIFx0bWVtY3B5KHBoc19oZHItXHUwMDNlZGVzdEFwcE5hbWUsIGl1Y3YtXHUwMDNlZHN0X25hbWUsIDgpO1xuIFx0bWVtY3B5KHBoc19oZHItXHUwMDNlc3JjVXNlcklELCBpdWN2LVx1MDAzZXNyY191c2VyX2lkLCA4KTtcbkBAIC0yNTAsMTMgKzI0NCwyMiBAQCBzdGF0aWMgaW50IGFmaXVjdl9oc19zZW5kKHN0cnVjdCBpdWN2X21lc3NhZ2UgKmltc2csIHN0cnVjdCBzb2NrICpzb2NrLFxuIFx0fVxuIFx0c2tiLVx1MDAzZXByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfQUZfSVVDVik7XG4gXG4rXHQvKiBDbGFpbSB0aGUgcmVjZWl2ZSBjcmVkaXQgaGVyZSwgbm90IHdoaWxlIGJ1aWxkaW5nIHRoZSBoZWFkZXI6IGV2ZXJ5XG4rXHQgKiB3YXkgdGhpcyBmcmFtZSBjYW4gYmUgZHJvcHBlZCBoYXMgbm93IGJlZW4gcnVsZWQgb3V0LCBzbyB0aGUgd2luZG93XG4rXHQgKiBpcyB6ZXJvZWQgb25seSBmb3IgYXMgbG9uZyBhcyB0aGUgdHJhbnNtaXQgaXRzZWxmIHRha2VzLlxuK1x0ICovXG4rXHRpZiAoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1dJTiB8fCAhZmxhZ3MpIHtcbitcdFx0Y29uZmlybV9yZWN2ID0gYXRvbWljX3hjaGcoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdiwgMCk7XG4rXHRcdHBoc19oZHItXHUwMDNld2luZG93ID0gY29uZmlybV9yZWN2O1xuK1x0XHRpZiAoY29uZmlybV9yZWN2KVxuK1x0XHRcdHBoc19oZHItXHUwMDNlZmxhZ3MgPSBwaHNfaGRyLVx1MDAzZWZsYWdzIHwgQUZfSVVDVl9GTEFHX1dJTjtcbitcdH1cbitcbiBcdGF0b21pY19pbmMoXHUwMDI2aXVjdi1cdTAwM2Vza2JzX2luX3htaXQpO1xuIFx0ZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTtcbiBcdGlmIChuZXRfeG1pdF9ldmFsKGVycikpIHtcbiBcdFx0YXRvbWljX2RlYyhcdTAwMjZpdWN2LVx1MDAzZXNrYnNfaW5feG1pdCk7XG4tXHR9IGVsc2Uge1xuLVx0XHRhdG9taWNfc3ViKGNvbmZpcm1fcmVjdiwgXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdik7XG4tXHRcdFdBUk5fT04oYXRvbWljX3JlYWQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdikgXHUwMDNjIDApO1xuK1x0XHRhdG9taWNfYWRkKGNvbmZpcm1fcmVjdiwgXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdik7XG4gXHR9XG4gXHRyZXR1cm4gbmV0X3htaXRfZXZhbChlcnIpO1xuIFxuQEAgLTEyNDEsNiArMTI0NCw3IEBAIHN0YXRpYyBpbnQgaXVjdl9zb2NrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuIFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xuIFx0dW5zaWduZWQgaW50IGNvcGllZCwgcmxlbjtcbiBcdHN0cnVjdCBza19idWZmICpza2IsICpyc2tiLCAqY3NrYjtcbitcdGJvb2wgc2VuZF93aW4gPSBmYWxzZTtcbiBcdGludCBlcnIgPSAwO1xuIFx0dTMyIG9mZnNldDtcbiBcbkBAIC0xMzMxLDE2ICsxMzM1LDIwIEBAIHN0YXRpYyBpbnQgaXVjdl9zb2NrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuIFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNml1Y3YtXHUwMDNlYmFja2xvZ19za2JfcSkpIHtcbiBcdFx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2aXVjdi1cdTAwM2VtZXNzYWdlX3EubGlzdCkpXG4gXHRcdFx0XHRpdWN2X3Byb2Nlc3NfbWVzc2FnZV9xKHNrKTtcbi1cdFx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2aXVjdi1cdTAwM2Vtc2dfcmVjdikgXHUwMDNlPVxuLVx0XHRcdFx0XHRcdFx0aXVjdi1cdTAwM2Vtc2dsaW1pdCAvIDIpIHtcbi1cdFx0XHRcdGVyciA9IGl1Y3Zfc2VuZF9jdHJsKHNrLCBBRl9JVUNWX0ZMQUdfV0lOKTtcbi1cdFx0XHRcdGlmIChlcnIpIHtcbi1cdFx0XHRcdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBJVUNWX0RJU0NPTk47XG4tXHRcdFx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fVxuK1x0XHRcdGlmIChpdWN2LVx1MDAzZXRyYW5zcG9ydCA9PSBBRl9JVUNWX1RSQU5TX0hJUEVSIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICBhdG9taWNfcmVhZChcdTAwMjZpdWN2LVx1MDAzZW1zZ19yZWN2KSBcdTAwM2U9XG4rXHRcdFx0XHRcdFx0XHRpdWN2LVx1MDAzZW1zZ2xpbWl0IC8gMilcbitcdFx0XHRcdHNlbmRfd2luID0gdHJ1ZTtcbiBcdFx0fVxuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrKTtcbitcbitcdFx0aWYgKHNlbmRfd2luKSB7XG4rXHRcdFx0ZXJyID0gaXVjdl9zZW5kX2N0cmwoc2ssIEFGX0lVQ1ZfRkxBR19XSU4pO1xuK1x0XHRcdGlmIChlcnIpIHtcbitcdFx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gSVVDVl9ESVNDT05OO1xuK1x0XHRcdFx0c2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbitcdFx0XHR9XG4rXHRcdH1cbiBcdH1cbiBcbiBkb25lOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MjA6NDAuMjA2ODI2Mzg0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3Nzk1ODA2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpdWN2IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9pdWN2L2FmX2l1Y3YuY2AuIEl0IHNlZW1zIHRoZXkncmUgbW9kaWZ5aW5nIGBhZml1Y3ZfaHNfc2VuZGAgYW5kIGBpdWN2X3NvY2tfcmVjdm1zZ2AuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgYWZpdWN2X2hzX3NlbmRgIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBjaGFuZ2UgaXMuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5J3ZlIHNoaWZ0ZWQgdGhlIHdpbmRvdyBjYWxjdWxhdGlvbiBsb2dpYy5cblxuSW5pdGlhbGx5LCB0aGUgY29kZSBjaGVja2VkIGlmIGBmbGFnc2Agd2FzIGBBRl9JVUNWX0ZMQUdfV0lOYCBvciB6ZXJvLCB0aGVuIGNhbGN1bGF0ZWQgYGNvbmZpcm1fcmVjdmAsIHVzZWQgaXQgdG8gc2V0IHRoZSBgd2luZG93YCBmaWVsZCBpbiB0aGUgaGVhZGVyLCBhbmQgcG90ZW50aWFsbHkgc2V0IHRoZSBgQUZfSVVDVl9GTEFHX1dJTmAgZmxhZyBpbiB0aGUgaGVhZGVyLiBOb3csIHRoZXkndmUgbW92ZWQgdGhhdCBsb2dpYyB0byBhIHBvaW50IHJpZ2h0IGJlZm9yZSBgZGV2X3F1ZXVlX3htaXQoc2tiKWAuIFRoZSBjb21tZW50IGV4cGxhaW5zIHRoaXMgYXMgY2xhaW1pbmcgdGhlIHJlY2VpdmUgY3JlZGl0IGF0IGEgbGF0ZXIgc3RhZ2UsIG9uY2UgaXQncyBjZXJ0YWluIHRoZSBmcmFtZSB3b24ndCBiZSBkcm9wcGVkLiBJdCBtYWtlcyBzZW5zZSBpbiBwcmluY2lwbGUgdG8gemVybyB0aGUgd2luZG93IGZvciBvbmx5IHRoZSB0cmFuc21pdCB0aW1lLlxuXG5Ib3dldmVyLCBhIHJlZCBmbGFnIHBvcHBlZCB1cCBpbiBteSBoZWFkLiBUaGV5J3JlIHVzaW5nIGBhdG9taWNfeGNoZ2Agbm93LCB3aGljaCBpcyBnb29kLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvZGUgZmxvdy4gSWYgYGZsYWdzYCBpcyAqbmVpdGhlciogYEFGX0lVQ1ZfRkxBR19XSU5gIG5vciB6ZXJvLCB0aGVuIGBjb25maXJtX3JlY3ZgIHdvbid0IGJlIGluaXRpYWxpemVkICpiZWZvcmUqIGl0J3MgdXNlZC4gVGhpcyBpcyBwb3RlbnRpYWxseSBhIGJ1Zywgc28gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBmdWxsIGltcGxlbWVudGF0aW9uIG9mIGBhZml1Y3ZfaHNfc2VuZGAuIEknbSBnb2luZyB0byBzY2FuIHRoZSBzb3VyY2UgY29kZSBub3cgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QgYW4gaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMzoyMDo0Ni45ODY0MTA0NjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMjY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHRza193YWtlX2FzeW5jX3JjdShzaywgU09DS19XQUtFX1NQQUNFLCBQT0xMX09VVCk7XFxuIDE5MTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMTkyOlxcdH1cXG4gMTkzOlxcdFxcbiAxOTQ6XFx0LypcXG4gMTk1OlxcdCAqIGFmaXVjdl9oc19zZW5kKCkgLSBzZW5kIGEgbWVzc2FnZSB0aHJvdWdoIEhpcGVyU29ja2V0cyB0cmFuc3BvcnRcXG4gMTk2OlxcdCAqL1xcbiAxOTc6XFx0c3RhdGljIGludCBhZml1Y3ZfaHNfc2VuZChzdHJ1Y3QgaXVjdl9tZXNzYWdlICppbXNnLCBzdHJ1Y3Qgc29jayAqc29jayxcXG4gMTk4OlxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IGZsYWdzKVxcbiAxOTk6XFx0e1xcbiAyMDA6XFx0XFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc29jayk7XFxuIDIwMTpcXHRcXHRzdHJ1Y3QgYWZfaXVjdl90cmFuc19oZHIgKnBoc19oZHI7XFxuIDIwMjpcXHRcXHRpbnQgZXJyLCBjb25maXJtX3JlY3YgPSAwO1xcbiAyMDM6XFx0XFxuIDIwNDpcXHRcXHRwaHNfaGRyID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKnBoc19oZHIpKTtcXG4gMjA1OlxcdFxcdG1lbXNldChwaHNfaGRyLCAwLCBzaXplb2YoKnBoc19oZHIpKTtcXG4gMjA2OlxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRwaHNfaGRyLVxcdTAwM2VtYWdpYyA9IEVUSF9QX0FGX0lVQ1Y7XFxuIDIwOTpcXHRcXHRwaHNfaGRyLVxcdTAwM2V2ZXJzaW9uID0gMTtcXG4gMjEwOlxcdFxcdHBoc19oZHItXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuIDIxMTpcXHRcXHRpZiAoZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1NZTilcXG4gMjEyOlxcdFxcdFxcdHBoc19oZHItXFx1MDAzZXdpbmRvdyA9IGl1Y3YtXFx1MDAzZW1zZ2xpbWl0O1xcbiAyMTM6XFx0XFx0bWVtY3B5KHBoc19oZHItXFx1MDAzZWRlc3RVc2VySUQsIGl1Y3YtXFx1MDAzZWRzdF91c2VyX2lkLCA4KTtcXG4gMjE0OlxcdFxcdG1lbWNweShwaHNfaGRyLVxcdTAwM2VkZXN0QXBwTmFtZSwgaXVjdi1cXHUwMDNlZHN0X25hbWUsIDgpO1xcbiAyMTU6XFx0XFx0bWVtY3B5KHBoc19oZHItXFx1MDAzZXNyY1VzZXJJRCwgaXVjdi1cXHUwMDNlc3JjX3VzZXJfaWQsIDgpO1xcbiAyMTY6XFx0XFx0bWVtY3B5KHBoc19oZHItXFx1MDAzZXNyY0FwcE5hbWUsIGl1Y3YtXFx1MDAzZXNyY19uYW1lLCA4KTtcXG4gMjE3OlxcdFxcdEFTQ0VCQyhwaHNfaGRyLVxcdTAwM2VkZXN0VXNlcklELCBzaXplb2YocGhzX2hkci1cXHUwMDNlZGVzdFVzZXJJRCkpO1xcbiAyMTg6XFx0XFx0QVNDRUJDKHBoc19oZHItXFx1MDAzZWRlc3RBcHBOYW1lLCBzaXplb2YocGhzX2hkci1cXHUwMDNlZGVzdEFwcE5hbWUpKTtcXG4gMjE5OlxcdFxcdEFTQ0VCQyhwaHNfaGRyLVxcdTAwM2VzcmNVc2VySUQsIHNpemVvZihwaHNfaGRyLVxcdTAwM2VzcmNVc2VySUQpKTtcXG4gMjIwOlxcdFxcdEFTQ0VCQyhwaHNfaGRyLVxcdTAwM2VzcmNBcHBOYW1lLCBzaXplb2YocGhzX2hkci1cXHUwMDNlc3JjQXBwTmFtZSkpO1xcbiAyMjE6XFx0XFx0aWYgKGltc2cpXFxuIDIyMjpcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnBoc19oZHItXFx1MDAzZWl1Y3ZfaGRyLCBpbXNnLCBzaXplb2Yoc3RydWN0IGl1Y3ZfbWVzc2FnZSkpO1xcbiAyMjM6XFx0XFxuIDIyNDpcXHRcXHRza2ItXFx1MDAzZWRldiA9IGl1Y3YtXFx1MDAzZWhzX2RldjtcXG4gMjI1OlxcdFxcdGlmICghc2tiLVxcdTAwM2VkZXYpIHtcXG4gMjI2OlxcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuIDIyNzpcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiAyMjg6XFx0XFx0fVxcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHRkZXZfaGFyZF9oZWFkZXIoc2tiLCBza2ItXFx1MDAzZWRldiwgRVRIX1BfQUZfSVVDViwgTlVMTCwgTlVMTCwgc2tiLVxcdTAwM2VsZW4pO1xcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHRpZiAoIShza2ItXFx1MDAzZWRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApIHx8ICFuZXRpZl9jYXJyaWVyX29rKHNrYi1cXHUwMDNlZGV2KSkge1xcbiAyMzM6XFx0XFx0XFx0ZXJyID0gLUVORVRET1dOO1xcbiAyMzQ6XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4gMjM1OlxcdFxcdH1cXG4gMjM2OlxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNlIHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VtdHUpIHtcXG4gMjM3OlxcdFxcdFxcdGlmIChzb2NrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfU0VRUEFDS0VUKSB7XFxuIDIzODpcXHRcXHRcXHRcXHRlcnIgPSAtRU1TR1NJWkU7XFxuIDIzOTpcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiAyNDA6XFx0XFx0XFx0fVxcbiAyNDE6XFx0XFx0XFx0ZXJyID0gcHNrYl90cmltKHNrYiwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZW10dSk7XFxuIDI0MjpcXHRcXHRcXHRpZiAoZXJyKVxcbiAyNDM6XFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4gMjQ0OlxcdFxcdH1cXG4gMjQ1OlxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9BRl9JVUNWKTtcXG4gMjQ2OlxcdFxcbiAyNDc6XFx0XFx0LyogQ2xhaW0gdGhlIHJlY2VpdmUgY3JlZGl0IGhlcmUsIG5vdCB3aGlsZSBidWlsZGluZyB0aGUgaGVhZGVyOiBldmVyeVxcbiAyNDg6XFx0XFx0ICogd2F5IHRoaXMgZnJhbWUgY2FuIGJlIGRyb3BwZWQgaGFzIG5vdyBiZWVuIHJ1bGVkIG91dCwgc28gdGhlIHdpbmRvd1xcbiAyNDk6XFx0XFx0ICogaXMgemVyb2VkIG9ubHkgZm9yIGFzIGxvbmcgYXMgdGhlIHRyYW5zbWl0IGl0c2VsZiB0YWtlcy5cXG4gMjUwOlxcdFxcdCAqL1xcbiAyNTE6XFx0XFx0aWYgKGZsYWdzID09IEFGX0lVQ1ZfRkxBR19XSU4gfHwgIWZsYWdzKSB7XFxuIDI1MjpcXHRcXHRcXHRjb25maXJtX3JlY3YgPSBhdG9taWNfeGNoZyhcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YsIDApO1xcbiAyNTM6XFx0XFx0XFx0cGhzX2hkci1cXHUwMDNld2luZG93ID0gY29uZmlybV9yZWN2O1xcbiAyNTQ6XFx0XFx0XFx0aWYgKGNvbmZpcm1fcmVjdilcXG4gMjU1OlxcdFxcdFxcdFxcdHBoc19oZHItXFx1MDAzZWZsYWdzID0gcGhzX2hkci1cXHUwMDNlZmxhZ3MgfCBBRl9JVUNWX0ZMQUdfV0lOO1xcbiAyNTY6XFx0XFx0fVxcbiAyNTc6XFx0XFxuIDI1ODpcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZpdWN2LVxcdTAwM2Vza2JzX2luX3htaXQpO1xcbiAyNTk6XFx0XFx0ZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTtcXG4gMjYwOlxcdFxcdGlmIChuZXRfeG1pdF9ldmFsKGVycikpIHtcXG4gMjYxOlxcdFxcdFxcdGF0b21pY19kZWMoXFx1MDAyNml1Y3YtXFx1MDAzZXNrYnNfaW5feG1pdCk7XFxuIDI2MjpcXHRcXHRcXHRhdG9taWNfYWRkKGNvbmZpcm1fcmVjdiwgXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2KTtcXG4gMjYzOlxcdFxcdH1cXG4gMjY0OlxcdFxcdHJldHVybiBuZXRfeG1pdF9ldmFsKGVycik7XFxuIDI2NTpcXHRcXG4gMjY2OlxcdGVycl9mcmVlOlxcbiAyNjc6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDI2ODpcXHRcXHRyZXR1cm4gZXJyO1xcbiAyNjk6XFx0fVxcbiAyNzA6XFx0XFxuIDI3MTpcXHRzdGF0aWMgc3RydWN0IHNvY2sgKl9faXVjdl9nZXRfc29ja19ieV9uYW1lKGNoYXIgKm5tKVxcbiAyNzI6XFx0e1xcbiAyNzM6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbiAyNzQ6XFx0XFxuIDI3NTpcXHRcXHRza19mb3JfZWFjaChzaywgXFx1MDAyNml1Y3Zfc2tfbGlzdC5oZWFkKVxcbiAyNzY6XFx0XFx0XFx0aWYgKCFtZW1jbXAoXFx1MDAyNml1Y3Zfc2soc2spLVxcdTAwM2VzcmNfbmFtZSwgbm0sIDgpKVxcbiAyNzc6XFx0XFx0XFx0XFx0cmV0dXJuIHNrO1xcbiAyNzg6XFx0XFxuIDI3OTpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMjgwOlxcdH1cXG4gMjgxOlxcdFxcbiAyODI6XFx0c3RhdGljIHZvaWQgaXVjdl9zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcXG4gMjgzOlxcdHtcXG4gMjg0OlxcdFxcdHNrYl9xdWV1ZV9wdXJnZShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xcbiAyODU6XFx0XFx0c2tiX3F1ZXVlX3B1cmdlKFxcdTAwMjZzay1cXHUwMDNlc2tfZXJyb3JfcXVldWUpO1xcbiAyODY6XFx0XFxuIDI4NzpcXHRcXHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xcbiAyODg6XFx0XFx0XFx0cHJfZXJyKFxcXCJBdHRlbXB0IHRvIHJlbGVhc2UgYWxpdmUgaXVjdiBzb2NrZXQgJXBcXFxcblxcXCIsIHNrKTtcXG4gMjg5OlxcdFxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MjA6NDYuOTg3NjM2MTM4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MjQ4MTk3MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgUG90ZW50aWFsIFJpc2tzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYWZpdWN2X2hzX3NlbmRgIGFuZCBgaXVjdl9zb2NrX3JlY3Ztc2dgLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgcmlnaHQ/IFdlJ3JlIG1vZGlmeWluZyB0aGVzZSBmdW5jdGlvbnMsIGFuZCBhbnl0aW1lIHlvdSB0b3VjaCBkYXRhIHN0cnVjdHVyZXMsIHRoZXJlJ3MgYSBjaGFuY2Ugb2YgaW50cm9kdWNpbmcgYSByZWFkIG9yIHdyaXRlIGZyb20gdW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBjYW4gbGVhZCB0byBuYXN0eSB2dWxuZXJhYmlsaXRpZXMuXG5cblNwZWNpZmljYWxseSwgaW4gYGFmaXVjdl9oc19zZW5kYCwgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIHBsYXlpbmcgd2l0aCB0aGUgdGltaW5nIG9mIHRoZSB3aW5kb3cgY2FsY3VsYXRpb24gYW5kIHRoZSB3YXkgYGl1Y3YtXHUwMDNlbXNnX3JlY3ZgIGlzIGhhbmRsZWQuIFdlJ3JlIGluaXRpYWxpemluZyBgY29uZmlybV9yZWN2YCB0byB6ZXJvLCBhbmQgdGhlIHdpbmRvdyBjYWxjdWxhdGlvbiBpcyBoYXBwZW5pbmcganVzdCBiZWZvcmUgYGRldl9xdWV1ZV94bWl0KHNrYilgLiBUaGUgY2hhbmdlIHRvIGBhdG9taWNfeGNoZ2AgaW5zdGVhZCBvZiBgYXRvbWljX3JlYWRgIGFuZCBgYXRvbWljX3N1YmAgaXMgc29tZXRoaW5nIEkgbmVlZCB0byBsb29rIGludG8gYSBiaXQgZGVlcGVyIGxhdGVyIGJ1dCBkb2Vzbid0IGltbWVkaWF0ZWx5IHNjcmVhbSBkYW5nZXIuXG5cbkluIGBpdWN2X3NvY2tfcmVjdm1zZ2AsIHRoZSBkZWZlcnJhbCBvZiBgaXVjdl9zZW5kX2N0cmxgIHVudGlsIGFmdGVyIGBzcGluX3VubG9ja19iaChcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrKWAgaW1tZWRpYXRlbHkgZ290IG15IGF0dGVudGlvbi4gSXQncyBsaWtlbHkgdHJ5aW5nIHRvIGF2b2lkIGEgZGVhZGxvY2sgb3IgYSBsb2NrIGludmVyc2lvbiBzaXR1YXRpb24uIFRoZSBvcmRlciBvZiBsb2NraW5nIGlzIGNyaXRpY2FsLCBhbmQgYW55IGNoYW5nZSBpbiB0aGlzIGFyZWEgbmVlZHMgdG8gYmUgYW5hbHl6ZWQgd2l0aCBhIGZpbmUtdG9vdGggY29tYi5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgd2FzIGlmIHRoZSBjaGFuZ2UgaW4gYGl1Y3Zfc29ja19yZWN2bXNnYCBleHBvc2VkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHBoc19oZHItXHUwMDNld2luZG93YCBhbmQgYHBoc19oZHItXHUwMDNlZmxhZ3NgLCBidXQgYHBoc19oZHJgIGlzIGFsbG9jYXRlZCB3aXRoIGBza2JfcHVzaGAgYW5kIHplcm9lZCBvdXQgd2l0aCBgbWVtc2V0YC4gU28sIHdlJ3JlIGdvb2QgdGhlcmUuIE5vdGhpbmcgdW5pbml0aWFsaXplZCBpbiBgcGhzX2hkcmAuIFRoYXQncyBhIHJlbGllZiFcblxuT2theSwgc28gaXQgaXMgbGlrZWx5IGZpeGluZyBhIGNvbmN1cnJlbmN5IGlzc3VlLCBhIGRlYWRsb2NrIG9yIGEgcmFjZS4gQnkgbW92aW5nIHRoZSBjYWxsIHRvIGBpdWN2X3NlbmRfY3RybGAgYWZ0ZXIgcmVsZWFzaW5nIHRoZSBzcGlubG9jaywgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGV5J3JlIHRyeWluZyB0byBwcmV2ZW50IGEgc2l0dWF0aW9uIHdoZXJlIGBpdWN2X3NlbmRfY3RybGAgY2FsbHMgYGFmaXVjdl9oc19zZW5kYCwgd2hpY2ggdGhlbiBjYWxscyBgZGV2X3F1ZXVlX3htaXRgLCB3aGljaCBtaWdodCBzbGVlcCBvciB0YWtlIG90aGVyIGxvY2tzLCB3aGlsZSB3ZSBzdGlsbCBoYXZlIGEgc3BpbmxvY2suXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gYGNvbmZpcm1fcmVjdmAgaXMgaW5pdGlhbGl6ZWQgdG8gMC4gYHBoc19oZHJgIGlzIHplcm9lZC4gYHNlbmRfd2luYCBpcyBgZmFsc2VgLiBMb29rcyBzb2xpZC4gTm9wZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBoZXJlLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIHRoZSBsYWNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB0aGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBmaXggZm9yIGEgbG9ja2luZyBvciBjb25jdXJyZW5jeSBidWcg4oCTIGEgcmFjZSBjb25kaXRpb24sIG9yIHBlcmhhcHMgZXZlbiBhIGRlYWRsb2NrLiBJZiBpdCAqd2FzKiBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIHVzZS1hZnRlci1mcmVlLCBLQVNBTiBvciBMT0NLREVQIGxpa2VseSB3b3VsZCd2ZSBmbGFnZ2VkIHRoZSBvcmlnaW5hbCBwcm9ibGVtLiBLTVNBTiBpcyBkZWZpbml0ZWx5IG5vdCByZXF1aXJlZCBoZXJlLlxuXG5JJ2xsIHF1aWNrbHkgcmV2aWV3IGBpdWN2X3NlbmRfY3RybGAganVzdCB0byBiZSBzdXJlLCBidXQgSSBmZWVsIHByZXR0eSBnb29kIGFib3V0IHRoaXMgb25lLiBJdCBsb29rcyBsaWtlIGEgY2xlYW4sIGZvY3VzZWQgY29uY3VycmVuY3kgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTYxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTM6MjA6NTYuNDEyNDU4MTA3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI0MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNDA6XFx0c3RhdGljIGludCBpdWN2X3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuMTI0MTpcXHRcXHRcXHRcXHQgICAgIHNpemVfdCBsZW4sIGludCBmbGFncylcXG4xMjQyOlxcdHtcXG4xMjQzOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbjEyNDQ6XFx0XFx0c3RydWN0IGl1Y3Zfc29jayAqaXVjdiA9IGl1Y3Zfc2soc2spO1xcbjEyNDU6XFx0XFx0dW5zaWduZWQgaW50IGNvcGllZCwgcmxlbjtcXG4xMjQ2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IsICpyc2tiLCAqY3NrYjtcXG4xMjQ3OlxcdFxcdGJvb2wgc2VuZF93aW4gPSBmYWxzZTtcXG4xMjQ4OlxcdFxcdGludCBlcnIgPSAwO1xcbjEyNDk6XFx0XFx0dTMyIG9mZnNldDtcXG4xMjUwOlxcdFxcbjEyNTE6XFx0XFx0aWYgKChzay1cXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9ESVNDT05OKSBcXHUwMDI2XFx1MDAyNlxcbjEyNTI6XFx0XFx0ICAgIHNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2aXVjdi1cXHUwMDNlYmFja2xvZ19za2JfcSkgXFx1MDAyNlxcdTAwMjZcXG4xMjUzOlxcdFxcdCAgICBza2JfcXVldWVfZW1wdHkoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSBcXHUwMDI2XFx1MDAyNlxcbjEyNTQ6XFx0XFx0ICAgIGxpc3RfZW1wdHkoXFx1MDAyNml1Y3YtXFx1MDAzZW1lc3NhZ2VfcS5saXN0KSlcXG4xMjU1OlxcdFxcdFxcdHJldHVybiAwO1xcbjEyNTY6XFx0XFxuMTI1NzpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiAoTVNHX09PQikpXFxuMTI1ODpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTI1OTpcXHRcXG4xMjYwOlxcdFxcdC8qIHJlY2VpdmUvZGVxdWV1ZSBuZXh0IHNrYjpcXG4xMjYxOlxcdFxcdCAqIHRoZSBmdW5jdGlvbiB1bmRlcnN0YW5kcyBNU0dfUEVFSyBhbmQsIHRodXMsIGRvZXMgbm90IGRlcXVldWUgc2tiXFxuMTI2MjpcXHRcXHQgKiBvbmx5IHJlZmNvdW50IGlzIGluY3JlYXNlZC5cXG4xMjYzOlxcdFxcdCAqL1xcbjEyNjQ6XFx0XFx0c2tiID0gc2tiX3JlY3ZfZGF0YWdyYW0oc2ssIGZsYWdzLCBcXHUwMDI2ZXJyKTtcXG4xMjY1OlxcdFxcdGlmICghc2tiKSB7XFxuMTI2NjpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgUkNWX1NIVVRET1dOKVxcbjEyNjc6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTI2ODpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEyNjk6XFx0XFx0fVxcbjEyNzA6XFx0XFxuMTI3MTpcXHRcXHRvZmZzZXQgPSBJVUNWX1NLQl9DQihza2IpLVxcdTAwM2VvZmZzZXQ7XFxuMTI3MjpcXHRcXHRybGVuICAgPSBza2ItXFx1MDAzZWxlbiAtIG9mZnNldDtcXHRcXHQvKiByZWFsIGxlbmd0aCBvZiBza2IgKi9cXG4xMjczOlxcdFxcdGNvcGllZCA9IG1pbl90KHVuc2lnbmVkIGludCwgcmxlbiwgbGVuKTtcXG4xMjc0OlxcdFxcdGlmICghcmxlbilcXG4xMjc1OlxcdFxcdFxcdHNrLVxcdTAwM2Vza19zaHV0ZG93biA9IHNrLVxcdTAwM2Vza19zaHV0ZG93biB8IFJDVl9TSFVURE9XTjtcXG4xMjc2OlxcdFxcbjEyNzc6XFx0XFx0Y3NrYiA9IHNrYjtcXG4xMjc4OlxcdFxcdGlmIChza2JfY29weV9kYXRhZ3JhbV9tc2coY3NrYiwgb2Zmc2V0LCBtc2csIGNvcGllZCkpIHtcXG4xMjc5OlxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMTI4MDpcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuMTI4MTpcXHRcXHR9XFxuMTI4MjpcXHRcXG4xMjgzOlxcdFxcdC8qIFNPQ0tfU0VRUEFDS0VUOiBzZXQgTVNHX1RSVU5DIGlmIHJlY3YgYnVmIHNpemUgaXMgdG9vIHNtYWxsICovXFxuMTI4NDpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQpIHtcXG4xMjg1OlxcdFxcdFxcdGlmIChjb3BpZWQgXFx1MDAzYyBybGVuKVxcbjEyODY6XFx0XFx0XFx0XFx0bXNnLVxcdTAwM2Vtc2dfZmxhZ3MgfD0gTVNHX1RSVU5DO1xcbjEyODc6XFx0XFx0XFx0LyogZWFjaCBpdWN2IG1lc3NhZ2UgY29udGFpbnMgYSBjb21wbGV0ZSByZWNvcmQgKi9cXG4xMjg4OlxcdFxcdFxcdG1zZy1cXHUwMDNlbXNnX2ZsYWdzIHw9IE1TR19FT1I7XFxuMTI4OTpcXHRcXHR9XFxuMTI5MDpcXHRcXG4xMjkxOlxcdFxcdC8qIGNyZWF0ZSBjb250cm9sIG1lc3NhZ2UgdG8gc3RvcmUgaXVjdiBtc2cgdGFyZ2V0IGNsYXNzOlxcbjEyOTI6XFx0XFx0ICogZ2V0IHRoZSB0cmdjbHMgZnJvbSB0aGUgY29udHJvbCBidWZmZXIgb2YgdGhlIHNrYiBkdWUgdG9cXG4xMjkzOlxcdFxcdCAqIGZyYWdtZW50YXRpb24gb2Ygb3JpZ2luYWwgaXVjdiBtZXNzYWdlLiAqL1xcbjEyOTQ6XFx0XFx0ZXJyID0gcHV0X2Ntc2cobXNnLCBTT0xfSVVDViwgU0NNX0lVQ1ZfVFJHQ0xTLFxcbjEyOTU6XFx0XFx0XFx0ICAgICAgIHNpemVvZihJVUNWX1NLQl9DQihza2IpLVxcdTAwM2VjbGFzcyksXFxuMTI5NjpcXHRcXHRcXHQgICAgICAgKHZvaWQgKilcXHUwMDI2SVVDVl9TS0JfQ0Ioc2tiKS1cXHUwMDNlY2xhc3MpO1xcbjEyOTc6XFx0XFx0aWYgKGVycilcXG4xMjk4OlxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4xMjk5OlxcdFxcbjEzMDA6XFx0XFx0LyogTWFyayByZWFkIHBhcnQgb2Ygc2tiIGFzIHVzZWQgKi9cXG4xMzAxOlxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgTVNHX1BFRUspKSB7XFxuMTMwMjpcXHRcXG4xMzAzOlxcdFxcdFxcdC8qIFNPQ0tfU1RSRUFNOiByZS1xdWV1ZSBza2IgaWYgaXQgY29udGFpbnMgdW5yZWNlaXZlZCBkYXRhICovXFxuMTMwNDpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19TVFJFQU0pIHtcXG4xMzA1OlxcdFxcdFxcdFxcdGlmIChjb3BpZWQgXFx1MDAzYyBybGVuKSB7XFxuMTMwNjpcXHRcXHRcXHRcXHRcXHRJVUNWX1NLQl9DQihza2IpLVxcdTAwM2VvZmZzZXQgPSBvZmZzZXQgKyBjb3BpZWQ7XFxuMTMwNzpcXHRcXHRcXHRcXHRcXHRza2JfcXVldWVfaGVhZChcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUsIHNrYik7XFxuMTMwODpcXHRcXHRcXHRcXHRcXHRnb3RvIGRvbmU7XFxuMTMwOTpcXHRcXHRcXHRcXHR9XFxuMTMxMDpcXHRcXHRcXHR9XFxuMTMxMTpcXHRcXG4xMzEyOlxcdFxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuMTMxMzpcXHRcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIpIHtcXG4xMzE0OlxcdFxcdFxcdFxcdGF0b21pY19pbmMoXFx1MDAyNml1Y3YtXFx1MDAzZW1zZ19yZWN2KTtcXG4xMzE1OlxcdFxcdFxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YpIFxcdTAwM2UgaXVjdi1cXHUwMDNlbXNnbGltaXQpIHtcXG4xMzE2OlxcdFxcdFxcdFxcdFxcdFdBUk5fT04oMSk7XFxuMTMxNzpcXHRcXHRcXHRcXHRcXHRpdWN2X3NvY2tfY2xvc2Uoc2spO1xcbjEzMTg6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTMxOTpcXHRcXHRcXHRcXHR9XFxuMTMyMDpcXHRcXHRcXHR9XFxuMTMyMTpcXHRcXG4xMzIyOlxcdFxcdFxcdC8qIFF1ZXVlIGJhY2tsb2cgc2ticyAqL1xcbjEzMjM6XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpdWN2LVxcdTAwM2VtZXNzYWdlX3EubG9jayk7XFxuMTMyNDpcXHRcXHRcXHRyc2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNml1Y3YtXFx1MDAzZWJhY2tsb2dfc2tiX3EpO1xcbjEzMjU6XFx0XFx0XFx0d2hpbGUgKHJza2IpIHtcXG4xMzI2OlxcdFxcdFxcdFxcdElVQ1ZfU0tCX0NCKHJza2IpLVxcdTAwM2VvZmZzZXQgPSAwO1xcbjEzMjc6XFx0XFx0XFx0XFx0aWYgKF9fc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCByc2tiKSkge1xcbjEzMjg6XFx0XFx0XFx0XFx0XFx0LyogaGFuZGxlIHJjdiBxdWV1ZSBmdWxsICovXFxuMTMyOTpcXHRcXHRcXHRcXHRcXHRza2JfcXVldWVfaGVhZChcXHUwMDI2aXVjdi1cXHUwMDNlYmFja2xvZ19za2JfcSxcXG4xMzMwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHJza2IpO1xcbjEzMzE6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTMzMjpcXHRcXHRcXHRcXHR9XFxuMTMzMzpcXHRcXHRcXHRcXHRyc2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNml1Y3YtXFx1MDAzZWJhY2tsb2dfc2tiX3EpO1xcbjEzMzQ6XFx0XFx0XFx0fVxcbjEzMzU6XFx0XFx0XFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2aXVjdi1cXHUwMDNlYmFja2xvZ19za2JfcSkpIHtcXG4xMzM2OlxcdFxcdFxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2aXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxpc3QpKVxcbjEzMzc6XFx0XFx0XFx0XFx0XFx0aXVjdl9wcm9jZXNzX21lc3NhZ2VfcShzayk7XFxuMTMzODpcXHRcXHRcXHRcXHRpZiAoaXVjdi1cXHUwMDNldHJhbnNwb3J0ID09IEFGX0lVQ1ZfVFJBTlNfSElQRVIgXFx1MDAyNlxcdTAwMjZcXG4xMzM5OlxcdFxcdFxcdFxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2aXVjdi1cXHUwMDNlbXNnX3JlY3YpIFxcdTAwM2U9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjIwOjU2LjQxMjYyOTg2N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjUzNDE2Njk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoKipcblxuT2theSwgbGV0IG1lIGJyZWFrIGRvd24gdGhpcyBrZXJuZWwgcGF0Y2guIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IHRhcmdldHMgYSByYWNlIGNvbmRpdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IGBtc2dfcmVjdmAgaXMgaGFuZGxlZC4gSSBzdXNwZWN0IHRoZSBjb21taXQgbWVzc2FnZSBwcm9iYWJseSBoaWdobGlnaHRzIHRoZSBpc3N1ZTogYSBwb3RlbnRpYWwgcmFjZSB3aXRoaW4gYGFmaXVjdl9oc19zZW5kYCB3aGVyZSBhIHZhbHVlIG9mIGBtc2dfcmVjdmAgaXMgcmVhZCwgZGVjcmVtZW50ZWQgYmFzZWQgb24gdGhhdCByZWFkLCBidXQgYW5vdGhlciB0aHJlYWQgY291bGQgbW9kaWZ5IHRoYXQgdmFsdWUgYmV0d2VlbiB0aGUgcmVhZCBhbmQgdGhlIHN1YnRyYWN0aW9uLCBsZWFkaW5nIHRvIGluY29ycmVjdCBhY2NvdW50aW5nIG9yIGV2ZW4gYSBkZWFkbG9jay5cblxuVGhlIHNlY29uZCBwYXJ0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gTW92aW5nIHRoZSBgaXVjdl9zZW5kX2N0cmxgIGNhbGwgb3V0c2lkZSBvZiB0aGUgYHNwaW5fbG9ja19iaChcdTAwMjZpdWN2LVx1MDAzZW1lc3NhZ2VfcS5sb2NrKWAgaXMgYSBjbGFzc2ljIGRlYWRsb2NrIHByZXZlbnRpb24gc3RyYXRlZ3kuIEkgc2VlIHRoYXQgYGl1Y3Zfc2VuZF9jdHJsYCBjYWxscyBgYWZpdWN2X2hzX3NlbmRgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBkZXZfcXVldWVfeG1pdGAuIGBkZXZfcXVldWVfeG1pdGAgaXMgbm90b3Jpb3VzIGZvciBwb3RlbnRpYWxseSB0YWtpbmcgbG9ja3MgdGhhdCBhcmUgaW5jb21wYXRpYmxlIHdpdGggbG9ja3MgaGVsZCB3aGVuIGludGVyYWN0aW5nIHdpdGggbWVzc2FnZSBxdWV1ZXMgYW5kIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBTbywgdGhpcyBjaGFuZ2UgbGlrZWx5IHByZXZlbnRzIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGtlcm5lbCBtaWdodCBibG9jayBpbmRlZmluaXRlbHksIHdhaXRpbmcgZm9yIGEgbG9jayBhbHJlYWR5IGhlbGQgYnkgdGhlIGN1cnJlbnQgY29udGV4dC5cblxuQW5kIGZpbmFsbHksIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSSdsbCBjb25maWRlbnRseSBtYXJrIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBhcyBmYWxzZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDUzLCJPdXRwdXRUb2tlbnMiOjI2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEzOjIxOjAzLjY2NjA1MDY3MloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kvbG9ja2luZyBpc3N1ZSBpbiB0aGUgQUZfSVVDViBzb2NrZXQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgaXQgZGVmZXJzIHRoZSBgaXVjdl9zZW5kX2N0cmwoKWAgY2FsbCBpbiBgaXVjdl9zb2NrX3JlY3Ztc2coKWAgdW50aWwgYWZ0ZXIgdGhlIGBpdWN2LVxcdTAwM2VtZXNzYWdlX3EubG9ja2Agc3BpbmxvY2sgaXMgcmVsZWFzZWQsIHByZXZlbnRpbmcgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBsb2NrIGludmVyc2lvbnMuIEl0IGFsc28gZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgYWZpdWN2X2hzX3NlbmQoKWAgYnkgdXNpbmcgYGF0b21pY194Y2hnKClgIHRvIGNsYWltIHJlY2VpdmUgY3JlZGl0cyBhdG9taWNhbGx5IHJpZ2h0IGJlZm9yZSB0cmFuc21pc3Npb24sIGluc3RlYWQgb2YgcmVhZGluZyBhbmQgbGF0ZXIgc3VidHJhY3RpbmcgdGhlIHZhbHVlLiBcXG5cXG5BbGwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzIGludm9sdmVkIChzdWNoIGFzIGBwaHNfaGRyYCBhbmQgYGNvbmZpcm1fcmVjdmApIGFyZSBmdWxseSBpbml0aWFsaXplZCAoZS5nLiwgYG1lbXNldChwaHNfaGRyLCAwLCBzaXplb2YoKnBoc19oZHIpKWApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYm91bmRzIGNoZWNraW5nLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIG9yIEtDU0FOLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5L2xvY2tpbmcgaXNzdWUgaW4gdGhlIEFGX0lVQ1Ygc29ja2V0IGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHksIGl0IGRlZmVycyB0aGUgYGl1Y3Zfc2VuZF9jdHJsKClgIGNhbGwgaW4gYGl1Y3Zfc29ja19yZWN2bXNnKClgIHVudGlsIGFmdGVyIHRoZSBgaXVjdi1cXHUwMDNlbWVzc2FnZV9xLmxvY2tgIHNwaW5sb2NrIGlzIHJlbGVhc2VkLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgbG9jayBpbnZlcnNpb25zLiBJdCBhbHNvIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGFmaXVjdl9oc19zZW5kKClgIGJ5IHVzaW5nIGBhdG9taWNfeGNoZygpYCB0byBjbGFpbSByZWNlaXZlIGNyZWRpdHMgYXRvbWljYWxseSByaWdodCBiZWZvcmUgdHJhbnNtaXNzaW9uLCBpbnN0ZWFkIG9mIHJlYWRpbmcgYW5kIGxhdGVyIHN1YnRyYWN0aW5nIHRoZSB2YWx1ZS4gXFxuXFxuQWxsIHN0cnVjdHVyZXMgYW5kIHZhcmlhYmxlcyBpbnZvbHZlZCAoc3VjaCBhcyBgcGhzX2hkcmAgYW5kIGBjb25maXJtX3JlY3ZgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgKGUuZy4sIGBtZW1zZXQocGhzX2hkciwgMCwgc2l6ZW9mKCpwaHNfaGRyKSlgKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJvdW5kcyBjaGVja2luZywgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGRlYWRsb2NrcywgcmFjZSBjb25kaXRpb25zLCBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBvciBLQ1NBTi4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowpgxrj[1] Phase: Succeeded StartedAt: 2026-08-21 13:21:15 +0000 UTC FinishedAt: 2026-08-21 13:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 13:21:15 +0000 UTC FinishedAt: 2026-08-21 13:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2] Phase: Succeeded StartedAt: 2026-08-21 13:21:15 +0000 UTC FinishedAt: 2026-08-21 14:04:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-21 13:21:15 +0000 UTC FinishedAt: 2026-08-21 14:04:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-21 13:21:15 +0000 UTC FinishedAt: 2026-08-21 13:21:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-21 13:21:15 +0000 UTC FinishedAt: 2026-08-21 13:21:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowpgxrj/series-workflowpgxrj-convert-artifact-2208142557/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-21 13:21:25 +0000 UTC FinishedAt: 2026-08-21 13:40:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-21 13:21:25 +0000 UTC FinishedAt: 2026-08-21 13:40:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*74bb173b-68e0-4c89-96da-a0c51c22ea57,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-workflowpgxrj/series-workflowpgxrj-convert-artifact-2208142557/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": "29dc424a-3989-4fc2-9dda-738f1101982b", "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-workflowpgxrj/series-workflowpgxrj-build-action-2418042899/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-21 13:21:25 +0000 UTC FinishedAt: 2026-08-21 13:40:01 +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:*74bb173b-68e0-4c89-96da-a0c51c22ea57,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-workflowpgxrj/series-workflowpgxrj-convert-artifact-2208142557/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": "29dc424a-3989-4fc2-9dda-738f1101982b", "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-workflowpgxrj/series-workflowpgxrj-build-action-2418042899/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-21 13:40:11 +0000 UTC FinishedAt: 2026-08-21 13:40:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-21 13:40:11 +0000 UTC FinishedAt: 2026-08-21 13:40:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-21 13:40:11 +0000 UTC FinishedAt: 2026-08-21 13:40:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-21 13:40:11 +0000 UTC FinishedAt: 2026-08-21 13:40:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowpgxrj/series-workflowpgxrj-convert-artifact-3330303672/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-21 13:40:21 +0000 UTC FinishedAt: 2026-08-21 13:42:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-21 13:40:21 +0000 UTC FinishedAt: 2026-08-21 13:42:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*29dc424a-3989-4fc2-9dda-738f1101982b,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-workflowpgxrj/series-workflowpgxrj-build-action-2418042899/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-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-21 13:42:22 +0000 UTC FinishedAt: 2026-08-21 13:42:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-21 13:42:22 +0000 UTC FinishedAt: 2026-08-21 13:42:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-21 13:42:22 +0000 UTC FinishedAt: 2026-08-21 13:59:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-21 13:42:22 +0000 UTC FinishedAt: 2026-08-21 13:59:11 +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:*74bb173b-68e0-4c89-96da-a0c51c22ea57,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-workflowpgxrj/series-workflowpgxrj-convert-artifact-3330303672/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": "9eea63eb-cb3b-4520-9aa5-d2a8a6bb1cde", "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-workflowpgxrj/series-workflowpgxrj-build-action-1955889060/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-21 13:42:22 +0000 UTC FinishedAt: 2026-08-21 13:59:07 +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:*74bb173b-68e0-4c89-96da-a0c51c22ea57,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-workflowpgxrj/series-workflowpgxrj-convert-artifact-3330303672/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": "9eea63eb-cb3b-4520-9aa5-d2a8a6bb1cde", "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-workflowpgxrj/series-workflowpgxrj-build-action-1955889060/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-21 13:59:11 +0000 UTC FinishedAt: 2026-08-21 13:59:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-21 13:59:11 +0000 UTC FinishedAt: 2026-08-21 13:59:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-21 13:59:11 +0000 UTC FinishedAt: 2026-08-21 14:01:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-21 13:59:11 +0000 UTC FinishedAt: 2026-08-21 14:01:00 +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:*9eea63eb-cb3b-4520-9aa5-d2a8a6bb1cde,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-workflowpgxrj/series-workflowpgxrj-build-action-1955889060/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-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-21 14:01:10 +0000 UTC FinishedAt: 2026-08-21 14:04:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-21 14:01:10 +0000 UTC FinishedAt: 2026-08-21 14:04:11 +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":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"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:*29dc424a-3989-4fc2-9dda-738f1101982b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9eea63eb-cb3b-4520-9aa5-d2a8a6bb1cde,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-workflowpgxrj/series-workflowpgxrj-build-action-2418042899/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-workflowpgxrj/series-workflowpgxrj-build-action-1955889060/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-21 14:01:10 +0000 UTC FinishedAt: 2026-08-21 14:01:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-21 14:01:10 +0000 UTC FinishedAt: 2026-08-21 14:01:16 +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":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"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-workflowpgxrj/series-workflowpgxrj-convert-artifact-549168145/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-21 14:01:10 +0000 UTC FinishedAt: 2026-08-21 14:01:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-21 14:01:10 +0000 UTC FinishedAt: 2026-08-21 14:01:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-21 14:01:10 +0000 UTC FinishedAt: 2026-08-21 14:01:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-21 14:01:20 +0000 UTC FinishedAt: 2026-08-21 14:04:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpgxrj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iucv_sock_sendmsg","iucv_sock_recvmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"96782cac-8a33-4480-8f4e-871b36c189b6","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-21 14:01:20 +0000 UTC FinishedAt: 2026-08-21 14:03:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*29dc424a-3989-4fc2-9dda-738f1101982b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9eea63eb-cb3b-4520-9aa5-d2a8a6bb1cde,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-workflowpgxrj/series-workflowpgxrj-build-action-2418042899/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-workflowpgxrj/series-workflowpgxrj-build-action-1955889060/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-workflowpgxrj/series-workflowpgxrj-convert-artifact-549168145/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,}