Name: series-workflowd27lb Phase: Succeeded StartedAt: 2026-08-01 12:27:43 +0000 UTC FinishedAt: 2026-08-01 16:36:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[0] Phase: Succeeded StartedAt: 2026-08-01 12:27:43 +0000 UTC FinishedAt: 2026-08-01 12:31:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 12:27:43 +0000 UTC FinishedAt: 2026-08-01 12:31:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "57aa1718d5953dd532137d43b696c68545c2e0b3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "57aa1718d5953dd532137d43b696c68545c2e0b3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "2384afe9-65ba-4d43-a842-bcdb82ca7c23" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nl80211_color_change" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV9jb2xvcl9jaGFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgYG5sODAyMTFfY29sb3JfY2hhbmdlYCBuZXRsaW5rIGhhbmRsZXIuIEl0IGVuc3VyZXMgdGhhdCBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZhaWxzLCBhbnkgcGFydGlhbGx5IGFsbG9jYXRlZCBtZW1vcnkgaXMgcHJvcGVybHkgZnJlZWQsIGFuZCBpdCBwcmV2ZW50cyBhIGxlYWsgaWYgdGhlIHN1YnNlcXVlbnQgYWxsb2NhdGlvbiBmb3IgYHRiYCBmYWlscyBieSBtb3ZpbmcgaXQgYmVmb3JlIHRoZSBwYXJzaW5nIHN0ZXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBjb2RlIChlbXVsYXRlZCB2aWEgbWFjODAyMTFfaHdzaW0pLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWRhMzJkYWQxN2VkYTg2ZTQzNjlhZjZhMjQ1ZDY5MGI0ZDhmNDdjZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTI6Mjk6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IDVhZGNiNmJkMGZjNTYuLjc1NWY4ZmU3MTFmYjIgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5AQCAtMTg3NTAsMTUgJiM0MzsxODc1MCwxNSBAQCBzdGF0aWMgaW50IG5sODAyMTFfY29sb3JfY2hhbmdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRpZiAoIXdkZXYtXHUwMDNlbGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmJlYWNvbl9pbnRlcnZhbClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0dGIgPSBremFsbG9jX29ianMoKnRiLCBOTDgwMjExX0FUVFJfTUFYICYjNDM7IDEpO1xuJiM0MztcdGlmICghdGIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4gXHRlcnIgPSBubDgwMjExX3BhcnNlX2JlYWNvbihyZGV2LCBpbmZvLVx1MDAzZWF0dHJzLCBcdTAwMjZwYXJhbXMuYmVhY29uX25leHQsXG4gXHRcdFx0XHQgICB3ZGV2LVx1MDAzZWxpbmtzW3BhcmFtcy5saW5rX2lkXS5hcC5jaGFuZGVmLmNoYW4sXG4gXHRcdFx0XHQgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0dGIgPSBremFsbG9jX29ianMoKnRiLCBOTDgwMjExX0FUVFJfTUFYICYjNDM7IDEpO1xuLVx0aWYgKCF0Yilcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcbiBcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIE5MODAyMTFfQVRUUl9NQVgsXG4gXHRcdFx0ICAgICAgIGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NPTE9SX0NIQU5HRV9FTEVNU10sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV9jb2xvcl9jaGFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgYG5sODAyMTFfY29sb3JfY2hhbmdlYCBuZXRsaW5rIGhhbmRsZXIuIEl0IGVuc3VyZXMgdGhhdCBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZhaWxzLCBhbnkgcGFydGlhbGx5IGFsbG9jYXRlZCBtZW1vcnkgaXMgcHJvcGVybHkgZnJlZWQsIGFuZCBpdCBwcmV2ZW50cyBhIGxlYWsgaWYgdGhlIHN1YnNlcXVlbnQgYWxsb2NhdGlvbiBmb3IgYHRiYCBmYWlscyBieSBtb3ZpbmcgaXQgYmVmb3JlIHRoZSBwYXJzaW5nIHN0ZXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBjb2RlIChlbXVsYXRlZCB2aWEgbWFjODAyMTFfaHdzaW0pLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWRhMzJkYWQxN2VkYTg2ZTQzNjlhZjZhMjQ1ZDY5MGI0ZDhmNDdjZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMTI6Mjk6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwppbmRleCA1YWRjYjZiZDBmYzU2Li43NTVmOGZlNzExZmIyIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTE4NzUwLDE1ICYjNDM7MTg3NTAsMTUgQEAgc3RhdGljIGludCBubDgwMjExX2NvbG9yX2NoYW5nZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCWlmICghd2Rldi0mZ3Q7bGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmJlYWNvbl9pbnRlcnZhbCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJdGIgPSBremFsbG9jX29ianMoKnRiLCBOTDgwMjExX0FUVFJfTUFYICYjNDM7IDEpOwomIzQzOwlpZiAoIXRiKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiAJZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgaW5mby0mZ3Q7YXR0cnMsICZhbXA7cGFyYW1zLmJlYWNvbl9uZXh0LAogCQkJCSAgIHdkZXYtJmd0O2xpbmtzW3BhcmFtcy5saW5rX2lkXS5hcC5jaGFuZGVmLmNoYW4sCiAJCQkJICAgaW5mby0mZ3Q7ZXh0YWNrKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JdGIgPSBremFsbG9jX29ianMoKnRiLCBOTDgwMjExX0FUVFJfTUFYICYjNDM7IDEpOwotCWlmICghdGIpCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwkJZ290byBvdXQ7CiAKIAllcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBOTDgwMjExX0FUVFJfTUFYLAogCQkJICAgICAgIGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9DT0xPUl9DSEFOR0VfRUxFTVNdLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFdpRmkgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AuIEludGVyZXN0aW5nLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBpcyB3aXRoaW4gdGhlIGBubDgwMjExX2NvbG9yX2NoYW5nZWAgZnVuY3Rpb24uIFRoZSBwYXRjaCByZW9yZGVycyB0aGUgYWxsb2NhdGlvbiBvZiBga3phbGxvY19vYmpzYCBhbmQgdGhlIGNhbGwgdG8gYG5sODAyMTFfcGFyc2VfYmVhY29uYC4gSXQgbG9va3MgbGlrZSBpdCBub3cgYWxsb2NhdGVzIGB0YmAgKmJlZm9yZSogY2FsbGluZyBgbmw4MDIxMV9wYXJzZV9iZWFjb25gLiBBbmQsIGlmIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgZmFpbHMsIGluc3RlYWQgb2YgaW1tZWRpYXRlbHkgcmV0dXJuaW5nIGFuIGVycm9yLCBpdCB1c2VzIGBnb3RvIG91dDtgLgoKV2FpdCBhIG1pbnV0ZS4uLiB0aGF0IGBnb3RvIG91dDtgIGp1bXDigKYgdGhhdCYjMzk7cyBnb3QgbWUgdGhpbmtpbmcuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGBvdXQ6YCB3aWxsICpmcmVlKiBgdGJgIGFuZCBwb3RlbnRpYWxseSBgcGFyYW1zLmJlYWNvbl9uZXh0YCwgYnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEEgc3VidGxlIGNoYW5nZSBsaWtlIHRoaXMgY291bGQgaW50cm9kdWNlIGEgbWVtb3J5IGxlYWsgb3Igb3RoZXIgc3VidGxlIHNpZGUgZWZmZWN0cy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gYG5sODAyMTFfY29sb3JfY2hhbmdlYCBpdHNlbGYgdG8gdmVyaWZ5IHRoYXQgYGdvdG8gb3V0O2AgaXMgaW5kZWVkIGhhbmRsaW5nIHRoZSBjbGVhbnVwIG9mIHRoZXNlIHJlc291cmNlcyBhcyBleHBlY3RlZC4gR290dGEgbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCBhIHJpc2t5IGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtubDgwMjExX2NvbG9yX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYz0xODY2NT1zdGF0aWMgaW50IG5sODAyMTFfc2V0X3RpZF9jb25maWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NzIwLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODcyMTpzdGF0aWMgaW50IG5sODAyMTFfY29sb3JfY2hhbmdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NzIyLXtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NTQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwMzQ3LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIwMzQ4Olx0XHQuZG9pdCA9IG5sODAyMTFfY29sb3JfY2hhbmdlLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDM0OS1cdFx0LmZsYWdzID0gR0VOTF9VTlNfQURNSU5fUEVSTSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTk3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYG5sODAyMTFfY29sb3JfY2hhbmdlYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG5sODAyMTFfY29sb3JfY2hhbmdlYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHNpZnRpbmcgdGhyb3VnaCBwb3RlbnRpYWwgY29udGV4dHMuICpubDgwMjExKiBzY3JlYW1zIHdpcmVsZXNzIG5ldHdvcmtpbmcsIG9idmlvdXNseS4gU28sIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgYXNwZWN0IG9mIDgwMi4xMSBtYW5hZ2VtZW50IHRocm91Z2ggdGhlIE5ldGxpbmsgaW50ZXJmYWNlLiBUaGUgJiMzNDtjb2xvciYjMzQ7IHBhcnQgaXMgaW50cmlndWluZy4gSW4gd2lyZWxlc3MsICYjMzQ7Y29sb3ImIzM0OyBjb3VsZCByZWxhdGUgdG8gYSB2YXJpZXR5IG9mIHRoaW5nczogZnJlcXVlbmN5IGJhbmRzLCBjaGFubmVsIGRlc2lnbmF0aW9uLCBwZXJoYXBzIGV2ZW4gc29tZSBraW5kIG9mIGNvbmZsaWN0IHJlc29sdXRpb24gbWVjaGFuaXNtIHdpdGhpbiBhIGRlbnNlIG5ldHdvcmsuCgpNeSBpbml0aWFsIHF1ZXN0aW9ucyBhcmUgcGlsaW5nIHVwIGFscmVhZHk6CgoqICAgV2hhdCBzcGVjaWZpYyBvcGVyYXRpb24gaXMgdGhpcyBmdW5jdGlvbiByZWxhdGVkIHRvPyBJcyBpdCBhIGNvbmZpZ3VyYXRpb24gY2hhbmdlLCBhIHN0YXR1cyB1cGRhdGUsIG9yIGEgY29tbWFuZCBleGVjdXRpb24/CiogICBIb3cgaXMgJiMzNDtjb2xvciYjMzQ7IHVzZWQgaW4gdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmw4MDIxMSBzdGFjaz8gSXMgaXQgYW4gYWJzdHJhY3QgY29uY2VwdCBvciBhIGRpcmVjdCBoYXJkd2FyZSBwYXJhbWV0ZXI/CiogICBJcyBpdCByZWxhdGVkIHRvIHNwZWN0cnVtIG1hbmFnZW1lbnQsIG9yIGlzIGl0IG1vcmUgYSBNQUMtbGF5ZXIgY29uY2Vybj8KKiAgIEFyZSB0aGVyZSBlcnJvciBjYXNlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/CgpFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGtub3cgdGhlICp3aHkqIGFuZCB0aGUgKmhvdyogYmVoaW5kIHRoaXMgZnVuY3Rpb24mIzM5O3MgZXhpc3RlbmNlIGFuZCBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaXRzIGNhbGwgc2l0ZXMsIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBhbmQgdGhlIG92ZXJhbGwgc3RhdGUgbWFjaGluZSBpdCBpbnRlcmFjdHMgd2l0aCB3aXRoaW4gdGhlIGJyb2FkZXIgbmw4MDIxMSBmcmFtZXdvcmsuIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgaW52b2x2ZSB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UgYW5kIHRoZSBwb3NzaWJsZSBzaWRlIGVmZmVjdHMgaXQgbWF5IGhhdmUgb24gdGhlIHdpcmVsZXNzIGludGVyZmFjZSYjMzk7cyBvcGVyYXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODcyMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg3MjE6XHRzdGF0aWMgaW50IG5sODAyMTFfY29sb3JfY2hhbmdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4xODcyMjpcdHtcbjE4NzIzOlx0XHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuMTg3MjQ6XHRcdHN0cnVjdCBjZmc4MDIxMV9jb2xvcl9jaGFuZ2Vfc2V0dGluZ3MgcGFyYW1zID0ge307XG4xODcyNTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMV07XG4xODcyNjpcdFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cdTAwM2VpZWVlODAyMTFfcHRyO1xuMTg3Mjc6XHRcdHN0cnVjdCBubGF0dHIgKip0YjtcbjE4NzI4Olx0XHR1MTYgb2Zmc2V0O1xuMTg3Mjk6XHRcdGludCBlcnI7XG4xODczMDpcdFxuMTg3MzE6XHRcdGlmICghcmRldi1cdTAwM2VvcHMtXHUwMDNlY29sb3JfY2hhbmdlKVxuMTg3MzI6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTg3MzM6XHRcbjE4NzM0Olx0XHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG4xODczNTpcdFx0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUikpXG4xODczNjpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xODczNzpcdFxuMTg3Mzg6XHRcdGlmICh3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUClcbjE4NzM5Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE4NzQwOlx0XG4xODc0MTpcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DT0xPUl9DSEFOR0VfQ09VTlRdIHx8XG4xODc0MjpcdFx0ICAgICFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DT0xPUl9DSEFOR0VfQ09MT1JdIHx8XG4xODc0MzpcdFx0ICAgICFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DT0xPUl9DSEFOR0VfRUxFTVNdKVxuMTg3NDQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODc0NTpcdFxuMTg3NDY6XHRcdHBhcmFtcy5jb3VudCA9IG5sYV9nZXRfdTgoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQ09MT1JfQ0hBTkdFX0NPVU5UXSk7XG4xODc0NzpcdFx0cGFyYW1zLmNvbG9yID0gbmxhX2dldF91OChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DT0xPUl9DSEFOR0VfQ09MT1JdKTtcbjE4NzQ4Olx0XG4xODc0OTpcdFx0cGFyYW1zLmxpbmtfaWQgPSBubDgwMjExX2xpbmtfaWQoaW5mby1cdTAwM2VhdHRycyk7XG4xODc1MDpcdFx0aWYgKCF3ZGV2LVx1MDAzZWxpbmtzW3BhcmFtcy5saW5rX2lkXS5hcC5iZWFjb25faW50ZXJ2YWwpXG4xODc1MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE4NzUyOlx0XG4xODc1MzpcdFx0dGIgPSBremFsbG9jX29ianMoKnRiLCBOTDgwMjExX0FUVFJfTUFYICYjNDM7IDEpO1xuMTg3NTQ6XHRcdGlmICghdGIpXG4xODc1NTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE4NzU2Olx0XG4xODc1NzpcdFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgaW5mby1cdTAwM2VhdHRycywgXHUwMDI2cGFyYW1zLmJlYWNvbl9uZXh0LFxuMTg3NTg6XHRcdFx0XHRcdCAgIHdkZXYtXHUwMDNlbGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmNoYW5kZWYuY2hhbixcbjE4NzU5Olx0XHRcdFx0XHQgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4xODc2MDpcdFx0aWYgKGVycilcbjE4NzYxOlx0XHRcdGdvdG8gb3V0O1xuMTg3NjI6XHRcbjE4NzYzOlx0XHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBOTDgwMjExX0FUVFJfTUFYLFxuMTg3NjQ6XHRcdFx0XHQgICAgICAgaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQ09MT1JfQ0hBTkdFX0VMRU1TXSxcbjE4NzY1Olx0XHRcdFx0ICAgICAgIG5sODAyMTFfcG9saWN5LCBpbmZvLVx1MDAzZWV4dGFjayk7XG4xODc2NjpcdFx0aWYgKGVycilcbjE4NzY3Olx0XHRcdGdvdG8gb3V0O1xuMTg3Njg6XHRcbjE4NzY5Olx0XHRlcnIgPSBubDgwMjExX3BhcnNlX2JlYWNvbihyZGV2LCB0YiwgXHUwMDI2cGFyYW1zLmJlYWNvbl9jb2xvcl9jaGFuZ2UsXG4xODc3MDpcdFx0XHRcdFx0ICAgd2Rldi1cdTAwM2VsaW5rc1twYXJhbXMubGlua19pZF0uYXAuY2hhbmRlZi5jaGFuLFxuMTg3NzE6XHRcdFx0XHRcdCAgIGluZm8tXHUwMDNlZXh0YWNrKTtcbjE4NzcyOlx0XHRpZiAoZXJyKVxuMTg3NzM6XHRcdFx0Z290byBvdXQ7XG4xODc3NDpcdFxuMTg3NzU6XHRcdGlmICghdGJbTkw4MDIxMV9BVFRSX0NOVERXTl9PRkZTX0JFQUNPTl0pIHtcbjE4Nzc2Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4xODc3NzpcdFx0XHRnb3RvIG91dDtcbjE4Nzc4Olx0XHR9XG4xODc3OTpcdFxuMTg3ODA6XHRcdGlmIChubGFfbGVuKHRiW05MODAyMTFfQVRUUl9DTlREV05fT0ZGU19CRUFDT05dKSAhPSBzaXplb2YodTE2KSkge1xuMTg3ODE6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE4NzgyOlx0XHRcdGdvdG8gb3V0O1xuMTg3ODM6XHRcdH1cbjE4Nzg0Olx0XG4xODc4NTpcdFx0b2Zmc2V0ID0gbmxhX2dldF91MTYodGJbTkw4MDIxMV9BVFRSX0NOVERXTl9PRkZTX0JFQUNPTl0pO1xuMTg3ODY6XHRcdGlmIChvZmZzZXQgXHUwMDNlPSBwYXJhbXMuYmVhY29uX2NvbG9yX2NoYW5nZS50YWlsX2xlbikge1xuMTg3ODc6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE4Nzg4Olx0XHRcdGdvdG8gb3V0O1xuMTg3ODk6XHRcdH1cbjE4NzkwOlx0XG4xODc5MTpcdFx0aWYgKHBhcmFtcy5iZWFjb25fY29sb3JfY2hhbmdlLnRhaWxbb2Zmc2V0XSAhPSBwYXJhbXMuY291bnQpIHtcbjE4NzkyOlx0XHRcdGVyciA9IC1FSU5WQUw7XG4xODc5MzpcdFx0XHRnb3RvIG91dDtcbjE4Nzk0Olx0XHR9XG4xODc5NTpcdFxuMTg3OTY6XHRcdHBhcmFtcy5jb3VudGVyX29mZnNldF9iZWFjb24gPSBvZmZzZXQ7XG4xODc5NzpcdFxuMTg3OTg6XHRcdGlmICh0YltOTDgwMjExX0FUVFJfQ05URFdOX09GRlNfUFJFU1BdKSB7XG4xODc5OTpcdFx0XHRpZiAobmxhX2xlbih0YltOTDgwMjExX0FUVFJfQ05URFdOX09GRlNfUFJFU1BdKSAhPVxuMTg4MDA6XHRcdFx0ICAgIHNpemVvZih1MTYpKSB7XG4xODgwMTpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4xODgwMjpcdFx0XHRcdGdvdG8gb3V0O1xuMTg4MDM6XHRcdFx0fVxuMTg4MDQ6XHRcbjE4ODA1Olx0XHRcdG9mZnNldCA9IG5sYV9nZXRfdTE2KHRiW05MODAyMTFfQVRUUl9DTlREV05fT0ZGU19QUkVTUF0pO1xuMTg4MDY6XHRcdFx0aWYgKG9mZnNldCBcdTAwM2U9IHBhcmFtcy5iZWFjb25fY29sb3JfY2hhbmdlLnByb2JlX3Jlc3BfbGVuKSB7XG4xODgwNzpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4xODgwODpcdFx0XHRcdGdvdG8gb3V0O1xuMTg4MDk6XHRcdFx0fVxuMTg4MTA6XHRcbjE4ODExOlx0XHRcdGlmIChwYXJhbXMuYmVhY29uX2NvbG9yX2NoYW5nZS5wcm9iZV9yZXNwW29mZnNldF0gIT1cbjE4ODEyOlx0XHRcdCAgICBwYXJhbXMuY291bnQpIHtcbjE4ODEzOlx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE4ODE0Olx0XHRcdFx0Z290byBvdXQ7XG4xODgxNTpcdFx0XHR9XG4xODgxNjpcdFxuMTg4MTc6XHRcdFx0cGFyYW1zLmNvdW50ZXJfb2Zmc2V0X3ByZXNwID0gb2Zmc2V0O1xuMTg4MTg6XHRcdH1cbjE4ODE5Olx0XG4xODgyMDpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1VOU09MX0JDQVNUX1BST0JFX1JFU1BdKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIxMQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZToKCioqTXkgSW1tZWRpYXRlIEFuYWx5c2lzIG9mIHRoZSBDb2RlIFNuaXBwZXQqKgoKSG1tLCBJIHNlZSBhIGZyYWdtZW50IG9mIGEgZnVuY3Rpb24sIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBwYXVzZS4gSSBjYW4mIzM5O3QganVtcCB0byBjb25jbHVzaW9ucyBvciBtYWtlIGFueSBkZWZpbml0aXZlIHN0YXRlbWVudHMgYWJvdXQgaXRzIHB1cnBvc2Ugb3IgYmVoYXZpb3Igd2l0aG91dCB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0LiBUaGUgY3J1Y2lhbCB2YXJpYWJsZSBpcyBgb3V0YCDigJMgaXQmIzM5O3MgY2xlYXJseSBhIGNlbnRyYWwgZWxlbWVudCwgYW5kIGl0cyB1bHRpbWF0ZSBmdW5jdGlvbiBpcyBjb21wbGV0ZWx5IHVua25vd24gYXQgdGhpcyBwb2ludC4gSSBuZWVkIHRvIHNlZSB0aGUgZW50aXJlIGZ1bmN0aW9uIGRlZmluaXRpb24gdG8gdW5kZXJzdGFuZCB3aGVyZSBgb3V0YCBjb21lcyBmcm9tLCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCwgYW5kIHdoYXQgZGF0YSBpdCYjMzk7cyBob2xkaW5nLCB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBnb2FsIG9mIHRoaXMgY29kZS4gV2l0aG91dCB0aGF0IGNvbXBsZXRlIHBpY3R1cmUsIGFueSBzcGVjdWxhdGlvbiBpcyBwcmVtYXR1cmUuIEkgbXVzdCBoYXZlIG1vcmUgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg4MjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4ODIxOlx0XHRcdGVyciA9IG5sODAyMTFfcGFyc2VfdW5zb2xfYmNhc3RfcHJvYmVfcmVzcChcbjE4ODIyOlx0XHRcdFx0cmRldiwgaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVU5TT0xfQkNBU1RfUFJPQkVfUkVTUF0sXG4xODgyMzpcdFx0XHRcdFx1MDAyNnBhcmFtcy51bnNvbF9iY2FzdF9wcm9iZV9yZXNwKTtcbjE4ODI0Olx0XHRcdGlmIChlcnIpXG4xODgyNTpcdFx0XHRcdGdvdG8gb3V0O1xuMTg4MjY6XHRcdH1cbjE4ODI3Olx0XG4xODgyODpcdFx0ZXJyID0gcmRldl9jb2xvcl9jaGFuZ2UocmRldiwgZGV2LCBcdTAwMjZwYXJhbXMpO1xuMTg4Mjk6XHRcbjE4ODMwOlx0b3V0OlxuMTg4MzE6XHRcdGtmcmVlKHBhcmFtcy5iZWFjb25fbmV4dC5tYnNzaWRfaWVzKTtcbjE4ODMyOlx0XHRrZnJlZShwYXJhbXMuYmVhY29uX2NvbG9yX2NoYW5nZS5tYnNzaWRfaWVzKTtcbjE4ODMzOlx0XHRrZnJlZShwYXJhbXMuYmVhY29uX25leHQucm5yX2llcyk7XG4xODgzNDpcdFx0a2ZyZWUocGFyYW1zLmJlYWNvbl9jb2xvcl9jaGFuZ2Uucm5yX2llcyk7XG4xODgzNTpcdFx0a2ZyZWUodGIpO1xuMTg4MzY6XHRcdHJldHVybiBlcnI7XG4xODgzNzpcdH1cbjE4ODM4Olx0XG4xODgzOTpcdHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfZmlsc19hYWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjE4ODQwOlx0XHRcdFx0XHRzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTg4NDE6XHR7XG4xODg0MjpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbjE4ODQzOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbjE4ODQ0Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfZmlsc19hYWQgZmlsc19hYWQgPSB7fTtcbjE4ODQ1Olx0XHR1OCAqbm9uY2VzO1xuMTg4NDY6XHRcbjE4ODQ3Olx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHxcbjE4ODQ4Olx0XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZJTFNfS0VLXSB8fFxuMTg4NDk6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRklMU19OT05DRVNdKVxuMTg4NTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODg1MTpcdFxuMTg4NTI6XHRcdGZpbHNfYWFkLm1hY2FkZHIgPSBubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTtcbjE4ODUzOlx0XHRmaWxzX2FhZC5rZWtfbGVuID0gbmxhX2xlbihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9GSUxTX0tFS10pO1xuMTg4NTQ6XHRcdGZpbHNfYWFkLmtlayA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZJTFNfS0VLXSk7XG4xODg1NTpcdFx0bm9uY2VzID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRklMU19OT05DRVNdKTtcbjE4ODU2Olx0XHRmaWxzX2FhZC5zbm9uY2UgPSBub25jZXM7XG4xODg1NzpcdFx0Zmlsc19hYWQuYW5vbmNlID0gbm9uY2VzICYjNDM7IEZJTFNfTk9OQ0VfTEVOO1xuMTg4NTg6XHRcbjE4ODU5Olx0XHRyZXR1cm4gcmRldl9zZXRfZmlsc19hYWQocmRldiwgZGV2LCBcdTAwMjZmaWxzX2FhZCk7XG4xODg2MDpcdH1cbjE4ODYxOlx0XG4xODg2MjpcdHN0YXRpYyBpbnQgbmw4MDIxMV9hZGRfbGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTg4NjM6XHR7XG4xODg2NDpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbjE4ODY1Olx0XHR1bnNpZ25lZCBpbnQgbGlua19pZCA9IG5sODAyMTFfbGlua19pZChpbmZvLVx1MDAzZWF0dHJzKTtcbjE4ODY2Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbjE4ODY3Olx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4xODg2ODpcdFx0aW50IHJldDtcbjE4ODY5Olx0XG4xODg3MDpcdFx0aWYgKCEod2Rldi1cdTAwM2V3aXBoeS1cdTAwM2VmbGFncyBcdTAwMjYgV0lQSFlfRkxBR19TVVBQT1JUU19NTE8pKVxuMTg4NzE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODg3MjpcdFxuMTg4NzM6XHRcdHN3aXRjaCAod2Rldi1cdTAwM2VpZnR5cGUpIHtcbjE4ODc0Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxuMTg4NzU6XHRcdFx0YnJlYWs7XG4xODg3NjpcdFx0ZGVmYXVsdDpcbjE4ODc3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg4Nzg6XHRcdH1cbjE4ODc5Olx0XG4xODg4MDpcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdIHx8XG4xODg4MTpcdFx0ICAgICFpc192YWxpZF9ldGhlcl9hZGRyKG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pKSlcbjE4ODgyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg4ODM6XHRcbjE4ODg0Olx0XHR3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzIHw9IEJJVChsaW5rX2lkKTtcbjE4ODg1Olx0XHRldGhlcl9hZGRyX2NvcHkod2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXS5hZGRyLFxuMTg4ODY6XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdKSk7XG4xODg4NzpcdFxuMTg4ODg6XHRcdHJldCA9IHJkZXZfYWRkX2ludGZfbGluayhyZGV2LCB3ZGV2LCBsaW5rX2lkKTtcbjE4ODg5Olx0XHRpZiAocmV0KSB7XG4xODg5MDpcdFx0XHR3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzIFx1MDAyNj0gfkJJVChsaW5rX2lkKTtcbjE4ODkxOlx0XHRcdGV0aF96ZXJvX2FkZHIod2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXS5hZGRyKTtcbjE4ODkyOlx0XHR9XG4xODg5MzpcdFxuMTg4OTQ6XHRcdHJldHVybiByZXQ7XG4xODg5NTpcdH1cbjE4ODk2Olx0XG4xODg5NzpcdHN0YXRpYyBpbnQgbmw4MDIxMV9yZW1vdmVfbGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTg4OTg6XHR7XG4xODg5OTpcdFx0dW5zaWduZWQgaW50IGxpbmtfaWQgPSBubDgwMjExX2xpbmtfaWQoaW5mby1cdTAwM2VhdHRycyk7XG4xODkwMDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMV07XG4xODkwMTpcdFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cdTAwM2VpZWVlODAyMTFfcHRyO1xuMTg5MDI6XHRcbjE4OTAzOlx0XHQvKiBjYW5ub3QgcmVtb3ZlIGlmIHRoZXJlJiMzOTtzIG5vIGxpbmsgKi9cbjE4OTA0Olx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01MT19MSU5LX0lEXSlcbjE4OTA1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg5MDY6XHRcbjE4OTA3Olx0XHRzd2l0Y2ggKHdkZXYtXHUwMDNlaWZ0eXBlKSB7XG4xODkwODpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDpcbjE4OTA5Olx0XHRcdGJyZWFrO1xuMTg5MTA6XHRcdGRlZmF1bHQ6XG4xODkxMTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE4OTEyOlx0XHR9XG4xODkxMzpcdFxuMTg5MTQ6XHRcdGNmZzgwMjExX3JlbW92ZV9saW5rKHdkZXYsIGxpbmtfaWQpO1xuMTg5MTU6XHRcbjE4OTE2Olx0XHRyZXR1cm4gMDtcbjE4OTE3Olx0fVxuMTg5MTg6XHRcbjE4OTE5Olx0c3RhdGljIGludFxuMTg5MjA6XHRubDgwMjExX2FkZF9tb2RfbGlua19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3MQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTGVhayBpbiB0aGUgQmVhY29uIFBhcnNpbmcgUm91dGluZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBtZW1vcnkgbGVhay4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSBiZWZvcmUgdGhlIGZpeCBpbnZvbHZlcyBwYXJzaW5nIGEgYmVhY29uLiBTcGVjaWZpY2FsbHksIGl0IGNhbGxzIGBubDgwMjExX3BhcnNlX2JlYWNvbmAsIGFuZCBpZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IsIHdlIGltbWVkaWF0ZWx5IGV4aXQuIFJpZ2h0LCBzbyB3ZSBjYWxsIGBubDgwMjExX3BhcnNlX2JlYWNvbmAsIGFuZCB0aGVuIGFsbG9jYXRlIGEgdGFibGUgd2l0aCBga3phbGxvY19vYmpzYC4gQnV0LCB3YWl0IGEgbWludXRlLCB0aGUgcHJvYmxlbSAqbXVzdCogYmUgdGhhdCBgbmw4MDIxMV9wYXJzZV9iZWFjb25gICppdHNlbGYqIGNvdWxkIGJlIGFsbG9jYXRpbmcgbWVtb3J5IGluIGBwYXJhbXMuYmVhY29uX25leHQubWJzc2lkX2llc2AgYW5kIGBwYXJhbXMuYmVhY29uX25leHQucm5yX2llc2AuIFRoYXQgbWVtb3J5LCBpZiBhbGxvY2F0ZWQsIGlzbiYjMzk7dCBiZWluZyBmcmVlZCBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZhaWxzISBTbywgdGhlIGxlYWsgaXMgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byBjb25maXJtIHRoaXMuLi4gSSBiZXR0ZXIgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgYWxsb2NhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcgdGhlcmUuIEdvdCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmw4MDIxMV9wYXJzZV9iZWFjb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmM9NjYzMT1zdGF0aWMgaW50IG5sODAyMTFfY2FsY3VsYXRlX2FwX29wZXJhdGlvbihzdHJ1Y3QgbmxhdHRyICphdHRyc1tdLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjcwMy1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NjcwNDpzdGF0aWMgaW50IG5sODAyMTFfcGFyc2VfYmVhY29uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjcwNS1cdFx0XHRcdHN0cnVjdCBubGF0dHIgKmF0dHJzW10sXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz03MTk1PXN0YXRpYyBpbnQgbmw4MDIxMV9zdGFydF9hcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNzM0Ny1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NzM0ODpcdGVyciA9IG5sODAyMTFfcGFyc2VfYmVhY29uKHJkZXYsIGluZm8tXHUwMDNlYXR0cnMsIFx1MDAyNnBhcmFtcy1cdTAwM2ViZWFjb24sXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTczNDktXHRcdFx0XHQgICBwYXJhbXMtXHUwMDNlY2hhbmRlZi5jaGFuLCBpbmZvLVx1MDAzZWV4dGFjayk7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz03NTAyPXN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfYmVhY29uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy03NTI2LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo3NTI3Olx0ZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgaW5mby1cdTAwM2VhdHRycywgXHUwMDI2cGFyYW1zLVx1MDAzZWJlYWNvbixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNzUyOC1cdFx0XHRcdCAgIHdkZXYtXHUwMDNlbGlua3NbbGlua19pZF0uYXAuY2hhbmRlZi5jaGFuLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTIwNzI9c3RhdGljIGludCBubDgwMjExX2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjE1MS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIxNTI6XHRlcnIgPSBubDgwMjExX3BhcnNlX2JlYWNvbihyZGV2LCBpbmZvLVx1MDAzZWF0dHJzLCBcdTAwMjZwYXJhbXMuYmVhY29uX2FmdGVyLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjE1My1cdFx0XHRcdCAgIHBhcmFtcy5jaGFuZGVmLmNoYW4sIGluZm8tXHUwMDNlZXh0YWNrKTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMTY4LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjE2OTpcdGVyciA9IG5sODAyMTFfcGFyc2VfYmVhY29uKHJkZXYsIGNzYV9hdHRycywgXHUwMDI2cGFyYW1zLmJlYWNvbl9jc2EsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMTcwLVx0XHRcdFx0ICAgd2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXS5hcC5jaGFuZGVmLmNoYW4sXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xODcyMT1zdGF0aWMgaW50IG5sODAyMTFfY29sb3JfY2hhbmdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODc1Ni1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTg3NTc6XHRlcnIgPSBubDgwMjExX3BhcnNlX2JlYWNvbihyZGV2LCBpbmZvLVx1MDAzZWF0dHJzLCBcdTAwMjZwYXJhbXMuYmVhY29uX25leHQsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NzU4LVx0XHRcdFx0ICAgd2Rldi1cdTAwM2VsaW5rc1twYXJhbXMubGlua19pZF0uYXAuY2hhbmRlZi5jaGFuLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg3NjgtXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NzY5Olx0ZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgdGIsIFx1MDAyNnBhcmFtcy5iZWFjb25fY29sb3JfY2hhbmdlLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODc3MC1cdFx0XHRcdCAgIHdkZXYtXHUwMDNlbGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmNoYW5kZWYuY2hhbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc1MQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJlYWNvbiBQYXJzaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbW92aW5nIHRoZSBga3phbGxvY19vYmpzYCBhbGxvY2F0aW9uIGJlZm9yZSB0aGUgaW5pdGlhbCBjYWxsIHRvIGBubDgwMjExX3BhcnNlX2JlYWNvbmAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgb3B0aW1pemF0aW9uIHRvIGhhbmRsZSB0aGUgYC1FTk9NRU1gIGNhc2UgZWFybHkuIElmIGBremFsbG9jX29ianNgIGZhaWxzLCB3ZSBqdXN0IGJhaWwgb3V0IGltbWVkaWF0ZWx5LgoKTm93LCBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gICpkb2VzKiBmYWlsIGFmdGVyIHRoZSBwYXRjaCwgdGhlIGNvZGUgbm93IGNvcnJlY3RseSBqdW1wcyB0byB0aGUgYG91dGAgbGFiZWwuIFRoYXQmIzM5O3MgZ29vZCwgYmVjYXVzZSBgb3V0YCBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBgcGFyYW1zLmJlYWNvbl9uZXh0Lm1ic3NpZF9pZXNgLCBgcGFyYW1zLmJlYWNvbl9uZXh0LnJucl9pZXNgLCBhbmQgdGhlIGB0YmAgc3RydWN0dXJlLCBhbW9uZyBvdGhlciB0aGluZ3MuIExvb2tzIGxpa2Ugd2UmIzM5O3JlIGNsZWFuaW5nIHVwIGFmdGVyIG91cnNlbHZlcy4KCkJ1dCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBjb25zaWRlciB0aGUgcHJlLXBhdGNoIGJlaGF2aW9yLiBCZWZvcmUgdGhpcyBjaGFuZ2UsIGlmIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgZmFpbGVkLCBpdCBqdXN0IHJldHVybmVkIHRoZSBgZXJyYCB2YWx1ZSBkaXJlY3RseS4gVGhhdCBpbXBsaWVzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrISBBbnkgYWxsb2NhdGlvbnMgbWFkZSAqd2l0aGluKiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZvciBgcGFyYW1zLmJlYWNvbl9uZXh0YCBiZWZvcmUgdGhlIGZ1bmN0aW9uIGZhaWxlZCB3b3VsZCBoYXZlIGJlZW4gb3JwaGFuZWQsIHJpZ2h0PwoKQWxyaWdodCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgc291cmNlIGNvZGUgb2YgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBpdHNlbGYgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCBoYW5kbGVzIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byBzZWUgd2hhdCBoYXBwZW5zIHdoZW4gaXQgZW5jb3VudGVycyBhbiBlcnJvciBhbmQgZGV0ZXJtaW5lIHdoYXQgbWVtb3J5IGlzIG9yIGlzbiYjMzk7dCBmcmVlZCB1bmRlciB0aGF0IGNvbmRpdGlvbi4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IHZ1bG5lcmFiaWxpdHkuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY3MDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY3MDQ6XHRzdGF0aWMgaW50IG5sODAyMTFfcGFyc2VfYmVhY29uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbjY3MDU6XHRcdFx0XHRcdHN0cnVjdCBubGF0dHIgKmF0dHJzW10sXG42NzA2Olx0XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfYmVhY29uX2RhdGEgKmJjbixcbjY3MDc6XHRcdFx0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbixcbjY3MDg6XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjY3MDk6XHR7XG42NzEwOlx0XHRib29sIGhhdmVpbmZvID0gZmFsc2U7XG42NzExOlx0XHRpbnQgZXJyO1xuNjcxMjpcdFxuNjcxMzpcdFx0bWVtc2V0KGJjbiwgMCwgc2l6ZW9mKCpiY24pKTtcbjY3MTQ6XHRcbjY3MTU6XHRcdGJjbi1cdTAwM2VsaW5rX2lkID0gbmw4MDIxMV9saW5rX2lkKGF0dHJzKTtcbjY3MTY6XHRcbjY3MTc6XHRcdGlmIChhdHRyc1tOTDgwMjExX0FUVFJfQkVBQ09OX0hFQURdKSB7XG42NzE4Olx0XHRcdGJjbi1cdTAwM2VoZWFkID0gbmxhX2RhdGEoYXR0cnNbTkw4MDIxMV9BVFRSX0JFQUNPTl9IRUFEXSk7XG42NzE5Olx0XHRcdGJjbi1cdTAwM2VoZWFkX2xlbiA9IG5sYV9sZW4oYXR0cnNbTkw4MDIxMV9BVFRSX0JFQUNPTl9IRUFEXSk7XG42NzIwOlx0XHRcdGlmICghYmNuLVx1MDAzZWhlYWRfbGVuKVxuNjcyMTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNjcyMjpcdFx0XHRoYXZlaW5mbyA9IHRydWU7XG42NzIzOlx0XHR9XG42NzI0Olx0XG42NzI1Olx0XHRpZiAoYXR0cnNbTkw4MDIxMV9BVFRSX0JFQUNPTl9UQUlMXSkge1xuNjcyNjpcdFx0XHRiY24tXHUwMDNldGFpbCA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9CRUFDT05fVEFJTF0pO1xuNjcyNzpcdFx0XHRiY24tXHUwMDNldGFpbF9sZW4gPSBubGFfbGVuKGF0dHJzW05MODAyMTFfQVRUUl9CRUFDT05fVEFJTF0pO1xuNjcyODpcdFx0XHRoYXZlaW5mbyA9IHRydWU7XG42NzI5Olx0XHR9XG42NzMwOlx0XG42NzMxOlx0XHRpZiAoIWhhdmVpbmZvKVxuNjczMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjY3MzM6XHRcbjY3MzQ6XHRcdGlmIChhdHRyc1tOTDgwMjExX0FUVFJfSUVdKSB7XG42NzM1Olx0XHRcdGJjbi1cdTAwM2ViZWFjb25faWVzID0gbmxhX2RhdGEoYXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7XG42NzM2Olx0XHRcdGJjbi1cdTAwM2ViZWFjb25faWVzX2xlbiA9IG5sYV9sZW4oYXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7XG42NzM3Olx0XHR9XG42NzM4Olx0XG42NzM5Olx0XHRpZiAoYXR0cnNbTkw4MDIxMV9BVFRSX0lFX1BST0JFX1JFU1BdKSB7XG42NzQwOlx0XHRcdGJjbi1cdTAwM2Vwcm9iZXJlc3BfaWVzID1cbjY3NDE6XHRcdFx0XHRubGFfZGF0YShhdHRyc1tOTDgwMjExX0FUVFJfSUVfUFJPQkVfUkVTUF0pO1xuNjc0MjpcdFx0XHRiY24tXHUwMDNlcHJvYmVyZXNwX2llc19sZW4gPVxuNjc0MzpcdFx0XHRcdG5sYV9sZW4oYXR0cnNbTkw4MDIxMV9BVFRSX0lFX1BST0JFX1JFU1BdKTtcbjY3NDQ6XHRcdH1cbjY3NDU6XHRcbjY3NDY6XHRcdGlmIChhdHRyc1tOTDgwMjExX0FUVFJfSUVfQVNTT0NfUkVTUF0pIHtcbjY3NDc6XHRcdFx0YmNuLVx1MDAzZWFzc29jcmVzcF9pZXMgPVxuNjc0ODpcdFx0XHRcdG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9JRV9BU1NPQ19SRVNQXSk7XG42NzQ5Olx0XHRcdGJjbi1cdTAwM2Vhc3NvY3Jlc3BfaWVzX2xlbiA9XG42NzUwOlx0XHRcdFx0bmxhX2xlbihhdHRyc1tOTDgwMjExX0FUVFJfSUVfQVNTT0NfUkVTUF0pO1xuNjc1MTpcdFx0fVxuNjc1MjpcdFxuNjc1MzpcdFx0aWYgKGF0dHJzW05MODAyMTFfQVRUUl9QUk9CRV9SRVNQXSkge1xuNjc1NDpcdFx0XHRiY24tXHUwMDNlcHJvYmVfcmVzcCA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9QUk9CRV9SRVNQXSk7XG42NzU1Olx0XHRcdGJjbi1cdTAwM2Vwcm9iZV9yZXNwX2xlbiA9IG5sYV9sZW4oYXR0cnNbTkw4MDIxMV9BVFRSX1BST0JFX1JFU1BdKTtcbjY3NTY6XHRcdH1cbjY3NTc6XHRcbjY3NTg6XHRcdGlmIChhdHRyc1tOTDgwMjExX0FUVFJfRlRNX1JFU1BPTkRFUl0pIHtcbjY3NTk6XHRcdFx0c3RydWN0IG5sYXR0ciAqdGJbTkw4MDIxMV9GVE1fUkVTUF9BVFRSX01BWCAmIzQzOyAxXTtcbjY3NjA6XHRcbjY3NjE6XHRcdFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLFxuNjc2MjpcdFx0XHRcdFx0XHRcdCAgTkw4MDIxMV9GVE1fUkVTUF9BVFRSX01BWCxcbjY3NjM6XHRcdFx0XHRcdFx0XHQgIGF0dHJzW05MODAyMTFfQVRUUl9GVE1fUkVTUE9OREVSXSxcbjY3NjQ6XHRcdFx0XHRcdFx0XHQgIE5VTEwsIE5VTEwpO1xuNjc2NTpcdFx0XHRpZiAoZXJyKVxuNjc2NjpcdFx0XHRcdHJldHVybiBlcnI7XG42NzY3Olx0XG42NzY4Olx0XHRcdGlmICh0YltOTDgwMjExX0ZUTV9SRVNQX0FUVFJfRU5BQkxFRF0gXHUwMDI2XHUwMDI2XG42NzY5Olx0XHRcdCAgICB3aXBoeV9leHRfZmVhdHVyZV9pc3NldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LFxuNjc3MDpcdFx0XHRcdFx0XHQgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9FTkFCTEVfRlRNX1JFU1BPTkRFUikpXG42NzcxOlx0XHRcdFx0YmNuLVx1MDAzZWZ0bV9yZXNwb25kZXIgPSAxO1xuNjc3MjpcdFx0XHRlbHNlXG42NzczOlx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuNjc3NDpcdFxuNjc3NTpcdFx0XHRpZiAodGJbTkw4MDIxMV9GVE1fUkVTUF9BVFRSX0xDSV0pIHtcbjY3NzY6XHRcdFx0XHRiY24tXHUwMDNlbGNpID0gbmxhX2RhdGEodGJbTkw4MDIxMV9GVE1fUkVTUF9BVFRSX0xDSV0pO1xuNjc3NzpcdFx0XHRcdGJjbi1cdTAwM2VsY2lfbGVuID0gbmxhX2xlbih0YltOTDgwMjExX0ZUTV9SRVNQX0FUVFJfTENJXSk7XG42Nzc4Olx0XHRcdH1cbjY3Nzk6XHRcbjY3ODA6XHRcdFx0aWYgKHRiW05MODAyMTFfRlRNX1JFU1BfQVRUUl9DSVZJQ0xPQ10pIHtcbjY3ODE6XHRcdFx0XHRiY24tXHUwMDNlY2l2aWNsb2MgPSBubGFfZGF0YSh0YltOTDgwMjExX0ZUTV9SRVNQX0FUVFJfQ0lWSUNMT0NdKTtcbjY3ODI6XHRcdFx0XHRiY24tXHUwMDNlY2l2aWNsb2NfbGVuID0gbmxhX2xlbih0YltOTDgwMjExX0ZUTV9SRVNQX0FUVFJfQ0lWSUNMT0NdKTtcbjY3ODM6XHRcdFx0fVxuNjc4NDpcdFx0fSBlbHNlIHtcbjY3ODU6XHRcdFx0YmNuLVx1MDAzZWZ0bV9yZXNwb25kZXIgPSAtMTtcbjY3ODY6XHRcdH1cbjY3ODc6XHRcbjY3ODg6XHRcdGlmIChhdHRyc1tOTDgwMjExX0FUVFJfSEVfQlNTX0NPTE9SXSkge1xuNjc4OTpcdFx0XHRlcnIgPSBubDgwMjExX3BhcnNlX2hlX2Jzc19jb2xvcihhdHRyc1tOTDgwMjExX0FUVFJfSEVfQlNTX0NPTE9SXSxcbjY3OTA6XHRcdFx0XHRcdFx0XHQgXHUwMDI2YmNuLVx1MDAzZWhlX2Jzc19jb2xvcik7XG42NzkxOlx0XHRcdGlmIChlcnIpXG42NzkyOlx0XHRcdFx0cmV0dXJuIGVycjtcbjY3OTM6XHRcdFx0YmNuLVx1MDAzZWhlX2Jzc19jb2xvcl92YWxpZCA9IHRydWU7XG42Nzk0Olx0XHR9XG42Nzk1Olx0XG42Nzk2Olx0XHRpZiAoYXR0cnNbTkw4MDIxMV9BVFRSX01CU1NJRF9FTEVNU10pIHtcbjY3OTc6XHRcdFx0c3RydWN0IGNmZzgwMjExX21ic3NpZF9lbGVtcyAqbWJzc2lkID1cbjY3OTg6XHRcdFx0XHRubDgwMjExX3BhcnNlX21ic3NpZF9lbGVtcyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LFxuNjc5OTpcdFx0XHRcdFx0XHRcdCAgIGF0dHJzW05MODAyMTFfQVRUUl9NQlNTSURfRUxFTVNdLFxuNjgwMDpcdFx0XHRcdFx0XHRcdCAgIGV4dGFjayk7XG42ODAxOlx0XG42ODAyOlx0XHRcdGlmIChJU19FUlIobWJzc2lkKSlcbjY4MDM6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihtYnNzaWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIzNAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIERlZXBlciBpbnRvIEJlYWNvbiBQYXJzaW5nKioKCkFscmlnaHQsIEkmIzM5O20gdHJhY2luZyB0aHJvdWdoIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgbm93LiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbnMgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhbGxvY2F0aW5nIG1lbW9yeS4gSSBzdXNwZWN0IEkgbWlnaHQgYmUgYWJsZSB0byBpZGVudGlmeSBzb21lIGluZWZmaWNpZW5jaWVzIG9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgdGhpcyB3YXkuIFVuZGVyc3RhbmRpbmcgaG93IGl0IGhhbmRsZXMgbWVtb3J5IGlzIGNyaXRpY2FsIHRvIGZpZ3VyaW5nIG91dCB0aGUgbnVhbmNlcyBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIHJldmVhbHMgYW55dGhpbmcgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY4MDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY4MDQ6XHRcbjY4MDU6XHRcdFx0YmNuLVx1MDAzZW1ic3NpZF9pZXMgPSBtYnNzaWQ7XG42ODA2Olx0XG42ODA3Olx0XHRcdGlmIChiY24tXHUwMDNlbWJzc2lkX2llcyBcdTAwMjZcdTAwMjYgYXR0cnNbTkw4MDIxMV9BVFRSX0VNQV9STlJfRUxFTVNdKSB7XG42ODA4Olx0XHRcdFx0c3RydWN0IGNmZzgwMjExX3Jucl9lbGVtcyAqcm5yID1cbjY4MDk6XHRcdFx0XHRcdG5sODAyMTFfcGFyc2Vfcm5yX2VsZW1zKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG42ODEwOlx0XHRcdFx0XHRcdFx0XHRhdHRyc1tOTDgwMjExX0FUVFJfRU1BX1JOUl9FTEVNU10sXG42ODExOlx0XHRcdFx0XHRcdFx0XHRleHRhY2spO1xuNjgxMjpcdFxuNjgxMzpcdFx0XHRcdGlmIChJU19FUlIocm5yKSlcbjY4MTQ6XHRcdFx0XHRcdHJldHVybiBQVFJfRVJSKHJucik7XG42ODE1Olx0XG42ODE2Olx0XHRcdFx0aWYgKHJuciBcdTAwMjZcdTAwMjYgcm5yLVx1MDAzZWNudCBcdTAwM2MgYmNuLVx1MDAzZW1ic3NpZF9pZXMtXHUwMDNlY250KSB7XG42ODE3Olx0XHRcdFx0XHRrZnJlZShybnIpO1xuNjgxODpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG42ODE5Olx0XHRcdFx0fVxuNjgyMDpcdFxuNjgyMTpcdFx0XHRcdGJjbi1cdTAwM2VybnJfaWVzID0gcm5yO1xuNjgyMjpcdFx0XHR9XG42ODIzOlx0XHR9XG42ODI0Olx0XG42ODI1Olx0XHRlcnIgPSBubDgwMjExX2NhbGN1bGF0ZV9hcF9vcGVyYXRpb24oYXR0cnMsIGJjbiwgZXh0YWNrKTtcbjY4MjY6XHRcdGlmIChlcnIpXG42ODI3Olx0XHRcdHJldHVybiBlcnI7XG42ODI4Olx0XG42ODI5Olx0XHRpZiAoYmNuLVx1MDAzZWhlX29wZXIgXHUwMDI2XHUwMDI2IChjaGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfQ0hBTl9OT19IRSkpXG42ODMwOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjY4MzE6XHRcbjY4MzI6XHRcdGlmIChiY24tXHUwMDNlZWh0X29wZXIgXHUwMDI2XHUwMDI2IChjaGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfQ0hBTl9OT19FSFQpKVxuNjgzMzpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG42ODM0Olx0XG42ODM1Olx0XHRpZiAoYmNuLVx1MDAzZXVocl9vcGVyIFx1MDAyNlx1MDAyNiAoY2hhbi1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX0NIQU5fTk9fVUhSKSlcbjY4MzY6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuNjgzNzpcdFxuNjgzODpcdFx0cmV0dXJuIDA7XG42ODM5Olx0fVxuNjg0MDpcdFxuNjg0MTpcdHN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9oZV9vYnNzX3BkKHN0cnVjdCBubGF0dHIgKmF0dHJzLFxuNjg0MjpcdFx0XHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfaGVfb2Jzc19wZCAqaGVfb2Jzc19wZClcbjY4NDM6XHR7XG42ODQ0Olx0XHRzdHJ1Y3QgbmxhdHRyICp0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9NQVggJiM0MzsgMV07XG42ODQ1Olx0XHRpbnQgZXJyO1xuNjg0NjpcdFxuNjg0NzpcdFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfTUFYLCBhdHRycyxcbjY4NDg6XHRcdFx0XHQgICAgICAgaGVfb2Jzc19wZF9wb2xpY3ksIE5VTEwpO1xuNjg0OTpcdFx0aWYgKGVycilcbjY4NTA6XHRcdFx0cmV0dXJuIGVycjtcbjY4NTE6XHRcbjY4NTI6XHRcdGlmICghdGJbTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfU1JfQ1RSTF0pXG42ODUzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNjg1NDpcdFxuNjg1NTpcdFx0aGVfb2Jzc19wZC1cdTAwM2Vzcl9jdHJsID0gbmxhX2dldF91OCh0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9TUl9DVFJMXSk7XG42ODU2Olx0XG42ODU3Olx0XHRpZiAodGJbTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfTUlOX09GRlNFVF0pXG42ODU4Olx0XHRcdGhlX29ic3NfcGQtXHUwMDNlbWluX29mZnNldCA9XG42ODU5Olx0XHRcdFx0bmxhX2dldF91OCh0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9NSU5fT0ZGU0VUXSk7XG42ODYwOlx0XHRpZiAodGJbTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfTUFYX09GRlNFVF0pXG42ODYxOlx0XHRcdGhlX29ic3NfcGQtXHUwMDNlbWF4X29mZnNldCA9XG42ODYyOlx0XHRcdFx0bmxhX2dldF91OCh0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9NQVhfT0ZGU0VUXSk7XG42ODYzOlx0XHRpZiAodGJbTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfTk9OX1NSR19NQVhfT0ZGU0VUXSlcbjY4NjQ6XHRcdFx0aGVfb2Jzc19wZC1cdTAwM2Vub25fc3JnX21heF9vZmZzZXQgPVxuNjg2NTpcdFx0XHRcdG5sYV9nZXRfdTgodGJbTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfTk9OX1NSR19NQVhfT0ZGU0VUXSk7XG42ODY2Olx0XG42ODY3Olx0XHRpZiAoaGVfb2Jzc19wZC1cdTAwM2VtaW5fb2Zmc2V0IFx1MDAzZSBoZV9vYnNzX3BkLVx1MDAzZW1heF9vZmZzZXQpXG42ODY4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNjg2OTpcdFxuNjg3MDpcdFx0aWYgKHRiW05MODAyMTFfSEVfT0JTU19QRF9BVFRSX0JTU19DT0xPUl9CSVRNQVBdKVxuNjg3MTpcdFx0XHRtZW1jcHkoaGVfb2Jzc19wZC1cdTAwM2Vic3NfY29sb3JfYml0bWFwLFxuNjg3MjpcdFx0XHQgICAgICAgbmxhX2RhdGEodGJbTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfQlNTX0NPTE9SX0JJVE1BUF0pLFxuNjg3MzpcdFx0XHQgICAgICAgc2l6ZW9mKGhlX29ic3NfcGQtXHUwMDNlYnNzX2NvbG9yX2JpdG1hcCkpO1xuNjg3NDpcdFxuNjg3NTpcdFx0aWYgKHRiW05MODAyMTFfSEVfT0JTU19QRF9BVFRSX1BBUlRJQUxfQlNTSURfQklUTUFQXSlcbjY4NzY6XHRcdFx0bWVtY3B5KGhlX29ic3NfcGQtXHUwMDNlcGFydGlhbF9ic3NpZF9iaXRtYXAsXG42ODc3Olx0XHRcdCAgICAgICBubGFfZGF0YSh0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9QQVJUSUFMX0JTU0lEX0JJVE1BUF0pLFxuNjg3ODpcdFx0XHQgICAgICAgc2l6ZW9mKGhlX29ic3NfcGQtXHUwMDNlcGFydGlhbF9ic3NpZF9iaXRtYXApKTtcbjY4Nzk6XHRcbjY4ODA6XHRcdGhlX29ic3NfcGQtXHUwMDNlZW5hYmxlID0gdHJ1ZTtcbjY4ODE6XHRcbjY4ODI6XHRcdHJldHVybiAwO1xuNjg4MzpcdH1cbjY4ODQ6XHRcbjY4ODU6XHRzdGF0aWMgaW50IG5sODAyMTFfcGFyc2VfZmlsc19kaXNjb3Zlcnkoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuNjg4NjpcdFx0XHRcdFx0XHRzdHJ1Y3QgbmxhdHRyICphdHRycyxcbjY4ODc6XHRcdFx0XHRcdFx0c3RydWN0IGNmZzgwMjExX2ZpbHNfZGlzY292ZXJ5ICpmZClcbjY4ODg6XHR7XG42ODg5Olx0XHRzdHJ1Y3QgbmxhdHRyICp0YltOTDgwMjExX0ZJTFNfRElTQ09WRVJZX0FUVFJfTUFYICYjNDM7IDFdO1xuNjg5MDpcdFx0aW50IHJldDtcbjY4OTE6XHRcbjY4OTI6XHRcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSxcbjY4OTM6XHRcdFx0XHRcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9GSUxTX0RJU0NPVkVSWSkpXG42ODk0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNjg5NTpcdFxuNjg5NjpcdFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTkw4MDIxMV9GSUxTX0RJU0NPVkVSWV9BVFRSX01BWCwgYXR0cnMsXG42ODk3Olx0XHRcdFx0ICAgICAgIE5VTEwsIE5VTEwpO1xuNjg5ODpcdFx0aWYgKHJldClcbjY4OTk6XHRcdFx0cmV0dXJuIHJldDtcbjY5MDA6XHRcbjY5MDE6XHRcdGlmICghdGJbTkw4MDIxMV9GSUxTX0RJU0NPVkVSWV9BVFRSX0lOVF9NSU5dIFx1MDAyNlx1MDAyNlxuNjkwMjpcdFx0ICAgICF0YltOTDgwMjExX0ZJTFNfRElTQ09WRVJZX0FUVFJfSU5UX01BWF0gXHUwMDI2XHUwMDI2XG42OTAzOlx0XHQgICAgIXRiW05MODAyMTFfRklMU19ESVNDT1ZFUllfQVRUUl9UTVBMXSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMxMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTGVhayBGaXggaW4gYG5sODAyMTFfY29sb3JfY2hhbmdlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyB0aGUgbG9naWMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBubDgwMjExX3BhcnNlX2JlYWNvbmAgYWxsb2NhdGVzIG1lbW9yeSBmb3IgYGJjbi0mZ3Q7bWJzc2lkX2llc2AgYW5kIGBiY24tJmd0O3Jucl9pZXNgLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBjYWxscyB0byBgbmw4MDIxMV9wYXJzZV9tYnNzaWRfZWxlbXNgIGFuZCBgbmw4MDIxMV9wYXJzZV9ybnJfZWxlbXNgLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYSBwb3RlbnRpYWwgbGVhazogaWYgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBzdWNjZWVkZWQsIGJ1dCB0aGUgc3Vic2VxdWVudCBga3phbGxvY19vYmpzYCBmYWlsZWQsIG1lbW9yeSBpbiBgcGFyYW1zLmJlYWNvbl9uZXh0YCB3b3VsZCBiZSBsZWZ0IGRhbmdsaW5nLiBUaGUgcGF0Y2ggYXR0ZW1wdHMgdG8gZml4IHRoaXMgYnkgYWxsb2NhdGluZyBgdGJgIGZpcnN0IGFuZCB0aGVuLCBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gICpmYWlscyosIGp1bXBpbmcgdG8gYG91dGAgdG8gZnJlZSB0aGUgYWxsb2NhdGVkIGBwYXJhbXMuYmVhY29uX25leHQubWJzc2lkX2llc2AgYW5kIGBwYXJhbXMuYmVhY29uX25leHQucm5yX2llc2AuIFRoYXQgc2VlbWVkIGxpa2UgYSByZWFzb25hYmxlIGZpeC4KClRoZW4gSSByZWFsaXplZCwgaG9sZCBvbiBhIHNlY29uZCEgV2hhdCBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZhaWxzIGludGVybmFsbHkgKmJlZm9yZSogdGhlIHBhdGNoIGlzIGFwcGxpZWQ/IEZvciBpbnN0YW5jZSwgd2hhdCBpZiBgbmw4MDIxMV9jYWxjdWxhdGVfYXBfb3BlcmF0aW9uYCBmYWlscyB3aXRoaW4gYG5sODAyMTFfcGFyc2VfYmVhY29uYD8gSW4gdGhhdCBjYXNlLCBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIHJldHVybnMgYW4gZXJyb3IsIGJ1dCBpdCBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IGZyZWUgdGhlIGFsbG9jYXRlZCBgYmNuLSZndDttYnNzaWRfaWVzYCBhbmQgYGJjbi0mZ3Q7cm5yX2llc2AuIEkgbmVlZCB0byByZXZpc2l0IHRoZSBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZ1bmN0aW9uIHRvIGNvbmZpcm0uCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgdGhlIGNvZGUgbG9va3MgbGlrZToKCmBgYGMKCWVyciA9IG5sODAyMTFfY2FsY3VsYXRlX2FwX29wZXJhdGlvbihhdHRycywgYmNuLCBleHRhY2spOwoJaWYgKGVycikKCQlyZXR1cm4gZXJyOwpgYGAKCll1cC4gSWYgYG5sODAyMTFfY2FsY3VsYXRlX2FwX29wZXJhdGlvbmAgZmFpbHMsIGBubDgwMjExX3BhcnNlX2JlYWNvbmAganVzdCByZXR1cm5zIHRoZSBlcnJvciBkaXJlY3RseSwgbGVhdmluZyB0aG9zZSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCEgU28sIGl0JiMzOTtzIHRoZSAqY2FsbGVyJiMzOTtzKiByZXNwb25zaWJpbGl0eSB0byBmcmVlIHRob3NlIGlmIGl0IGZhaWxzLiBCZWZvcmUgdGhlIHBhdGNoLCBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIGRpZCBzb21ldGhpbmcgbGlrZSB0aGlzOgoKYGBgYwoJZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgaW5mby0mZ3Q7YXR0cnMsICZhbXA7cGFyYW1zLmJlYWNvbl9uZXh0LAoJCQkJICAgd2Rldi0mZ3Q7bGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmNoYW5kZWYuY2hhbiwKCQkJCSAgIGluZm8tJmd0O2V4dGFjayk7CglpZiAoZXJyKQoJCXJldHVybiBlcnI7CmBgYAoKSW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yIGZyb20gYG5sODAyMTFfcGFyc2VfYmVhY29uYCwgYHBhcmFtcy5iZWFjb25fbmV4dGAgd2FzIGxlYWtlZC4gTm93LCAqd2l0aCogdGhlIHBhdGNoOgoKYGBgYwoJZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgaW5mby0mZ3Q7YXR0cnMsICZhbXA7cGFyYW1zLmJlYWNvbl9uZXh0LAoJCQkJICAgd2Rldi0mZ3Q7bGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmNoYW5kZWYuY2hhbiwKCQkJCSAgIGluZm8tJmd0O2V4dGFjayk7CglpZiAoZXJyKQoJCWdvdG8gb3V0OwpgYGAKCkFuZCBgb3V0YCAqZG9lcyogZnJlZSB0aGUgbWVtb3J5OgoKYGBgYwpvdXQ6CglrZnJlZShwYXJhbXMuYmVhY29uX25leHQubWJzc2lkX2llcyk7CglrZnJlZShwYXJhbXMuYmVhY29uX2NvbG9yX2NoYW5nZS5tYnNzaWRfaWVzKTsKCWtmcmVlKHBhcmFtcy5iZWFjb25fbmV4dC5ybnJfaWVzKTsKCWtmcmVlKHBhcmFtcy5iZWFjb25fY29sb3JfY2hhbmdlLnJucl9pZXMpOwoJa2ZyZWUodGIpOwoJcmV0dXJuIGVycjsKYGBgCgpZZXMhIFRoYXQmIzM5O3MgaXQuIFRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrLiBUaGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBidWcgZml4LiBHaXZlbiB0aGF0IGl0JiMzOTtzIGluIGEgbmV0bGluayBoYW5kbGVyLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMgb3IgdnVsbmVyYWJpbGl0aWVzIGludHJvZHVjZWQuIFNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGlzIGBubDgwMjExX2NvbG9yX2NoYW5nZWAuIFRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhcmUgYENPTkZJR19NQUM4MDIxMWAgYW5kIGBDT05GSUdfQ0ZHODAyMTFgLiBTbyBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIGJlbG9uZ3MgdG8gYGNmZzgwMjExYC4gSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGJvdGggYGNmZzgwMjExYCBhbmQgYG1hYzgwMjExYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZHODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7Y2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cdGJvb2wgXCYjMzQ7ZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWctNjktXHRib29sIFwmIzM0O2NmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7cmVxdWlyZSByZWdkYiBzaWduYXR1cmVcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXHRib29sIFwmIzM0O2FsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cdHN0cmluZyBcJiMzNDthZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMzU6Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTU4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXHRib29sIFwmIzM0O2VuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTcwLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzc6Y29uZmlnIENGRzgwMjExX0NSREFfU1VQUE9SVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVx0Ym9vbCBcJiMzNDtzdXBwb3J0IENSREFcJiMzNDsgaWYgRVhQRVJUXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXHRib29sIFwmIzM0O2NmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNTcKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYENGRzgwMjExYCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgcmV2b2x2ZXMgYXJvdW5kIGBDRkc4MDIxMWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2Ygd2lyZWxlc3MgY29uZmlndXJhdGlvbiBpbiB0aGUgTGludXgga2VybmVsLCBhIHdlbGwtdHJvZGRlbiBwYXRoLiBCdXQgdG8gKnJlYWxseSogZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzaW11bGF0ZSB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb25zLCBJIGtub3cgSSYjMzk7bGwgbmVlZCBgbWFjODAyMTFfaHdzaW1gLiBUaGF0JiMzOTtzIHRoZSBlbXVsYXRpb24gbGF5ZXIgdGhhdCBsZXRzIG1lIGludGVyYWN0IHdpdGggdGhpcyBjb3JlIHdpdGhvdXQgYWN0dWFsIHBoeXNpY2FsIHdpcmVsZXNzIGRldmljZXMuIEl04oCZcyB0aGUga2V5IHRvIGZ1bGx5IHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgYWxsIGhhbmdzIHRvZ2V0aGVyLCBlc3BlY2lhbGx5IGZvciB0ZXN0IGNhc2VzIGFuZCBkZXZlbG9wbWVudC4KCkxldCYjMzk7cyBtYWtlIGFic29sdXRlbHkgc3VyZSBgTUFDODAyMTFfSFdTSU1gIGlzIGVuYWJsZWQuIFRpbWUgdG8gdmVyaWZ5IHRoYXQgYW5kIHNlZSBpZiBhbGwgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxhY2UuIEdvdHRhIGdldCB0aGF0IGVudmlyb25tZW50IHNldCB1cCBjb3JyZWN0bHkgYmVmb3JlIEkgZ28gbXVjaCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM2NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipGaW5kaW5nIHRoZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gd2hlcmUgd2FzIHRoYXQgc2V0dGluZyByZWxhdGVkIHRvIHRoZSBoYXJkd2FyZSBzaW11bGF0aW9uIGZvciBtYWM4MDIxMSBhZ2Fpbj8gSG1tLCBpZiBtZW1vcnkgc2VydmVzLCBhbmQgaXQgdXN1YWxseSBkb2VzIGluIHRoZXNlIG1hdHRlcnMsIGl0JiMzOTtzIHZlcnkgbGlrZWx5IG5lc3RlZCBkZWVwIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgdGhpbmcsIEkmIzM5O2QgYmV0IHRoZSBmYXJtIGl0JiMzOTtzIHByb2JhYmx5IGhhbmdpbmcgb3V0IHVuZGVyIHRoZSBuZXR3b3JrIGRyaXZlcnMsIHNwZWNpZmljYWxseSB0aGUgd2lyZWxlc3Mgc2VjdGlvbiwgYW5kIHdpdGhpbiB0aGF0LCB0aGUgbWFjODAyMTEgc3Vic3lzdGVtLiBBbmQgaWYgSSYjMzk7bSB0aGlua2luZyBhbG9uZyB0aGUgcmlnaHQgbGluZXMsIHRoZSBsaWtlbHkgY2FuZGlkYXRlIGZvciB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGl0c2VsZiB3b3VsZCBiZSBzb21ldGhpbmcgbGlrZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0vS2NvbmZpZ2AuIE9yIHNvbWV0aGluZyBzaW1pbGFyLiBJJiMzOTttIHByZXR0eSBjZXJ0YWluIHRoYXQmIzM5O3MgdGhlIGFyZWEgSSBuZWVkIHRvIHplcm8gaW4gb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2ODMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTUFDODAyMTFfSFdTSU0gQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBmb2N1cyBpcyBgTUFDODAyMTFfSFdTSU1gLiBUaGF0JiMzOTtzIHRoZSBjb25maWcgaW4gcGxheSBoZXJlLiBNeSBtZW50YWwgbW9kZWwgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGhhcmR3YXJlIHNpbXVsYXRpb24gYXNwZWN0LCBhbmQgSSYjMzk7bSBpbnN0YW50bHkgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyB0aGUgY29udGV4dC4KCkhvbGQgb24sIHRoZSBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIHN5bWJvbCBpcyBqdW1waW5nIG91dCBhdCBtZSBhcyBhIGtleSBhcmVhIG9mIGludGVyZXN0LiBXaHkgaXMgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBnZXR0aW5nIGF0dGVudGlvbiBpbiB0aGlzIGNvbnRleHQ/IEl0JiMzOTtzIG1ha2luZyBtZSB3b25kZXIgaWYgdGhleSYjMzk7cmUgbG9va2luZyBhdCBjb2xvciBzcGFjZSBjaGFuZ2VzLCBwb3NzaWJseSBmb3IgZGVidWdnaW5nIG9yIHNvbWUgaGFyZHdhcmUgZGVwZW5kZW50IHRoaW5nLgoKTXkgbWluZCBpcyBub3cgcmFjaW5nIHRvd2FyZHMgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucy4gQmVmb3JlIGdvaW5nIHRvbyBmYXIgZG93biB0aGF0IHJhYmJpdCBob2xlLCBJIG5lZWQgdG8ga25vdyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIGZvciBvdGhlciBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgYXJlIHJlbGF0ZWQgdG8gdGhhdCBzcGVjaWZpYyBjYWxsOyBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIHRoZSBjaGFuZ2VzIGludm9sdmVkIGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgYXJlIGltcGFjdGVkIGJ5IHRoaXMgZm9jdXMgb24gY29sb3IgY2hhbmdlLiBJdCBtYWtlcyBtZSBjdXJpb3VzIGlmIGl0IGlzIHJlbGF0ZWQgdG8gYW4gaXNzdWUsIG9yIGFuIGVuaGFuY2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtubDgwMjExX2NvbG9yX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYz0xODY2NT1zdGF0aWMgaW50IG5sODAyMTFfc2V0X3RpZF9jb25maWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NzIwLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODcyMTpzdGF0aWMgaW50IG5sODAyMTFfY29sb3JfY2hhbmdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NzIyLXtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NTQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwMzQ3LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIwMzQ4Olx0XHQuZG9pdCA9IG5sODAyMTFfY29sb3JfY2hhbmdlLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDM0OS1cdFx0LmZsYWdzID0gR0VOTF9VTlNfQURNSU5fUEVSTSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQSBRdWljayBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbGFzZXItZm9jdXNlZDsgaXQmIzM5O3MganVzdCB0b3VjaGluZyBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgLiBUaGF0IGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbi4gQSB0YXJnZXRlZCBmaXggbGlrZSB0aGlzLCBlc3BlY2lhbGx5IHdoZW4gaXQmIzM5O3MgYWJvdXQgYSBOZXRsaW5rIGhhbmRsZXIsIHNjcmVhbXMgJiMzNDtwb3RlbnRpYWwgZm9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucywmIzM0OyBhbmQgdGhhdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIGV2YWx1YXRlLiBBbmQgdGhlIGRlc2NyaXB0aW9uIGlzIHByZXR0eSBjbGVhcjogaXQgYWRkcmVzc2VzIGEgbWVtb3J5IGxlYWsuIFRoaXMgd2FycmFudHMgYSBjbG9zZXIgbG9vay4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIGl0IGZ1enotd29ydGh5PyBHaXZlbiB0aGF0IGl0JiMzOTtzIGEgYnVnIGZpeCB3aXRoaW4gYSBOZXRsaW5rIGhhbmRsZXIsIGFic29sdXRlbHkuIE5ldGxpbmsgaGFuZGxlcnMgYXJlIG5vdG9yaW91cyBmb3IgYmVpbmcgYXR0YWNrIHZlY3RvcnMsIGFuZCBtZW1vcnkgbGVha3Mgb2Z0ZW4gaW5kaWNhdGUgZGVlcGVyIGlzc3VlcyB0aGF0IGZ1enppbmcgY291bGQgZXhwb3NlLgoKVGhlIGNlbnRyYWwgc3ltYm9sIHRvIGZvY3VzIG9uIGlzLCBvZiBjb3Vyc2UsIGBubDgwMjExX2NvbG9yX2NoYW5nZWAuIEkmIzM5O2xsIGJlIGRpZ2dpbmcgaW50byB0aGUgY2FsbCBncmFwaCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuCgpOb3csIGZvciBjb25maWd1cmF0aW9uLCBgQ0ZHODAyMTFgIGlzIHJlbGV2YW50LCBvYnZpb3VzbHkuIEkgYWxzbyBzZWUgYE1BQzgwMjExX0hXU0lNYCBsaXN0ZWQuIFdhaXQgYSBzZWNvbmQsIGlzIGBNQUM4MDIxMV9IV1NJTWAgcmVsaWFudCBvbiBgTUFDODAyMTFgPyBBaCwgeWVzLiBJdCYjMzk7cyBhIGhhcmR3YXJlIHNpbXVsYXRvciwgc28gaXQgbWFrZXMgc2Vuc2UgaXQgZGVwZW5kcyBvbiB0aGUgY29yZSBNQUM4MDIxMSBmcmFtZXdvcmsuIEdvb2QsIHRoYXQgbmFycm93cyBkb3duIHRoZSBzZXR1cCByZXF1aXJlbWVudHMgZm9yIHRlc3Rpbmcgc2lnbmlmaWNhbnRseS4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIHNldHRpbmcgdXAgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24gTUFDODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnPTE9Y29uZmlnIE1BQzgwMjExX0hXU0lNXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MzpcdGRlcGVuZHMgb24gTUFDODAyMTFcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy00LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzkwOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25zaWRlcmluZyB0aGUgQXJjaGl0ZWN0dXJlKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY29tcHJlaGVuc2l2ZSBoZXJlLiBDbGVhcmx5LCB0aGlzIGRpc2N1c3Npb24gbmVlZHMgdG8gZW5jb21wYXNzIGBNQUM4MDIxMWAgdG9vLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNvbXBvbmVudCBpbiB0aGlzIGFyZWEuIEJlZm9yZSBnb2luZyBmdXJ0aGVyLCBhIHF1aWNrIGRlcGVuZGVuY3kgY2hlY2sgb24gYE1BQzgwMjExYCBpcyBpbiBvcmRlci4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgcHJvcGVybHkgYW5kIHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGNydWNpYWwgY29ubmVjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MTk9aWYgTUFDODAyMTEgIT0gblxubmV0L21hYzgwMjExL0tjb25maWctMjAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTpjb25maWcgTUFDODAyMTFfSEFTX1JDXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMi1cdGJvb2xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzLVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ6Y29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7TWluc3RyZWxcJiMzNDsgaWYgRVhQRVJUXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MzE9Y2hvaWNlXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNDAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo0MTpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctNDItXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9NDg9ZW5kY2hvaWNlXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjUwOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01MS1cdHN0cmluZ1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXCYjMzQ7U29tZSB3aXJlbGVzcyBkcml2ZXJzIHJlcXVpcmUgYSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNTktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MDpjb25maWcgTUFDODAyMTFfS1VOSVRfVEVTVFxubmV0L21hYzgwMjExL0tjb25maWctNjEtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgbWFjODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxubmV0L21hYzgwMjExL0tjb25maWc6NzA6Y29uZmlnIE1BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTcxLVx0Ym9vbCBcJiMzNDtFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03OC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjc5OmNvbmZpZyBNQUM4MDIxMV9MRURTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIExFRCB0cmlnZ2Vyc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg3LVxubmV0L21hYzgwMjExL0tjb25maWc6ODg6Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtFeHBvcnQgbWFjODAyMTEgaW50ZXJuYWxzIGluIERlYnVnRlNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05Ni1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk3OmNvbmZpZyBNQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk4LVx0Ym9vbCBcJiMzNDtUcmFjZSBhbGwgbWFjODAyMTEgZGVidWcgbWVzc2FnZXNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTA6bWVudWNvbmZpZyBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXHRib29sIFwmIzM0O1NlbGVjdCBtYWM4MDIxMSBkZWJ1Z2dpbmcgZmVhdHVyZXNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTUtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTY6Y29uZmlnIE1BQzgwMjExX05PSU5MSU5FXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0RvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzEtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMzI6Y29uZmlnIE1BQzgwMjExX1ZFUkJPU0VfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMy1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTQyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTQzOmNvbmZpZyBNQUM4MDIxMV9NTE1FX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDQtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWFuYWdlZCBNTE1FIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1My1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NDpjb25maWcgTUFDODAyMTFfU1RBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTUtXHRib29sIFwmIzM0O1ZlcmJvc2Ugc3RhdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjItXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNjM6Y29uZmlnIE1BQzgwMjExX0hUX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjQtXHRib29sIFwmIzM0O1ZlcmJvc2UgSFQgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTc0LVxubmV0L21hYzgwMjExL0tjb25maWc6MTc1OmNvbmZpZyBNQUM4MDIxMV9PQ0JfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3Ni1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBPQ0IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTg1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTg2OmNvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODctXHRib29sIFwmIzM0O1ZlcmJvc2UgSUJTUyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxOTc6Y29uZmlnIE1BQzgwMjExX1BTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTgtXHRib29sIFwmIzM0O1ZlcmJvc2UgcG93ZXJzYXZlIG1vZGUgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjA4LVxubmV0L21hYzgwMjExL0tjb25maWc6MjA5OmNvbmZpZyBNQUM4MDIxMV9NUExfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBlZXIgbGluayBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjEtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjI6Y29uZmlnIE1BQzgwMjExX01QQVRIX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjMtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwYXRoIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzNTpjb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIEhXTVAgcm91dGluZyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDg6Y29uZmlnIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggc3luY2hyb25pemF0aW9uIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1OC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MDpjb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjcxLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4MC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI4MTpjb25maWcgTUFDODAyMTFfVERMU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjgyLVx0Ym9vbCBcJiMzNDtWZXJib3NlIFRETFMgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjkyLVxubmV0L21hYzgwMjExL0tjb25maWc6MjkzOmNvbmZpZyBNQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xubmV0L21hYzgwMjExL0tjb25maWctMjk0LVx0Ym9vbCBcJiMzNDtFeHRyYSBzdGF0aXN0aWNzIGZvciBUWC9SWCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDg6Y29uZmlnIE1BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDktXHRpbnQgXCYjMzQ7U3RhdGlvbiBoYXNoIHRhYmxlIG1heGltdW0gc2l6ZVwmIzM0OyBpZiBNQUM4MDIxMV9ERUJVR19NRU5VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjY1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gY29uZmlndXJpbmcgdGhpcyBzeXN0ZW0gcmVsYXRlZCB0byB3aXJlbGVzcyBuZXR3b3JraW5nLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyaW5nIGluIGBNQUM4MDIxMWAgYXMgdGhlIGNlbnRyYWwgcGllY2UuIEkgdGhlbiBuZWVkIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBgQ0ZHODAyMTFgIGFuZCBgTUFDODAyMTFfSFdTSU1gIGJlY2F1c2UgSSYjMzk7bSBxdWl0ZSBzdXJlIHRoZXkmIzM5O3JlIHRpZ2h0bHkgY291cGxlZCB3aXRoIHRoaXMuIEhtbSwgd2FpdCBhIG1vbWVudOKApiBJIG5lZWQgdG8gY29uc2lkZXIgYG5sODAyMTFfY29sb3JfY2hhbmdlYC4gVGhhdCYjMzk7cyBhY3R1YWxseSB3aXRoaW4gYGNmZzgwMjExYCwgaXNuJiMzOTt0IGl0PwoKUmlnaHQsIHRoZSBrZXkgcG9pbnQgdG8gcmVtZW1iZXIgaXMgdGhhdCBgY2ZnODAyMTFgIGRvZXNuJiMzOTt0ICphYnNvbHV0ZWx5KiBuZWVkIGBtYWM4MDIxMWAuIEl0JiMzOTtzIHBvc3NpYmxlIHRvIHVzZSBgY2ZnODAyMTFgIGluZGVwZW5kZW50bHksIGVzcGVjaWFsbHkgZm9yIGZ1bGxtYWMgZGV2aWNlcy4gSG93ZXZlciwgYG1hYzgwMjExX2h3c2ltYCwgd2hpY2ggSSBkZWZpbml0ZWx5IHdhbnQsIHJlcXVpcmVzIGBNQUM4MDIxMWAuIFNvLCBjb25maXJtaW5nIG15IGVhcmxpZXIgaW50dWl0aW9uOiBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYCBpdCBpcy4gVGhvc2UgYXJlIGRlZmluaXRlbHkgZ29vZCB0byBpbmNsdWRlLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkmIzM5O2xsIGRvdWJsZSBjaGVjayB0aGF0IGBubDgwMjExX2NvbG9yX2NoYW5nZWAgaXMgcmVhY2hhYmxlLiBUaGF0IGhhbmRsZXIgaXMgdGllZCB0byB0aGUgYE5MODAyMTFfQ01EX0NPTE9SX0NIQU5HRWAgbmV0bGluayBjb21tYW5kLiBMb29rcyBsaWtlIGl0IGhhcyBkZXBlbmRlbmNpZXMgb24gYHJkZXYtJmd0O29wcy0mZ3Q7Y29sb3JfY2hhbmdlYCBhbmQgYE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SYC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQsIGJ1dCBqdXN0IHRvIGJlIHN1cmU6IGRvZXMgYG1hYzgwMjExX2h3c2ltYCBzdXBwb3J0IGBjb2xvcl9jaGFuZ2VgPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaW50ZWdyYXRpb24gY29tcGxldGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2xvcl9jaGFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5ODMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpZ2dpbmcgaW50byB0aGUgYGNvbG9yX2NoYW5nZWAgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IGBtYWM4MDIxMV9od3NpbWAgc3VwcG9ydGVkICphbGwqIHRoZSBzdGFuZGFyZCBmdW5jdGlvbmFsaXR5LCBidXQgbm93IEkmIzM5O20gcXVlc3Rpb25pbmcgd2hldGhlciBpdCBhY3R1YWxseSBpbXBsZW1lbnRzIGBjb2xvcl9jaGFuZ2VgLiBUaGF0IHdvdWxkIGJlIGEgaHVnZSBvdmVyc2lnaHQgaWYgaXQmIzM5O3MgbWlzc2luZywgc2luY2UgdGhpcyBpcyBhbiBpbXBvcnRhbnQgcGFydCBvZiB0aGUgODAyLjExIHN0YW5kYXJkLCBlc3BlY2lhbGx5IGZvciBhZHZhbmNlZCBmZWF0dXJlcy4gSSBuZWVkIHRvIHZlcmlmeSB0aGlzIGltbWVkaWF0ZWx5LiBBbHJpZ2h0LCBsZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBgbWFjODAyMTFgIG9wZXJhdGlvbnMgYW5kIG1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGlzIHByZXNlbnQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBjb2xvcl9jaGFuZ2VgIGlzIGNvcnJlY3RseSBjYWxsZWQsIGFuZCB3b3JraW5nIGNvcnJlY3RseSwgb3IgZmlndXJlIG91dCAqd2h5KiBpdCYjMzk7cyBhYnNlbnQgZnJvbSBgbWFjODAyMTFfaHdzaW1gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2xvcl9jaGFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9jZmcuYz0xMDk4PWllZWU4MDIxMV9zZXRfcHJvYmVfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMTEwMC1cdFx0XHQgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jc2Ffc2V0dGluZ3MgKmNzYSxcbm5ldC9tYWM4MDIxMS9jZmcuYzoxMTAxOlx0XHRcdCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NvbG9yX2NoYW5nZV9zZXR0aW5ncyAqY2NhLFxubmV0L21hYzgwMjExL2NmZy5jLTExMDItXHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rKVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz0xNDY0PWllZWU4MDIxMV9hc3NpZ25fYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy0xNDY3LVx0XHRcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY3NhX3NldHRpbmdzICpjc2EsXG5uZXQvbWFjODAyMTEvY2ZnLmM6MTQ2ODpcdFx0XHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NvbG9yX2NoYW5nZV9zZXR0aW5ncyAqY2NhLFxubmV0L21hYzgwMjExL2NmZy5jLTE0NjktXHRcdFx0dTY0ICpjaGFuZ2VkKVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz0xOTM3PXN0YXRpYyBpbnQgaWVlZTgwMjExX2NoYW5nZV9iZWFjb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMTk1OS1cdCAqL1xubmV0L21hYzgwMjExL2NmZy5jOjE5NjA6XHRpZiAobGlua19jb25mLVx1MDAzZWNzYV9hY3RpdmUgfHwgbGlua19jb25mLVx1MDAzZWNvbG9yX2NoYW5nZV9hY3RpdmUpXG5uZXQvbWFjODAyMTEvY2ZnLmMtMTk2MS1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9MjAxMT1zdGF0aWMgaW50IGllZWU4MDIxMV9zdG9wX2FwKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTIwNDUtXHRsaW5rX2NvbmYtXHUwMDNlY3NhX2FjdGl2ZSA9IGZhbHNlO1xubmV0L21hYzgwMjExL2NmZy5jOjIwNDY6XHRsaW5rX2NvbmYtXHUwMDNlY29sb3JfY2hhbmdlX2FjdGl2ZSA9IGZhbHNlO1xubmV0L21hYzgwMjExL2NmZy5jLTIwNDctXHRpZWVlODAyMTFfdmlmX3VuYmxvY2tfcXVldWVzX2NzYShzZGF0YSk7XG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTQ1NjM9c3RhdGljIGludCBpZWVlODAyMTFfc2V0X2NzYV9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmtfZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY5My1cbm5ldC9tYWM4MDIxMS9jZmcuYzo0Njk0OnN0YXRpYyB2b2lkIGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfYWJvcnQoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmspXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY5NS17XG5uZXQvbWFjODAyMTEvY2ZnLmM6NDY5NjpcdGxpbmstXHUwMDNlY29uZi1cdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlID0gZmFsc2U7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY5Ny1cbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY5OS1cbm5ldC9tYWM4MDIxMS9jZmcuYzo0NzAwOlx0Y2ZnODAyMTFfY29sb3JfY2hhbmdlX2Fib3J0ZWRfbm90aWZ5KGxpbmstXHUwMDNlc2RhdGEtXHUwMDNlZGV2LCBsaW5rLVx1MDAzZWxpbmtfaWQpO1xubmV0L21hYzgwMjExL2NmZy5jLTQ3MDEtfVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz00NzA0PV9faWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTQ3OTEtXHQvKiBpZiB0aGVyZSBpcyBhIGNvbG9yIGNoYW5nZSBpbiBwcm9ncmVzcywgYWJvcnQgaXQgKi9cbm5ldC9tYWM4MDIxMS9jZmcuYzo0NzkyOlx0aWYgKGxpbmtfY29uZi1cdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlKVxubmV0L21hYzgwMjExL2NmZy5jOjQ3OTM6XHRcdGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfYWJvcnQobGlua19kYXRhKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy00Nzk0LVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz01NTA4PXN0YXRpYyBpbnRcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NTA5OmllZWU4MDIxMV9zZXRfYWZ0ZXJfY29sb3JfY2hhbmdlX2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NTEwLVx0XHRcdFx0XHR1NjQgKmNoYW5nZWQpXG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTU1Mzk9c3RhdGljIGludFxubmV0L21hYzgwMjExL2NmZy5jOjU1NDA6aWVlZTgwMjExX3NldF9jb2xvcl9jaGFuZ2VfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxubmV0L21hYzgwMjExL2NmZy5jOjU1NDE6XHRcdFx0XHQgIHN0cnVjdCBjZmc4MDIxMV9jb2xvcl9jaGFuZ2Vfc2V0dGluZ3MgKnBhcmFtcyxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NTQyLVx0XHRcdFx0ICB1NjQgKmNoYW5nZWQpXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTU1NDQtXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IGxpbmstXHUwMDNlc2RhdGE7XG5uZXQvbWFjODAyMTEvY2ZnLmM6NTU0NTpcdHN0cnVjdCBpZWVlODAyMTFfY29sb3JfY2hhbmdlX3NldHRpbmdzIGNvbG9yX2NoYW5nZSA9IHt9O1xubmV0L21hYzgwMjExL2NmZy5jLTU1NDYtXHRpbnQgZXJyO1xuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy01NTU3LVxubmV0L21hYzgwMjExL2NmZy5jOjU1NTg6XHRcdGNvbG9yX2NoYW5nZS5jb3VudGVyX29mZnNldF9iZWFjb24gPVxubmV0L21hYzgwMjExL2NmZy5jLTU1NTktXHRcdFx0cGFyYW1zLVx1MDAzZWNvdW50ZXJfb2Zmc2V0X2JlYWNvbjtcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NTYwOlx0XHRjb2xvcl9jaGFuZ2UuY291bnRlcl9vZmZzZXRfcHJlc3AgPVxubmV0L21hYzgwMjExL2NmZy5jLTU1NjEtXHRcdFx0cGFyYW1zLVx1MDAzZWNvdW50ZXJfb2Zmc2V0X3ByZXNwO1xubmV0L21hYzgwMjExL2NmZy5jOjU1NjI6XHRcdGNvbG9yX2NoYW5nZS5jb3VudCA9IHBhcmFtcy1cdTAwM2Vjb3VudDtcbm5ldC9tYWM4MDIxMS9jZmcuYy01NTYzLVxubmV0L21hYzgwMjExL2NmZy5jLTU1NjQtXHRcdGVyciA9IGllZWU4MDIxMV9hc3NpZ25fYmVhY29uKHNkYXRhLCBsaW5rLFxubmV0L21hYzgwMjExL2NmZy5jOjU1NjU6XHRcdFx0XHRcdCAgICAgIFx1MDAyNnBhcmFtcy1cdTAwM2ViZWFjb25fY29sb3JfY2hhbmdlLFxubmV0L21hYzgwMjExL2NmZy5jOjU1NjY6XHRcdFx0XHRcdCAgICAgIE5VTEwsIFx1MDAyNmNvbG9yX2NoYW5nZSwgY2hhbmdlZCk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNTU2Ny1cdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz01NTc5PXN0YXRpYyB2b2lkXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTU4MDppZWVlODAyMTFfY29sb3JfY2hhbmdlX2Jzc19jb25maWdfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxubmV0L21hYzgwMjExL2NmZy5jLTU1ODEtXHRcdFx0XHRcdCB1OCBjb2xvciwgaW50IGVuYWJsZSwgdTY0IGNoYW5nZWQpXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTU2MDktXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTYxMDpzdGF0aWMgaW50IGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfZmluYWxpemUoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmspXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYxMS17XG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTU2MTgtXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTYxOTpcdGxpbmstXHUwMDNlY29uZi1cdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlID0gZmFsc2U7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYyMC1cbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjIxOlx0ZXJyID0gaWVlZTgwMjExX3NldF9hZnRlcl9jb2xvcl9jaGFuZ2VfYmVhY29uKGxpbmssIFx1MDAyNmNoYW5nZWQpO1xubmV0L21hYzgwMjExL2NmZy5jLTU2MjItXHRpZiAoZXJyKSB7XG5uZXQvbWFjODAyMTEvY2ZnLmM6NTYyMzpcdFx0Y2ZnODAyMTFfY29sb3JfY2hhbmdlX2Fib3J0ZWRfbm90aWZ5KHNkYXRhLVx1MDAzZWRldiwgbGluay1cdTAwM2VsaW5rX2lkKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy01NjI0LVx0XHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy01NjI2LVxubmV0L21hYzgwMjExL2NmZy5jOjU2Mjc6XHRpZWVlODAyMTFfY29sb3JfY2hhbmdlX2Jzc19jb25maWdfbm90aWZ5KGxpbmssXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTYyODpcdFx0XHRcdFx0XHQgbGluay1cdTAwM2Vjb25mLVx1MDAzZWNvbG9yX2NoYW5nZV9jb2xvcixcbm5ldC9tYWM4MDIxMS9jZmcuYy01NjI5LVx0XHRcdFx0XHRcdCAxLCBjaGFuZ2VkKTtcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjMwOlx0Y2ZnODAyMTFfY29sb3JfY2hhbmdlX25vdGlmeShzZGF0YS1cdTAwM2VkZXYsIGxpbmstXHUwMDNlbGlua19pZCk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYzMS1cbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYzNC1cbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjM1OnZvaWQgaWVlZTgwMjExX2NvbG9yX2NoYW5nZV9maW5hbGl6ZV93b3JrKHN0cnVjdCB3aXBoeSAqd2lwaHksXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYzNi1cdFx0XHRcdFx0ICBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yaylcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYzOS1cdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhLFxubmV0L21hYzgwMjExL2NmZy5jOjU2NDA6XHRcdFx0ICAgICBjb2xvcl9jaGFuZ2VfZmluYWxpemVfd29yayk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY0MS1cdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbGluay1cdTAwM2VzZGF0YTtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY0Ny1cdC8qIEFQIG1pZ2h0IGhhdmUgYmVlbiBzdG9wcGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBsb2NrLiAqL1xubmV0L21hYzgwMjExL2NmZy5jOjU2NDg6XHRpZiAoIWxpbmtfY29uZi1cdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlKVxubmV0L21hYzgwMjExL2NmZy5jLTU2NDktXHRcdHJldHVybjtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY1My1cbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjU0Olx0aWVlZTgwMjExX2NvbG9yX2NoYW5nZV9maW5hbGl6ZShsaW5rKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy01NjU1LX1cbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTY1Nz12b2lkIGllZWU4MDIxMV9jb2xvcl9jb2xsaXNpb25fZGV0ZWN0aW9uX3dvcmsoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY2OC1cbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjY5OnZvaWQgaWVlZTgwMjExX2NvbG9yX2NoYW5nZV9maW5pc2goc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggbGlua19pZClcbm5ldC9tYWM4MDIxMS9jZmcuYy01NjcwLXtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY4NS1cdHdpcGh5X3dvcmtfcXVldWUoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTY4NjpcdFx0XHQgXHUwMDI2bGluay1cdTAwM2Vjb2xvcl9jaGFuZ2VfZmluYWxpemVfd29yayk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY4Ny1cbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY4OS19XG5uZXQvbWFjODAyMTEvY2ZnLmM6NTY5MDpFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFfY29sb3JfY2hhbmdlX2ZpbmlzaCk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY5MS1cbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTY5Mz1pZWVlODAyMTFfb2Jzc19jb2xvcl9jb2xsaXNpb25fbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTU3MDktXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTcxMDpcdGlmIChsaW5rLVx1MDAzZWNvbmYtXHUwMDNlY29sb3JfY2hhbmdlX2FjdGl2ZSB8fCBsaW5rLVx1MDAzZWNvbmYtXHUwMDNlY3NhX2FjdGl2ZSkge1xubmV0L21hYzgwMjExL2NmZy5jLTU3MTEtXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz01NzMzPXN0YXRpYyBpbnRcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NzM0OmllZWU4MDIxMV9jb2xvcl9jaGFuZ2Uoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NzM1Olx0XHQgICAgICAgc3RydWN0IGNmZzgwMjExX2NvbG9yX2NoYW5nZV9zZXR0aW5ncyAqcGFyYW1zKVxubmV0L21hYzgwMjExL2NmZy5jLTU3MzYte1xuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy01NzYxLVx0ICovXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTc2MjpcdGlmIChsaW5rX2NvbmYtXHUwMDNlY29sb3JfY2hhbmdlX2FjdGl2ZSB8fCBsaW5rX2NvbmYtXHUwMDNlY3NhX2FjdGl2ZSkge1xubmV0L21hYzgwMjExL2NmZy5jLTU3NjMtXHRcdGVyciA9IC1FQlVTWTtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTc3Mi1cbm5ldC9tYWM4MDIxMS9jZmcuYzo1NzczOlx0ZXJyID0gaWVlZTgwMjExX3NldF9jb2xvcl9jaGFuZ2VfYmVhY29uKGxpbmssIHBhcmFtcywgXHUwMDI2Y2hhbmdlZCk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNTc3NC1cdGlmIChlcnIpXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTU3NzYtXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTc3NzpcdGxpbmtfY29uZi1cdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlID0gdHJ1ZTtcbm5ldC9tYWM4MDIxMS9jZmcuYzo1Nzc4Olx0bGlua19jb25mLVx1MDAzZWNvbG9yX2NoYW5nZV9jb2xvciA9IHBhcmFtcy1cdTAwM2Vjb2xvcjtcbm5ldC9tYWM4MDIxMS9jZmcuYy01Nzc5LVxubmV0L21hYzgwMjExL2NmZy5jOjU3ODA6XHRjZmc4MDIxMV9jb2xvcl9jaGFuZ2Vfc3RhcnRlZF9ub3RpZnkoc2RhdGEtXHUwMDNlZGV2LCBwYXJhbXMtXHUwMDNlY291bnQsIGxpbmtfaWQpO1xubmV0L21hYzgwMjExL2NmZy5jLTU3ODEtXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTc4Mi1cdGlmIChjaGFuZ2VkKVxubmV0L21hYzgwMjExL2NmZy5jOjU3ODM6XHRcdGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfYnNzX2NvbmZpZ19ub3RpZnkobGluaywgMCwgMCwgY2hhbmdlZCk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNTc4NC1cdGVsc2Vcbm5ldC9tYWM4MDIxMS9jZmcuYy01Nzg1LVx0XHQvKiBpZiB0aGUgYmVhY29uIGRpZG4mIzM5O3QgY2hhbmdlLCB3ZSBjYW4gZmluYWxpemUgaW1tZWRpYXRlbHkgKi9cbm5ldC9tYWM4MDIxMS9jZmcuYzo1Nzg2Olx0XHRpZWVlODAyMTFfY29sb3JfY2hhbmdlX2ZpbmFsaXplKGxpbmspO1xubmV0L21hYzgwMjExL2NmZy5jLTU3ODctXG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTU5OTE9Y29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyBtYWM4MDIxMV9jb25maWdfb3BzID0ge1xuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy02MDk0LVx0LnNldF9zYXJfc3BlY3MgPSBpZWVlODAyMTFfc2V0X3Nhcl9zcGVjcyxcbm5ldC9tYWM4MDIxMS9jZmcuYzo2MDk1Olx0LmNvbG9yX2NoYW5nZSA9IGllZWU4MDIxMV9jb2xvcl9jaGFuZ2UsXG5uZXQvbWFjODAyMTEvY2ZnLmMtNjA5Ni1cdC5zZXRfcmFkYXJfYmFja2dyb3VuZCA9IGllZWU4MDIxMV9zZXRfcmFkYXJfYmFja2dyb3VuZCxcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yNjQ9c3RydWN0IGllZWU4MDIxMV9jc2Ffc2V0dGluZ3Mge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTI3My1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjI3NDpzdHJ1Y3QgaWVlZTgwMjExX2NvbG9yX2NoYW5nZV9zZXR0aW5ncyB7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yNzUtXHR1MTYgY291bnRlcl9vZmZzZXRfYmVhY29uO1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTEwOTk9c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTExMTgtXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxMTE5Olx0c3RydWN0IHdpcGh5X3dvcmsgY29sb3JfY2hhbmdlX2ZpbmFsaXplX3dvcms7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMTIwLVx0c3RydWN0IHdpcGh5X2RlbGF5ZWRfd29yayBjb2xvcl9jb2xsaXNpb25fZGV0ZWN0X3dvcms7XG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MjE2NT1pbnQgaWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjE2OC0vKiBjb2xvciBjaGFuZ2UgaGFuZGxpbmcgKi9cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjIxNjk6dm9pZCBpZWVlODAyMTFfY29sb3JfY2hhbmdlX2ZpbmFsaXplX3dvcmsoc3RydWN0IHdpcGh5ICp3aXBoeSxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIxNzAtXHRcdFx0XHRcdCAgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspO1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTQ3OT1zdGF0aWMgdm9pZCBpZWVlODAyMTFfZG9fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCBnb2luZ19kb3duKVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTU3My1cdHdpcGh5X3dvcmtfY2FuY2VsKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxubmV0L21hYzgwMjExL2lmYWNlLmM6NTc0Olx0XHRcdCAgXHUwMDI2c2RhdGEtXHUwMDNlZGVmbGluay5jb2xvcl9jaGFuZ2VfZmluYWxpemVfd29yayk7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy01NzUtXHR3aXBoeV9ocnRpbWVyX3dvcmtfY2FuY2VsKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuLS1cbm5ldC9tYWM4MDIxMS9saW5rLmM9OTU9dm9pZCBpZWVlODAyMTFfbGlua19pbml0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9saW5rLmMtMTMxLVx0XHRcdGllZWU4MDIxMV9jc2FfZmluYWxpemVfd29yayk7XG5uZXQvbWFjODAyMTEvbGluay5jOjEzMjpcdHdpcGh5X3dvcmtfaW5pdChcdTAwMjZsaW5rLVx1MDAzZWNvbG9yX2NoYW5nZV9maW5hbGl6ZV93b3JrLFxubmV0L21hYzgwMjExL2xpbmsuYzoxMzM6XHRcdFx0aWVlZTgwMjExX2NvbG9yX2NoYW5nZV9maW5hbGl6ZV93b3JrKTtcbm5ldC9tYWM4MDIxMS9saW5rLmMtMTM0LVx0d2lwaHlfZGVsYXllZF93b3JrX2luaXQoXHUwMDI2bGluay1cdTAwM2Vjb2xvcl9jb2xsaXNpb25fZGV0ZWN0X3dvcmssXG4tLVxubmV0L21hYzgwMjExL2xpbmsuYz0xNjI9dm9pZCBpZWVlODAyMTFfbGlua19zdG9wKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rKVxuLS1cbm5ldC9tYWM4MDIxMS9saW5rLmMtMTY5LVx0d2lwaHlfd29ya19jYW5jZWwobGluay1cdTAwM2VzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbm5ldC9tYWM4MDIxMS9saW5rLmM6MTcwOlx0XHRcdCAgXHUwMDI2bGluay1cdTAwM2Vjb2xvcl9jaGFuZ2VfZmluYWxpemVfd29yayk7XG5uZXQvbWFjODAyMTEvbGluay5jLTE3MS1cdHdpcGh5X3dvcmtfY2FuY2VsKGxpbmstXHUwMDNlc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksXG4tLVxubmV0L21hYzgwMjExL3J4LmM9MzQ3OT1pZWVlODAyMTFfcnhfY2hlY2tfYnNzX2NvbG9yX2NvbGxpc2lvbihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jLTM0OTMtXHRic3NfY29uZiA9IHJ4LVx1MDAzZWxpbmstXHUwMDNlY29uZjtcbm5ldC9tYWM4MDIxMS9yeC5jOjM0OTQ6XHRpZiAoYnNzX2NvbmYtXHUwMDNlY3NhX2FjdGl2ZSB8fCBic3NfY29uZi1cdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlIHx8XG5uZXQvbWFjODAyMTEvcnguYy0zNDk1LVx0ICAgICFic3NfY29uZi1cdTAwM2VoZV9ic3NfY29sb3IuZW5hYmxlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzOTIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgQlNTIENvbG9yIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvICptYWM4MDIxMSogaW1wbGVtZW50cyB0aGUgKmNvbG9yX2NoYW5nZSogZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggYGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VgLiBUaGF0IG1ha2VzIHNlbnNlLiBBbmQgKm1hYzgwMjExX2h3c2ltKiBpcyBidWlsdCBvbiB0b3Agb2YgKm1hYzgwMjExKiwgbWVhbmluZyBpdCBpbmhlcmVudGx5IHVzZXMgdGhlICptYWM4MDIxMSogY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLiBUaGlzIGluY2x1ZGVzIHJlZ2lzdGVyaW5nIGBtYWM4MDIxMV9jb25maWdfb3BzYCwgYW5kIGltcG9ydGFudGx5LCB0aGUgYC5jb2xvcl9jaGFuZ2VgIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY29ycmVjdGx5IGFzc2lnbmVkIHRvIGBpZWVlODAyMTFfY29sb3JfY2hhbmdlYCB3aXRoaW4gdGhhdCBzdHJ1Y3R1cmUuCgpBaGEsIGFuZCAqbWFjODAyMTFfaHdzaW0qIHJlZ2lzdGVycyBhICp3aXBoeSogd2l0aCAqbWFjODAyMTEqLiBUaGVyZWZvcmUsIGl0IHNob3VsZCBpbmhlcml0IHRob3NlICptYWM4MDIxMV9jb25maWdfb3BzKi4gU28sICpubDgwMjExX2NvbG9yX2NoYW5nZSogKnNob3VsZCogYmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIHRocm91Z2ggKm1hYzgwMjExX2h3c2ltKiB0aGVuLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHdpdGggYSBjaGVjay4uLiBJIHRoaW5rIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUgZGlyZWN0IHBhdGggbm93LgoKTm93LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIGxvb2sgYXQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciAqbWFjODAyMTFfaHdzaW0qIG9yICpOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUiouIEkga25vdyB0aGF0IHRoZSBmZWF0dXJlICpOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUiogaXMganVzdCBhIGZlYXR1cmUgZmxhZy4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiAqbWFjODAyMTEqIGl0c2VsZiBzZXRzIHRoaXMgZmxhZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Tkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9yeC5jPTM0Nzk9aWVlZTgwMjExX3J4X2NoZWNrX2Jzc19jb2xvcl9jb2xsaXNpb24oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbi0tXG5uZXQvbWFjODAyMTEvcnguYy0zNDg2LVx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldChyeC1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbm5ldC9tYWM4MDIxMS9yeC5jOjM0ODc6XHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SKSlcbm5ldC9tYWM4MDIxMS9yeC5jLTM0ODgtXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxNzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGVidWdnaW5nIGEgTWlzc2luZyBCU1MgQ29sb3IgRmVhdHVyZSoqCgpIbW0sIGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgaXQgdHJ1ZSB0aGF0IGBtYWM4MDIxMWAgZG9lc24mIzM5O3QgYXV0b21hdGljYWxseSBzZXQgdGhlIGBOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUmAgZXh0ZW5zaW9uIGZlYXR1cmU/IFRoYXQgc2VlbXMgb2RkLCBnaXZlbiBob3cgY3J1Y2lhbCBCU1MgY29sb3IgaXMgYmVjb21pbmcgaW4gbW9kZXJuIDgwMi4xMSBkZXBsb3ltZW50cy4gSSBuZWVkIHRvIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24uIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29kZSBhbmQgZGV0ZXJtaW5lIGV4YWN0bHkgKndoZXJlKiB0aGlzIGZsYWcgaXMgc2V0IChvciwgYXMgdGhlIGNhc2UgbWF5IGJlLCAqaXNuJiMzOTt0KiBzZXQpLiBXZSBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIGFuZCBhbnkgcG90ZW50aWFsIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcyBmbGFnJiMzOTtzIHN0YXRlIHdpdGhpbiB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcy4gVGltZSB0byBmaXJlIHVwIHRoZSBkZWJ1Z2dlciBhbmQgc3RhcnQgdHJhY2luZyB0aHJvdWdoIHRoZSByZWxldmFudCBjb2RlIHBhdGhzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jPTEwNDQyPXN0YXRpYyBpbnQgX19hdGgxMWtfbWFjX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMWsgKmFyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmMtMTA1OTgtXHRcdHdpcGh5X2V4dF9mZWF0dXJlX3NldChhci1cdTAwM2Vody1cdTAwM2V3aXBoeSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmM6MTA1OTk6XHRcdFx0XHQgICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jLTEwNjAwLVx0XHRpZWVlODAyMTFfaHdfc2V0KGFyLVx1MDAzZWh3LCBERVRFQ1RTX0NPTE9SX0NPTExJU0lPTik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNDc3ND1zdGF0aWMgaW50IGF0aDEya19tYWNfaHdfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19odyAqYWgpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDk1Ni1cdFx0ICAgICBhYi1cdTAwM2V3bWlfYWIuc3ZjX21hcCkpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM6MTQ5NTc6XHRcdHdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDk1OC1cdFx0aWVlZTgwMjExX2h3X3NldChodywgREVURUNUU19DT0xPUl9DT0xMSVNJT04pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2luaXQuYz0zNTg9bXQ3OTE1X2luaXRfd2lwaHkoc3RydWN0IG10NzkxNV9waHkgKnBoeSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9pbml0LmMtMzg3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvaW5pdC5jOjM4ODpcdHdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvaW5pdC5jLTM4OS1cdHdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9WSFRfSUJTUyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvaW5pdC5jPTQ3OD1tdDc5OTZfaW5pdF93aXBoeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IG10a193ZWRfZGV2aWNlICp3ZWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvaW5pdC5jLTUxNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L2luaXQuYzo1MTY6XHR3aXBoeV9leHRfZmVhdHVyZV9zZXQod2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L2luaXQuYy01MTctXHR3aXBoeV9leHRfZmVhdHVyZV9zZXQod2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfVkhUX0lCU1MpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTU2NTA9c3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01OTM2LVx0d2lwaHlfZXh0X2ZlYXR1cmVfc2V0KGh3LVx1MDAzZXdpcGh5LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NTkzNzpcdFx0XHQgICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01OTM4LVx0d2lwaHlfZXh0X2ZlYXR1cmVfc2V0KGh3LVx1MDAzZXdpcGh5LFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmg9NjgxMD1lbnVtIG5sODAyMTFfZmVhdHVyZV9mbGFncyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaC03MDE2LSAqXG5pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oOjcwMTc6ICogQE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SOiBUaGUgZHJpdmVyIHN1cHBvcnRzIEJTUyBjb2xvciBjb2xsaXNpb25cbmluY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgtNzAxOC0gKlx0ZGV0ZWN0aW9uIGFuZCBjaGFuZ2UgYW5ub3VuY2VtbnRzLlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmg9NzA5MT1lbnVtIG5sODAyMTFfZXh0X2ZlYXR1cmVfaW5kZXgge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgtNzE1MS1cdE5MODAyMTFfRVhUX0ZFQVRVUkVfUFJPVF9SQU5HRV9ORUdPX0FORF9NRUFTVVJFLFxuaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaDo3MTUyOlx0Tkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1IsXG5pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oLTcxNTMtXHROTDgwMjExX0VYVF9GRUFUVVJFX0ZJTFNfQ1JZUFRPX09GRkxPQUQsXG4tLVxubmV0L21hYzgwMjExL3J4LmM9MzQ3OT1pZWVlODAyMTFfcnhfY2hlY2tfYnNzX2NvbG9yX2NvbGxpc2lvbihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jLTM0ODYtXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHJ4LVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5LFxubmV0L21hYzgwMjExL3J4LmM6MzQ4NzpcdFx0XHRcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1IpKVxubmV0L21hYzgwMjExL3J4LmMtMzQ4OC1cdFx0cmV0dXJuO1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTg3MjE9c3RhdGljIGludCBubDgwMjExX2NvbG9yX2NoYW5nZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg3MzQtXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NzM1Olx0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUikpXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NzM2LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDIwCgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDE0NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgbWFjODAyMTEgTWVtb3J5IExlYWsgRml4KioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQgc2VlbXMgdGhlIGBOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUmAgZmVhdHVyZSBpcyBzZXQgd2l0aGluIGBtYWM4MDIxMV9od3NpbV9tYWluLmNgLCBtZWFuaW5nIGl0JiMzOTtzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSB0aHJvdWdoIGBtYWM4MDIxMV9od3NpbWAuIFRoZSBjcml0aWNhbCBjb25maWdzIEkgbmVlZCB0byBoYXZlIGVuYWJsZWQgYXJlIGBDRkc4MDIxMWAsIGBNQUM4MDIxMWAsIGFuZCBgTUFDODAyMTFfSFdTSU1gLiBUaGUgZnVuY3Rpb24gSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGlzIGBubDgwMjExX2NvbG9yX2NoYW5nZWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgY2hhbmdlIGFpbWVkIGF0IGZpeGluZyBhIG1lbW9yeSBsZWFrIGluIGEgcmVhY2hhYmxlIE5ldGxpbmsgaGFuZGxlci4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgY29uZmlncyBhZ2FpbjsgdGhleSBhcmUgaW5kZWVkIGBDRkc4MDIxMWAsIGBNQUM4MDIxMWAsIGFuZCBgTUFDODAyMTFfSFdTSU1gLgoKTm93LCByZXZpZXdpbmcgdGhlIHBhdGNoIGl0c2VsZi4uLiBJIHNlZSB0aGF0IGluIHRoZSBvcmlnaW5hbCBjb2RlLCBgdGJgIChwcmVzdW1hYmx5IGEgdGFibGUgb3IgYnVmZmVyKSB3YXMgYmVpbmcgYWxsb2NhdGVkICphZnRlciogY2FsbGluZyBgbmw4MDIxMV9wYXJzZV9iZWFjb25gLiBJZiB0aGUgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBmdW5jdGlvbiBmYWlsZWQsIGl0IHdvdWxkIGp1c3QgcmV0dXJuIHRoZSBlcnJvciwgbGVhdmluZyB3aGF0ZXZlciBtZW1vcnkgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBhbGxvY2F0ZWQgYmVoaW5k4oCUYSBsZWFrLiBGdXJ0aGVybW9yZSwgZXZlbiBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIHN1Y2NlZWRlZCBidXQgdGhlIHN1YnNlcXVlbnQgYGt6YWxsb2Nfb2Jqc2AgZmFpbGVkLCBpdCB3b3VsZCBzdGlsbCByZXR1cm4gYC1FTk9NRU1gLCBsZWFraW5nIGFueSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGBubDgwMjExX3BhcnNlX2JlYWNvbmAuIEJhc2ljYWxseSwgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIG11bHRpcGxlIGxlYWsgc2NlbmFyaW9zLgoKVGhlIHBhdGNoIGNvcnJlY3RzIHRoaXMgYnkgYWxsb2NhdGluZyBgdGJgICpiZWZvcmUqIGNhbGxpbmcgYG5sODAyMTFfcGFyc2VfYmVhY29uYC4gSWYgYGt6YWxsb2Nfb2Jqc2AgZmFpbHMgbm93LCBpdCByZXR1cm5zIGAtRU5PTUVNYCBkaXJlY3RseSwgcHJldmVudGluZyB0aGUgbGVhayBiZWNhdXNlIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgaGFzbiYjMzk7dCBiZWVuIGNhbGxlZCB5ZXQuIENydWNpYWxseSwgaWYgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBmYWlscywgdGhlIGNvZGUgbm93ICpqdW1wcyogdG8gdGhlIGBvdXRgIGxhYmVsLiBUaGlzIGBvdXRgIGxhYmVsIHRoZW4gZnJlZXMgYm90aCBgdGJgICphbmQqIGBwYXJhbXMuYmVhY29uX25leHRg4oCUd2hpY2ggbWlnaHQgaGF2ZSBwYXJ0aWFsbHkgYWxsb2NhdGVkIGRhdGEuCgpUaGUgY3JpdGljYWwgcGllY2UgaGVyZSBpcyB0aGUgZmFjdCB0aGF0IGBubDgwMjExX3BhcnNlX2JlYWNvbmAgKmNhbiogbGVhdmUgcGFydGlhbCBhbGxvY2F0aW9ucyBpZiBpdCBmYWlscy4gTG9va2luZyBhdCB0aGUgY29kZSBmb3IgYG5sODAyMTFfcGFyc2VfYmVhY29uYCwgcGFydGljdWxhcmx5IHRoZSBwYXJ0cyBoYW5kbGluZyBgTkw4MDIxMV9BVFRSX01CU1NJRF9FTEVNU2AgYW5kIGBOTDgwMjExX0FUVFJfRU1BX1JOUl9FTEVNU2AsIEkgc2VlIHRoYXQgaWYgYG5sODAyMTFfY2FsY3VsYXRlX2FwX29wZXJhdGlvbmAgZmFpbHMsIGl0IHJldHVybnMgdGhlIGVycm9yIGNvZGUgKmJ1dCogbGVhdmVzIGBiY24tJmd0O21ic3NpZF9pZXNgIGFuZCBgYmNuLSZndDtybnJfaWVzYCBhbGxvY2F0ZWQuIFRoZSBwYXRjaCYjMzk7cyBjaGFuZ2UgZnJvbSBgcmV0dXJuIGVycjtgIHRvIGBnb3RvIG91dDtgIGZpeGVzIHRoaXMgYnkgbWFraW5nIHN1cmUgdGhvc2UgYWxsb2NhdGVkIGl0ZW1zIGFyZSBhbHdheXMgZnJlZWQgaW4gY2FzZSBvZiBmYWlsdXJlLiBBbHNvIGJ5IG1vdmluZyBga3phbGxvY19vYmpzYCBiZWZvcmUgYG5sODAyMTFfcGFyc2VfYmVhY29uYCwgdGhlIGNhc2Ugd2hlcmUgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBzdWNjZWVkcyBidXQgYGt6YWxsb2Nfb2Jqc2AgZmFpbHMgYW5kIHdvdWxkIGFsc28gbGVhayBgcGFyYW1zLmJlYWNvbl9uZXh0YCBpcyBhdm9pZGVkLgoKU28sIGluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgYSBzb2xpZCBidWcgZml4IHRoYXQgYWRkcmVzc2VzIG1lbW9yeSBsZWFrcyB3aXRoaW4gYG5sODAyMTFfY29sb3JfY2hhbmdlYCBjYXVzZWQgYnkgcGFydGlhbCBhbGxvY2F0aW9ucyBkdXJpbmcgYmVhY29uIHBhcnNpbmcsIGVzcGVjaWFsbHkgd2hlbiBlcnJvcnMgb2NjdXIuIEl0IGVuc3VyZXMgdGhhdCBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkIGNvcnJlY3RseSBpbiBhbGwgZXJyb3IgcGF0aHMuIEkmIzM5O2xsIHVzZSBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIGFzIHRoZSBmb2N1cyBzeW1ib2wsIGFzIGl0JiMzOTtzIHRoZSB0YXJnZXQgb2YgdGhlIG1lbW9yeSBsZWFrIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV9jb2xvcl9jaGFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgYG5sODAyMTFfY29sb3JfY2hhbmdlYCBuZXRsaW5rIGhhbmRsZXIuIEl0IGVuc3VyZXMgdGhhdCBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZhaWxzLCBhbnkgcGFydGlhbGx5IGFsbG9jYXRlZCBtZW1vcnkgaXMgcHJvcGVybHkgZnJlZWQsIGFuZCBpdCBwcmV2ZW50cyBhIGxlYWsgaWYgdGhlIHN1YnNlcXVlbnQgYWxsb2NhdGlvbiBmb3IgYHRiYCBmYWlscyBieSBtb3ZpbmcgaXQgYmVmb3JlIHRoZSBwYXJzaW5nIHN0ZXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBjb2RlIChlbXVsYXRlZCB2aWEgbWFjODAyMTFfaHdzaW0pLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25sODAyMTFfY29sb3JfY2hhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGBubDgwMjExX2NvbG9yX2NoYW5nZWAgbmV0bGluayBoYW5kbGVyLiBJdCBlbnN1cmVzIHRoYXQgaWYgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBmYWlscywgYW55IHBhcnRpYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIHByb3Blcmx5IGZyZWVkLCBhbmQgaXQgcHJldmVudHMgYSBsZWFrIGlmIHRoZSBzdWJzZXF1ZW50IGFsbG9jYXRpb24gZm9yIGB0YmAgZmFpbHMgYnkgbW92aW5nIGl0IGJlZm9yZSB0aGUgcGFyc2luZyBzdGVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgd2lyZWxlc3MgY29kZSAoZW11bGF0ZWQgdmlhIG1hYzgwMjExX2h3c2ltKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjQ1LjA3MzkzNTY5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyODEwNjE0NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX2NvbG9yX2NoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGBubDgwMjExX2NvbG9yX2NoYW5nZWAgbmV0bGluayBoYW5kbGVyLiBJdCBlbnN1cmVzIHRoYXQgaWYgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBmYWlscywgYW55IHBhcnRpYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIHByb3Blcmx5IGZyZWVkLCBhbmQgaXQgcHJldmVudHMgYSBsZWFrIGlmIHRoZSBzdWJzZXF1ZW50IGFsbG9jYXRpb24gZm9yIGB0YmAgZmFpbHMgYnkgbW92aW5nIGl0IGJlZm9yZSB0aGUgcGFyc2luZyBzdGVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgd2lyZWxlc3MgY29kZSAoZW11bGF0ZWQgdmlhIG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NDUuMDczOTQ0NzkzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjY3NjU5NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ZGEzMmRhZDE3ZWRhODZlNDM2OWFmNmEyNDVkNjkwYjRkOGY0N2NlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMTI6Mjk6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG5pbmRleCA1YWRjYjZiZDBmYzU2Li43NTVmOGZlNzExZmIyIDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuQEAgLTE4NzUwLDE1ICsxODc1MCwxNSBAQCBzdGF0aWMgaW50IG5sODAyMTFfY29sb3JfY2hhbmdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdGlmICghd2Rldi1cXHUwMDNlbGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmJlYWNvbl9pbnRlcnZhbClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHR0YiA9IGt6YWxsb2Nfb2JqcygqdGIsIE5MODAyMTFfQVRUUl9NQVggKyAxKTtcXG4rXFx0aWYgKCF0YilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbiBcXHRlcnIgPSBubDgwMjExX3BhcnNlX2JlYWNvbihyZGV2LCBpbmZvLVxcdTAwM2VhdHRycywgXFx1MDAyNnBhcmFtcy5iZWFjb25fbmV4dCxcXG4gXFx0XFx0XFx0XFx0ICAgd2Rldi1cXHUwMDNlbGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmNoYW5kZWYuY2hhbixcXG4gXFx0XFx0XFx0XFx0ICAgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFxuLVxcdHRiID0ga3phbGxvY19vYmpzKCp0YiwgTkw4MDIxMV9BVFRSX01BWCArIDEpO1xcbi1cXHRpZiAoIXRiKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBOTDgwMjExX0FUVFJfTUFYLFxcbiBcXHRcXHRcXHQgICAgICAgaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NPTE9SX0NIQU5HRV9FTEVNU10sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjQ1LjY0MTU0ODU4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkyMjQyOTkwODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX2NvbG9yX2NoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGBubDgwMjExX2NvbG9yX2NoYW5nZWAgbmV0bGluayBoYW5kbGVyLiBJdCBlbnN1cmVzIHRoYXQgaWYgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBmYWlscywgYW55IHBhcnRpYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIHByb3Blcmx5IGZyZWVkLCBhbmQgaXQgcHJldmVudHMgYSBsZWFrIGlmIHRoZSBzdWJzZXF1ZW50IGFsbG9jYXRpb24gZm9yIGB0YmAgZmFpbHMgYnkgbW92aW5nIGl0IGJlZm9yZSB0aGUgcGFyc2luZyBzdGVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgd2lyZWxlc3MgY29kZSAoZW11bGF0ZWQgdmlhIG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWRhMzJkYWQxN2VkYTg2ZTQzNjlhZjZhMjQ1ZDY5MGI0ZDhmNDdjZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTI6Mjk6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuaW5kZXggNWFkY2I2YmQwZmM1Ni4uNzU1ZjhmZTcxMWZiMiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbkBAIC0xODc1MCwxNSArMTg3NTAsMTUgQEAgc3RhdGljIGludCBubDgwMjExX2NvbG9yX2NoYW5nZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0aWYgKCF3ZGV2LVx1MDAzZWxpbmtzW3BhcmFtcy5saW5rX2lkXS5hcC5iZWFjb25faW50ZXJ2YWwpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0dGIgPSBremFsbG9jX29ianMoKnRiLCBOTDgwMjExX0FUVFJfTUFYICsgMSk7XG4rXHRpZiAoIXRiKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbiBcdGVyciA9IG5sODAyMTFfcGFyc2VfYmVhY29uKHJkZXYsIGluZm8tXHUwMDNlYXR0cnMsIFx1MDAyNnBhcmFtcy5iZWFjb25fbmV4dCxcbiBcdFx0XHRcdCAgIHdkZXYtXHUwMDNlbGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmNoYW5kZWYuY2hhbixcbiBcdFx0XHRcdCAgIGluZm8tXHUwMDNlZXh0YWNrKTtcbiBcdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4tXHR0YiA9IGt6YWxsb2Nfb2JqcygqdGIsIE5MODAyMTFfQVRUUl9NQVggKyAxKTtcbi1cdGlmICghdGIpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRnb3RvIG91dDtcbiBcbiBcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIE5MODAyMTFfQVRUUl9NQVgsXG4gXHRcdFx0ICAgICAgIGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NPTE9SX0NIQU5HRV9FTEVNU10sXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjoyOTo0NS42NDE1NTA4OThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc4MzExNjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFdpRmkgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLiBJbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgd2l0aGluIHRoZSBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggcmVvcmRlcnMgdGhlIGFsbG9jYXRpb24gb2YgYGt6YWxsb2Nfb2Jqc2AgYW5kIHRoZSBjYWxsIHRvIGBubDgwMjExX3BhcnNlX2JlYWNvbmAuIEl0IGxvb2tzIGxpa2UgaXQgbm93IGFsbG9jYXRlcyBgdGJgICpiZWZvcmUqIGNhbGxpbmcgYG5sODAyMTFfcGFyc2VfYmVhY29uYC4gQW5kLCBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZhaWxzLCBpbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IHJldHVybmluZyBhbiBlcnJvciwgaXQgdXNlcyBgZ290byBvdXQ7YC5cblxuV2FpdCBhIG1pbnV0ZS4uLiB0aGF0IGBnb3RvIG91dDtgIGp1bXDigKYgdGhhdCdzIGdvdCBtZSB0aGlua2luZy4gSXQncyBsaWtlbHkgdGhhdCBgb3V0OmAgd2lsbCAqZnJlZSogYHRiYCBhbmQgcG90ZW50aWFsbHkgYHBhcmFtcy5iZWFjb25fbmV4dGAsIGJ1dCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBBIHN1YnRsZSBjaGFuZ2UgbGlrZSB0aGlzIGNvdWxkIGludHJvZHVjZSBhIG1lbW9yeSBsZWFrIG9yIG90aGVyIHN1YnRsZSBzaWRlIGVmZmVjdHMuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gYG5sODAyMTFfY29sb3JfY2hhbmdlYCBpdHNlbGYgdG8gdmVyaWZ5IHRoYXQgYGdvdG8gb3V0O2AgaXMgaW5kZWVkIGhhbmRsaW5nIHRoZSBjbGVhbnVwIG9mIHRoZXNlIHJlc291cmNlcyBhcyBleHBlY3RlZC4gR290dGEgbWFrZSBzdXJlIGl0J3Mgbm90IGEgcmlza3kgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjM4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NDkuNTE5ODY1NzA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5OTI0OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sODAyMTFfY29sb3JfY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuYz0xODY2NT1zdGF0aWMgaW50IG5sODAyMTFfc2V0X3RpZF9jb25maWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg3MjAtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODcyMTpzdGF0aWMgaW50IG5sODAyMTFfY29sb3JfY2hhbmdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODcyMi17XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NTQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjAzNDctXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjAzNDg6XFx0XFx0LmRvaXQgPSBubDgwMjExX2NvbG9yX2NoYW5nZSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwMzQ5LVxcdFxcdC5mbGFncyA9IEdFTkxfVU5TX0FETUlOX1BFUk0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjQ5LjYxOTc5NjY4M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjQ1MDU3MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBubDgwMjExX2NvbG9yX2NoYW5nZWAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIGZ1bmN0aW9uLiBJbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgc2lmdGluZyB0aHJvdWdoIHBvdGVudGlhbCBjb250ZXh0cy4gKm5sODAyMTEqIHNjcmVhbXMgd2lyZWxlc3MgbmV0d29ya2luZywgb2J2aW91c2x5LiBTbywgd2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBzb21lIGFzcGVjdCBvZiA4MDIuMTEgbWFuYWdlbWVudCB0aHJvdWdoIHRoZSBOZXRsaW5rIGludGVyZmFjZS4gVGhlIFwiY29sb3JcIiBwYXJ0IGlzIGludHJpZ3VpbmcuIEluIHdpcmVsZXNzLCBcImNvbG9yXCIgY291bGQgcmVsYXRlIHRvIGEgdmFyaWV0eSBvZiB0aGluZ3M6IGZyZXF1ZW5jeSBiYW5kcywgY2hhbm5lbCBkZXNpZ25hdGlvbiwgcGVyaGFwcyBldmVuIHNvbWUga2luZCBvZiBjb25mbGljdCByZXNvbHV0aW9uIG1lY2hhbmlzbSB3aXRoaW4gYSBkZW5zZSBuZXR3b3JrLlxuXG5NeSBpbml0aWFsIHF1ZXN0aW9ucyBhcmUgcGlsaW5nIHVwIGFscmVhZHk6XG5cbiogICBXaGF0IHNwZWNpZmljIG9wZXJhdGlvbiBpcyB0aGlzIGZ1bmN0aW9uIHJlbGF0ZWQgdG8/IElzIGl0IGEgY29uZmlndXJhdGlvbiBjaGFuZ2UsIGEgc3RhdHVzIHVwZGF0ZSwgb3IgYSBjb21tYW5kIGV4ZWN1dGlvbj9cbiogICBIb3cgaXMgXCJjb2xvclwiIHVzZWQgaW4gdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmw4MDIxMSBzdGFjaz8gSXMgaXQgYW4gYWJzdHJhY3QgY29uY2VwdCBvciBhIGRpcmVjdCBoYXJkd2FyZSBwYXJhbWV0ZXI/XG4qICAgSXMgaXQgcmVsYXRlZCB0byBzcGVjdHJ1bSBtYW5hZ2VtZW50LCBvciBpcyBpdCBtb3JlIGEgTUFDLWxheWVyIGNvbmNlcm4/XG4qICAgQXJlIHRoZXJlIGVycm9yIGNhc2VzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj9cblxuRXNzZW50aWFsbHksIEkgbmVlZCB0byBrbm93IHRoZSAqd2h5KiBhbmQgdGhlICpob3cqIGJlaGluZCB0aGlzIGZ1bmN0aW9uJ3MgZXhpc3RlbmNlIGFuZCBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBpdHMgY2FsbCBzaXRlcywgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIGFuZCB0aGUgb3ZlcmFsbCBzdGF0ZSBtYWNoaW5lIGl0IGludGVyYWN0cyB3aXRoIHdpdGhpbiB0aGUgYnJvYWRlciBubDgwMjExIGZyYW1ld29yay4gSSBhbnRpY2lwYXRlIHRoaXMgd2lsbCBpbnZvbHZlIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZSBhbmQgdGhlIHBvc3NpYmxlIHNpZGUgZWZmZWN0cyBpdCBtYXkgaGF2ZSBvbiB0aGUgd2lyZWxlc3MgaW50ZXJmYWNlJ3Mgb3BlcmF0aW9ucy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTk3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NTMuNDQ0MzA2MTg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYxNDE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NzIxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg3MjE6XFx0c3RhdGljIGludCBubDgwMjExX2NvbG9yX2NoYW5nZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjE4NzIyOlxcdHtcXG4xODcyMzpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG4xODcyNDpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfY29sb3JfY2hhbmdlX3NldHRpbmdzIHBhcmFtcyA9IHt9O1xcbjE4NzI1OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG4xODcyNjpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbjE4NzI3OlxcdFxcdHN0cnVjdCBubGF0dHIgKip0YjtcXG4xODcyODpcXHRcXHR1MTYgb2Zmc2V0O1xcbjE4NzI5OlxcdFxcdGludCBlcnI7XFxuMTg3MzA6XFx0XFxuMTg3MzE6XFx0XFx0aWYgKCFyZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWNvbG9yX2NoYW5nZSlcXG4xODczMjpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTg3MzM6XFx0XFxuMTg3MzQ6XFx0XFx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksXFxuMTg3MzU6XFx0XFx0XFx0XFx0XFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUikpXFxuMTg3MzY6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE4NzM3OlxcdFxcbjE4NzM4OlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApXFxuMTg3Mzk6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE4NzQwOlxcdFxcbjE4NzQxOlxcdFxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NPTE9SX0NIQU5HRV9DT1VOVF0gfHxcXG4xODc0MjpcXHRcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DT0xPUl9DSEFOR0VfQ09MT1JdIHx8XFxuMTg3NDM6XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQ09MT1JfQ0hBTkdFX0VMRU1TXSlcXG4xODc0NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODc0NTpcXHRcXG4xODc0NjpcXHRcXHRwYXJhbXMuY291bnQgPSBubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DT0xPUl9DSEFOR0VfQ09VTlRdKTtcXG4xODc0NzpcXHRcXHRwYXJhbXMuY29sb3IgPSBubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DT0xPUl9DSEFOR0VfQ09MT1JdKTtcXG4xODc0ODpcXHRcXG4xODc0OTpcXHRcXHRwYXJhbXMubGlua19pZCA9IG5sODAyMTFfbGlua19pZChpbmZvLVxcdTAwM2VhdHRycyk7XFxuMTg3NTA6XFx0XFx0aWYgKCF3ZGV2LVxcdTAwM2VsaW5rc1twYXJhbXMubGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsKVxcbjE4NzUxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4NzUyOlxcdFxcbjE4NzUzOlxcdFxcdHRiID0ga3phbGxvY19vYmpzKCp0YiwgTkw4MDIxMV9BVFRSX01BWCArIDEpO1xcbjE4NzU0OlxcdFxcdGlmICghdGIpXFxuMTg3NTU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTg3NTY6XFx0XFxuMTg3NTc6XFx0XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgaW5mby1cXHUwMDNlYXR0cnMsIFxcdTAwMjZwYXJhbXMuYmVhY29uX25leHQsXFxuMTg3NTg6XFx0XFx0XFx0XFx0XFx0ICAgd2Rldi1cXHUwMDNlbGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmNoYW5kZWYuY2hhbixcXG4xODc1OTpcXHRcXHRcXHRcXHRcXHQgICBpbmZvLVxcdTAwM2VleHRhY2spO1xcbjE4NzYwOlxcdFxcdGlmIChlcnIpXFxuMTg3NjE6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTg3NjI6XFx0XFxuMTg3NjM6XFx0XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTkw4MDIxMV9BVFRSX01BWCxcXG4xODc2NDpcXHRcXHRcXHRcXHQgICAgICAgaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NPTE9SX0NIQU5HRV9FTEVNU10sXFxuMTg3NjU6XFx0XFx0XFx0XFx0ICAgICAgIG5sODAyMTFfcG9saWN5LCBpbmZvLVxcdTAwM2VleHRhY2spO1xcbjE4NzY2OlxcdFxcdGlmIChlcnIpXFxuMTg3Njc6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTg3Njg6XFx0XFxuMTg3Njk6XFx0XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgdGIsIFxcdTAwMjZwYXJhbXMuYmVhY29uX2NvbG9yX2NoYW5nZSxcXG4xODc3MDpcXHRcXHRcXHRcXHRcXHQgICB3ZGV2LVxcdTAwM2VsaW5rc1twYXJhbXMubGlua19pZF0uYXAuY2hhbmRlZi5jaGFuLFxcbjE4NzcxOlxcdFxcdFxcdFxcdFxcdCAgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuMTg3NzI6XFx0XFx0aWYgKGVycilcXG4xODc3MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4xODc3NDpcXHRcXG4xODc3NTpcXHRcXHRpZiAoIXRiW05MODAyMTFfQVRUUl9DTlREV05fT0ZGU19CRUFDT05dKSB7XFxuMTg3NzY6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xODc3NzpcXHRcXHRcXHRnb3RvIG91dDtcXG4xODc3ODpcXHRcXHR9XFxuMTg3Nzk6XFx0XFxuMTg3ODA6XFx0XFx0aWYgKG5sYV9sZW4odGJbTkw4MDIxMV9BVFRSX0NOVERXTl9PRkZTX0JFQUNPTl0pICE9IHNpemVvZih1MTYpKSB7XFxuMTg3ODE6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xODc4MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4xODc4MzpcXHRcXHR9XFxuMTg3ODQ6XFx0XFxuMTg3ODU6XFx0XFx0b2Zmc2V0ID0gbmxhX2dldF91MTYodGJbTkw4MDIxMV9BVFRSX0NOVERXTl9PRkZTX0JFQUNPTl0pO1xcbjE4Nzg2OlxcdFxcdGlmIChvZmZzZXQgXFx1MDAzZT0gcGFyYW1zLmJlYWNvbl9jb2xvcl9jaGFuZ2UudGFpbF9sZW4pIHtcXG4xODc4NzpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjE4Nzg4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE4Nzg5OlxcdFxcdH1cXG4xODc5MDpcXHRcXG4xODc5MTpcXHRcXHRpZiAocGFyYW1zLmJlYWNvbl9jb2xvcl9jaGFuZ2UudGFpbFtvZmZzZXRdICE9IHBhcmFtcy5jb3VudCkge1xcbjE4NzkyOlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTg3OTM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTg3OTQ6XFx0XFx0fVxcbjE4Nzk1OlxcdFxcbjE4Nzk2OlxcdFxcdHBhcmFtcy5jb3VudGVyX29mZnNldF9iZWFjb24gPSBvZmZzZXQ7XFxuMTg3OTc6XFx0XFxuMTg3OTg6XFx0XFx0aWYgKHRiW05MODAyMTFfQVRUUl9DTlREV05fT0ZGU19QUkVTUF0pIHtcXG4xODc5OTpcXHRcXHRcXHRpZiAobmxhX2xlbih0YltOTDgwMjExX0FUVFJfQ05URFdOX09GRlNfUFJFU1BdKSAhPVxcbjE4ODAwOlxcdFxcdFxcdCAgICBzaXplb2YodTE2KSkge1xcbjE4ODAxOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTg4MDI6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTg4MDM6XFx0XFx0XFx0fVxcbjE4ODA0OlxcdFxcbjE4ODA1OlxcdFxcdFxcdG9mZnNldCA9IG5sYV9nZXRfdTE2KHRiW05MODAyMTFfQVRUUl9DTlREV05fT0ZGU19QUkVTUF0pO1xcbjE4ODA2OlxcdFxcdFxcdGlmIChvZmZzZXQgXFx1MDAzZT0gcGFyYW1zLmJlYWNvbl9jb2xvcl9jaGFuZ2UucHJvYmVfcmVzcF9sZW4pIHtcXG4xODgwNzpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjE4ODA4OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE4ODA5OlxcdFxcdFxcdH1cXG4xODgxMDpcXHRcXG4xODgxMTpcXHRcXHRcXHRpZiAocGFyYW1zLmJlYWNvbl9jb2xvcl9jaGFuZ2UucHJvYmVfcmVzcFtvZmZzZXRdICE9XFxuMTg4MTI6XFx0XFx0XFx0ICAgIHBhcmFtcy5jb3VudCkge1xcbjE4ODEzOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTg4MTQ6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTg4MTU6XFx0XFx0XFx0fVxcbjE4ODE2OlxcdFxcbjE4ODE3OlxcdFxcdFxcdHBhcmFtcy5jb3VudGVyX29mZnNldF9wcmVzcCA9IG9mZnNldDtcXG4xODgxODpcXHRcXHR9XFxuMTg4MTk6XFx0XFxuMTg4MjA6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9VTlNPTF9CQ0FTVF9QUk9CRV9SRVNQXSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjoyOTo1My40NDY5MjU3NjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTkxMzAwODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKk15IEltbWVkaWF0ZSBBbmFseXNpcyBvZiB0aGUgQ29kZSBTbmlwcGV0KipcblxuSG1tLCBJIHNlZSBhIGZyYWdtZW50IG9mIGEgZnVuY3Rpb24sIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBwYXVzZS4gSSBjYW4ndCBqdW1wIHRvIGNvbmNsdXNpb25zIG9yIG1ha2UgYW55IGRlZmluaXRpdmUgc3RhdGVtZW50cyBhYm91dCBpdHMgcHVycG9zZSBvciBiZWhhdmlvciB3aXRob3V0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQuIFRoZSBjcnVjaWFsIHZhcmlhYmxlIGlzIGBvdXRgIOKAkyBpdCdzIGNsZWFybHkgYSBjZW50cmFsIGVsZW1lbnQsIGFuZCBpdHMgdWx0aW1hdGUgZnVuY3Rpb24gaXMgY29tcGxldGVseSB1bmtub3duIGF0IHRoaXMgcG9pbnQuIEkgbmVlZCB0byBzZWUgdGhlIGVudGlyZSBmdW5jdGlvbiBkZWZpbml0aW9uIHRvIHVuZGVyc3RhbmQgd2hlcmUgYG91dGAgY29tZXMgZnJvbSwgaG93IGl0J3MgYmVpbmcgdXNlZCwgYW5kIHdoYXQgZGF0YSBpdCdzIGhvbGRpbmcsIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGdvYWwgb2YgdGhpcyBjb2RlLiBXaXRob3V0IHRoYXQgY29tcGxldGUgcGljdHVyZSwgYW55IHNwZWN1bGF0aW9uIGlzIHByZW1hdHVyZS4gSSBtdXN0IGhhdmUgbW9yZSBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIxMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NTYuNDM4MjI4OTk0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NDY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4ODIxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg4MjE6XFx0XFx0XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV91bnNvbF9iY2FzdF9wcm9iZV9yZXNwKFxcbjE4ODIyOlxcdFxcdFxcdFxcdHJkZXYsIGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9VTlNPTF9CQ0FTVF9QUk9CRV9SRVNQXSxcXG4xODgyMzpcXHRcXHRcXHRcXHRcXHUwMDI2cGFyYW1zLnVuc29sX2JjYXN0X3Byb2JlX3Jlc3ApO1xcbjE4ODI0OlxcdFxcdFxcdGlmIChlcnIpXFxuMTg4MjU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTg4MjY6XFx0XFx0fVxcbjE4ODI3OlxcdFxcbjE4ODI4OlxcdFxcdGVyciA9IHJkZXZfY29sb3JfY2hhbmdlKHJkZXYsIGRldiwgXFx1MDAyNnBhcmFtcyk7XFxuMTg4Mjk6XFx0XFxuMTg4MzA6XFx0b3V0OlxcbjE4ODMxOlxcdFxcdGtmcmVlKHBhcmFtcy5iZWFjb25fbmV4dC5tYnNzaWRfaWVzKTtcXG4xODgzMjpcXHRcXHRrZnJlZShwYXJhbXMuYmVhY29uX2NvbG9yX2NoYW5nZS5tYnNzaWRfaWVzKTtcXG4xODgzMzpcXHRcXHRrZnJlZShwYXJhbXMuYmVhY29uX25leHQucm5yX2llcyk7XFxuMTg4MzQ6XFx0XFx0a2ZyZWUocGFyYW1zLmJlYWNvbl9jb2xvcl9jaGFuZ2Uucm5yX2llcyk7XFxuMTg4MzU6XFx0XFx0a2ZyZWUodGIpO1xcbjE4ODM2OlxcdFxcdHJldHVybiBlcnI7XFxuMTg4Mzc6XFx0fVxcbjE4ODM4OlxcdFxcbjE4ODM5OlxcdHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfZmlsc19hYWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xODg0MDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjE4ODQxOlxcdHtcXG4xODg0MjpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG4xODg0MzpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMV07XFxuMTg4NDQ6XFx0XFx0c3RydWN0IGNmZzgwMjExX2ZpbHNfYWFkIGZpbHNfYWFkID0ge307XFxuMTg4NDU6XFx0XFx0dTggKm5vbmNlcztcXG4xODg0NjpcXHRcXG4xODg0NzpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdIHx8XFxuMTg4NDg6XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRklMU19LRUtdIHx8XFxuMTg4NDk6XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRklMU19OT05DRVNdKVxcbjE4ODUwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4ODUxOlxcdFxcbjE4ODUyOlxcdFxcdGZpbHNfYWFkLm1hY2FkZHIgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7XFxuMTg4NTM6XFx0XFx0Zmlsc19hYWQua2VrX2xlbiA9IG5sYV9sZW4oaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZJTFNfS0VLXSk7XFxuMTg4NTQ6XFx0XFx0Zmlsc19hYWQua2VrID0gbmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZJTFNfS0VLXSk7XFxuMTg4NTU6XFx0XFx0bm9uY2VzID0gbmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZJTFNfTk9OQ0VTXSk7XFxuMTg4NTY6XFx0XFx0Zmlsc19hYWQuc25vbmNlID0gbm9uY2VzO1xcbjE4ODU3OlxcdFxcdGZpbHNfYWFkLmFub25jZSA9IG5vbmNlcyArIEZJTFNfTk9OQ0VfTEVOO1xcbjE4ODU4OlxcdFxcbjE4ODU5OlxcdFxcdHJldHVybiByZGV2X3NldF9maWxzX2FhZChyZGV2LCBkZXYsIFxcdTAwMjZmaWxzX2FhZCk7XFxuMTg4NjA6XFx0fVxcbjE4ODYxOlxcdFxcbjE4ODYyOlxcdHN0YXRpYyBpbnQgbmw4MDIxMV9hZGRfbGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjE4ODYzOlxcdHtcXG4xODg2NDpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG4xODg2NTpcXHRcXHR1bnNpZ25lZCBpbnQgbGlua19pZCA9IG5sODAyMTFfbGlua19pZChpbmZvLVxcdTAwM2VhdHRycyk7XFxuMTg4NjY6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzFdO1xcbjE4ODY3OlxcdFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHI7XFxuMTg4Njg6XFx0XFx0aW50IHJldDtcXG4xODg2OTpcXHRcXG4xODg3MDpcXHRcXHRpZiAoISh3ZGV2LVxcdTAwM2V3aXBoeS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBXSVBIWV9GTEFHX1NVUFBPUlRTX01MTykpXFxuMTg4NzE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTg4NzI6XFx0XFxuMTg4NzM6XFx0XFx0c3dpdGNoICh3ZGV2LVxcdTAwM2VpZnR5cGUpIHtcXG4xODg3NDpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxcbjE4ODc1OlxcdFxcdFxcdGJyZWFrO1xcbjE4ODc2OlxcdFxcdGRlZmF1bHQ6XFxuMTg4Nzc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTg4Nzg6XFx0XFx0fVxcbjE4ODc5OlxcdFxcbjE4ODgwOlxcdFxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHxcXG4xODg4MTpcXHRcXHQgICAgIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pKSlcXG4xODg4MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODg4MzpcXHRcXG4xODg4NDpcXHRcXHR3ZGV2LVxcdTAwM2V2YWxpZF9saW5rcyB8PSBCSVQobGlua19pZCk7XFxuMTg4ODU6XFx0XFx0ZXRoZXJfYWRkcl9jb3B5KHdkZXYtXFx1MDAzZWxpbmtzW2xpbmtfaWRdLmFkZHIsXFxuMTg4ODY6XFx0XFx0XFx0XFx0bmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pKTtcXG4xODg4NzpcXHRcXG4xODg4ODpcXHRcXHRyZXQgPSByZGV2X2FkZF9pbnRmX2xpbmsocmRldiwgd2RldiwgbGlua19pZCk7XFxuMTg4ODk6XFx0XFx0aWYgKHJldCkge1xcbjE4ODkwOlxcdFxcdFxcdHdkZXYtXFx1MDAzZXZhbGlkX2xpbmtzIFxcdTAwMjY9IH5CSVQobGlua19pZCk7XFxuMTg4OTE6XFx0XFx0XFx0ZXRoX3plcm9fYWRkcih3ZGV2LVxcdTAwM2VsaW5rc1tsaW5rX2lkXS5hZGRyKTtcXG4xODg5MjpcXHRcXHR9XFxuMTg4OTM6XFx0XFxuMTg4OTQ6XFx0XFx0cmV0dXJuIHJldDtcXG4xODg5NTpcXHR9XFxuMTg4OTY6XFx0XFxuMTg4OTc6XFx0c3RhdGljIGludCBubDgwMjExX3JlbW92ZV9saW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuMTg4OTg6XFx0e1xcbjE4ODk5OlxcdFxcdHVuc2lnbmVkIGludCBsaW5rX2lkID0gbmw4MDIxMV9saW5rX2lkKGluZm8tXFx1MDAzZWF0dHJzKTtcXG4xODkwMDpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMV07XFxuMTg5MDE6XFx0XFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cXHUwMDNlaWVlZTgwMjExX3B0cjtcXG4xODkwMjpcXHRcXG4xODkwMzpcXHRcXHQvKiBjYW5ub3QgcmVtb3ZlIGlmIHRoZXJlJ3Mgbm8gbGluayAqL1xcbjE4OTA0OlxcdFxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01MT19MSU5LX0lEXSlcXG4xODkwNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODkwNjpcXHRcXG4xODkwNzpcXHRcXHRzd2l0Y2ggKHdkZXYtXFx1MDAzZWlmdHlwZSkge1xcbjE4OTA4OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6XFxuMTg5MDk6XFx0XFx0XFx0YnJlYWs7XFxuMTg5MTA6XFx0XFx0ZGVmYXVsdDpcXG4xODkxMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODkxMjpcXHRcXHR9XFxuMTg5MTM6XFx0XFxuMTg5MTQ6XFx0XFx0Y2ZnODAyMTFfcmVtb3ZlX2xpbmsod2RldiwgbGlua19pZCk7XFxuMTg5MTU6XFx0XFxuMTg5MTY6XFx0XFx0cmV0dXJuIDA7XFxuMTg5MTc6XFx0fVxcbjE4OTE4OlxcdFxcbjE4OTE5OlxcdHN0YXRpYyBpbnRcXG4xODkyMDpcXHRubDgwMjExX2FkZF9tb2RfbGlua19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjU2LjQzOTg3NjIzNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTU2NTI0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IExlYWsgaW4gdGhlIEJlYWNvbiBQYXJzaW5nIFJvdXRpbmUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBtZW1vcnkgbGVhay4gTGV0J3Mgc2VlLi4uIHRoZSBjb2RlIGJlZm9yZSB0aGUgZml4IGludm9sdmVzIHBhcnNpbmcgYSBiZWFjb24uIFNwZWNpZmljYWxseSwgaXQgY2FsbHMgYG5sODAyMTFfcGFyc2VfYmVhY29uYCwgYW5kIGlmIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciwgd2UgaW1tZWRpYXRlbHkgZXhpdC4gUmlnaHQsIHNvIHdlIGNhbGwgYG5sODAyMTFfcGFyc2VfYmVhY29uYCwgYW5kIHRoZW4gYWxsb2NhdGUgYSB0YWJsZSB3aXRoIGBremFsbG9jX29ianNgLiBCdXQsIHdhaXQgYSBtaW51dGUsIHRoZSBwcm9ibGVtICptdXN0KiBiZSB0aGF0IGBubDgwMjExX3BhcnNlX2JlYWNvbmAgKml0c2VsZiogY291bGQgYmUgYWxsb2NhdGluZyBtZW1vcnkgaW4gYHBhcmFtcy5iZWFjb25fbmV4dC5tYnNzaWRfaWVzYCBhbmQgYHBhcmFtcy5iZWFjb25fbmV4dC5ybnJfaWVzYC4gVGhhdCBtZW1vcnksIGlmIGFsbG9jYXRlZCwgaXNuJ3QgYmVpbmcgZnJlZWQgaWYgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBmYWlscyEgU28sIHRoZSBsZWFrIGlzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLi4uIEkgYmV0dGVyIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGFsbG9jYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIHRoZXJlLiBHb3QgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNzEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDowMC43NTU1MzE4NThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTAxNDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sODAyMTFfcGFyc2VfYmVhY29uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuYz02NjMxPXN0YXRpYyBpbnQgbmw4MDIxMV9jYWxjdWxhdGVfYXBfb3BlcmF0aW9uKHN0cnVjdCBubGF0dHIgKmF0dHJzW10sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTY3MDMtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2NzA0OnN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9iZWFjb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjcwNS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICphdHRyc1tdLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz03MTk1PXN0YXRpYyBpbnQgbmw4MDIxMV9zdGFydF9hcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy03MzQ3LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NzM0ODpcXHRlcnIgPSBubDgwMjExX3BhcnNlX2JlYWNvbihyZGV2LCBpbmZvLVxcdTAwM2VhdHRycywgXFx1MDAyNnBhcmFtcy1cXHUwMDNlYmVhY29uLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNzM0OS1cXHRcXHRcXHRcXHQgICBwYXJhbXMtXFx1MDAzZWNoYW5kZWYuY2hhbiwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NzUwMj1zdGF0aWMgaW50IG5sODAyMTFfc2V0X2JlYWNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy03NTI2LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NzUyNzpcXHRlcnIgPSBubDgwMjExX3BhcnNlX2JlYWNvbihyZGV2LCBpbmZvLVxcdTAwM2VhdHRycywgXFx1MDAyNnBhcmFtcy1cXHUwMDNlYmVhY29uLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNzUyOC1cXHRcXHRcXHRcXHQgICB3ZGV2LVxcdTAwM2VsaW5rc1tsaW5rX2lkXS5hcC5jaGFuZGVmLmNoYW4sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTEyMDcyPXN0YXRpYyBpbnQgbmw4MDIxMV9jaGFubmVsX3N3aXRjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjE1MS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMTUyOlxcdGVyciA9IG5sODAyMTFfcGFyc2VfYmVhY29uKHJkZXYsIGluZm8tXFx1MDAzZWF0dHJzLCBcXHUwMDI2cGFyYW1zLmJlYWNvbl9hZnRlcixcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMTUzLVxcdFxcdFxcdFxcdCAgIHBhcmFtcy5jaGFuZGVmLmNoYW4sIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMTY4LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIxNjk6XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgY3NhX2F0dHJzLCBcXHUwMDI2cGFyYW1zLmJlYWNvbl9jc2EsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjE3MC1cXHRcXHRcXHRcXHQgICB3ZGV2LVxcdTAwM2VsaW5rc1tsaW5rX2lkXS5hcC5jaGFuZGVmLmNoYW4sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE4NzIxPXN0YXRpYyBpbnQgbmw4MDIxMV9jb2xvcl9jaGFuZ2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg3NTYtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODc1NzpcXHRlcnIgPSBubDgwMjExX3BhcnNlX2JlYWNvbihyZGV2LCBpbmZvLVxcdTAwM2VhdHRycywgXFx1MDAyNnBhcmFtcy5iZWFjb25fbmV4dCxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NzU4LVxcdFxcdFxcdFxcdCAgIHdkZXYtXFx1MDAzZWxpbmtzW3BhcmFtcy5saW5rX2lkXS5hcC5jaGFuZGVmLmNoYW4sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NzY4LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTg3Njk6XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgdGIsIFxcdTAwMjZwYXJhbXMuYmVhY29uX2NvbG9yX2NoYW5nZSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NzcwLVxcdFxcdFxcdFxcdCAgIHdkZXYtXFx1MDAzZWxpbmtzW3BhcmFtcy5saW5rX2lkXS5hcC5jaGFuZGVmLmNoYW4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjAwLjg0NTA0MDA5M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTAxMzUwNzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmVhY29uIFBhcnNpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1vdmluZyB0aGUgYGt6YWxsb2Nfb2Jqc2AgYWxsb2NhdGlvbiBiZWZvcmUgdGhlIGluaXRpYWwgY2FsbCB0byBgbmw4MDIxMV9wYXJzZV9iZWFjb25gLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgb3B0aW1pemF0aW9uIHRvIGhhbmRsZSB0aGUgYC1FTk9NRU1gIGNhc2UgZWFybHkuIElmIGBremFsbG9jX29ianNgIGZhaWxzLCB3ZSBqdXN0IGJhaWwgb3V0IGltbWVkaWF0ZWx5LlxuXG5Ob3csIGlmIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgKmRvZXMqIGZhaWwgYWZ0ZXIgdGhlIHBhdGNoLCB0aGUgY29kZSBub3cgY29ycmVjdGx5IGp1bXBzIHRvIHRoZSBgb3V0YCBsYWJlbC4gVGhhdCdzIGdvb2QsIGJlY2F1c2UgYG91dGAgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgYHBhcmFtcy5iZWFjb25fbmV4dC5tYnNzaWRfaWVzYCwgYHBhcmFtcy5iZWFjb25fbmV4dC5ybnJfaWVzYCwgYW5kIHRoZSBgdGJgIHN0cnVjdHVyZSwgYW1vbmcgb3RoZXIgdGhpbmdzLiBMb29rcyBsaWtlIHdlJ3JlIGNsZWFuaW5nIHVwIGFmdGVyIG91cnNlbHZlcy5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwcmUtcGF0Y2ggYmVoYXZpb3IuIEJlZm9yZSB0aGlzIGNoYW5nZSwgaWYgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBmYWlsZWQsIGl0IGp1c3QgcmV0dXJuZWQgdGhlIGBlcnJgIHZhbHVlIGRpcmVjdGx5LiBUaGF0IGltcGxpZXMgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWshIEFueSBhbGxvY2F0aW9ucyBtYWRlICp3aXRoaW4qIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgZm9yIGBwYXJhbXMuYmVhY29uX25leHRgIGJlZm9yZSB0aGUgZnVuY3Rpb24gZmFpbGVkIHdvdWxkIGhhdmUgYmVlbiBvcnBoYW5lZCwgcmlnaHQ/XG5cbkFscmlnaHQsIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIHNvdXJjZSBjb2RlIG9mIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgaXRzZWxmIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQgaGFuZGxlcyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gc2VlIHdoYXQgaGFwcGVucyB3aGVuIGl0IGVuY291bnRlcnMgYW4gZXJyb3IgYW5kIGRldGVybWluZSB3aGF0IG1lbW9yeSBpcyBvciBpc24ndCBmcmVlZCB1bmRlciB0aGF0IGNvbmRpdGlvbi4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IHZ1bG5lcmFiaWxpdHkuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc1MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDowNS45NDYzOTU1OTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA1OTg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3MDQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NzA0OlxcdHN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9iZWFjb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbjY3MDU6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqYXR0cnNbXSxcXG42NzA2OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBjZmc4MDIxMV9iZWFjb25fZGF0YSAqYmNuLFxcbjY3MDc6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLFxcbjY3MDg6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjY3MDk6XFx0e1xcbjY3MTA6XFx0XFx0Ym9vbCBoYXZlaW5mbyA9IGZhbHNlO1xcbjY3MTE6XFx0XFx0aW50IGVycjtcXG42NzEyOlxcdFxcbjY3MTM6XFx0XFx0bWVtc2V0KGJjbiwgMCwgc2l6ZW9mKCpiY24pKTtcXG42NzE0OlxcdFxcbjY3MTU6XFx0XFx0YmNuLVxcdTAwM2VsaW5rX2lkID0gbmw4MDIxMV9saW5rX2lkKGF0dHJzKTtcXG42NzE2OlxcdFxcbjY3MTc6XFx0XFx0aWYgKGF0dHJzW05MODAyMTFfQVRUUl9CRUFDT05fSEVBRF0pIHtcXG42NzE4OlxcdFxcdFxcdGJjbi1cXHUwMDNlaGVhZCA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9CRUFDT05fSEVBRF0pO1xcbjY3MTk6XFx0XFx0XFx0YmNuLVxcdTAwM2VoZWFkX2xlbiA9IG5sYV9sZW4oYXR0cnNbTkw4MDIxMV9BVFRSX0JFQUNPTl9IRUFEXSk7XFxuNjcyMDpcXHRcXHRcXHRpZiAoIWJjbi1cXHUwMDNlaGVhZF9sZW4pXFxuNjcyMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42NzIyOlxcdFxcdFxcdGhhdmVpbmZvID0gdHJ1ZTtcXG42NzIzOlxcdFxcdH1cXG42NzI0OlxcdFxcbjY3MjU6XFx0XFx0aWYgKGF0dHJzW05MODAyMTFfQVRUUl9CRUFDT05fVEFJTF0pIHtcXG42NzI2OlxcdFxcdFxcdGJjbi1cXHUwMDNldGFpbCA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9CRUFDT05fVEFJTF0pO1xcbjY3Mjc6XFx0XFx0XFx0YmNuLVxcdTAwM2V0YWlsX2xlbiA9IG5sYV9sZW4oYXR0cnNbTkw4MDIxMV9BVFRSX0JFQUNPTl9UQUlMXSk7XFxuNjcyODpcXHRcXHRcXHRoYXZlaW5mbyA9IHRydWU7XFxuNjcyOTpcXHRcXHR9XFxuNjczMDpcXHRcXG42NzMxOlxcdFxcdGlmICghaGF2ZWluZm8pXFxuNjczMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42NzMzOlxcdFxcbjY3MzQ6XFx0XFx0aWYgKGF0dHJzW05MODAyMTFfQVRUUl9JRV0pIHtcXG42NzM1OlxcdFxcdFxcdGJjbi1cXHUwMDNlYmVhY29uX2llcyA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9JRV0pO1xcbjY3MzY6XFx0XFx0XFx0YmNuLVxcdTAwM2ViZWFjb25faWVzX2xlbiA9IG5sYV9sZW4oYXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7XFxuNjczNzpcXHRcXHR9XFxuNjczODpcXHRcXG42NzM5OlxcdFxcdGlmIChhdHRyc1tOTDgwMjExX0FUVFJfSUVfUFJPQkVfUkVTUF0pIHtcXG42NzQwOlxcdFxcdFxcdGJjbi1cXHUwMDNlcHJvYmVyZXNwX2llcyA9XFxuNjc0MTpcXHRcXHRcXHRcXHRubGFfZGF0YShhdHRyc1tOTDgwMjExX0FUVFJfSUVfUFJPQkVfUkVTUF0pO1xcbjY3NDI6XFx0XFx0XFx0YmNuLVxcdTAwM2Vwcm9iZXJlc3BfaWVzX2xlbiA9XFxuNjc0MzpcXHRcXHRcXHRcXHRubGFfbGVuKGF0dHJzW05MODAyMTFfQVRUUl9JRV9QUk9CRV9SRVNQXSk7XFxuNjc0NDpcXHRcXHR9XFxuNjc0NTpcXHRcXG42NzQ2OlxcdFxcdGlmIChhdHRyc1tOTDgwMjExX0FUVFJfSUVfQVNTT0NfUkVTUF0pIHtcXG42NzQ3OlxcdFxcdFxcdGJjbi1cXHUwMDNlYXNzb2NyZXNwX2llcyA9XFxuNjc0ODpcXHRcXHRcXHRcXHRubGFfZGF0YShhdHRyc1tOTDgwMjExX0FUVFJfSUVfQVNTT0NfUkVTUF0pO1xcbjY3NDk6XFx0XFx0XFx0YmNuLVxcdTAwM2Vhc3NvY3Jlc3BfaWVzX2xlbiA9XFxuNjc1MDpcXHRcXHRcXHRcXHRubGFfbGVuKGF0dHJzW05MODAyMTFfQVRUUl9JRV9BU1NPQ19SRVNQXSk7XFxuNjc1MTpcXHRcXHR9XFxuNjc1MjpcXHRcXG42NzUzOlxcdFxcdGlmIChhdHRyc1tOTDgwMjExX0FUVFJfUFJPQkVfUkVTUF0pIHtcXG42NzU0OlxcdFxcdFxcdGJjbi1cXHUwMDNlcHJvYmVfcmVzcCA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9QUk9CRV9SRVNQXSk7XFxuNjc1NTpcXHRcXHRcXHRiY24tXFx1MDAzZXByb2JlX3Jlc3BfbGVuID0gbmxhX2xlbihhdHRyc1tOTDgwMjExX0FUVFJfUFJPQkVfUkVTUF0pO1xcbjY3NTY6XFx0XFx0fVxcbjY3NTc6XFx0XFxuNjc1ODpcXHRcXHRpZiAoYXR0cnNbTkw4MDIxMV9BVFRSX0ZUTV9SRVNQT05ERVJdKSB7XFxuNjc1OTpcXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltOTDgwMjExX0ZUTV9SRVNQX0FUVFJfTUFYICsgMV07XFxuNjc2MDpcXHRcXG42NzYxOlxcdFxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YixcXG42NzYyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgTkw4MDIxMV9GVE1fUkVTUF9BVFRSX01BWCxcXG42NzYzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgYXR0cnNbTkw4MDIxMV9BVFRSX0ZUTV9SRVNQT05ERVJdLFxcbjY3NjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBOVUxMLCBOVUxMKTtcXG42NzY1OlxcdFxcdFxcdGlmIChlcnIpXFxuNjc2NjpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjY3Njc6XFx0XFxuNjc2ODpcXHRcXHRcXHRpZiAodGJbTkw4MDIxMV9GVE1fUkVTUF9BVFRSX0VOQUJMRURdIFxcdTAwMjZcXHUwMDI2XFxuNjc2OTpcXHRcXHRcXHQgICAgd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LFxcbjY3NzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfRU5BQkxFX0ZUTV9SRVNQT05ERVIpKVxcbjY3NzE6XFx0XFx0XFx0XFx0YmNuLVxcdTAwM2VmdG1fcmVzcG9uZGVyID0gMTtcXG42NzcyOlxcdFxcdFxcdGVsc2VcXG42NzczOlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG42Nzc0OlxcdFxcbjY3NzU6XFx0XFx0XFx0aWYgKHRiW05MODAyMTFfRlRNX1JFU1BfQVRUUl9MQ0ldKSB7XFxuNjc3NjpcXHRcXHRcXHRcXHRiY24tXFx1MDAzZWxjaSA9IG5sYV9kYXRhKHRiW05MODAyMTFfRlRNX1JFU1BfQVRUUl9MQ0ldKTtcXG42Nzc3OlxcdFxcdFxcdFxcdGJjbi1cXHUwMDNlbGNpX2xlbiA9IG5sYV9sZW4odGJbTkw4MDIxMV9GVE1fUkVTUF9BVFRSX0xDSV0pO1xcbjY3Nzg6XFx0XFx0XFx0fVxcbjY3Nzk6XFx0XFxuNjc4MDpcXHRcXHRcXHRpZiAodGJbTkw4MDIxMV9GVE1fUkVTUF9BVFRSX0NJVklDTE9DXSkge1xcbjY3ODE6XFx0XFx0XFx0XFx0YmNuLVxcdTAwM2VjaXZpY2xvYyA9IG5sYV9kYXRhKHRiW05MODAyMTFfRlRNX1JFU1BfQVRUUl9DSVZJQ0xPQ10pO1xcbjY3ODI6XFx0XFx0XFx0XFx0YmNuLVxcdTAwM2VjaXZpY2xvY19sZW4gPSBubGFfbGVuKHRiW05MODAyMTFfRlRNX1JFU1BfQVRUUl9DSVZJQ0xPQ10pO1xcbjY3ODM6XFx0XFx0XFx0fVxcbjY3ODQ6XFx0XFx0fSBlbHNlIHtcXG42Nzg1OlxcdFxcdFxcdGJjbi1cXHUwMDNlZnRtX3Jlc3BvbmRlciA9IC0xO1xcbjY3ODY6XFx0XFx0fVxcbjY3ODc6XFx0XFxuNjc4ODpcXHRcXHRpZiAoYXR0cnNbTkw4MDIxMV9BVFRSX0hFX0JTU19DT0xPUl0pIHtcXG42Nzg5OlxcdFxcdFxcdGVyciA9IG5sODAyMTFfcGFyc2VfaGVfYnNzX2NvbG9yKGF0dHJzW05MODAyMTFfQVRUUl9IRV9CU1NfQ09MT1JdLFxcbjY3OTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZiY24tXFx1MDAzZWhlX2Jzc19jb2xvcik7XFxuNjc5MTpcXHRcXHRcXHRpZiAoZXJyKVxcbjY3OTI6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG42NzkzOlxcdFxcdFxcdGJjbi1cXHUwMDNlaGVfYnNzX2NvbG9yX3ZhbGlkID0gdHJ1ZTtcXG42Nzk0OlxcdFxcdH1cXG42Nzk1OlxcdFxcbjY3OTY6XFx0XFx0aWYgKGF0dHJzW05MODAyMTFfQVRUUl9NQlNTSURfRUxFTVNdKSB7XFxuNjc5NzpcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfbWJzc2lkX2VsZW1zICptYnNzaWQgPVxcbjY3OTg6XFx0XFx0XFx0XFx0bmw4MDIxMV9wYXJzZV9tYnNzaWRfZWxlbXMoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LFxcbjY3OTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgYXR0cnNbTkw4MDIxMV9BVFRSX01CU1NJRF9FTEVNU10sXFxuNjgwMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBleHRhY2spO1xcbjY4MDE6XFx0XFxuNjgwMjpcXHRcXHRcXHRpZiAoSVNfRVJSKG1ic3NpZCkpXFxuNjgwMzpcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihtYnNzaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDowNS45NTM0NjI0MzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0ODA1OTE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gQmVhY29uIFBhcnNpbmcqKlxuXG5BbHJpZ2h0LCBJJ20gdHJhY2luZyB0aHJvdWdoIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgbm93LiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbnMgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhbGxvY2F0aW5nIG1lbW9yeS4gSSBzdXNwZWN0IEkgbWlnaHQgYmUgYWJsZSB0byBpZGVudGlmeSBzb21lIGluZWZmaWNpZW5jaWVzIG9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgdGhpcyB3YXkuIFVuZGVyc3RhbmRpbmcgaG93IGl0IGhhbmRsZXMgbWVtb3J5IGlzIGNyaXRpY2FsIHRvIGZpZ3VyaW5nIG91dCB0aGUgbnVhbmNlcyBvZiB0aGUgY29kZS4gTGV0J3Mgc2VlIGlmIHRoaXMgcmV2ZWFscyBhbnl0aGluZyBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMzQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjA5LjAwMTUyNjM2MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzQwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2ODA0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjgwNDpcXHRcXG42ODA1OlxcdFxcdFxcdGJjbi1cXHUwMDNlbWJzc2lkX2llcyA9IG1ic3NpZDtcXG42ODA2OlxcdFxcbjY4MDc6XFx0XFx0XFx0aWYgKGJjbi1cXHUwMDNlbWJzc2lkX2llcyBcXHUwMDI2XFx1MDAyNiBhdHRyc1tOTDgwMjExX0FUVFJfRU1BX1JOUl9FTEVNU10pIHtcXG42ODA4OlxcdFxcdFxcdFxcdHN0cnVjdCBjZmc4MDIxMV9ybnJfZWxlbXMgKnJuciA9XFxuNjgwOTpcXHRcXHRcXHRcXHRcXHRubDgwMjExX3BhcnNlX3Jucl9lbGVtcyhcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksXFxuNjgxMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRhdHRyc1tOTDgwMjExX0FUVFJfRU1BX1JOUl9FTEVNU10sXFxuNjgxMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRleHRhY2spO1xcbjY4MTI6XFx0XFxuNjgxMzpcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKHJucikpXFxuNjgxNDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihybnIpO1xcbjY4MTU6XFx0XFxuNjgxNjpcXHRcXHRcXHRcXHRpZiAocm5yIFxcdTAwMjZcXHUwMDI2IHJuci1cXHUwMDNlY250IFxcdTAwM2MgYmNuLVxcdTAwM2VtYnNzaWRfaWVzLVxcdTAwM2VjbnQpIHtcXG42ODE3OlxcdFxcdFxcdFxcdFxcdGtmcmVlKHJucik7XFxuNjgxODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42ODE5OlxcdFxcdFxcdFxcdH1cXG42ODIwOlxcdFxcbjY4MjE6XFx0XFx0XFx0XFx0YmNuLVxcdTAwM2VybnJfaWVzID0gcm5yO1xcbjY4MjI6XFx0XFx0XFx0fVxcbjY4MjM6XFx0XFx0fVxcbjY4MjQ6XFx0XFxuNjgyNTpcXHRcXHRlcnIgPSBubDgwMjExX2NhbGN1bGF0ZV9hcF9vcGVyYXRpb24oYXR0cnMsIGJjbiwgZXh0YWNrKTtcXG42ODI2OlxcdFxcdGlmIChlcnIpXFxuNjgyNzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjY4Mjg6XFx0XFxuNjgyOTpcXHRcXHRpZiAoYmNuLVxcdTAwM2VoZV9vcGVyIFxcdTAwMjZcXHUwMDI2IChjaGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9DSEFOX05PX0hFKSlcXG42ODMwOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG42ODMxOlxcdFxcbjY4MzI6XFx0XFx0aWYgKGJjbi1cXHUwMDNlZWh0X29wZXIgXFx1MDAyNlxcdTAwMjYgKGNoYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX0NIQU5fTk9fRUhUKSlcXG42ODMzOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG42ODM0OlxcdFxcbjY4MzU6XFx0XFx0aWYgKGJjbi1cXHUwMDNldWhyX29wZXIgXFx1MDAyNlxcdTAwMjYgKGNoYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX0NIQU5fTk9fVUhSKSlcXG42ODM2OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG42ODM3OlxcdFxcbjY4Mzg6XFx0XFx0cmV0dXJuIDA7XFxuNjgzOTpcXHR9XFxuNjg0MDpcXHRcXG42ODQxOlxcdHN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9oZV9vYnNzX3BkKHN0cnVjdCBubGF0dHIgKmF0dHJzLFxcbjY4NDI6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfaGVfb2Jzc19wZCAqaGVfb2Jzc19wZClcXG42ODQzOlxcdHtcXG42ODQ0OlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW05MODAyMTFfSEVfT0JTU19QRF9BVFRSX01BWCArIDFdO1xcbjY4NDU6XFx0XFx0aW50IGVycjtcXG42ODQ2OlxcdFxcbjY4NDc6XFx0XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfTUFYLCBhdHRycyxcXG42ODQ4OlxcdFxcdFxcdFxcdCAgICAgICBoZV9vYnNzX3BkX3BvbGljeSwgTlVMTCk7XFxuNjg0OTpcXHRcXHRpZiAoZXJyKVxcbjY4NTA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG42ODUxOlxcdFxcbjY4NTI6XFx0XFx0aWYgKCF0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9TUl9DVFJMXSlcXG42ODUzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjY4NTQ6XFx0XFxuNjg1NTpcXHRcXHRoZV9vYnNzX3BkLVxcdTAwM2Vzcl9jdHJsID0gbmxhX2dldF91OCh0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9TUl9DVFJMXSk7XFxuNjg1NjpcXHRcXG42ODU3OlxcdFxcdGlmICh0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9NSU5fT0ZGU0VUXSlcXG42ODU4OlxcdFxcdFxcdGhlX29ic3NfcGQtXFx1MDAzZW1pbl9vZmZzZXQgPVxcbjY4NTk6XFx0XFx0XFx0XFx0bmxhX2dldF91OCh0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9NSU5fT0ZGU0VUXSk7XFxuNjg2MDpcXHRcXHRpZiAodGJbTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfTUFYX09GRlNFVF0pXFxuNjg2MTpcXHRcXHRcXHRoZV9vYnNzX3BkLVxcdTAwM2VtYXhfb2Zmc2V0ID1cXG42ODYyOlxcdFxcdFxcdFxcdG5sYV9nZXRfdTgodGJbTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfTUFYX09GRlNFVF0pO1xcbjY4NjM6XFx0XFx0aWYgKHRiW05MODAyMTFfSEVfT0JTU19QRF9BVFRSX05PTl9TUkdfTUFYX09GRlNFVF0pXFxuNjg2NDpcXHRcXHRcXHRoZV9vYnNzX3BkLVxcdTAwM2Vub25fc3JnX21heF9vZmZzZXQgPVxcbjY4NjU6XFx0XFx0XFx0XFx0bmxhX2dldF91OCh0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9OT05fU1JHX01BWF9PRkZTRVRdKTtcXG42ODY2OlxcdFxcbjY4Njc6XFx0XFx0aWYgKGhlX29ic3NfcGQtXFx1MDAzZW1pbl9vZmZzZXQgXFx1MDAzZSBoZV9vYnNzX3BkLVxcdTAwM2VtYXhfb2Zmc2V0KVxcbjY4Njg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNjg2OTpcXHRcXG42ODcwOlxcdFxcdGlmICh0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9CU1NfQ09MT1JfQklUTUFQXSlcXG42ODcxOlxcdFxcdFxcdG1lbWNweShoZV9vYnNzX3BkLVxcdTAwM2Vic3NfY29sb3JfYml0bWFwLFxcbjY4NzI6XFx0XFx0XFx0ICAgICAgIG5sYV9kYXRhKHRiW05MODAyMTFfSEVfT0JTU19QRF9BVFRSX0JTU19DT0xPUl9CSVRNQVBdKSxcXG42ODczOlxcdFxcdFxcdCAgICAgICBzaXplb2YoaGVfb2Jzc19wZC1cXHUwMDNlYnNzX2NvbG9yX2JpdG1hcCkpO1xcbjY4NzQ6XFx0XFxuNjg3NTpcXHRcXHRpZiAodGJbTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfUEFSVElBTF9CU1NJRF9CSVRNQVBdKVxcbjY4NzY6XFx0XFx0XFx0bWVtY3B5KGhlX29ic3NfcGQtXFx1MDAzZXBhcnRpYWxfYnNzaWRfYml0bWFwLFxcbjY4Nzc6XFx0XFx0XFx0ICAgICAgIG5sYV9kYXRhKHRiW05MODAyMTFfSEVfT0JTU19QRF9BVFRSX1BBUlRJQUxfQlNTSURfQklUTUFQXSksXFxuNjg3ODpcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGhlX29ic3NfcGQtXFx1MDAzZXBhcnRpYWxfYnNzaWRfYml0bWFwKSk7XFxuNjg3OTpcXHRcXG42ODgwOlxcdFxcdGhlX29ic3NfcGQtXFx1MDAzZWVuYWJsZSA9IHRydWU7XFxuNjg4MTpcXHRcXG42ODgyOlxcdFxcdHJldHVybiAwO1xcbjY4ODM6XFx0fVxcbjY4ODQ6XFx0XFxuNjg4NTpcXHRzdGF0aWMgaW50IG5sODAyMTFfcGFyc2VfZmlsc19kaXNjb3Zlcnkoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbjY4ODY6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqYXR0cnMsXFxuNjg4NzpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfZmlsc19kaXNjb3ZlcnkgKmZkKVxcbjY4ODg6XFx0e1xcbjY4ODk6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbTkw4MDIxMV9GSUxTX0RJU0NPVkVSWV9BVFRSX01BWCArIDFdO1xcbjY4OTA6XFx0XFx0aW50IHJldDtcXG42ODkxOlxcdFxcbjY4OTI6XFx0XFx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksXFxuNjg5MzpcXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfRklMU19ESVNDT1ZFUlkpKVxcbjY4OTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNjg5NTpcXHRcXG42ODk2OlxcdFxcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIE5MODAyMTFfRklMU19ESVNDT1ZFUllfQVRUUl9NQVgsIGF0dHJzLFxcbjY4OTc6XFx0XFx0XFx0XFx0ICAgICAgIE5VTEwsIE5VTEwpO1xcbjY4OTg6XFx0XFx0aWYgKHJldClcXG42ODk5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuNjkwMDpcXHRcXG42OTAxOlxcdFxcdGlmICghdGJbTkw4MDIxMV9GSUxTX0RJU0NPVkVSWV9BVFRSX0lOVF9NSU5dIFxcdTAwMjZcXHUwMDI2XFxuNjkwMjpcXHRcXHQgICAgIXRiW05MODAyMTFfRklMU19ESVNDT1ZFUllfQVRUUl9JTlRfTUFYXSBcXHUwMDI2XFx1MDAyNlxcbjY5MDM6XFx0XFx0ICAgICF0YltOTDgwMjExX0ZJTFNfRElTQ09WRVJZX0FUVFJfVE1QTF0pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MDkuMDAyNDAzMjgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDEyNDU0OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBMZWFrIEZpeCBpbiBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyB0aGUgbG9naWMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBubDgwMjExX3BhcnNlX2JlYWNvbmAgYWxsb2NhdGVzIG1lbW9yeSBmb3IgYGJjbi1cdTAwM2VtYnNzaWRfaWVzYCBhbmQgYGJjbi1cdTAwM2VybnJfaWVzYCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggY2FsbHMgdG8gYG5sODAyMTFfcGFyc2VfbWJzc2lkX2VsZW1zYCBhbmQgYG5sODAyMTFfcGFyc2Vfcm5yX2VsZW1zYC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgcG90ZW50aWFsIGxlYWs6IGlmIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgc3VjY2VlZGVkLCBidXQgdGhlIHN1YnNlcXVlbnQgYGt6YWxsb2Nfb2Jqc2AgZmFpbGVkLCBtZW1vcnkgaW4gYHBhcmFtcy5iZWFjb25fbmV4dGAgd291bGQgYmUgbGVmdCBkYW5nbGluZy4gVGhlIHBhdGNoIGF0dGVtcHRzIHRvIGZpeCB0aGlzIGJ5IGFsbG9jYXRpbmcgYHRiYCBmaXJzdCBhbmQgdGhlbiwgaWYgYG5sODAyMTFfcGFyc2VfYmVhY29uYCAqZmFpbHMqLCBqdW1waW5nIHRvIGBvdXRgIHRvIGZyZWUgdGhlIGFsbG9jYXRlZCBgcGFyYW1zLmJlYWNvbl9uZXh0Lm1ic3NpZF9pZXNgIGFuZCBgcGFyYW1zLmJlYWNvbl9uZXh0LnJucl9pZXNgLiBUaGF0IHNlZW1lZCBsaWtlIGEgcmVhc29uYWJsZSBmaXguXG5cblRoZW4gSSByZWFsaXplZCwgaG9sZCBvbiBhIHNlY29uZCEgV2hhdCBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZhaWxzIGludGVybmFsbHkgKmJlZm9yZSogdGhlIHBhdGNoIGlzIGFwcGxpZWQ/IEZvciBpbnN0YW5jZSwgd2hhdCBpZiBgbmw4MDIxMV9jYWxjdWxhdGVfYXBfb3BlcmF0aW9uYCBmYWlscyB3aXRoaW4gYG5sODAyMTFfcGFyc2VfYmVhY29uYD8gSW4gdGhhdCBjYXNlLCBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIHJldHVybnMgYW4gZXJyb3IsIGJ1dCBpdCBkb2Vzbid0IGV4cGxpY2l0bHkgZnJlZSB0aGUgYWxsb2NhdGVkIGBiY24tXHUwMDNlbWJzc2lkX2llc2AgYW5kIGBiY24tXHUwMDNlcm5yX2llc2AuIEkgbmVlZCB0byByZXZpc2l0IHRoZSBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZ1bmN0aW9uIHRvIGNvbmZpcm0uXG5cbk9rYXksIGhlcmUncyB3aGF0IHRoZSBjb2RlIGxvb2tzIGxpa2U6XG5cbmBgYGNcblx0ZXJyID0gbmw4MDIxMV9jYWxjdWxhdGVfYXBfb3BlcmF0aW9uKGF0dHJzLCBiY24sIGV4dGFjayk7XG5cdGlmIChlcnIpXG5cdFx0cmV0dXJuIGVycjtcbmBgYFxuXG5ZdXAuIElmIGBubDgwMjExX2NhbGN1bGF0ZV9hcF9vcGVyYXRpb25gIGZhaWxzLCBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGp1c3QgcmV0dXJucyB0aGUgZXJyb3IgZGlyZWN0bHksIGxlYXZpbmcgdGhvc2Ugc3RydWN0dXJlcyBhbGxvY2F0ZWQhIFNvLCBpdCdzIHRoZSAqY2FsbGVyJ3MqIHJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgdGhvc2UgaWYgaXQgZmFpbHMuIEJlZm9yZSB0aGUgcGF0Y2gsIGBubDgwMjExX2NvbG9yX2NoYW5nZWAgZGlkIHNvbWV0aGluZyBsaWtlIHRoaXM6XG5cbmBgYGNcblx0ZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgaW5mby1cdTAwM2VhdHRycywgXHUwMDI2cGFyYW1zLmJlYWNvbl9uZXh0LFxuXHRcdFx0XHQgICB3ZGV2LVx1MDAzZWxpbmtzW3BhcmFtcy5saW5rX2lkXS5hcC5jaGFuZGVmLmNoYW4sXG5cdFx0XHRcdCAgIGluZm8tXHUwMDNlZXh0YWNrKTtcblx0aWYgKGVycilcblx0XHRyZXR1cm4gZXJyO1xuYGBgXG5cbkluIHRoZSBldmVudCBvZiBhbiBlcnJvciBmcm9tIGBubDgwMjExX3BhcnNlX2JlYWNvbmAsIGBwYXJhbXMuYmVhY29uX25leHRgIHdhcyBsZWFrZWQuIE5vdywgKndpdGgqIHRoZSBwYXRjaDpcblxuYGBgY1xuXHRlcnIgPSBubDgwMjExX3BhcnNlX2JlYWNvbihyZGV2LCBpbmZvLVx1MDAzZWF0dHJzLCBcdTAwMjZwYXJhbXMuYmVhY29uX25leHQsXG5cdFx0XHRcdCAgIHdkZXYtXHUwMDNlbGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmNoYW5kZWYuY2hhbixcblx0XHRcdFx0ICAgaW5mby1cdTAwM2VleHRhY2spO1xuXHRpZiAoZXJyKVxuXHRcdGdvdG8gb3V0O1xuYGBgXG5cbkFuZCBgb3V0YCAqZG9lcyogZnJlZSB0aGUgbWVtb3J5OlxuXG5gYGBjXG5vdXQ6XG5cdGtmcmVlKHBhcmFtcy5iZWFjb25fbmV4dC5tYnNzaWRfaWVzKTtcblx0a2ZyZWUocGFyYW1zLmJlYWNvbl9jb2xvcl9jaGFuZ2UubWJzc2lkX2llcyk7XG5cdGtmcmVlKHBhcmFtcy5iZWFjb25fbmV4dC5ybnJfaWVzKTtcblx0a2ZyZWUocGFyYW1zLmJlYWNvbl9jb2xvcl9jaGFuZ2Uucm5yX2llcyk7XG5cdGtmcmVlKHRiKTtcblx0cmV0dXJuIGVycjtcbmBgYFxuXG5ZZXMhIFRoYXQncyBpdC4gVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsuIFRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXguIEdpdmVuIHRoYXQgaXQncyBpbiBhIG5ldGxpbmsgaGFuZGxlciwgaXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMgb3IgdnVsbmVyYWJpbGl0aWVzIGludHJvZHVjZWQuIFNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGlzIGBubDgwMjExX2NvbG9yX2NoYW5nZWAuIFRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhcmUgYENPTkZJR19NQUM4MDIxMWAgYW5kIGBDT05GSUdfQ0ZHODAyMTFgLiBTbyBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIGJlbG9uZ3MgdG8gYGNmZzgwMjExYC4gSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGJvdGggYGNmZzgwMjExYCBhbmQgYG1hYzgwMjExYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjE5LjQxNDg2MzIzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0OTI1Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRkc4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTMtXFx0Ym9vbCBcXFwiZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjY4OmNvbmZpZyBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cXHRib29sIFxcXCJjZmc4MDIxMSBjZXJ0aWZpY2F0aW9uIG9udXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy04OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MC1cXHRib29sIFxcXCJyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTAwLVxcdGJvb2wgXFxcImFsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjExMTpjb25maWcgQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVxcdHN0cmluZyBcXFwiYWRkaXRpb25hbCByZWdkYiBrZXkgZGlyZWN0b3J5XFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cXHRib29sIFxcXCJjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMzU6Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNi1cXHRib29sIFxcXCJjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTU4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE1OTpjb25maWcgQ0ZHODAyMTFfREVGQVVMVF9QU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cXHRib29sIFxcXCJlbmFibGUgcG93ZXJzYXZlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTcwLVxcdGJvb2wgXFxcImNmZzgwMjExIERlYnVnRlMgZW50cmllc1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzc6Y29uZmlnIENGRzgwMjExX0NSREFfU1VQUE9SVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3OC1cXHRib29sIFxcXCJzdXBwb3J0IENSREFcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE4Nzpjb25maWcgQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJjZmc4MDIxMSB3aXJlbGVzcyBleHRlbnNpb25zIGNvbXBhdGliaWxpdHlcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTMtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MTkuNTE5Nzk2MzQ0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDk3MzkyNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgQ0ZHODAyMTFgIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIHJldm9sdmVzIGFyb3VuZCBgQ0ZHODAyMTFgLiBUaGF0J3MgdGhlIGNvcmUgb2Ygd2lyZWxlc3MgY29uZmlndXJhdGlvbiBpbiB0aGUgTGludXgga2VybmVsLCBhIHdlbGwtdHJvZGRlbiBwYXRoLiBCdXQgdG8gKnJlYWxseSogZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzaW11bGF0ZSB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb25zLCBJIGtub3cgSSdsbCBuZWVkIGBtYWM4MDIxMV9od3NpbWAuIFRoYXQncyB0aGUgZW11bGF0aW9uIGxheWVyIHRoYXQgbGV0cyBtZSBpbnRlcmFjdCB3aXRoIHRoaXMgY29yZSB3aXRob3V0IGFjdHVhbCBwaHlzaWNhbCB3aXJlbGVzcyBkZXZpY2VzLiBJdOKAmXMgdGhlIGtleSB0byBmdWxseSB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGFsbCBoYW5ncyB0b2dldGhlciwgZXNwZWNpYWxseSBmb3IgdGVzdCBjYXNlcyBhbmQgZGV2ZWxvcG1lbnQuXG5cbkxldCdzIG1ha2UgYWJzb2x1dGVseSBzdXJlIGBNQUM4MDIxMV9IV1NJTWAgaXMgZW5hYmxlZC4gVGltZSB0byB2ZXJpZnkgdGhhdCBhbmQgc2VlIGlmIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4gR290dGEgZ2V0IHRoYXQgZW52aXJvbm1lbnQgc2V0IHVwIGNvcnJlY3RseSBiZWZvcmUgSSBnbyBtdWNoIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDU3LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MjMuMTY5NTM5ODVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDY1NTM5MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExX0hXU0lNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjIzLjI3NDIwODcxM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjkwNTY5NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRmluZGluZyB0aGUgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiB3aGVyZSB3YXMgdGhhdCBzZXR0aW5nIHJlbGF0ZWQgdG8gdGhlIGhhcmR3YXJlIHNpbXVsYXRpb24gZm9yIG1hYzgwMjExIGFnYWluPyBIbW0sIGlmIG1lbW9yeSBzZXJ2ZXMsIGFuZCBpdCB1c3VhbGx5IGRvZXMgaW4gdGhlc2UgbWF0dGVycywgaXQncyB2ZXJ5IGxpa2VseSBuZXN0ZWQgZGVlcCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIHRoaW5nLCBJJ2QgYmV0IHRoZSBmYXJtIGl0J3MgcHJvYmFibHkgaGFuZ2luZyBvdXQgdW5kZXIgdGhlIG5ldHdvcmsgZHJpdmVycywgc3BlY2lmaWNhbGx5IHRoZSB3aXJlbGVzcyBzZWN0aW9uLCBhbmQgd2l0aGluIHRoYXQsIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0uIEFuZCBpZiBJJ20gdGhpbmtpbmcgYWxvbmcgdGhlIHJpZ2h0IGxpbmVzLCB0aGUgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpdHNlbGYgd291bGQgYmUgc29tZXRoaW5nIGxpa2UgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltL0tjb25maWdgLiBPciBzb21ldGhpbmcgc2ltaWxhci4gSSdtIHByZXR0eSBjZXJ0YWluIHRoYXQncyB0aGUgYXJlYSBJIG5lZWQgdG8gemVybyBpbiBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDoyNi41NjQ3ODEyNzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NTU0NTg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTFfSFdTSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MjYuODMwMzM1NDY0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzc2MzA1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNQUM4MDIxMV9IV1NJTSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgZm9jdXMgaXMgYE1BQzgwMjExX0hXU0lNYC4gVGhhdCdzIHRoZSBjb25maWcgaW4gcGxheSBoZXJlLiBNeSBtZW50YWwgbW9kZWwgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGhhcmR3YXJlIHNpbXVsYXRpb24gYXNwZWN0LCBhbmQgSSdtIGluc3RhbnRseSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciB0ZXN0aW5nIGFuZCBkZXZlbG9wbWVudC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIHRoZSBjb250ZXh0LlxuXG5Ib2xkIG9uLCB0aGUgYG5sODAyMTFfY29sb3JfY2hhbmdlYCBzeW1ib2wgaXMganVtcGluZyBvdXQgYXQgbWUgYXMgYSBrZXkgYXJlYSBvZiBpbnRlcmVzdC4gV2h5IGlzIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gZ2V0dGluZyBhdHRlbnRpb24gaW4gdGhpcyBjb250ZXh0PyBJdCdzIG1ha2luZyBtZSB3b25kZXIgaWYgdGhleSdyZSBsb29raW5nIGF0IGNvbG9yIHNwYWNlIGNoYW5nZXMsIHBvc3NpYmx5IGZvciBkZWJ1Z2dpbmcgb3Igc29tZSBoYXJkd2FyZSBkZXBlbmRlbnQgdGhpbmcuXG5cbk15IG1pbmQgaXMgbm93IHJhY2luZyB0b3dhcmRzIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMuIEJlZm9yZSBnb2luZyB0b28gZmFyIGRvd24gdGhhdCByYWJiaXQgaG9sZSwgSSBuZWVkIHRvIGtub3cgdGhlIGJpZ2dlciBwaWN0dXJlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIGZvciBvdGhlciBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgYXJlIHJlbGF0ZWQgdG8gdGhhdCBzcGVjaWZpYyBjYWxsOyBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIHRoZSBjaGFuZ2VzIGludm9sdmVkIGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgYXJlIGltcGFjdGVkIGJ5IHRoaXMgZm9jdXMgb24gY29sb3IgY2hhbmdlLiBJdCBtYWtlcyBtZSBjdXJpb3VzIGlmIGl0IGlzIHJlbGF0ZWQgdG8gYW4gaXNzdWUsIG9yIGFuIGVuaGFuY2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY4MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjMwLjg2Nzk2OTAyNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MDEyOTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sODAyMTFfY29sb3JfY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuYz0xODY2NT1zdGF0aWMgaW50IG5sODAyMTFfc2V0X3RpZF9jb25maWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg3MjAtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODcyMTpzdGF0aWMgaW50IG5sODAyMTFfY29sb3JfY2hhbmdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODcyMi17XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NTQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjAzNDctXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjAzNDg6XFx0XFx0LmRvaXQgPSBubDgwMjExX2NvbG9yX2NoYW5nZSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwMzQ5LVxcdFxcdC5mbGFncyA9IEdFTkxfVU5TX0FETUlOX1BFUk0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjMwLjk3Mzk4Nzk2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjUxNjg2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBsYXNlci1mb2N1c2VkOyBpdCdzIGp1c3QgdG91Y2hpbmcgYG5sODAyMTFfY29sb3JfY2hhbmdlYC4gVGhhdCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIEEgdGFyZ2V0ZWQgZml4IGxpa2UgdGhpcywgZXNwZWNpYWxseSB3aGVuIGl0J3MgYWJvdXQgYSBOZXRsaW5rIGhhbmRsZXIsIHNjcmVhbXMgXCJwb3RlbnRpYWwgZm9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucyxcIiBhbmQgdGhhdCdzIHNvbWV0aGluZyBJIG5lZWQgdG8gZXZhbHVhdGUuIEFuZCB0aGUgZGVzY3JpcHRpb24gaXMgcHJldHR5IGNsZWFyOiBpdCBhZGRyZXNzZXMgYSBtZW1vcnkgbGVhay4gVGhpcyB3YXJyYW50cyBhIGNsb3NlciBsb29rLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBpcyBpdCBmdXp6LXdvcnRoeT8gR2l2ZW4gdGhhdCBpdCdzIGEgYnVnIGZpeCB3aXRoaW4gYSBOZXRsaW5rIGhhbmRsZXIsIGFic29sdXRlbHkuIE5ldGxpbmsgaGFuZGxlcnMgYXJlIG5vdG9yaW91cyBmb3IgYmVpbmcgYXR0YWNrIHZlY3RvcnMsIGFuZCBtZW1vcnkgbGVha3Mgb2Z0ZW4gaW5kaWNhdGUgZGVlcGVyIGlzc3VlcyB0aGF0IGZ1enppbmcgY291bGQgZXhwb3NlLlxuXG5UaGUgY2VudHJhbCBzeW1ib2wgdG8gZm9jdXMgb24gaXMsIG9mIGNvdXJzZSwgYG5sODAyMTFfY29sb3JfY2hhbmdlYC4gSSdsbCBiZSBkaWdnaW5nIGludG8gdGhlIGNhbGwgZ3JhcGggYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLlxuXG5Ob3csIGZvciBjb25maWd1cmF0aW9uLCBgQ0ZHODAyMTFgIGlzIHJlbGV2YW50LCBvYnZpb3VzbHkuIEkgYWxzbyBzZWUgYE1BQzgwMjExX0hXU0lNYCBsaXN0ZWQuIFdhaXQgYSBzZWNvbmQsIGlzIGBNQUM4MDIxMV9IV1NJTWAgcmVsaWFudCBvbiBgTUFDODAyMTFgPyBBaCwgeWVzLiBJdCdzIGEgaGFyZHdhcmUgc2ltdWxhdG9yLCBzbyBpdCBtYWtlcyBzZW5zZSBpdCBkZXBlbmRzIG9uIHRoZSBjb3JlIE1BQzgwMjExIGZyYW1ld29yay4gR29vZCwgdGhhdCBuYXJyb3dzIGRvd24gdGhlIHNldHVwIHJlcXVpcmVtZW50cyBmb3IgdGVzdGluZyBzaWduaWZpY2FudGx5LiBJJ2xsIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBzZXR0aW5nIHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM0MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDozNi4yOTkxNTg5NjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzk4NTc0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uIE1BQzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc9MT1jb25maWcgTUFDODAyMTFfSFdTSU1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjM6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy00LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MzYuNDAzMTUwMTc2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NTMyODQ3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbnNpZGVyaW5nIHRoZSBBcmNoaXRlY3R1cmUqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY29tcHJlaGVuc2l2ZSBoZXJlLiBDbGVhcmx5LCB0aGlzIGRpc2N1c3Npb24gbmVlZHMgdG8gZW5jb21wYXNzIGBNQUM4MDIxMWAgdG9vLiBJdCdzIGEgZnVuZGFtZW50YWwgY29tcG9uZW50IGluIHRoaXMgYXJlYS4gQmVmb3JlIGdvaW5nIGZ1cnRoZXIsIGEgcXVpY2sgZGVwZW5kZW5jeSBjaGVjayBvbiBgTUFDODAyMTFgIGlzIGluIG9yZGVyLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cCBwcm9wZXJseSBhbmQgdGhhdCBJIGhhdmVuJ3QgbWlzc2VkIGFueSBjcnVjaWFsIGNvbm5lY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzkwOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjM4Ljk1NjQzNzk3OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQzNDQ0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTpjb25maWcgTUFDODAyMTFfSEFTX1JDXFxubmV0L21hYzgwMjExL0tjb25maWctMjItXFx0Ym9vbFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNDAtXFxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00Mi1cXHRib29sIFxcXCJNaW5zdHJlbFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjUwOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUXFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXFx0c3RyaW5nXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFxcXCJTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MDpjb25maWcgTUFDODAyMTFfS1VOSVRfVEVTVFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgbWFjODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNzgtXFxubmV0L21hYzgwMjExL0tjb25maWc6Nzk6Y29uZmlnIE1BQzgwMjExX0xFRFNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04MC1cXHRib29sIFxcXCJFbmFibGUgTEVEIHRyaWdnZXJzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctODctXFxubmV0L21hYzgwMjExL0tjb25maWc6ODg6Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cXHRib29sIFxcXCJFeHBvcnQgbWFjODAyMTEgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXFxubmV0L21hYzgwMjExL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiVHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiU2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTY6Y29uZmlnIE1BQzgwMjExX05PSU5MSU5FXFxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkRvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzEtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTMzLVxcdGJvb2wgXFxcIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDM6Y29uZmlnIE1BQzgwMjExX01MTUVfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDQtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtYW5hZ2VkIE1MTUUgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NDpjb25maWcgTUFDODAyMTFfU1RBX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTU1LVxcdGJvb2wgXFxcIlZlcmJvc2Ugc3RhdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjItXFxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cXHRib29sIFxcXCJWZXJib3NlIEhUIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzU6Y29uZmlnIE1BQzgwMjExX09DQl9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCJWZXJib3NlIE9DQiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTg2OmNvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTg3LVxcdGJvb2wgXFxcIlZlcmJvc2UgSUJTUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTYtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMDk6Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjI6Y29uZmlnIE1BQzgwMjExX01QQVRIX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjIzLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwYXRoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjgxOmNvbmZpZyBNQUM4MDIxMV9URExTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjgyLVxcdGJvb2wgXFxcIlZlcmJvc2UgVERMUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXFxubmV0L21hYzgwMjExL0tjb25maWc6MjkzOmNvbmZpZyBNQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cXHRib29sIFxcXCJFeHRyYSBzdGF0aXN0aWNzIGZvciBUWC9SWCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwOS1cXHRpbnQgXFxcIlN0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcXFwiIGlmIE1BQzgwMjExX0RFQlVHX01FTlVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MzkuMDIwNzg4MDE1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNjA0NjI2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gY29uZmlndXJpbmcgdGhpcyBzeXN0ZW0gcmVsYXRlZCB0byB3aXJlbGVzcyBuZXR3b3JraW5nLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyaW5nIGluIGBNQUM4MDIxMWAgYXMgdGhlIGNlbnRyYWwgcGllY2UuIEkgdGhlbiBuZWVkIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBgQ0ZHODAyMTFgIGFuZCBgTUFDODAyMTFfSFdTSU1gIGJlY2F1c2UgSSdtIHF1aXRlIHN1cmUgdGhleSdyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCB0aGlzLiBIbW0sIHdhaXQgYSBtb21lbnTigKYgSSBuZWVkIHRvIGNvbnNpZGVyIGBubDgwMjExX2NvbG9yX2NoYW5nZWAuIFRoYXQncyBhY3R1YWxseSB3aXRoaW4gYGNmZzgwMjExYCwgaXNuJ3QgaXQ/XG5cblJpZ2h0LCB0aGUga2V5IHBvaW50IHRvIHJlbWVtYmVyIGlzIHRoYXQgYGNmZzgwMjExYCBkb2Vzbid0ICphYnNvbHV0ZWx5KiBuZWVkIGBtYWM4MDIxMWAuIEl0J3MgcG9zc2libGUgdG8gdXNlIGBjZmc4MDIxMWAgaW5kZXBlbmRlbnRseSwgZXNwZWNpYWxseSBmb3IgZnVsbG1hYyBkZXZpY2VzLiBIb3dldmVyLCBgbWFjODAyMTFfaHdzaW1gLCB3aGljaCBJIGRlZmluaXRlbHkgd2FudCwgcmVxdWlyZXMgYE1BQzgwMjExYC4gU28sIGNvbmZpcm1pbmcgbXkgZWFybGllciBpbnR1aXRpb246IGBDRkc4MDIxMWAsIGBNQUM4MDIxMWAsIGFuZCBgTUFDODAyMTFfSFdTSU1gIGl0IGlzLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBnb29kIHRvIGluY2x1ZGUuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSdsbCBkb3VibGUgY2hlY2sgdGhhdCBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIGlzIHJlYWNoYWJsZS4gVGhhdCBoYW5kbGVyIGlzIHRpZWQgdG8gdGhlIGBOTDgwMjExX0NNRF9DT0xPUl9DSEFOR0VgIG5ldGxpbmsgY29tbWFuZC4gTG9va3MgbGlrZSBpdCBoYXMgZGVwZW5kZW5jaWVzIG9uIGByZGV2LVx1MDAzZW9wcy1cdTAwM2Vjb2xvcl9jaGFuZ2VgIGFuZCBgTkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1JgLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkLCBidXQganVzdCB0byBiZSBzdXJlOiBkb2VzIGBtYWM4MDIxMV9od3NpbWAgc3VwcG9ydCBgY29sb3JfY2hhbmdlYD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGludGVncmF0aW9uIGNvbXBsZXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjY1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjQ0LjM4MTI1NDQzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NTk5NDEzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2xvcl9jaGFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6NDQuNDk3ODY3ODU4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzE2NzM2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgY29sb3JfY2hhbmdlYCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgbWFjODAyMTFfaHdzaW1gIHN1cHBvcnRlZCAqYWxsKiB0aGUgc3RhbmRhcmQgZnVuY3Rpb25hbGl0eSwgYnV0IG5vdyBJJ20gcXVlc3Rpb25pbmcgd2hldGhlciBpdCBhY3R1YWxseSBpbXBsZW1lbnRzIGBjb2xvcl9jaGFuZ2VgLiBUaGF0IHdvdWxkIGJlIGEgaHVnZSBvdmVyc2lnaHQgaWYgaXQncyBtaXNzaW5nLCBzaW5jZSB0aGlzIGlzIGFuIGltcG9ydGFudCBwYXJ0IG9mIHRoZSA4MDIuMTEgc3RhbmRhcmQsIGVzcGVjaWFsbHkgZm9yIGFkdmFuY2VkIGZlYXR1cmVzLiBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgaW1tZWRpYXRlbHkuIEFscmlnaHQsIGxldCdzIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgYG1hYzgwMjExYCBvcGVyYXRpb25zIGFuZCBtYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBpcyBwcmVzZW50LiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBjb2xvcl9jaGFuZ2VgIGlzIGNvcnJlY3RseSBjYWxsZWQsIGFuZCB3b3JraW5nIGNvcnJlY3RseSwgb3IgZmlndXJlIG91dCAqd2h5KiBpdCdzIGFic2VudCBmcm9tIGBtYWM4MDIxMV9od3NpbWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTgzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6NDcuOTY5NTQ1MTE0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY4NDMxMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sb3JfY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2NmZy5jPTEwOTg9aWVlZTgwMjExX3NldF9wcm9iZV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTExMDAtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY3NhX3NldHRpbmdzICpjc2EsXFxubmV0L21hYzgwMjExL2NmZy5jOjExMDE6XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY29sb3JfY2hhbmdlX3NldHRpbmdzICpjY2EsXFxubmV0L21hYzgwMjExL2NmZy5jLTExMDItXFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rKVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTE0NjQ9aWVlZTgwMjExX2Fzc2lnbl9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtMTQ2Ny1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NzYV9zZXR0aW5ncyAqY3NhLFxcbm5ldC9tYWM4MDIxMS9jZmcuYzoxNDY4OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY29sb3JfY2hhbmdlX3NldHRpbmdzICpjY2EsXFxubmV0L21hYzgwMjExL2NmZy5jLTE0NjktXFx0XFx0XFx0dTY0ICpjaGFuZ2VkKVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTE5Mzc9c3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX2JlYWNvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTE5NTktXFx0ICovXFxubmV0L21hYzgwMjExL2NmZy5jOjE5NjA6XFx0aWYgKGxpbmtfY29uZi1cXHUwMDNlY3NhX2FjdGl2ZSB8fCBsaW5rX2NvbmYtXFx1MDAzZWNvbG9yX2NoYW5nZV9hY3RpdmUpXFxubmV0L21hYzgwMjExL2NmZy5jLTE5NjEtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz0yMDExPXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0b3BfYXAoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMDQ1LVxcdGxpbmtfY29uZi1cXHUwMDNlY3NhX2FjdGl2ZSA9IGZhbHNlO1xcbm5ldC9tYWM4MDIxMS9jZmcuYzoyMDQ2OlxcdGxpbmtfY29uZi1cXHUwMDNlY29sb3JfY2hhbmdlX2FjdGl2ZSA9IGZhbHNlO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMDQ3LVxcdGllZWU4MDIxMV92aWZfdW5ibG9ja19xdWV1ZXNfY3NhKHNkYXRhKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz00NTYzPXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9jc2FfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rX2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY5My1cXG5uZXQvbWFjODAyMTEvY2ZnLmM6NDY5NDpzdGF0aWMgdm9pZCBpZWVlODAyMTFfY29sb3JfY2hhbmdlX2Fib3J0KHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rKVxcbm5ldC9tYWM4MDIxMS9jZmcuYy00Njk1LXtcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NDY5NjpcXHRsaW5rLVxcdTAwM2Vjb25mLVxcdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlID0gZmFsc2U7XFxubmV0L21hYzgwMjExL2NmZy5jLTQ2OTctXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY5OS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM6NDcwMDpcXHRjZmc4MDIxMV9jb2xvcl9jaGFuZ2VfYWJvcnRlZF9ub3RpZnkobGluay1cXHUwMDNlc2RhdGEtXFx1MDAzZWRldiwgbGluay1cXHUwMDNlbGlua19pZCk7XFxubmV0L21hYzgwMjExL2NmZy5jLTQ3MDEtfVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTQ3MDQ9X19pZWVlODAyMTFfY2hhbm5lbF9zd2l0Y2goc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy00NzkxLVxcdC8qIGlmIHRoZXJlIGlzIGEgY29sb3IgY2hhbmdlIGluIHByb2dyZXNzLCBhYm9ydCBpdCAqL1xcbm5ldC9tYWM4MDIxMS9jZmcuYzo0NzkyOlxcdGlmIChsaW5rX2NvbmYtXFx1MDAzZWNvbG9yX2NoYW5nZV9hY3RpdmUpXFxubmV0L21hYzgwMjExL2NmZy5jOjQ3OTM6XFx0XFx0aWVlZTgwMjExX2NvbG9yX2NoYW5nZV9hYm9ydChsaW5rX2RhdGEpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy00Nzk0LVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTU1MDg9c3RhdGljIGludFxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NTA5OmllZWU4MDIxMV9zZXRfYWZ0ZXJfY29sb3JfY2hhbmdlX2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayxcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTUxMC1cXHRcXHRcXHRcXHRcXHR1NjQgKmNoYW5nZWQpXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTUzOT1zdGF0aWMgaW50XFxubmV0L21hYzgwMjExL2NmZy5jOjU1NDA6aWVlZTgwMjExX3NldF9jb2xvcl9jaGFuZ2VfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NTQxOlxcdFxcdFxcdFxcdCAgc3RydWN0IGNmZzgwMjExX2NvbG9yX2NoYW5nZV9zZXR0aW5ncyAqcGFyYW1zLFxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NTQyLVxcdFxcdFxcdFxcdCAgdTY0ICpjaGFuZ2VkKVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU1NDQtXFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBsaW5rLVxcdTAwM2VzZGF0YTtcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTU0NTpcXHRzdHJ1Y3QgaWVlZTgwMjExX2NvbG9yX2NoYW5nZV9zZXR0aW5ncyBjb2xvcl9jaGFuZ2UgPSB7fTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTU0Ni1cXHRpbnQgZXJyO1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU1NTctXFxubmV0L21hYzgwMjExL2NmZy5jOjU1NTg6XFx0XFx0Y29sb3JfY2hhbmdlLmNvdW50ZXJfb2Zmc2V0X2JlYWNvbiA9XFxubmV0L21hYzgwMjExL2NmZy5jLTU1NTktXFx0XFx0XFx0cGFyYW1zLVxcdTAwM2Vjb3VudGVyX29mZnNldF9iZWFjb247XFxubmV0L21hYzgwMjExL2NmZy5jOjU1NjA6XFx0XFx0Y29sb3JfY2hhbmdlLmNvdW50ZXJfb2Zmc2V0X3ByZXNwID1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTU2MS1cXHRcXHRcXHRwYXJhbXMtXFx1MDAzZWNvdW50ZXJfb2Zmc2V0X3ByZXNwO1xcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NTYyOlxcdFxcdGNvbG9yX2NoYW5nZS5jb3VudCA9IHBhcmFtcy1cXHUwMDNlY291bnQ7XFxubmV0L21hYzgwMjExL2NmZy5jLTU1NjMtXFxubmV0L21hYzgwMjExL2NmZy5jLTU1NjQtXFx0XFx0ZXJyID0gaWVlZTgwMjExX2Fzc2lnbl9iZWFjb24oc2RhdGEsIGxpbmssXFxubmV0L21hYzgwMjExL2NmZy5jOjU1NjU6XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnBhcmFtcy1cXHUwMDNlYmVhY29uX2NvbG9yX2NoYW5nZSxcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTU2NjpcXHRcXHRcXHRcXHRcXHQgICAgICBOVUxMLCBcXHUwMDI2Y29sb3JfY2hhbmdlLCBjaGFuZ2VkKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTU2Ny1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTU1Nzk9c3RhdGljIHZvaWRcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTU4MDppZWVlODAyMTFfY29sb3JfY2hhbmdlX2Jzc19jb25maWdfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NTgxLVxcdFxcdFxcdFxcdFxcdCB1OCBjb2xvciwgaW50IGVuYWJsZSwgdTY0IGNoYW5nZWQpXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYwOS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTYxMDpzdGF0aWMgaW50IGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfZmluYWxpemUoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmspXFxubmV0L21hYzgwMjExL2NmZy5jLTU2MTEte1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU2MTgtXFxubmV0L21hYzgwMjExL2NmZy5jOjU2MTk6XFx0bGluay1cXHUwMDNlY29uZi1cXHUwMDNlY29sb3JfY2hhbmdlX2FjdGl2ZSA9IGZhbHNlO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy01NjIwLVxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjIxOlxcdGVyciA9IGllZWU4MDIxMV9zZXRfYWZ0ZXJfY29sb3JfY2hhbmdlX2JlYWNvbihsaW5rLCBcXHUwMDI2Y2hhbmdlZCk7XFxubmV0L21hYzgwMjExL2NmZy5jLTU2MjItXFx0aWYgKGVycikge1xcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjIzOlxcdFxcdGNmZzgwMjExX2NvbG9yX2NoYW5nZV9hYm9ydGVkX25vdGlmeShzZGF0YS1cXHUwMDNlZGV2LCBsaW5rLVxcdTAwM2VsaW5rX2lkKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYyNC1cXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU2MjYtXFxubmV0L21hYzgwMjExL2NmZy5jOjU2Mjc6XFx0aWVlZTgwMjExX2NvbG9yX2NoYW5nZV9ic3NfY29uZmlnX25vdGlmeShsaW5rLFxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjI4OlxcdFxcdFxcdFxcdFxcdFxcdCBsaW5rLVxcdTAwM2Vjb25mLVxcdTAwM2Vjb2xvcl9jaGFuZ2VfY29sb3IsXFxubmV0L21hYzgwMjExL2NmZy5jLTU2MjktXFx0XFx0XFx0XFx0XFx0XFx0IDEsIGNoYW5nZWQpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjMwOlxcdGNmZzgwMjExX2NvbG9yX2NoYW5nZV9ub3RpZnkoc2RhdGEtXFx1MDAzZWRldiwgbGluay1cXHUwMDNlbGlua19pZCk7XFxubmV0L21hYzgwMjExL2NmZy5jLTU2MzEtXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYzNC1cXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTYzNTp2b2lkIGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfZmluYWxpemVfd29yayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NjM2LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYzOS1cXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEsXFxubmV0L21hYzgwMjExL2NmZy5jOjU2NDA6XFx0XFx0XFx0ICAgICBjb2xvcl9jaGFuZ2VfZmluYWxpemVfd29yayk7XFxubmV0L21hYzgwMjExL2NmZy5jLTU2NDEtXFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBsaW5rLVxcdTAwM2VzZGF0YTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NjQ3LVxcdC8qIEFQIG1pZ2h0IGhhdmUgYmVlbiBzdG9wcGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBsb2NrLiAqL1xcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjQ4OlxcdGlmICghbGlua19jb25mLVxcdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlKVxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NjQ5LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NjUzLVxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjU0OlxcdGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfZmluYWxpemUobGluayk7XFxubmV0L21hYzgwMjExL2NmZy5jLTU2NTUtfVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTU2NTc9dm9pZCBpZWVlODAyMTFfY29sb3JfY29sbGlzaW9uX2RldGVjdGlvbl93b3JrKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY2OC1cXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTY2OTp2b2lkIGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfZmluaXNoKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4IGxpbmtfaWQpXFxubmV0L21hYzgwMjExL2NmZy5jLTU2NzAte1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU2ODUtXFx0d2lwaHlfd29ya19xdWV1ZShzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1Njg2OlxcdFxcdFxcdCBcXHUwMDI2bGluay1cXHUwMDNlY29sb3JfY2hhbmdlX2ZpbmFsaXplX3dvcmspO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy01Njg3LVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU2ODktfVxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjkwOkVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfZmluaXNoKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY5MS1cXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz01NjkzPWllZWU4MDIxMV9vYnNzX2NvbG9yX2NvbGxpc2lvbl9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NzA5LVxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NzEwOlxcdGlmIChsaW5rLVxcdTAwM2Vjb25mLVxcdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlIHx8IGxpbmstXFx1MDAzZWNvbmYtXFx1MDAzZWNzYV9hY3RpdmUpIHtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTcxMS1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz01NzMzPXN0YXRpYyBpbnRcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTczNDppZWVlODAyMTFfY29sb3JfY2hhbmdlKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L21hYzgwMjExL2NmZy5jOjU3MzU6XFx0XFx0ICAgICAgIHN0cnVjdCBjZmc4MDIxMV9jb2xvcl9jaGFuZ2Vfc2V0dGluZ3MgKnBhcmFtcylcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTczNi17XFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTc2MS1cXHQgKi9cXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTc2MjpcXHRpZiAobGlua19jb25mLVxcdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlIHx8IGxpbmtfY29uZi1cXHUwMDNlY3NhX2FjdGl2ZSkge1xcbm5ldC9tYWM4MDIxMS9jZmcuYy01NzYzLVxcdFxcdGVyciA9IC1FQlVTWTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NzcyLVxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NzczOlxcdGVyciA9IGllZWU4MDIxMV9zZXRfY29sb3JfY2hhbmdlX2JlYWNvbihsaW5rLCBwYXJhbXMsIFxcdTAwMjZjaGFuZ2VkKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTc3NC1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU3NzYtXFxubmV0L21hYzgwMjExL2NmZy5jOjU3Nzc6XFx0bGlua19jb25mLVxcdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlID0gdHJ1ZTtcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTc3ODpcXHRsaW5rX2NvbmYtXFx1MDAzZWNvbG9yX2NoYW5nZV9jb2xvciA9IHBhcmFtcy1cXHUwMDNlY29sb3I7XFxubmV0L21hYzgwMjExL2NmZy5jLTU3NzktXFxubmV0L21hYzgwMjExL2NmZy5jOjU3ODA6XFx0Y2ZnODAyMTFfY29sb3JfY2hhbmdlX3N0YXJ0ZWRfbm90aWZ5KHNkYXRhLVxcdTAwM2VkZXYsIHBhcmFtcy1cXHUwMDNlY291bnQsIGxpbmtfaWQpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy01NzgxLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NzgyLVxcdGlmIChjaGFuZ2VkKVxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NzgzOlxcdFxcdGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfYnNzX2NvbmZpZ19ub3RpZnkobGluaywgMCwgMCwgY2hhbmdlZCk7XFxubmV0L21hYzgwMjExL2NmZy5jLTU3ODQtXFx0ZWxzZVxcbm5ldC9tYWM4MDIxMS9jZmcuYy01Nzg1LVxcdFxcdC8qIGlmIHRoZSBiZWFjb24gZGlkbid0IGNoYW5nZSwgd2UgY2FuIGZpbmFsaXplIGltbWVkaWF0ZWx5ICovXFxubmV0L21hYzgwMjExL2NmZy5jOjU3ODY6XFx0XFx0aWVlZTgwMjExX2NvbG9yX2NoYW5nZV9maW5hbGl6ZShsaW5rKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTc4Ny1cXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz01OTkxPWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy02MDk0LVxcdC5zZXRfc2FyX3NwZWNzID0gaWVlZTgwMjExX3NldF9zYXJfc3BlY3MsXFxubmV0L21hYzgwMjExL2NmZy5jOjYwOTU6XFx0LmNvbG9yX2NoYW5nZSA9IGllZWU4MDIxMV9jb2xvcl9jaGFuZ2UsXFxubmV0L21hYzgwMjExL2NmZy5jLTYwOTYtXFx0LnNldF9yYWRhcl9iYWNrZ3JvdW5kID0gaWVlZTgwMjExX3NldF9yYWRhcl9iYWNrZ3JvdW5kLFxcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MjY0PXN0cnVjdCBpZWVlODAyMTFfY3NhX3NldHRpbmdzIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTI3My1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyNzQ6c3RydWN0IGllZWU4MDIxMV9jb2xvcl9jaGFuZ2Vfc2V0dGluZ3Mge1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTI3NS1cXHR1MTYgY291bnRlcl9vZmZzZXRfYmVhY29uO1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTA5OT1zdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMTE4LVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjExMTk6XFx0c3RydWN0IHdpcGh5X3dvcmsgY29sb3JfY2hhbmdlX2ZpbmFsaXplX3dvcms7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTEyMC1cXHRzdHJ1Y3Qgd2lwaHlfZGVsYXllZF93b3JrIGNvbG9yX2NvbGxpc2lvbl9kZXRlY3Rfd29yaztcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTIxNjU9aW50IGllZWU4MDIxMV9jaGFubmVsX3N3aXRjaChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjE2OC0vKiBjb2xvciBjaGFuZ2UgaGFuZGxpbmcgKi9cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMTY5OnZvaWQgaWVlZTgwMjExX2NvbG9yX2NoYW5nZV9maW5hbGl6ZV93b3JrKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjE3MC1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB3aXBoeV93b3JrICp3b3JrKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTQ3OT1zdGF0aWMgdm9pZCBpZWVlODAyMTFfZG9fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCBnb2luZ19kb3duKVxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtNTczLVxcdHdpcGh5X3dvcmtfY2FuY2VsKGxvY2FsLVxcdTAwM2Vody53aXBoeSxcXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo1NzQ6XFx0XFx0XFx0ICBcXHUwMDI2c2RhdGEtXFx1MDAzZWRlZmxpbmsuY29sb3JfY2hhbmdlX2ZpbmFsaXplX3dvcmspO1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTU3NS1cXHR3aXBoeV9ocnRpbWVyX3dvcmtfY2FuY2VsKGxvY2FsLVxcdTAwM2Vody53aXBoeSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9saW5rLmM9OTU9dm9pZCBpZWVlODAyMTFfbGlua19pbml0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL2xpbmsuYy0xMzEtXFx0XFx0XFx0aWVlZTgwMjExX2NzYV9maW5hbGl6ZV93b3JrKTtcXG5uZXQvbWFjODAyMTEvbGluay5jOjEzMjpcXHR3aXBoeV93b3JrX2luaXQoXFx1MDAyNmxpbmstXFx1MDAzZWNvbG9yX2NoYW5nZV9maW5hbGl6ZV93b3JrLFxcbm5ldC9tYWM4MDIxMS9saW5rLmM6MTMzOlxcdFxcdFxcdGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfZmluYWxpemVfd29yayk7XFxubmV0L21hYzgwMjExL2xpbmsuYy0xMzQtXFx0d2lwaHlfZGVsYXllZF93b3JrX2luaXQoXFx1MDAyNmxpbmstXFx1MDAzZWNvbG9yX2NvbGxpc2lvbl9kZXRlY3Rfd29yayxcXG4tLVxcbm5ldC9tYWM4MDIxMS9saW5rLmM9MTYyPXZvaWQgaWVlZTgwMjExX2xpbmtfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaylcXG4tLVxcbm5ldC9tYWM4MDIxMS9saW5rLmMtMTY5LVxcdHdpcGh5X3dvcmtfY2FuY2VsKGxpbmstXFx1MDAzZXNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxubmV0L21hYzgwMjExL2xpbmsuYzoxNzA6XFx0XFx0XFx0ICBcXHUwMDI2bGluay1cXHUwMDNlY29sb3JfY2hhbmdlX2ZpbmFsaXplX3dvcmspO1xcbm5ldC9tYWM4MDIxMS9saW5rLmMtMTcxLVxcdHdpcGh5X3dvcmtfY2FuY2VsKGxpbmstXFx1MDAzZXNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYz0zNDc5PWllZWU4MDIxMV9yeF9jaGVja19ic3NfY29sb3JfY29sbGlzaW9uKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYy0zNDkzLVxcdGJzc19jb25mID0gcngtXFx1MDAzZWxpbmstXFx1MDAzZWNvbmY7XFxubmV0L21hYzgwMjExL3J4LmM6MzQ5NDpcXHRpZiAoYnNzX2NvbmYtXFx1MDAzZWNzYV9hY3RpdmUgfHwgYnNzX2NvbmYtXFx1MDAzZWNvbG9yX2NoYW5nZV9hY3RpdmUgfHxcXG5uZXQvbWFjODAyMTEvcnguYy0zNDk1LVxcdCAgICAhYnNzX2NvbmYtXFx1MDAzZWhlX2Jzc19jb2xvci5lbmFibGVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDo0OC4wODY0MDgyODdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE5NjEyODYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBCU1MgQ29sb3IgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyAqbWFjODAyMTEqIGltcGxlbWVudHMgdGhlICpjb2xvcl9jaGFuZ2UqIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSB0aHJvdWdoIGBpZWVlODAyMTFfY29sb3JfY2hhbmdlYC4gVGhhdCBtYWtlcyBzZW5zZS4gQW5kICptYWM4MDIxMV9od3NpbSogaXMgYnVpbHQgb24gdG9wIG9mICptYWM4MDIxMSosIG1lYW5pbmcgaXQgaW5oZXJlbnRseSB1c2VzIHRoZSAqbWFjODAyMTEqIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucy4gVGhpcyBpbmNsdWRlcyByZWdpc3RlcmluZyBgbWFjODAyMTFfY29uZmlnX29wc2AsIGFuZCBpbXBvcnRhbnRseSwgdGhlIGAuY29sb3JfY2hhbmdlYCBmdW5jdGlvbiBwb2ludGVyIGlzIGNvcnJlY3RseSBhc3NpZ25lZCB0byBgaWVlZTgwMjExX2NvbG9yX2NoYW5nZWAgd2l0aGluIHRoYXQgc3RydWN0dXJlLlxuXG5BaGEsIGFuZCAqbWFjODAyMTFfaHdzaW0qIHJlZ2lzdGVycyBhICp3aXBoeSogd2l0aCAqbWFjODAyMTEqLiBUaGVyZWZvcmUsIGl0IHNob3VsZCBpbmhlcml0IHRob3NlICptYWM4MDIxMV9jb25maWdfb3BzKi4gU28sICpubDgwMjExX2NvbG9yX2NoYW5nZSogKnNob3VsZCogYmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIHRocm91Z2ggKm1hYzgwMjExX2h3c2ltKiB0aGVuLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHdpdGggYSBjaGVjay4uLiBJIHRoaW5rIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoZSBkaXJlY3QgcGF0aCBub3cuXG5cbk5vdywgSSdtIHRoaW5raW5nIEkgc2hvdWxkIGxvb2sgYXQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciAqbWFjODAyMTFfaHdzaW0qIG9yICpOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUiouIEkga25vdyB0aGF0IHRoZSBmZWF0dXJlICpOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUiogaXMganVzdCBhIGZlYXR1cmUgZmxhZy4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiAqbWFjODAyMTEqIGl0c2VsZiBzZXRzIHRoaXMgZmxhZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzOTIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6NTMuMjgyNTM5ODc4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc2MjQyMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvcnguYz0zNDc5PWllZWU4MDIxMV9yeF9jaGVja19ic3NfY29sb3JfY29sbGlzaW9uKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYy0zNDg2LVxcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQocngtXFx1MDAzZWxvY2FsLVxcdTAwM2Vody53aXBoeSxcXG5uZXQvbWFjODAyMTEvcnguYzozNDg3OlxcdFxcdFxcdFxcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1IpKVxcbm5ldC9tYWM4MDIxMS9yeC5jLTM0ODgtXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDo1My4zOTAxNjg1MjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMjU2NDMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOlxuXG4qKkRlYnVnZ2luZyBhIE1pc3NpbmcgQlNTIENvbG9yIEZlYXR1cmUqKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgaXQgdHJ1ZSB0aGF0IGBtYWM4MDIxMWAgZG9lc24ndCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SYCBleHRlbnNpb24gZmVhdHVyZT8gVGhhdCBzZWVtcyBvZGQsIGdpdmVuIGhvdyBjcnVjaWFsIEJTUyBjb2xvciBpcyBiZWNvbWluZyBpbiBtb2Rlcm4gODAyLjExIGRlcGxveW1lbnRzLiBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4gTGV0J3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIGRldGVybWluZSBleGFjdGx5ICp3aGVyZSogdGhpcyBmbGFnIGlzIHNldCAob3IsIGFzIHRoZSBjYXNlIG1heSBiZSwgKmlzbid0KiBzZXQpLiBXZSBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIGFuZCBhbnkgcG90ZW50aWFsIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcyBmbGFnJ3Mgc3RhdGUgd2l0aGluIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGRlYnVnZ2VyIGFuZCBzdGFydCB0cmFjaW5nIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTcyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6NTcuMjEyNzM1MTM2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTAwNzUzMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jPTEwNDQyPXN0YXRpYyBpbnQgX19hdGgxMWtfbWFjX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMWsgKmFyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYy0xMDU5OC1cXHRcXHR3aXBoeV9leHRfZmVhdHVyZV9zZXQoYXItXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jOjEwNTk5OlxcdFxcdFxcdFxcdCAgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jLTEwNjAwLVxcdFxcdGllZWU4MDIxMV9od19zZXQoYXItXFx1MDAzZWh3LCBERVRFQ1RTX0NPTE9SX0NPTExJU0lPTik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jPTE0Nzc0PXN0YXRpYyBpbnQgYXRoMTJrX21hY19od19yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX2h3ICphaClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQ5NTYtXFx0XFx0ICAgICBhYi1cXHUwMDNld21pX2FiLnN2Y19tYXApKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYzoxNDk1NzpcXHRcXHR3aXBoeV9leHRfZmVhdHVyZV9zZXQod2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE0OTU4LVxcdFxcdGllZWU4MDIxMV9od19zZXQoaHcsIERFVEVDVFNfQ09MT1JfQ09MTElTSU9OKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2luaXQuYz0zNTg9bXQ3OTE1X2luaXRfd2lwaHkoc3RydWN0IG10NzkxNV9waHkgKnBoeSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2luaXQuYy0zODctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvaW5pdC5jOjM4ODpcXHR3aXBoeV9leHRfZmVhdHVyZV9zZXQod2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9pbml0LmMtMzg5LVxcdHdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9WSFRfSUJTUyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9pbml0LmM9NDc4PW10Nzk5Nl9pbml0X3dpcGh5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgbXRrX3dlZF9kZXZpY2UgKndlZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L2luaXQuYy01MTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvaW5pdC5jOjUxNjpcXHR3aXBoeV9leHRfZmVhdHVyZV9zZXQod2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9pbml0LmMtNTE3LVxcdHdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9WSFRfSUJTUyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz01NjUwPXN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01OTM2LVxcdHdpcGh5X2V4dF9mZWF0dXJlX3NldChody1cXHUwMDNld2lwaHksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NTkzNzpcXHRcXHRcXHQgICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTkzOC1cXHR3aXBoeV9leHRfZmVhdHVyZV9zZXQoaHctXFx1MDAzZXdpcGh5LFxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaD02ODEwPWVudW0gbmw4MDIxMV9mZWF0dXJlX2ZsYWdzIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgtNzAxNi0gKlxcbmluY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmg6NzAxNzogKiBATkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1I6IFRoZSBkcml2ZXIgc3VwcG9ydHMgQlNTIGNvbG9yIGNvbGxpc2lvblxcbmluY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgtNzAxOC0gKlxcdGRldGVjdGlvbiBhbmQgY2hhbmdlIGFubm91bmNlbW50cy5cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmg9NzA5MT1lbnVtIG5sODAyMTFfZXh0X2ZlYXR1cmVfaW5kZXgge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaC03MTUxLVxcdE5MODAyMTFfRVhUX0ZFQVRVUkVfUFJPVF9SQU5HRV9ORUdPX0FORF9NRUFTVVJFLFxcbmluY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmg6NzE1MjpcXHROTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUixcXG5pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oLTcxNTMtXFx0Tkw4MDIxMV9FWFRfRkVBVFVSRV9GSUxTX0NSWVBUT19PRkZMT0FELFxcbi0tXFxubmV0L21hYzgwMjExL3J4LmM9MzQ3OT1pZWVlODAyMTFfcnhfY2hlY2tfYnNzX2NvbG9yX2NvbGxpc2lvbihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbi0tXFxubmV0L21hYzgwMjExL3J4LmMtMzQ4Ni1cXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHJ4LVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxubmV0L21hYzgwMjExL3J4LmM6MzQ4NzpcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SKSlcXG5uZXQvbWFjODAyMTEvcnguYy0zNDg4LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTg3MjE9c3RhdGljIGludCBubDgwMjExX2NvbG9yX2NoYW5nZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODczNC1cXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NzM1OlxcdFxcdFxcdFxcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1IpKVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg3MzYtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMTowMC4xMTM0OTY2NjhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc2NDE2NTcxMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgbWFjODAyMTEgTWVtb3J5IExlYWsgRml4KipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBpdCBzZWVtcyB0aGUgYE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SYCBmZWF0dXJlIGlzIHNldCB3aXRoaW4gYG1hYzgwMjExX2h3c2ltX21haW4uY2AsIG1lYW5pbmcgaXQncyBkZWZpbml0ZWx5IGFjY2Vzc2libGUgdGhyb3VnaCBgbWFjODAyMTFfaHdzaW1gLiBUaGUgY3JpdGljYWwgY29uZmlncyBJIG5lZWQgdG8gaGF2ZSBlbmFibGVkIGFyZSBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYC4gVGhlIGZ1bmN0aW9uIEknbSB6ZXJvaW5nIGluIG9uIGlzIGBubDgwMjExX2NvbG9yX2NoYW5nZWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgY2hhbmdlIGFpbWVkIGF0IGZpeGluZyBhIG1lbW9yeSBsZWFrIGluIGEgcmVhY2hhYmxlIE5ldGxpbmsgaGFuZGxlci5cblxuSSd2ZSBjb25maXJtZWQgdGhlIGNvbmZpZ3MgYWdhaW47IHRoZXkgYXJlIGluZGVlZCBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYC5cblxuTm93LCByZXZpZXdpbmcgdGhlIHBhdGNoIGl0c2VsZi4uLiBJIHNlZSB0aGF0IGluIHRoZSBvcmlnaW5hbCBjb2RlLCBgdGJgIChwcmVzdW1hYmx5IGEgdGFibGUgb3IgYnVmZmVyKSB3YXMgYmVpbmcgYWxsb2NhdGVkICphZnRlciogY2FsbGluZyBgbmw4MDIxMV9wYXJzZV9iZWFjb25gLiBJZiB0aGUgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBmdW5jdGlvbiBmYWlsZWQsIGl0IHdvdWxkIGp1c3QgcmV0dXJuIHRoZSBlcnJvciwgbGVhdmluZyB3aGF0ZXZlciBtZW1vcnkgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBhbGxvY2F0ZWQgYmVoaW5k4oCUYSBsZWFrLiBGdXJ0aGVybW9yZSwgZXZlbiBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIHN1Y2NlZWRlZCBidXQgdGhlIHN1YnNlcXVlbnQgYGt6YWxsb2Nfb2Jqc2AgZmFpbGVkLCBpdCB3b3VsZCBzdGlsbCByZXR1cm4gYC1FTk9NRU1gLCBsZWFraW5nIGFueSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGBubDgwMjExX3BhcnNlX2JlYWNvbmAuIEJhc2ljYWxseSwgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIG11bHRpcGxlIGxlYWsgc2NlbmFyaW9zLlxuXG5UaGUgcGF0Y2ggY29ycmVjdHMgdGhpcyBieSBhbGxvY2F0aW5nIGB0YmAgKmJlZm9yZSogY2FsbGluZyBgbmw4MDIxMV9wYXJzZV9iZWFjb25gLiBJZiBga3phbGxvY19vYmpzYCBmYWlscyBub3csIGl0IHJldHVybnMgYC1FTk9NRU1gIGRpcmVjdGx5LCBwcmV2ZW50aW5nIHRoZSBsZWFrIGJlY2F1c2UgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBoYXNuJ3QgYmVlbiBjYWxsZWQgeWV0LiBDcnVjaWFsbHksIGlmIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgZmFpbHMsIHRoZSBjb2RlIG5vdyAqanVtcHMqIHRvIHRoZSBgb3V0YCBsYWJlbC4gVGhpcyBgb3V0YCBsYWJlbCB0aGVuIGZyZWVzIGJvdGggYHRiYCAqYW5kKiBgcGFyYW1zLmJlYWNvbl9uZXh0YOKAlHdoaWNoIG1pZ2h0IGhhdmUgcGFydGlhbGx5IGFsbG9jYXRlZCBkYXRhLlxuXG5UaGUgY3JpdGljYWwgcGllY2UgaGVyZSBpcyB0aGUgZmFjdCB0aGF0IGBubDgwMjExX3BhcnNlX2JlYWNvbmAgKmNhbiogbGVhdmUgcGFydGlhbCBhbGxvY2F0aW9ucyBpZiBpdCBmYWlscy4gTG9va2luZyBhdCB0aGUgY29kZSBmb3IgYG5sODAyMTFfcGFyc2VfYmVhY29uYCwgcGFydGljdWxhcmx5IHRoZSBwYXJ0cyBoYW5kbGluZyBgTkw4MDIxMV9BVFRSX01CU1NJRF9FTEVNU2AgYW5kIGBOTDgwMjExX0FUVFJfRU1BX1JOUl9FTEVNU2AsIEkgc2VlIHRoYXQgaWYgYG5sODAyMTFfY2FsY3VsYXRlX2FwX29wZXJhdGlvbmAgZmFpbHMsIGl0IHJldHVybnMgdGhlIGVycm9yIGNvZGUgKmJ1dCogbGVhdmVzIGBiY24tXHUwMDNlbWJzc2lkX2llc2AgYW5kIGBiY24tXHUwMDNlcm5yX2llc2AgYWxsb2NhdGVkLiBUaGUgcGF0Y2gncyBjaGFuZ2UgZnJvbSBgcmV0dXJuIGVycjtgIHRvIGBnb3RvIG91dDtgIGZpeGVzIHRoaXMgYnkgbWFraW5nIHN1cmUgdGhvc2UgYWxsb2NhdGVkIGl0ZW1zIGFyZSBhbHdheXMgZnJlZWQgaW4gY2FzZSBvZiBmYWlsdXJlLiBBbHNvIGJ5IG1vdmluZyBga3phbGxvY19vYmpzYCBiZWZvcmUgYG5sODAyMTFfcGFyc2VfYmVhY29uYCwgdGhlIGNhc2Ugd2hlcmUgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBzdWNjZWVkcyBidXQgYGt6YWxsb2Nfb2Jqc2AgZmFpbHMgYW5kIHdvdWxkIGFsc28gbGVhayBgcGFyYW1zLmJlYWNvbl9uZXh0YCBpcyBhdm9pZGVkLlxuXG5TbywgaW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBhIHNvbGlkIGJ1ZyBmaXggdGhhdCBhZGRyZXNzZXMgbWVtb3J5IGxlYWtzIHdpdGhpbiBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIGNhdXNlZCBieSBwYXJ0aWFsIGFsbG9jYXRpb25zIGR1cmluZyBiZWFjb24gcGFyc2luZywgZXNwZWNpYWxseSB3aGVuIGVycm9ycyBvY2N1ci4gSXQgZW5zdXJlcyB0aGF0IGFsbG9jYXRlZCBtZW1vcnkgaXMgZnJlZWQgY29ycmVjdGx5IGluIGFsbCBlcnJvciBwYXRocy4gSSdsbCB1c2UgYG5sODAyMTFfY29sb3JfY2hhbmdlYCBhcyB0aGUgZm9jdXMgc3ltYm9sLCBhcyBpdCdzIHRoZSB0YXJnZXQgb2YgdGhlIG1lbW9yeSBsZWFrIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkwMjAsIk91dHB1dFRva2VucyI6MTcwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMToxNy43NTUxNTgwMjJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkzNzY3ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX2NvbG9yX2NoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGBubDgwMjExX2NvbG9yX2NoYW5nZWAgbmV0bGluayBoYW5kbGVyLiBJdCBlbnN1cmVzIHRoYXQgaWYgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBmYWlscywgYW55IHBhcnRpYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIHByb3Blcmx5IGZyZWVkLCBhbmQgaXQgcHJldmVudHMgYSBsZWFrIGlmIHRoZSBzdWJzZXF1ZW50IGFsbG9jYXRpb24gZm9yIGB0YmAgZmFpbHMgYnkgbW92aW5nIGl0IGJlZm9yZSB0aGUgcGFyc2luZyBzdGVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgd2lyZWxlc3MgY29kZSAoZW11bGF0ZWQgdmlhIG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmw4MDIxMV9jb2xvcl9jaGFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIG5ldGxpbmsgaGFuZGxlci4gSXQgZW5zdXJlcyB0aGF0IGlmIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgZmFpbHMsIGFueSBwYXJ0aWFsbHkgYWxsb2NhdGVkIG1lbW9yeSBpcyBwcm9wZXJseSBmcmVlZCwgYW5kIGl0IHByZXZlbnRzIGEgbGVhayBpZiB0aGUgc3Vic2VxdWVudCBhbGxvY2F0aW9uIGZvciBgdGJgIGZhaWxzIGJ5IG1vdmluZyBpdCBiZWZvcmUgdGhlIHBhcnNpbmcgc3RlcC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIHdpcmVsZXNzIGNvZGUgKGVtdWxhdGVkIHZpYSBtYWM4MDIxMV9od3NpbSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowd27lb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 12:27:43 +0000 UTC FinishedAt: 2026-08-01 12:31:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "57aa1718d5953dd532137d43b696c68545c2e0b3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "57aa1718d5953dd532137d43b696c68545c2e0b3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_HWSIM" ], "series_id": "2384afe9-65ba-4d43-a842-bcdb82ca7c23" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nl80211_color_change" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV9jb2xvcl9jaGFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgYG5sODAyMTFfY29sb3JfY2hhbmdlYCBuZXRsaW5rIGhhbmRsZXIuIEl0IGVuc3VyZXMgdGhhdCBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZhaWxzLCBhbnkgcGFydGlhbGx5IGFsbG9jYXRlZCBtZW1vcnkgaXMgcHJvcGVybHkgZnJlZWQsIGFuZCBpdCBwcmV2ZW50cyBhIGxlYWsgaWYgdGhlIHN1YnNlcXVlbnQgYWxsb2NhdGlvbiBmb3IgYHRiYCBmYWlscyBieSBtb3ZpbmcgaXQgYmVmb3JlIHRoZSBwYXJzaW5nIHN0ZXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBjb2RlIChlbXVsYXRlZCB2aWEgbWFjODAyMTFfaHdzaW0pLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWRhMzJkYWQxN2VkYTg2ZTQzNjlhZjZhMjQ1ZDY5MGI0ZDhmNDdjZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTI6Mjk6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbmluZGV4IDVhZGNiNmJkMGZjNTYuLjc1NWY4ZmU3MTFmYjIgMTAwNjQ0XG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5AQCAtMTg3NTAsMTUgJiM0MzsxODc1MCwxNSBAQCBzdGF0aWMgaW50IG5sODAyMTFfY29sb3JfY2hhbmdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRpZiAoIXdkZXYtXHUwMDNlbGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmJlYWNvbl9pbnRlcnZhbClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0dGIgPSBremFsbG9jX29ianMoKnRiLCBOTDgwMjExX0FUVFJfTUFYICYjNDM7IDEpO1xuJiM0MztcdGlmICghdGIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4gXHRlcnIgPSBubDgwMjExX3BhcnNlX2JlYWNvbihyZGV2LCBpbmZvLVx1MDAzZWF0dHJzLCBcdTAwMjZwYXJhbXMuYmVhY29uX25leHQsXG4gXHRcdFx0XHQgICB3ZGV2LVx1MDAzZWxpbmtzW3BhcmFtcy5saW5rX2lkXS5hcC5jaGFuZGVmLmNoYW4sXG4gXHRcdFx0XHQgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0dGIgPSBremFsbG9jX29ianMoKnRiLCBOTDgwMjExX0FUVFJfTUFYICYjNDM7IDEpO1xuLVx0aWYgKCF0Yilcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcbiBcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIE5MODAyMTFfQVRUUl9NQVgsXG4gXHRcdFx0ICAgICAgIGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NPTE9SX0NIQU5HRV9FTEVNU10sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV9jb2xvcl9jaGFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgYG5sODAyMTFfY29sb3JfY2hhbmdlYCBuZXRsaW5rIGhhbmRsZXIuIEl0IGVuc3VyZXMgdGhhdCBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZhaWxzLCBhbnkgcGFydGlhbGx5IGFsbG9jYXRlZCBtZW1vcnkgaXMgcHJvcGVybHkgZnJlZWQsIGFuZCBpdCBwcmV2ZW50cyBhIGxlYWsgaWYgdGhlIHN1YnNlcXVlbnQgYWxsb2NhdGlvbiBmb3IgYHRiYCBmYWlscyBieSBtb3ZpbmcgaXQgYmVmb3JlIHRoZSBwYXJzaW5nIHN0ZXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBjb2RlIChlbXVsYXRlZCB2aWEgbWFjODAyMTFfaHdzaW0pLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWRhMzJkYWQxN2VkYTg2ZTQzNjlhZjZhMjQ1ZDY5MGI0ZDhmNDdjZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMTI6Mjk6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwppbmRleCA1YWRjYjZiZDBmYzU2Li43NTVmOGZlNzExZmIyIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTE4NzUwLDE1ICYjNDM7MTg3NTAsMTUgQEAgc3RhdGljIGludCBubDgwMjExX2NvbG9yX2NoYW5nZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCWlmICghd2Rldi0mZ3Q7bGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmJlYWNvbl9pbnRlcnZhbCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJdGIgPSBremFsbG9jX29ianMoKnRiLCBOTDgwMjExX0FUVFJfTUFYICYjNDM7IDEpOwomIzQzOwlpZiAoIXRiKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiAJZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgaW5mby0mZ3Q7YXR0cnMsICZhbXA7cGFyYW1zLmJlYWNvbl9uZXh0LAogCQkJCSAgIHdkZXYtJmd0O2xpbmtzW3BhcmFtcy5saW5rX2lkXS5hcC5jaGFuZGVmLmNoYW4sCiAJCQkJICAgaW5mby0mZ3Q7ZXh0YWNrKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JdGIgPSBremFsbG9jX29ianMoKnRiLCBOTDgwMjExX0FUVFJfTUFYICYjNDM7IDEpOwotCWlmICghdGIpCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwkJZ290byBvdXQ7CiAKIAllcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBOTDgwMjExX0FUVFJfTUFYLAogCQkJICAgICAgIGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9DT0xPUl9DSEFOR0VfRUxFTVNdLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFdpRmkgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AuIEludGVyZXN0aW5nLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBpcyB3aXRoaW4gdGhlIGBubDgwMjExX2NvbG9yX2NoYW5nZWAgZnVuY3Rpb24uIFRoZSBwYXRjaCByZW9yZGVycyB0aGUgYWxsb2NhdGlvbiBvZiBga3phbGxvY19vYmpzYCBhbmQgdGhlIGNhbGwgdG8gYG5sODAyMTFfcGFyc2VfYmVhY29uYC4gSXQgbG9va3MgbGlrZSBpdCBub3cgYWxsb2NhdGVzIGB0YmAgKmJlZm9yZSogY2FsbGluZyBgbmw4MDIxMV9wYXJzZV9iZWFjb25gLiBBbmQsIGlmIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgZmFpbHMsIGluc3RlYWQgb2YgaW1tZWRpYXRlbHkgcmV0dXJuaW5nIGFuIGVycm9yLCBpdCB1c2VzIGBnb3RvIG91dDtgLgoKV2FpdCBhIG1pbnV0ZS4uLiB0aGF0IGBnb3RvIG91dDtgIGp1bXDigKYgdGhhdCYjMzk7cyBnb3QgbWUgdGhpbmtpbmcuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGBvdXQ6YCB3aWxsICpmcmVlKiBgdGJgIGFuZCBwb3RlbnRpYWxseSBgcGFyYW1zLmJlYWNvbl9uZXh0YCwgYnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEEgc3VidGxlIGNoYW5nZSBsaWtlIHRoaXMgY291bGQgaW50cm9kdWNlIGEgbWVtb3J5IGxlYWsgb3Igb3RoZXIgc3VidGxlIHNpZGUgZWZmZWN0cy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gYG5sODAyMTFfY29sb3JfY2hhbmdlYCBpdHNlbGYgdG8gdmVyaWZ5IHRoYXQgYGdvdG8gb3V0O2AgaXMgaW5kZWVkIGhhbmRsaW5nIHRoZSBjbGVhbnVwIG9mIHRoZXNlIHJlc291cmNlcyBhcyBleHBlY3RlZC4gR290dGEgbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCBhIHJpc2t5IGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtubDgwMjExX2NvbG9yX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYz0xODY2NT1zdGF0aWMgaW50IG5sODAyMTFfc2V0X3RpZF9jb25maWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NzIwLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODcyMTpzdGF0aWMgaW50IG5sODAyMTFfY29sb3JfY2hhbmdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NzIyLXtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NTQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwMzQ3LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIwMzQ4Olx0XHQuZG9pdCA9IG5sODAyMTFfY29sb3JfY2hhbmdlLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDM0OS1cdFx0LmZsYWdzID0gR0VOTF9VTlNfQURNSU5fUEVSTSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTk3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYG5sODAyMTFfY29sb3JfY2hhbmdlYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG5sODAyMTFfY29sb3JfY2hhbmdlYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHNpZnRpbmcgdGhyb3VnaCBwb3RlbnRpYWwgY29udGV4dHMuICpubDgwMjExKiBzY3JlYW1zIHdpcmVsZXNzIG5ldHdvcmtpbmcsIG9idmlvdXNseS4gU28sIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgYXNwZWN0IG9mIDgwMi4xMSBtYW5hZ2VtZW50IHRocm91Z2ggdGhlIE5ldGxpbmsgaW50ZXJmYWNlLiBUaGUgJiMzNDtjb2xvciYjMzQ7IHBhcnQgaXMgaW50cmlndWluZy4gSW4gd2lyZWxlc3MsICYjMzQ7Y29sb3ImIzM0OyBjb3VsZCByZWxhdGUgdG8gYSB2YXJpZXR5IG9mIHRoaW5nczogZnJlcXVlbmN5IGJhbmRzLCBjaGFubmVsIGRlc2lnbmF0aW9uLCBwZXJoYXBzIGV2ZW4gc29tZSBraW5kIG9mIGNvbmZsaWN0IHJlc29sdXRpb24gbWVjaGFuaXNtIHdpdGhpbiBhIGRlbnNlIG5ldHdvcmsuCgpNeSBpbml0aWFsIHF1ZXN0aW9ucyBhcmUgcGlsaW5nIHVwIGFscmVhZHk6CgoqICAgV2hhdCBzcGVjaWZpYyBvcGVyYXRpb24gaXMgdGhpcyBmdW5jdGlvbiByZWxhdGVkIHRvPyBJcyBpdCBhIGNvbmZpZ3VyYXRpb24gY2hhbmdlLCBhIHN0YXR1cyB1cGRhdGUsIG9yIGEgY29tbWFuZCBleGVjdXRpb24/CiogICBIb3cgaXMgJiMzNDtjb2xvciYjMzQ7IHVzZWQgaW4gdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmw4MDIxMSBzdGFjaz8gSXMgaXQgYW4gYWJzdHJhY3QgY29uY2VwdCBvciBhIGRpcmVjdCBoYXJkd2FyZSBwYXJhbWV0ZXI/CiogICBJcyBpdCByZWxhdGVkIHRvIHNwZWN0cnVtIG1hbmFnZW1lbnQsIG9yIGlzIGl0IG1vcmUgYSBNQUMtbGF5ZXIgY29uY2Vybj8KKiAgIEFyZSB0aGVyZSBlcnJvciBjYXNlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/CgpFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGtub3cgdGhlICp3aHkqIGFuZCB0aGUgKmhvdyogYmVoaW5kIHRoaXMgZnVuY3Rpb24mIzM5O3MgZXhpc3RlbmNlIGFuZCBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaXRzIGNhbGwgc2l0ZXMsIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBhbmQgdGhlIG92ZXJhbGwgc3RhdGUgbWFjaGluZSBpdCBpbnRlcmFjdHMgd2l0aCB3aXRoaW4gdGhlIGJyb2FkZXIgbmw4MDIxMSBmcmFtZXdvcmsuIEkgYW50aWNpcGF0ZSB0aGlzIHdpbGwgaW52b2x2ZSB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UgYW5kIHRoZSBwb3NzaWJsZSBzaWRlIGVmZmVjdHMgaXQgbWF5IGhhdmUgb24gdGhlIHdpcmVsZXNzIGludGVyZmFjZSYjMzk7cyBvcGVyYXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODcyMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg3MjE6XHRzdGF0aWMgaW50IG5sODAyMTFfY29sb3JfY2hhbmdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4xODcyMjpcdHtcbjE4NzIzOlx0XHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVx1MDAzZXVzZXJfcHRyWzBdO1xuMTg3MjQ6XHRcdHN0cnVjdCBjZmc4MDIxMV9jb2xvcl9jaGFuZ2Vfc2V0dGluZ3MgcGFyYW1zID0ge307XG4xODcyNTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMV07XG4xODcyNjpcdFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cdTAwM2VpZWVlODAyMTFfcHRyO1xuMTg3Mjc6XHRcdHN0cnVjdCBubGF0dHIgKip0YjtcbjE4NzI4Olx0XHR1MTYgb2Zmc2V0O1xuMTg3Mjk6XHRcdGludCBlcnI7XG4xODczMDpcdFxuMTg3MzE6XHRcdGlmICghcmRldi1cdTAwM2VvcHMtXHUwMDNlY29sb3JfY2hhbmdlKVxuMTg3MzI6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTg3MzM6XHRcbjE4NzM0Olx0XHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG4xODczNTpcdFx0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUikpXG4xODczNjpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xODczNzpcdFxuMTg3Mzg6XHRcdGlmICh3ZGV2LVx1MDAzZWlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUClcbjE4NzM5Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE4NzQwOlx0XG4xODc0MTpcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DT0xPUl9DSEFOR0VfQ09VTlRdIHx8XG4xODc0MjpcdFx0ICAgICFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DT0xPUl9DSEFOR0VfQ09MT1JdIHx8XG4xODc0MzpcdFx0ICAgICFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DT0xPUl9DSEFOR0VfRUxFTVNdKVxuMTg3NDQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODc0NTpcdFxuMTg3NDY6XHRcdHBhcmFtcy5jb3VudCA9IG5sYV9nZXRfdTgoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQ09MT1JfQ0hBTkdFX0NPVU5UXSk7XG4xODc0NzpcdFx0cGFyYW1zLmNvbG9yID0gbmxhX2dldF91OChpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DT0xPUl9DSEFOR0VfQ09MT1JdKTtcbjE4NzQ4Olx0XG4xODc0OTpcdFx0cGFyYW1zLmxpbmtfaWQgPSBubDgwMjExX2xpbmtfaWQoaW5mby1cdTAwM2VhdHRycyk7XG4xODc1MDpcdFx0aWYgKCF3ZGV2LVx1MDAzZWxpbmtzW3BhcmFtcy5saW5rX2lkXS5hcC5iZWFjb25faW50ZXJ2YWwpXG4xODc1MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE4NzUyOlx0XG4xODc1MzpcdFx0dGIgPSBremFsbG9jX29ianMoKnRiLCBOTDgwMjExX0FUVFJfTUFYICYjNDM7IDEpO1xuMTg3NTQ6XHRcdGlmICghdGIpXG4xODc1NTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE4NzU2Olx0XG4xODc1NzpcdFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgaW5mby1cdTAwM2VhdHRycywgXHUwMDI2cGFyYW1zLmJlYWNvbl9uZXh0LFxuMTg3NTg6XHRcdFx0XHRcdCAgIHdkZXYtXHUwMDNlbGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmNoYW5kZWYuY2hhbixcbjE4NzU5Olx0XHRcdFx0XHQgICBpbmZvLVx1MDAzZWV4dGFjayk7XG4xODc2MDpcdFx0aWYgKGVycilcbjE4NzYxOlx0XHRcdGdvdG8gb3V0O1xuMTg3NjI6XHRcbjE4NzYzOlx0XHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBOTDgwMjExX0FUVFJfTUFYLFxuMTg3NjQ6XHRcdFx0XHQgICAgICAgaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQ09MT1JfQ0hBTkdFX0VMRU1TXSxcbjE4NzY1Olx0XHRcdFx0ICAgICAgIG5sODAyMTFfcG9saWN5LCBpbmZvLVx1MDAzZWV4dGFjayk7XG4xODc2NjpcdFx0aWYgKGVycilcbjE4NzY3Olx0XHRcdGdvdG8gb3V0O1xuMTg3Njg6XHRcbjE4NzY5Olx0XHRlcnIgPSBubDgwMjExX3BhcnNlX2JlYWNvbihyZGV2LCB0YiwgXHUwMDI2cGFyYW1zLmJlYWNvbl9jb2xvcl9jaGFuZ2UsXG4xODc3MDpcdFx0XHRcdFx0ICAgd2Rldi1cdTAwM2VsaW5rc1twYXJhbXMubGlua19pZF0uYXAuY2hhbmRlZi5jaGFuLFxuMTg3NzE6XHRcdFx0XHRcdCAgIGluZm8tXHUwMDNlZXh0YWNrKTtcbjE4NzcyOlx0XHRpZiAoZXJyKVxuMTg3NzM6XHRcdFx0Z290byBvdXQ7XG4xODc3NDpcdFxuMTg3NzU6XHRcdGlmICghdGJbTkw4MDIxMV9BVFRSX0NOVERXTl9PRkZTX0JFQUNPTl0pIHtcbjE4Nzc2Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4xODc3NzpcdFx0XHRnb3RvIG91dDtcbjE4Nzc4Olx0XHR9XG4xODc3OTpcdFxuMTg3ODA6XHRcdGlmIChubGFfbGVuKHRiW05MODAyMTFfQVRUUl9DTlREV05fT0ZGU19CRUFDT05dKSAhPSBzaXplb2YodTE2KSkge1xuMTg3ODE6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE4NzgyOlx0XHRcdGdvdG8gb3V0O1xuMTg3ODM6XHRcdH1cbjE4Nzg0Olx0XG4xODc4NTpcdFx0b2Zmc2V0ID0gbmxhX2dldF91MTYodGJbTkw4MDIxMV9BVFRSX0NOVERXTl9PRkZTX0JFQUNPTl0pO1xuMTg3ODY6XHRcdGlmIChvZmZzZXQgXHUwMDNlPSBwYXJhbXMuYmVhY29uX2NvbG9yX2NoYW5nZS50YWlsX2xlbikge1xuMTg3ODc6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE4Nzg4Olx0XHRcdGdvdG8gb3V0O1xuMTg3ODk6XHRcdH1cbjE4NzkwOlx0XG4xODc5MTpcdFx0aWYgKHBhcmFtcy5iZWFjb25fY29sb3JfY2hhbmdlLnRhaWxbb2Zmc2V0XSAhPSBwYXJhbXMuY291bnQpIHtcbjE4NzkyOlx0XHRcdGVyciA9IC1FSU5WQUw7XG4xODc5MzpcdFx0XHRnb3RvIG91dDtcbjE4Nzk0Olx0XHR9XG4xODc5NTpcdFxuMTg3OTY6XHRcdHBhcmFtcy5jb3VudGVyX29mZnNldF9iZWFjb24gPSBvZmZzZXQ7XG4xODc5NzpcdFxuMTg3OTg6XHRcdGlmICh0YltOTDgwMjExX0FUVFJfQ05URFdOX09GRlNfUFJFU1BdKSB7XG4xODc5OTpcdFx0XHRpZiAobmxhX2xlbih0YltOTDgwMjExX0FUVFJfQ05URFdOX09GRlNfUFJFU1BdKSAhPVxuMTg4MDA6XHRcdFx0ICAgIHNpemVvZih1MTYpKSB7XG4xODgwMTpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4xODgwMjpcdFx0XHRcdGdvdG8gb3V0O1xuMTg4MDM6XHRcdFx0fVxuMTg4MDQ6XHRcbjE4ODA1Olx0XHRcdG9mZnNldCA9IG5sYV9nZXRfdTE2KHRiW05MODAyMTFfQVRUUl9DTlREV05fT0ZGU19QUkVTUF0pO1xuMTg4MDY6XHRcdFx0aWYgKG9mZnNldCBcdTAwM2U9IHBhcmFtcy5iZWFjb25fY29sb3JfY2hhbmdlLnByb2JlX3Jlc3BfbGVuKSB7XG4xODgwNzpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4xODgwODpcdFx0XHRcdGdvdG8gb3V0O1xuMTg4MDk6XHRcdFx0fVxuMTg4MTA6XHRcbjE4ODExOlx0XHRcdGlmIChwYXJhbXMuYmVhY29uX2NvbG9yX2NoYW5nZS5wcm9iZV9yZXNwW29mZnNldF0gIT1cbjE4ODEyOlx0XHRcdCAgICBwYXJhbXMuY291bnQpIHtcbjE4ODEzOlx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjE4ODE0Olx0XHRcdFx0Z290byBvdXQ7XG4xODgxNTpcdFx0XHR9XG4xODgxNjpcdFxuMTg4MTc6XHRcdFx0cGFyYW1zLmNvdW50ZXJfb2Zmc2V0X3ByZXNwID0gb2Zmc2V0O1xuMTg4MTg6XHRcdH1cbjE4ODE5Olx0XG4xODgyMDpcdFx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX1VOU09MX0JDQVNUX1BST0JFX1JFU1BdKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTIxMQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZToKCioqTXkgSW1tZWRpYXRlIEFuYWx5c2lzIG9mIHRoZSBDb2RlIFNuaXBwZXQqKgoKSG1tLCBJIHNlZSBhIGZyYWdtZW50IG9mIGEgZnVuY3Rpb24sIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBwYXVzZS4gSSBjYW4mIzM5O3QganVtcCB0byBjb25jbHVzaW9ucyBvciBtYWtlIGFueSBkZWZpbml0aXZlIHN0YXRlbWVudHMgYWJvdXQgaXRzIHB1cnBvc2Ugb3IgYmVoYXZpb3Igd2l0aG91dCB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0LiBUaGUgY3J1Y2lhbCB2YXJpYWJsZSBpcyBgb3V0YCDigJMgaXQmIzM5O3MgY2xlYXJseSBhIGNlbnRyYWwgZWxlbWVudCwgYW5kIGl0cyB1bHRpbWF0ZSBmdW5jdGlvbiBpcyBjb21wbGV0ZWx5IHVua25vd24gYXQgdGhpcyBwb2ludC4gSSBuZWVkIHRvIHNlZSB0aGUgZW50aXJlIGZ1bmN0aW9uIGRlZmluaXRpb24gdG8gdW5kZXJzdGFuZCB3aGVyZSBgb3V0YCBjb21lcyBmcm9tLCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCwgYW5kIHdoYXQgZGF0YSBpdCYjMzk7cyBob2xkaW5nLCB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBnb2FsIG9mIHRoaXMgY29kZS4gV2l0aG91dCB0aGF0IGNvbXBsZXRlIHBpY3R1cmUsIGFueSBzcGVjdWxhdGlvbiBpcyBwcmVtYXR1cmUuIEkgbXVzdCBoYXZlIG1vcmUgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg4MjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4ODIxOlx0XHRcdGVyciA9IG5sODAyMTFfcGFyc2VfdW5zb2xfYmNhc3RfcHJvYmVfcmVzcChcbjE4ODIyOlx0XHRcdFx0cmRldiwgaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfVU5TT0xfQkNBU1RfUFJPQkVfUkVTUF0sXG4xODgyMzpcdFx0XHRcdFx1MDAyNnBhcmFtcy51bnNvbF9iY2FzdF9wcm9iZV9yZXNwKTtcbjE4ODI0Olx0XHRcdGlmIChlcnIpXG4xODgyNTpcdFx0XHRcdGdvdG8gb3V0O1xuMTg4MjY6XHRcdH1cbjE4ODI3Olx0XG4xODgyODpcdFx0ZXJyID0gcmRldl9jb2xvcl9jaGFuZ2UocmRldiwgZGV2LCBcdTAwMjZwYXJhbXMpO1xuMTg4Mjk6XHRcbjE4ODMwOlx0b3V0OlxuMTg4MzE6XHRcdGtmcmVlKHBhcmFtcy5iZWFjb25fbmV4dC5tYnNzaWRfaWVzKTtcbjE4ODMyOlx0XHRrZnJlZShwYXJhbXMuYmVhY29uX2NvbG9yX2NoYW5nZS5tYnNzaWRfaWVzKTtcbjE4ODMzOlx0XHRrZnJlZShwYXJhbXMuYmVhY29uX25leHQucm5yX2llcyk7XG4xODgzNDpcdFx0a2ZyZWUocGFyYW1zLmJlYWNvbl9jb2xvcl9jaGFuZ2Uucm5yX2llcyk7XG4xODgzNTpcdFx0a2ZyZWUodGIpO1xuMTg4MzY6XHRcdHJldHVybiBlcnI7XG4xODgzNzpcdH1cbjE4ODM4Olx0XG4xODgzOTpcdHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfZmlsc19hYWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjE4ODQwOlx0XHRcdFx0XHRzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTg4NDE6XHR7XG4xODg0MjpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbjE4ODQzOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbjE4ODQ0Olx0XHRzdHJ1Y3QgY2ZnODAyMTFfZmlsc19hYWQgZmlsc19hYWQgPSB7fTtcbjE4ODQ1Olx0XHR1OCAqbm9uY2VzO1xuMTg4NDY6XHRcbjE4ODQ3Olx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHxcbjE4ODQ4Olx0XHQgICAgIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZJTFNfS0VLXSB8fFxuMTg4NDk6XHRcdCAgICAhaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRklMU19OT05DRVNdKVxuMTg4NTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODg1MTpcdFxuMTg4NTI6XHRcdGZpbHNfYWFkLm1hY2FkZHIgPSBubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTtcbjE4ODUzOlx0XHRmaWxzX2FhZC5rZWtfbGVuID0gbmxhX2xlbihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9GSUxTX0tFS10pO1xuMTg4NTQ6XHRcdGZpbHNfYWFkLmtlayA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZJTFNfS0VLXSk7XG4xODg1NTpcdFx0bm9uY2VzID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRklMU19OT05DRVNdKTtcbjE4ODU2Olx0XHRmaWxzX2FhZC5zbm9uY2UgPSBub25jZXM7XG4xODg1NzpcdFx0Zmlsc19hYWQuYW5vbmNlID0gbm9uY2VzICYjNDM7IEZJTFNfTk9OQ0VfTEVOO1xuMTg4NTg6XHRcbjE4ODU5Olx0XHRyZXR1cm4gcmRldl9zZXRfZmlsc19hYWQocmRldiwgZGV2LCBcdTAwMjZmaWxzX2FhZCk7XG4xODg2MDpcdH1cbjE4ODYxOlx0XG4xODg2MjpcdHN0YXRpYyBpbnQgbmw4MDIxMV9hZGRfbGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTg4NjM6XHR7XG4xODg2NDpcdFx0c3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clswXTtcbjE4ODY1Olx0XHR1bnNpZ25lZCBpbnQgbGlua19pZCA9IG5sODAyMTFfbGlua19pZChpbmZvLVx1MDAzZWF0dHJzKTtcbjE4ODY2Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cdTAwM2V1c2VyX3B0clsxXTtcbjE4ODY3Olx0XHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVx1MDAzZWllZWU4MDIxMV9wdHI7XG4xODg2ODpcdFx0aW50IHJldDtcbjE4ODY5Olx0XG4xODg3MDpcdFx0aWYgKCEod2Rldi1cdTAwM2V3aXBoeS1cdTAwM2VmbGFncyBcdTAwMjYgV0lQSFlfRkxBR19TVVBQT1JUU19NTE8pKVxuMTg4NzE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xODg3MjpcdFxuMTg4NzM6XHRcdHN3aXRjaCAod2Rldi1cdTAwM2VpZnR5cGUpIHtcbjE4ODc0Olx0XHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxuMTg4NzU6XHRcdFx0YnJlYWs7XG4xODg3NjpcdFx0ZGVmYXVsdDpcbjE4ODc3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg4Nzg6XHRcdH1cbjE4ODc5Olx0XG4xODg4MDpcdFx0aWYgKCFpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdIHx8XG4xODg4MTpcdFx0ICAgICFpc192YWxpZF9ldGhlcl9hZGRyKG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pKSlcbjE4ODgyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg4ODM6XHRcbjE4ODg0Olx0XHR3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzIHw9IEJJVChsaW5rX2lkKTtcbjE4ODg1Olx0XHRldGhlcl9hZGRyX2NvcHkod2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXS5hZGRyLFxuMTg4ODY6XHRcdFx0XHRubGFfZGF0YShpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdKSk7XG4xODg4NzpcdFxuMTg4ODg6XHRcdHJldCA9IHJkZXZfYWRkX2ludGZfbGluayhyZGV2LCB3ZGV2LCBsaW5rX2lkKTtcbjE4ODg5Olx0XHRpZiAocmV0KSB7XG4xODg5MDpcdFx0XHR3ZGV2LVx1MDAzZXZhbGlkX2xpbmtzIFx1MDAyNj0gfkJJVChsaW5rX2lkKTtcbjE4ODkxOlx0XHRcdGV0aF96ZXJvX2FkZHIod2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXS5hZGRyKTtcbjE4ODkyOlx0XHR9XG4xODg5MzpcdFxuMTg4OTQ6XHRcdHJldHVybiByZXQ7XG4xODg5NTpcdH1cbjE4ODk2Olx0XG4xODg5NzpcdHN0YXRpYyBpbnQgbmw4MDIxMV9yZW1vdmVfbGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTg4OTg6XHR7XG4xODg5OTpcdFx0dW5zaWduZWQgaW50IGxpbmtfaWQgPSBubDgwMjExX2xpbmtfaWQoaW5mby1cdTAwM2VhdHRycyk7XG4xODkwMDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tXHUwMDNldXNlcl9wdHJbMV07XG4xODkwMTpcdFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cdTAwM2VpZWVlODAyMTFfcHRyO1xuMTg5MDI6XHRcbjE4OTAzOlx0XHQvKiBjYW5ub3QgcmVtb3ZlIGlmIHRoZXJlJiMzOTtzIG5vIGxpbmsgKi9cbjE4OTA0Olx0XHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01MT19MSU5LX0lEXSlcbjE4OTA1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg5MDY6XHRcbjE4OTA3Olx0XHRzd2l0Y2ggKHdkZXYtXHUwMDNlaWZ0eXBlKSB7XG4xODkwODpcdFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDpcbjE4OTA5Olx0XHRcdGJyZWFrO1xuMTg5MTA6XHRcdGRlZmF1bHQ6XG4xODkxMTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE4OTEyOlx0XHR9XG4xODkxMzpcdFxuMTg5MTQ6XHRcdGNmZzgwMjExX3JlbW92ZV9saW5rKHdkZXYsIGxpbmtfaWQpO1xuMTg5MTU6XHRcbjE4OTE2Olx0XHRyZXR1cm4gMDtcbjE4OTE3Olx0fVxuMTg5MTg6XHRcbjE4OTE5Olx0c3RhdGljIGludFxuMTg5MjA6XHRubDgwMjExX2FkZF9tb2RfbGlua19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3MQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTGVhayBpbiB0aGUgQmVhY29uIFBhcnNpbmcgUm91dGluZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBtZW1vcnkgbGVhay4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSBiZWZvcmUgdGhlIGZpeCBpbnZvbHZlcyBwYXJzaW5nIGEgYmVhY29uLiBTcGVjaWZpY2FsbHksIGl0IGNhbGxzIGBubDgwMjExX3BhcnNlX2JlYWNvbmAsIGFuZCBpZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IsIHdlIGltbWVkaWF0ZWx5IGV4aXQuIFJpZ2h0LCBzbyB3ZSBjYWxsIGBubDgwMjExX3BhcnNlX2JlYWNvbmAsIGFuZCB0aGVuIGFsbG9jYXRlIGEgdGFibGUgd2l0aCBga3phbGxvY19vYmpzYC4gQnV0LCB3YWl0IGEgbWludXRlLCB0aGUgcHJvYmxlbSAqbXVzdCogYmUgdGhhdCBgbmw4MDIxMV9wYXJzZV9iZWFjb25gICppdHNlbGYqIGNvdWxkIGJlIGFsbG9jYXRpbmcgbWVtb3J5IGluIGBwYXJhbXMuYmVhY29uX25leHQubWJzc2lkX2llc2AgYW5kIGBwYXJhbXMuYmVhY29uX25leHQucm5yX2llc2AuIFRoYXQgbWVtb3J5LCBpZiBhbGxvY2F0ZWQsIGlzbiYjMzk7dCBiZWluZyBmcmVlZCBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZhaWxzISBTbywgdGhlIGxlYWsgaXMgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byBjb25maXJtIHRoaXMuLi4gSSBiZXR0ZXIgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgYWxsb2NhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcgdGhlcmUuIEdvdCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmw4MDIxMV9wYXJzZV9iZWFjb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmM9NjYzMT1zdGF0aWMgaW50IG5sODAyMTFfY2FsY3VsYXRlX2FwX29wZXJhdGlvbihzdHJ1Y3QgbmxhdHRyICphdHRyc1tdLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjcwMy1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NjcwNDpzdGF0aWMgaW50IG5sODAyMTFfcGFyc2VfYmVhY29uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjcwNS1cdFx0XHRcdHN0cnVjdCBubGF0dHIgKmF0dHJzW10sXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz03MTk1PXN0YXRpYyBpbnQgbmw4MDIxMV9zdGFydF9hcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNzM0Ny1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NzM0ODpcdGVyciA9IG5sODAyMTFfcGFyc2VfYmVhY29uKHJkZXYsIGluZm8tXHUwMDNlYXR0cnMsIFx1MDAyNnBhcmFtcy1cdTAwM2ViZWFjb24sXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTczNDktXHRcdFx0XHQgICBwYXJhbXMtXHUwMDNlY2hhbmRlZi5jaGFuLCBpbmZvLVx1MDAzZWV4dGFjayk7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz03NTAyPXN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfYmVhY29uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy03NTI2LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo3NTI3Olx0ZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgaW5mby1cdTAwM2VhdHRycywgXHUwMDI2cGFyYW1zLVx1MDAzZWJlYWNvbixcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNzUyOC1cdFx0XHRcdCAgIHdkZXYtXHUwMDNlbGlua3NbbGlua19pZF0uYXAuY2hhbmRlZi5jaGFuLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTIwNzI9c3RhdGljIGludCBubDgwMjExX2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjE1MS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIxNTI6XHRlcnIgPSBubDgwMjExX3BhcnNlX2JlYWNvbihyZGV2LCBpbmZvLVx1MDAzZWF0dHJzLCBcdTAwMjZwYXJhbXMuYmVhY29uX2FmdGVyLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjE1My1cdFx0XHRcdCAgIHBhcmFtcy5jaGFuZGVmLmNoYW4sIGluZm8tXHUwMDNlZXh0YWNrKTtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMTY4LVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxMjE2OTpcdGVyciA9IG5sODAyMTFfcGFyc2VfYmVhY29uKHJkZXYsIGNzYV9hdHRycywgXHUwMDI2cGFyYW1zLmJlYWNvbl9jc2EsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMTcwLVx0XHRcdFx0ICAgd2Rldi1cdTAwM2VsaW5rc1tsaW5rX2lkXS5hcC5jaGFuZGVmLmNoYW4sXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xODcyMT1zdGF0aWMgaW50IG5sODAyMTFfY29sb3JfY2hhbmdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODc1Ni1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTg3NTc6XHRlcnIgPSBubDgwMjExX3BhcnNlX2JlYWNvbihyZGV2LCBpbmZvLVx1MDAzZWF0dHJzLCBcdTAwMjZwYXJhbXMuYmVhY29uX25leHQsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NzU4LVx0XHRcdFx0ICAgd2Rldi1cdTAwM2VsaW5rc1twYXJhbXMubGlua19pZF0uYXAuY2hhbmRlZi5jaGFuLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg3NjgtXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NzY5Olx0ZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgdGIsIFx1MDAyNnBhcmFtcy5iZWFjb25fY29sb3JfY2hhbmdlLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODc3MC1cdFx0XHRcdCAgIHdkZXYtXHUwMDNlbGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmNoYW5kZWYuY2hhbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc1MQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJlYWNvbiBQYXJzaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbW92aW5nIHRoZSBga3phbGxvY19vYmpzYCBhbGxvY2F0aW9uIGJlZm9yZSB0aGUgaW5pdGlhbCBjYWxsIHRvIGBubDgwMjExX3BhcnNlX2JlYWNvbmAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgb3B0aW1pemF0aW9uIHRvIGhhbmRsZSB0aGUgYC1FTk9NRU1gIGNhc2UgZWFybHkuIElmIGBremFsbG9jX29ianNgIGZhaWxzLCB3ZSBqdXN0IGJhaWwgb3V0IGltbWVkaWF0ZWx5LgoKTm93LCBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gICpkb2VzKiBmYWlsIGFmdGVyIHRoZSBwYXRjaCwgdGhlIGNvZGUgbm93IGNvcnJlY3RseSBqdW1wcyB0byB0aGUgYG91dGAgbGFiZWwuIFRoYXQmIzM5O3MgZ29vZCwgYmVjYXVzZSBgb3V0YCBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBgcGFyYW1zLmJlYWNvbl9uZXh0Lm1ic3NpZF9pZXNgLCBgcGFyYW1zLmJlYWNvbl9uZXh0LnJucl9pZXNgLCBhbmQgdGhlIGB0YmAgc3RydWN0dXJlLCBhbW9uZyBvdGhlciB0aGluZ3MuIExvb2tzIGxpa2Ugd2UmIzM5O3JlIGNsZWFuaW5nIHVwIGFmdGVyIG91cnNlbHZlcy4KCkJ1dCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBjb25zaWRlciB0aGUgcHJlLXBhdGNoIGJlaGF2aW9yLiBCZWZvcmUgdGhpcyBjaGFuZ2UsIGlmIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgZmFpbGVkLCBpdCBqdXN0IHJldHVybmVkIHRoZSBgZXJyYCB2YWx1ZSBkaXJlY3RseS4gVGhhdCBpbXBsaWVzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrISBBbnkgYWxsb2NhdGlvbnMgbWFkZSAqd2l0aGluKiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZvciBgcGFyYW1zLmJlYWNvbl9uZXh0YCBiZWZvcmUgdGhlIGZ1bmN0aW9uIGZhaWxlZCB3b3VsZCBoYXZlIGJlZW4gb3JwaGFuZWQsIHJpZ2h0PwoKQWxyaWdodCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgc291cmNlIGNvZGUgb2YgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBpdHNlbGYgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCBoYW5kbGVzIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byBzZWUgd2hhdCBoYXBwZW5zIHdoZW4gaXQgZW5jb3VudGVycyBhbiBlcnJvciBhbmQgZGV0ZXJtaW5lIHdoYXQgbWVtb3J5IGlzIG9yIGlzbiYjMzk7dCBmcmVlZCB1bmRlciB0aGF0IGNvbmRpdGlvbi4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IHZ1bG5lcmFiaWxpdHkuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY3MDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY3MDQ6XHRzdGF0aWMgaW50IG5sODAyMTFfcGFyc2VfYmVhY29uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbjY3MDU6XHRcdFx0XHRcdHN0cnVjdCBubGF0dHIgKmF0dHJzW10sXG42NzA2Olx0XHRcdFx0XHRzdHJ1Y3QgY2ZnODAyMTFfYmVhY29uX2RhdGEgKmJjbixcbjY3MDc6XHRcdFx0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbixcbjY3MDg6XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjY3MDk6XHR7XG42NzEwOlx0XHRib29sIGhhdmVpbmZvID0gZmFsc2U7XG42NzExOlx0XHRpbnQgZXJyO1xuNjcxMjpcdFxuNjcxMzpcdFx0bWVtc2V0KGJjbiwgMCwgc2l6ZW9mKCpiY24pKTtcbjY3MTQ6XHRcbjY3MTU6XHRcdGJjbi1cdTAwM2VsaW5rX2lkID0gbmw4MDIxMV9saW5rX2lkKGF0dHJzKTtcbjY3MTY6XHRcbjY3MTc6XHRcdGlmIChhdHRyc1tOTDgwMjExX0FUVFJfQkVBQ09OX0hFQURdKSB7XG42NzE4Olx0XHRcdGJjbi1cdTAwM2VoZWFkID0gbmxhX2RhdGEoYXR0cnNbTkw4MDIxMV9BVFRSX0JFQUNPTl9IRUFEXSk7XG42NzE5Olx0XHRcdGJjbi1cdTAwM2VoZWFkX2xlbiA9IG5sYV9sZW4oYXR0cnNbTkw4MDIxMV9BVFRSX0JFQUNPTl9IRUFEXSk7XG42NzIwOlx0XHRcdGlmICghYmNuLVx1MDAzZWhlYWRfbGVuKVxuNjcyMTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNjcyMjpcdFx0XHRoYXZlaW5mbyA9IHRydWU7XG42NzIzOlx0XHR9XG42NzI0Olx0XG42NzI1Olx0XHRpZiAoYXR0cnNbTkw4MDIxMV9BVFRSX0JFQUNPTl9UQUlMXSkge1xuNjcyNjpcdFx0XHRiY24tXHUwMDNldGFpbCA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9CRUFDT05fVEFJTF0pO1xuNjcyNzpcdFx0XHRiY24tXHUwMDNldGFpbF9sZW4gPSBubGFfbGVuKGF0dHJzW05MODAyMTFfQVRUUl9CRUFDT05fVEFJTF0pO1xuNjcyODpcdFx0XHRoYXZlaW5mbyA9IHRydWU7XG42NzI5Olx0XHR9XG42NzMwOlx0XG42NzMxOlx0XHRpZiAoIWhhdmVpbmZvKVxuNjczMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjY3MzM6XHRcbjY3MzQ6XHRcdGlmIChhdHRyc1tOTDgwMjExX0FUVFJfSUVdKSB7XG42NzM1Olx0XHRcdGJjbi1cdTAwM2ViZWFjb25faWVzID0gbmxhX2RhdGEoYXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7XG42NzM2Olx0XHRcdGJjbi1cdTAwM2ViZWFjb25faWVzX2xlbiA9IG5sYV9sZW4oYXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7XG42NzM3Olx0XHR9XG42NzM4Olx0XG42NzM5Olx0XHRpZiAoYXR0cnNbTkw4MDIxMV9BVFRSX0lFX1BST0JFX1JFU1BdKSB7XG42NzQwOlx0XHRcdGJjbi1cdTAwM2Vwcm9iZXJlc3BfaWVzID1cbjY3NDE6XHRcdFx0XHRubGFfZGF0YShhdHRyc1tOTDgwMjExX0FUVFJfSUVfUFJPQkVfUkVTUF0pO1xuNjc0MjpcdFx0XHRiY24tXHUwMDNlcHJvYmVyZXNwX2llc19sZW4gPVxuNjc0MzpcdFx0XHRcdG5sYV9sZW4oYXR0cnNbTkw4MDIxMV9BVFRSX0lFX1BST0JFX1JFU1BdKTtcbjY3NDQ6XHRcdH1cbjY3NDU6XHRcbjY3NDY6XHRcdGlmIChhdHRyc1tOTDgwMjExX0FUVFJfSUVfQVNTT0NfUkVTUF0pIHtcbjY3NDc6XHRcdFx0YmNuLVx1MDAzZWFzc29jcmVzcF9pZXMgPVxuNjc0ODpcdFx0XHRcdG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9JRV9BU1NPQ19SRVNQXSk7XG42NzQ5Olx0XHRcdGJjbi1cdTAwM2Vhc3NvY3Jlc3BfaWVzX2xlbiA9XG42NzUwOlx0XHRcdFx0bmxhX2xlbihhdHRyc1tOTDgwMjExX0FUVFJfSUVfQVNTT0NfUkVTUF0pO1xuNjc1MTpcdFx0fVxuNjc1MjpcdFxuNjc1MzpcdFx0aWYgKGF0dHJzW05MODAyMTFfQVRUUl9QUk9CRV9SRVNQXSkge1xuNjc1NDpcdFx0XHRiY24tXHUwMDNlcHJvYmVfcmVzcCA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9QUk9CRV9SRVNQXSk7XG42NzU1Olx0XHRcdGJjbi1cdTAwM2Vwcm9iZV9yZXNwX2xlbiA9IG5sYV9sZW4oYXR0cnNbTkw4MDIxMV9BVFRSX1BST0JFX1JFU1BdKTtcbjY3NTY6XHRcdH1cbjY3NTc6XHRcbjY3NTg6XHRcdGlmIChhdHRyc1tOTDgwMjExX0FUVFJfRlRNX1JFU1BPTkRFUl0pIHtcbjY3NTk6XHRcdFx0c3RydWN0IG5sYXR0ciAqdGJbTkw4MDIxMV9GVE1fUkVTUF9BVFRSX01BWCAmIzQzOyAxXTtcbjY3NjA6XHRcbjY3NjE6XHRcdFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLFxuNjc2MjpcdFx0XHRcdFx0XHRcdCAgTkw4MDIxMV9GVE1fUkVTUF9BVFRSX01BWCxcbjY3NjM6XHRcdFx0XHRcdFx0XHQgIGF0dHJzW05MODAyMTFfQVRUUl9GVE1fUkVTUE9OREVSXSxcbjY3NjQ6XHRcdFx0XHRcdFx0XHQgIE5VTEwsIE5VTEwpO1xuNjc2NTpcdFx0XHRpZiAoZXJyKVxuNjc2NjpcdFx0XHRcdHJldHVybiBlcnI7XG42NzY3Olx0XG42NzY4Olx0XHRcdGlmICh0YltOTDgwMjExX0ZUTV9SRVNQX0FUVFJfRU5BQkxFRF0gXHUwMDI2XHUwMDI2XG42NzY5Olx0XHRcdCAgICB3aXBoeV9leHRfZmVhdHVyZV9pc3NldChcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LFxuNjc3MDpcdFx0XHRcdFx0XHQgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9FTkFCTEVfRlRNX1JFU1BPTkRFUikpXG42NzcxOlx0XHRcdFx0YmNuLVx1MDAzZWZ0bV9yZXNwb25kZXIgPSAxO1xuNjc3MjpcdFx0XHRlbHNlXG42NzczOlx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuNjc3NDpcdFxuNjc3NTpcdFx0XHRpZiAodGJbTkw4MDIxMV9GVE1fUkVTUF9BVFRSX0xDSV0pIHtcbjY3NzY6XHRcdFx0XHRiY24tXHUwMDNlbGNpID0gbmxhX2RhdGEodGJbTkw4MDIxMV9GVE1fUkVTUF9BVFRSX0xDSV0pO1xuNjc3NzpcdFx0XHRcdGJjbi1cdTAwM2VsY2lfbGVuID0gbmxhX2xlbih0YltOTDgwMjExX0ZUTV9SRVNQX0FUVFJfTENJXSk7XG42Nzc4Olx0XHRcdH1cbjY3Nzk6XHRcbjY3ODA6XHRcdFx0aWYgKHRiW05MODAyMTFfRlRNX1JFU1BfQVRUUl9DSVZJQ0xPQ10pIHtcbjY3ODE6XHRcdFx0XHRiY24tXHUwMDNlY2l2aWNsb2MgPSBubGFfZGF0YSh0YltOTDgwMjExX0ZUTV9SRVNQX0FUVFJfQ0lWSUNMT0NdKTtcbjY3ODI6XHRcdFx0XHRiY24tXHUwMDNlY2l2aWNsb2NfbGVuID0gbmxhX2xlbih0YltOTDgwMjExX0ZUTV9SRVNQX0FUVFJfQ0lWSUNMT0NdKTtcbjY3ODM6XHRcdFx0fVxuNjc4NDpcdFx0fSBlbHNlIHtcbjY3ODU6XHRcdFx0YmNuLVx1MDAzZWZ0bV9yZXNwb25kZXIgPSAtMTtcbjY3ODY6XHRcdH1cbjY3ODc6XHRcbjY3ODg6XHRcdGlmIChhdHRyc1tOTDgwMjExX0FUVFJfSEVfQlNTX0NPTE9SXSkge1xuNjc4OTpcdFx0XHRlcnIgPSBubDgwMjExX3BhcnNlX2hlX2Jzc19jb2xvcihhdHRyc1tOTDgwMjExX0FUVFJfSEVfQlNTX0NPTE9SXSxcbjY3OTA6XHRcdFx0XHRcdFx0XHQgXHUwMDI2YmNuLVx1MDAzZWhlX2Jzc19jb2xvcik7XG42NzkxOlx0XHRcdGlmIChlcnIpXG42NzkyOlx0XHRcdFx0cmV0dXJuIGVycjtcbjY3OTM6XHRcdFx0YmNuLVx1MDAzZWhlX2Jzc19jb2xvcl92YWxpZCA9IHRydWU7XG42Nzk0Olx0XHR9XG42Nzk1Olx0XG42Nzk2Olx0XHRpZiAoYXR0cnNbTkw4MDIxMV9BVFRSX01CU1NJRF9FTEVNU10pIHtcbjY3OTc6XHRcdFx0c3RydWN0IGNmZzgwMjExX21ic3NpZF9lbGVtcyAqbWJzc2lkID1cbjY3OTg6XHRcdFx0XHRubDgwMjExX3BhcnNlX21ic3NpZF9lbGVtcyhcdTAwMjZyZGV2LVx1MDAzZXdpcGh5LFxuNjc5OTpcdFx0XHRcdFx0XHRcdCAgIGF0dHJzW05MODAyMTFfQVRUUl9NQlNTSURfRUxFTVNdLFxuNjgwMDpcdFx0XHRcdFx0XHRcdCAgIGV4dGFjayk7XG42ODAxOlx0XG42ODAyOlx0XHRcdGlmIChJU19FUlIobWJzc2lkKSlcbjY4MDM6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihtYnNzaWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIzNAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIERlZXBlciBpbnRvIEJlYWNvbiBQYXJzaW5nKioKCkFscmlnaHQsIEkmIzM5O20gdHJhY2luZyB0aHJvdWdoIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgbm93LiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbnMgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhbGxvY2F0aW5nIG1lbW9yeS4gSSBzdXNwZWN0IEkgbWlnaHQgYmUgYWJsZSB0byBpZGVudGlmeSBzb21lIGluZWZmaWNpZW5jaWVzIG9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgdGhpcyB3YXkuIFVuZGVyc3RhbmRpbmcgaG93IGl0IGhhbmRsZXMgbWVtb3J5IGlzIGNyaXRpY2FsIHRvIGZpZ3VyaW5nIG91dCB0aGUgbnVhbmNlcyBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIHJldmVhbHMgYW55dGhpbmcgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY4MDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY4MDQ6XHRcbjY4MDU6XHRcdFx0YmNuLVx1MDAzZW1ic3NpZF9pZXMgPSBtYnNzaWQ7XG42ODA2Olx0XG42ODA3Olx0XHRcdGlmIChiY24tXHUwMDNlbWJzc2lkX2llcyBcdTAwMjZcdTAwMjYgYXR0cnNbTkw4MDIxMV9BVFRSX0VNQV9STlJfRUxFTVNdKSB7XG42ODA4Olx0XHRcdFx0c3RydWN0IGNmZzgwMjExX3Jucl9lbGVtcyAqcm5yID1cbjY4MDk6XHRcdFx0XHRcdG5sODAyMTFfcGFyc2Vfcm5yX2VsZW1zKFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG42ODEwOlx0XHRcdFx0XHRcdFx0XHRhdHRyc1tOTDgwMjExX0FUVFJfRU1BX1JOUl9FTEVNU10sXG42ODExOlx0XHRcdFx0XHRcdFx0XHRleHRhY2spO1xuNjgxMjpcdFxuNjgxMzpcdFx0XHRcdGlmIChJU19FUlIocm5yKSlcbjY4MTQ6XHRcdFx0XHRcdHJldHVybiBQVFJfRVJSKHJucik7XG42ODE1Olx0XG42ODE2Olx0XHRcdFx0aWYgKHJuciBcdTAwMjZcdTAwMjYgcm5yLVx1MDAzZWNudCBcdTAwM2MgYmNuLVx1MDAzZW1ic3NpZF9pZXMtXHUwMDNlY250KSB7XG42ODE3Olx0XHRcdFx0XHRrZnJlZShybnIpO1xuNjgxODpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG42ODE5Olx0XHRcdFx0fVxuNjgyMDpcdFxuNjgyMTpcdFx0XHRcdGJjbi1cdTAwM2VybnJfaWVzID0gcm5yO1xuNjgyMjpcdFx0XHR9XG42ODIzOlx0XHR9XG42ODI0Olx0XG42ODI1Olx0XHRlcnIgPSBubDgwMjExX2NhbGN1bGF0ZV9hcF9vcGVyYXRpb24oYXR0cnMsIGJjbiwgZXh0YWNrKTtcbjY4MjY6XHRcdGlmIChlcnIpXG42ODI3Olx0XHRcdHJldHVybiBlcnI7XG42ODI4Olx0XG42ODI5Olx0XHRpZiAoYmNuLVx1MDAzZWhlX29wZXIgXHUwMDI2XHUwMDI2IChjaGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfQ0hBTl9OT19IRSkpXG42ODMwOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjY4MzE6XHRcbjY4MzI6XHRcdGlmIChiY24tXHUwMDNlZWh0X29wZXIgXHUwMDI2XHUwMDI2IChjaGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBJRUVFODAyMTFfQ0hBTl9OT19FSFQpKVxuNjgzMzpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG42ODM0Olx0XG42ODM1Olx0XHRpZiAoYmNuLVx1MDAzZXVocl9vcGVyIFx1MDAyNlx1MDAyNiAoY2hhbi1cdTAwM2VmbGFncyBcdTAwMjYgSUVFRTgwMjExX0NIQU5fTk9fVUhSKSlcbjY4MzY6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuNjgzNzpcdFxuNjgzODpcdFx0cmV0dXJuIDA7XG42ODM5Olx0fVxuNjg0MDpcdFxuNjg0MTpcdHN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9oZV9vYnNzX3BkKHN0cnVjdCBubGF0dHIgKmF0dHJzLFxuNjg0MjpcdFx0XHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfaGVfb2Jzc19wZCAqaGVfb2Jzc19wZClcbjY4NDM6XHR7XG42ODQ0Olx0XHRzdHJ1Y3QgbmxhdHRyICp0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9NQVggJiM0MzsgMV07XG42ODQ1Olx0XHRpbnQgZXJyO1xuNjg0NjpcdFxuNjg0NzpcdFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfTUFYLCBhdHRycyxcbjY4NDg6XHRcdFx0XHQgICAgICAgaGVfb2Jzc19wZF9wb2xpY3ksIE5VTEwpO1xuNjg0OTpcdFx0aWYgKGVycilcbjY4NTA6XHRcdFx0cmV0dXJuIGVycjtcbjY4NTE6XHRcbjY4NTI6XHRcdGlmICghdGJbTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfU1JfQ1RSTF0pXG42ODUzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNjg1NDpcdFxuNjg1NTpcdFx0aGVfb2Jzc19wZC1cdTAwM2Vzcl9jdHJsID0gbmxhX2dldF91OCh0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9TUl9DVFJMXSk7XG42ODU2Olx0XG42ODU3Olx0XHRpZiAodGJbTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfTUlOX09GRlNFVF0pXG42ODU4Olx0XHRcdGhlX29ic3NfcGQtXHUwMDNlbWluX29mZnNldCA9XG42ODU5Olx0XHRcdFx0bmxhX2dldF91OCh0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9NSU5fT0ZGU0VUXSk7XG42ODYwOlx0XHRpZiAodGJbTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfTUFYX09GRlNFVF0pXG42ODYxOlx0XHRcdGhlX29ic3NfcGQtXHUwMDNlbWF4X29mZnNldCA9XG42ODYyOlx0XHRcdFx0bmxhX2dldF91OCh0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9NQVhfT0ZGU0VUXSk7XG42ODYzOlx0XHRpZiAodGJbTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfTk9OX1NSR19NQVhfT0ZGU0VUXSlcbjY4NjQ6XHRcdFx0aGVfb2Jzc19wZC1cdTAwM2Vub25fc3JnX21heF9vZmZzZXQgPVxuNjg2NTpcdFx0XHRcdG5sYV9nZXRfdTgodGJbTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfTk9OX1NSR19NQVhfT0ZGU0VUXSk7XG42ODY2Olx0XG42ODY3Olx0XHRpZiAoaGVfb2Jzc19wZC1cdTAwM2VtaW5fb2Zmc2V0IFx1MDAzZSBoZV9vYnNzX3BkLVx1MDAzZW1heF9vZmZzZXQpXG42ODY4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNjg2OTpcdFxuNjg3MDpcdFx0aWYgKHRiW05MODAyMTFfSEVfT0JTU19QRF9BVFRSX0JTU19DT0xPUl9CSVRNQVBdKVxuNjg3MTpcdFx0XHRtZW1jcHkoaGVfb2Jzc19wZC1cdTAwM2Vic3NfY29sb3JfYml0bWFwLFxuNjg3MjpcdFx0XHQgICAgICAgbmxhX2RhdGEodGJbTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfQlNTX0NPTE9SX0JJVE1BUF0pLFxuNjg3MzpcdFx0XHQgICAgICAgc2l6ZW9mKGhlX29ic3NfcGQtXHUwMDNlYnNzX2NvbG9yX2JpdG1hcCkpO1xuNjg3NDpcdFxuNjg3NTpcdFx0aWYgKHRiW05MODAyMTFfSEVfT0JTU19QRF9BVFRSX1BBUlRJQUxfQlNTSURfQklUTUFQXSlcbjY4NzY6XHRcdFx0bWVtY3B5KGhlX29ic3NfcGQtXHUwMDNlcGFydGlhbF9ic3NpZF9iaXRtYXAsXG42ODc3Olx0XHRcdCAgICAgICBubGFfZGF0YSh0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9QQVJUSUFMX0JTU0lEX0JJVE1BUF0pLFxuNjg3ODpcdFx0XHQgICAgICAgc2l6ZW9mKGhlX29ic3NfcGQtXHUwMDNlcGFydGlhbF9ic3NpZF9iaXRtYXApKTtcbjY4Nzk6XHRcbjY4ODA6XHRcdGhlX29ic3NfcGQtXHUwMDNlZW5hYmxlID0gdHJ1ZTtcbjY4ODE6XHRcbjY4ODI6XHRcdHJldHVybiAwO1xuNjg4MzpcdH1cbjY4ODQ6XHRcbjY4ODU6XHRzdGF0aWMgaW50IG5sODAyMTFfcGFyc2VfZmlsc19kaXNjb3Zlcnkoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuNjg4NjpcdFx0XHRcdFx0XHRzdHJ1Y3QgbmxhdHRyICphdHRycyxcbjY4ODc6XHRcdFx0XHRcdFx0c3RydWN0IGNmZzgwMjExX2ZpbHNfZGlzY292ZXJ5ICpmZClcbjY4ODg6XHR7XG42ODg5Olx0XHRzdHJ1Y3QgbmxhdHRyICp0YltOTDgwMjExX0ZJTFNfRElTQ09WRVJZX0FUVFJfTUFYICYjNDM7IDFdO1xuNjg5MDpcdFx0aW50IHJldDtcbjY4OTE6XHRcbjY4OTI6XHRcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoXHUwMDI2cmRldi1cdTAwM2V3aXBoeSxcbjY4OTM6XHRcdFx0XHRcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9GSUxTX0RJU0NPVkVSWSkpXG42ODk0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNjg5NTpcdFxuNjg5NjpcdFx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTkw4MDIxMV9GSUxTX0RJU0NPVkVSWV9BVFRSX01BWCwgYXR0cnMsXG42ODk3Olx0XHRcdFx0ICAgICAgIE5VTEwsIE5VTEwpO1xuNjg5ODpcdFx0aWYgKHJldClcbjY4OTk6XHRcdFx0cmV0dXJuIHJldDtcbjY5MDA6XHRcbjY5MDE6XHRcdGlmICghdGJbTkw4MDIxMV9GSUxTX0RJU0NPVkVSWV9BVFRSX0lOVF9NSU5dIFx1MDAyNlx1MDAyNlxuNjkwMjpcdFx0ICAgICF0YltOTDgwMjExX0ZJTFNfRElTQ09WRVJZX0FUVFJfSU5UX01BWF0gXHUwMDI2XHUwMDI2XG42OTAzOlx0XHQgICAgIXRiW05MODAyMTFfRklMU19ESVNDT1ZFUllfQVRUUl9UTVBMXSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMxMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTGVhayBGaXggaW4gYG5sODAyMTFfY29sb3JfY2hhbmdlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyB0aGUgbG9naWMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBubDgwMjExX3BhcnNlX2JlYWNvbmAgYWxsb2NhdGVzIG1lbW9yeSBmb3IgYGJjbi0mZ3Q7bWJzc2lkX2llc2AgYW5kIGBiY24tJmd0O3Jucl9pZXNgLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBjYWxscyB0byBgbmw4MDIxMV9wYXJzZV9tYnNzaWRfZWxlbXNgIGFuZCBgbmw4MDIxMV9wYXJzZV9ybnJfZWxlbXNgLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYSBwb3RlbnRpYWwgbGVhazogaWYgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBzdWNjZWVkZWQsIGJ1dCB0aGUgc3Vic2VxdWVudCBga3phbGxvY19vYmpzYCBmYWlsZWQsIG1lbW9yeSBpbiBgcGFyYW1zLmJlYWNvbl9uZXh0YCB3b3VsZCBiZSBsZWZ0IGRhbmdsaW5nLiBUaGUgcGF0Y2ggYXR0ZW1wdHMgdG8gZml4IHRoaXMgYnkgYWxsb2NhdGluZyBgdGJgIGZpcnN0IGFuZCB0aGVuLCBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gICpmYWlscyosIGp1bXBpbmcgdG8gYG91dGAgdG8gZnJlZSB0aGUgYWxsb2NhdGVkIGBwYXJhbXMuYmVhY29uX25leHQubWJzc2lkX2llc2AgYW5kIGBwYXJhbXMuYmVhY29uX25leHQucm5yX2llc2AuIFRoYXQgc2VlbWVkIGxpa2UgYSByZWFzb25hYmxlIGZpeC4KClRoZW4gSSByZWFsaXplZCwgaG9sZCBvbiBhIHNlY29uZCEgV2hhdCBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZhaWxzIGludGVybmFsbHkgKmJlZm9yZSogdGhlIHBhdGNoIGlzIGFwcGxpZWQ/IEZvciBpbnN0YW5jZSwgd2hhdCBpZiBgbmw4MDIxMV9jYWxjdWxhdGVfYXBfb3BlcmF0aW9uYCBmYWlscyB3aXRoaW4gYG5sODAyMTFfcGFyc2VfYmVhY29uYD8gSW4gdGhhdCBjYXNlLCBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIHJldHVybnMgYW4gZXJyb3IsIGJ1dCBpdCBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IGZyZWUgdGhlIGFsbG9jYXRlZCBgYmNuLSZndDttYnNzaWRfaWVzYCBhbmQgYGJjbi0mZ3Q7cm5yX2llc2AuIEkgbmVlZCB0byByZXZpc2l0IHRoZSBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZ1bmN0aW9uIHRvIGNvbmZpcm0uCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgdGhlIGNvZGUgbG9va3MgbGlrZToKCmBgYGMKCWVyciA9IG5sODAyMTFfY2FsY3VsYXRlX2FwX29wZXJhdGlvbihhdHRycywgYmNuLCBleHRhY2spOwoJaWYgKGVycikKCQlyZXR1cm4gZXJyOwpgYGAKCll1cC4gSWYgYG5sODAyMTFfY2FsY3VsYXRlX2FwX29wZXJhdGlvbmAgZmFpbHMsIGBubDgwMjExX3BhcnNlX2JlYWNvbmAganVzdCByZXR1cm5zIHRoZSBlcnJvciBkaXJlY3RseSwgbGVhdmluZyB0aG9zZSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCEgU28sIGl0JiMzOTtzIHRoZSAqY2FsbGVyJiMzOTtzKiByZXNwb25zaWJpbGl0eSB0byBmcmVlIHRob3NlIGlmIGl0IGZhaWxzLiBCZWZvcmUgdGhlIHBhdGNoLCBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIGRpZCBzb21ldGhpbmcgbGlrZSB0aGlzOgoKYGBgYwoJZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgaW5mby0mZ3Q7YXR0cnMsICZhbXA7cGFyYW1zLmJlYWNvbl9uZXh0LAoJCQkJICAgd2Rldi0mZ3Q7bGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmNoYW5kZWYuY2hhbiwKCQkJCSAgIGluZm8tJmd0O2V4dGFjayk7CglpZiAoZXJyKQoJCXJldHVybiBlcnI7CmBgYAoKSW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yIGZyb20gYG5sODAyMTFfcGFyc2VfYmVhY29uYCwgYHBhcmFtcy5iZWFjb25fbmV4dGAgd2FzIGxlYWtlZC4gTm93LCAqd2l0aCogdGhlIHBhdGNoOgoKYGBgYwoJZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgaW5mby0mZ3Q7YXR0cnMsICZhbXA7cGFyYW1zLmJlYWNvbl9uZXh0LAoJCQkJICAgd2Rldi0mZ3Q7bGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmNoYW5kZWYuY2hhbiwKCQkJCSAgIGluZm8tJmd0O2V4dGFjayk7CglpZiAoZXJyKQoJCWdvdG8gb3V0OwpgYGAKCkFuZCBgb3V0YCAqZG9lcyogZnJlZSB0aGUgbWVtb3J5OgoKYGBgYwpvdXQ6CglrZnJlZShwYXJhbXMuYmVhY29uX25leHQubWJzc2lkX2llcyk7CglrZnJlZShwYXJhbXMuYmVhY29uX2NvbG9yX2NoYW5nZS5tYnNzaWRfaWVzKTsKCWtmcmVlKHBhcmFtcy5iZWFjb25fbmV4dC5ybnJfaWVzKTsKCWtmcmVlKHBhcmFtcy5iZWFjb25fY29sb3JfY2hhbmdlLnJucl9pZXMpOwoJa2ZyZWUodGIpOwoJcmV0dXJuIGVycjsKYGBgCgpZZXMhIFRoYXQmIzM5O3MgaXQuIFRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrLiBUaGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBidWcgZml4LiBHaXZlbiB0aGF0IGl0JiMzOTtzIGluIGEgbmV0bGluayBoYW5kbGVyLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMgb3IgdnVsbmVyYWJpbGl0aWVzIGludHJvZHVjZWQuIFNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGlzIGBubDgwMjExX2NvbG9yX2NoYW5nZWAuIFRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhcmUgYENPTkZJR19NQUM4MDIxMWAgYW5kIGBDT05GSUdfQ0ZHODAyMTFgLiBTbyBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIGJlbG9uZ3MgdG8gYGNmZzgwMjExYC4gSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGJvdGggYGNmZzgwMjExYCBhbmQgYG1hYzgwMjExYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZHODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7Y2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNTEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cdGJvb2wgXCYjMzQ7ZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xubmV0L3dpcmVsZXNzL0tjb25maWctNjktXHRib29sIFwmIzM0O2NmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6ODk6Y29uZmlnIENGRzgwMjExX1JFUVVJUkVfU0lHTkVEX1JFR0RCXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7cmVxdWlyZSByZWdkYiBzaWduYXR1cmVcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctOTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXHRib29sIFwmIzM0O2FsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTExMi1cdHN0cmluZyBcJiMzNDthZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcJiMzNDsgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTIyOmNvbmZpZyBDRkc4MDIxMV9SRUdfQ0VMTFVMQVJfSElOVFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgcmVndWxhdG9yeSBzdXBwb3J0IGZvciBjZWxsdWxhciBiYXNlIHN0YXRpb24gaGludHNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzQtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMzU6Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTU4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjAtXHRib29sIFwmIzM0O2VuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE2OTpjb25maWcgQ0ZHODAyMTFfREVCVUdGU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTcwLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSBEZWJ1Z0ZTIGVudHJpZXNcJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzc6Y29uZmlnIENGRzgwMjExX0NSREFfU1VQUE9SVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVx0Ym9vbCBcJiMzNDtzdXBwb3J0IENSREFcJiMzNDsgaWYgRVhQRVJUXG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODgtXHRib29sIFwmIzM0O2NmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVwmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE5NDpjb25maWcgQ0ZHODAyMTFfS1VOSVRfVEVTVFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGNmZzgwMjExXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNTcKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYENGRzgwMjExYCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgcmV2b2x2ZXMgYXJvdW5kIGBDRkc4MDIxMWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2Ygd2lyZWxlc3MgY29uZmlndXJhdGlvbiBpbiB0aGUgTGludXgga2VybmVsLCBhIHdlbGwtdHJvZGRlbiBwYXRoLiBCdXQgdG8gKnJlYWxseSogZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzaW11bGF0ZSB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb25zLCBJIGtub3cgSSYjMzk7bGwgbmVlZCBgbWFjODAyMTFfaHdzaW1gLiBUaGF0JiMzOTtzIHRoZSBlbXVsYXRpb24gbGF5ZXIgdGhhdCBsZXRzIG1lIGludGVyYWN0IHdpdGggdGhpcyBjb3JlIHdpdGhvdXQgYWN0dWFsIHBoeXNpY2FsIHdpcmVsZXNzIGRldmljZXMuIEl04oCZcyB0aGUga2V5IHRvIGZ1bGx5IHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgYWxsIGhhbmdzIHRvZ2V0aGVyLCBlc3BlY2lhbGx5IGZvciB0ZXN0IGNhc2VzIGFuZCBkZXZlbG9wbWVudC4KCkxldCYjMzk7cyBtYWtlIGFic29sdXRlbHkgc3VyZSBgTUFDODAyMTFfSFdTSU1gIGlzIGVuYWJsZWQuIFRpbWUgdG8gdmVyaWZ5IHRoYXQgYW5kIHNlZSBpZiBhbGwgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxhY2UuIEdvdHRhIGdldCB0aGF0IGVudmlyb25tZW50IHNldCB1cCBjb3JyZWN0bHkgYmVmb3JlIEkgZ28gbXVjaCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM2NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipGaW5kaW5nIHRoZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gd2hlcmUgd2FzIHRoYXQgc2V0dGluZyByZWxhdGVkIHRvIHRoZSBoYXJkd2FyZSBzaW11bGF0aW9uIGZvciBtYWM4MDIxMSBhZ2Fpbj8gSG1tLCBpZiBtZW1vcnkgc2VydmVzLCBhbmQgaXQgdXN1YWxseSBkb2VzIGluIHRoZXNlIG1hdHRlcnMsIGl0JiMzOTtzIHZlcnkgbGlrZWx5IG5lc3RlZCBkZWVwIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgdGhpbmcsIEkmIzM5O2QgYmV0IHRoZSBmYXJtIGl0JiMzOTtzIHByb2JhYmx5IGhhbmdpbmcgb3V0IHVuZGVyIHRoZSBuZXR3b3JrIGRyaXZlcnMsIHNwZWNpZmljYWxseSB0aGUgd2lyZWxlc3Mgc2VjdGlvbiwgYW5kIHdpdGhpbiB0aGF0LCB0aGUgbWFjODAyMTEgc3Vic3lzdGVtLiBBbmQgaWYgSSYjMzk7bSB0aGlua2luZyBhbG9uZyB0aGUgcmlnaHQgbGluZXMsIHRoZSBsaWtlbHkgY2FuZGlkYXRlIGZvciB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGl0c2VsZiB3b3VsZCBiZSBzb21ldGhpbmcgbGlrZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0vS2NvbmZpZ2AuIE9yIHNvbWV0aGluZyBzaW1pbGFyLiBJJiMzOTttIHByZXR0eSBjZXJ0YWluIHRoYXQmIzM5O3MgdGhlIGFyZWEgSSBuZWVkIHRvIHplcm8gaW4gb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTpjb25maWcgTUFDODAyMTFfSFdTSU1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2ODMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTUFDODAyMTFfSFdTSU0gQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBmb2N1cyBpcyBgTUFDODAyMTFfSFdTSU1gLiBUaGF0JiMzOTtzIHRoZSBjb25maWcgaW4gcGxheSBoZXJlLiBNeSBtZW50YWwgbW9kZWwgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGhhcmR3YXJlIHNpbXVsYXRpb24gYXNwZWN0LCBhbmQgSSYjMzk7bSBpbnN0YW50bHkgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyB0aGUgY29udGV4dC4KCkhvbGQgb24sIHRoZSBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIHN5bWJvbCBpcyBqdW1waW5nIG91dCBhdCBtZSBhcyBhIGtleSBhcmVhIG9mIGludGVyZXN0LiBXaHkgaXMgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBnZXR0aW5nIGF0dGVudGlvbiBpbiB0aGlzIGNvbnRleHQ/IEl0JiMzOTtzIG1ha2luZyBtZSB3b25kZXIgaWYgdGhleSYjMzk7cmUgbG9va2luZyBhdCBjb2xvciBzcGFjZSBjaGFuZ2VzLCBwb3NzaWJseSBmb3IgZGVidWdnaW5nIG9yIHNvbWUgaGFyZHdhcmUgZGVwZW5kZW50IHRoaW5nLgoKTXkgbWluZCBpcyBub3cgcmFjaW5nIHRvd2FyZHMgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucy4gQmVmb3JlIGdvaW5nIHRvbyBmYXIgZG93biB0aGF0IHJhYmJpdCBob2xlLCBJIG5lZWQgdG8ga25vdyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIGZvciBvdGhlciBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgYXJlIHJlbGF0ZWQgdG8gdGhhdCBzcGVjaWZpYyBjYWxsOyBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIHRoZSBjaGFuZ2VzIGludm9sdmVkIGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgYXJlIGltcGFjdGVkIGJ5IHRoaXMgZm9jdXMgb24gY29sb3IgY2hhbmdlLiBJdCBtYWtlcyBtZSBjdXJpb3VzIGlmIGl0IGlzIHJlbGF0ZWQgdG8gYW4gaXNzdWUsIG9yIGFuIGVuaGFuY2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtubDgwMjExX2NvbG9yX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9ubDgwMjExLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYz0xODY2NT1zdGF0aWMgaW50IG5sODAyMTFfc2V0X3RpZF9jb25maWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NzIwLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODcyMTpzdGF0aWMgaW50IG5sODAyMTFfY29sb3JfY2hhbmdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NzIyLXtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NTQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwMzQ3LVx0XHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIwMzQ4Olx0XHQuZG9pdCA9IG5sODAyMTFfY29sb3JfY2hhbmdlLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDM0OS1cdFx0LmZsYWdzID0gR0VOTF9VTlNfQURNSU5fUEVSTSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQSBRdWljayBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbGFzZXItZm9jdXNlZDsgaXQmIzM5O3MganVzdCB0b3VjaGluZyBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgLiBUaGF0IGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbi4gQSB0YXJnZXRlZCBmaXggbGlrZSB0aGlzLCBlc3BlY2lhbGx5IHdoZW4gaXQmIzM5O3MgYWJvdXQgYSBOZXRsaW5rIGhhbmRsZXIsIHNjcmVhbXMgJiMzNDtwb3RlbnRpYWwgZm9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucywmIzM0OyBhbmQgdGhhdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIGV2YWx1YXRlLiBBbmQgdGhlIGRlc2NyaXB0aW9uIGlzIHByZXR0eSBjbGVhcjogaXQgYWRkcmVzc2VzIGEgbWVtb3J5IGxlYWsuIFRoaXMgd2FycmFudHMgYSBjbG9zZXIgbG9vay4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIGl0IGZ1enotd29ydGh5PyBHaXZlbiB0aGF0IGl0JiMzOTtzIGEgYnVnIGZpeCB3aXRoaW4gYSBOZXRsaW5rIGhhbmRsZXIsIGFic29sdXRlbHkuIE5ldGxpbmsgaGFuZGxlcnMgYXJlIG5vdG9yaW91cyBmb3IgYmVpbmcgYXR0YWNrIHZlY3RvcnMsIGFuZCBtZW1vcnkgbGVha3Mgb2Z0ZW4gaW5kaWNhdGUgZGVlcGVyIGlzc3VlcyB0aGF0IGZ1enppbmcgY291bGQgZXhwb3NlLgoKVGhlIGNlbnRyYWwgc3ltYm9sIHRvIGZvY3VzIG9uIGlzLCBvZiBjb3Vyc2UsIGBubDgwMjExX2NvbG9yX2NoYW5nZWAuIEkmIzM5O2xsIGJlIGRpZ2dpbmcgaW50byB0aGUgY2FsbCBncmFwaCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuCgpOb3csIGZvciBjb25maWd1cmF0aW9uLCBgQ0ZHODAyMTFgIGlzIHJlbGV2YW50LCBvYnZpb3VzbHkuIEkgYWxzbyBzZWUgYE1BQzgwMjExX0hXU0lNYCBsaXN0ZWQuIFdhaXQgYSBzZWNvbmQsIGlzIGBNQUM4MDIxMV9IV1NJTWAgcmVsaWFudCBvbiBgTUFDODAyMTFgPyBBaCwgeWVzLiBJdCYjMzk7cyBhIGhhcmR3YXJlIHNpbXVsYXRvciwgc28gaXQgbWFrZXMgc2Vuc2UgaXQgZGVwZW5kcyBvbiB0aGUgY29yZSBNQUM4MDIxMSBmcmFtZXdvcmsuIEdvb2QsIHRoYXQgbmFycm93cyBkb3duIHRoZSBzZXR1cCByZXF1aXJlbWVudHMgZm9yIHRlc3Rpbmcgc2lnbmlmaWNhbnRseS4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIHNldHRpbmcgdXAgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24gTUFDODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnPTE9Y29uZmlnIE1BQzgwMjExX0hXU0lNXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MzpcdGRlcGVuZHMgb24gTUFDODAyMTFcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy00LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzkwOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25zaWRlcmluZyB0aGUgQXJjaGl0ZWN0dXJlKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY29tcHJlaGVuc2l2ZSBoZXJlLiBDbGVhcmx5LCB0aGlzIGRpc2N1c3Npb24gbmVlZHMgdG8gZW5jb21wYXNzIGBNQUM4MDIxMWAgdG9vLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNvbXBvbmVudCBpbiB0aGlzIGFyZWEuIEJlZm9yZSBnb2luZyBmdXJ0aGVyLCBhIHF1aWNrIGRlcGVuZGVuY3kgY2hlY2sgb24gYE1BQzgwMjExYCBpcyBpbiBvcmRlci4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgcHJvcGVybHkgYW5kIHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IGNydWNpYWwgY29ubmVjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyOmNvbmZpZyBNQUM4MDIxMVxubmV0L21hYzgwMjExL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgSUVFRSA4MDIuMTEgTmV0d29ya2luZyBTdGFjayAobWFjODAyMTEpXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MTk9aWYgTUFDODAyMTEgIT0gblxubmV0L21hYzgwMjExL0tjb25maWctMjAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTpjb25maWcgTUFDODAyMTFfSEFTX1JDXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMi1cdGJvb2xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzLVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ6Y29uZmlnIE1BQzgwMjExX1JDX01JTlNUUkVMXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7TWluc3RyZWxcJiMzNDsgaWYgRVhQRVJUXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MzE9Y2hvaWNlXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNDAtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo0MTpjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxubmV0L21hYzgwMjExL0tjb25maWctNDItXHRib29sIFwmIzM0O01pbnN0cmVsXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9NDg9ZW5kY2hvaWNlXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjUwOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01MS1cdHN0cmluZ1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnPTU3PWNvbW1lbnQgXCYjMzQ7U29tZSB3aXJlbGVzcyBkcml2ZXJzIHJlcXVpcmUgYSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctNTktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MDpjb25maWcgTUFDODAyMTFfS1VOSVRfVEVTVFxubmV0L21hYzgwMjExL0tjb25maWctNjEtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgbWFjODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxubmV0L21hYzgwMjExL0tjb25maWc6NzA6Y29uZmlnIE1BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTcxLVx0Ym9vbCBcJiMzNDtFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03OC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjc5OmNvbmZpZyBNQUM4MDIxMV9MRURTXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04MC1cdGJvb2wgXCYjMzQ7RW5hYmxlIExFRCB0cmlnZ2Vyc1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg3LVxubmV0L21hYzgwMjExL0tjb25maWc6ODg6Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtFeHBvcnQgbWFjODAyMTEgaW50ZXJuYWxzIGluIERlYnVnRlNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05Ni1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjk3OmNvbmZpZyBNQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTk4LVx0Ym9vbCBcJiMzNDtUcmFjZSBhbGwgbWFjODAyMTEgZGVidWcgbWVzc2FnZXNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMDktXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTA6bWVudWNvbmZpZyBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXHRib29sIFwmIzM0O1NlbGVjdCBtYWM4MDIxMSBkZWJ1Z2dpbmcgZmVhdHVyZXNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTUtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTY6Y29uZmlnIE1BQzgwMjExX05PSU5MSU5FXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0RvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnNcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzEtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMzI6Y29uZmlnIE1BQzgwMjExX1ZFUkJPU0VfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTEzMy1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBkZWJ1Z2dpbmcgb3V0cHV0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTQyLVxubmV0L21hYzgwMjExL0tjb25maWc6MTQzOmNvbmZpZyBNQUM4MDIxMV9NTE1FX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDQtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWFuYWdlZCBNTE1FIG91dHB1dFwmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE1My1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NDpjb25maWcgTUFDODAyMTFfU1RBX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNTUtXHRib29sIFwmIzM0O1ZlcmJvc2Ugc3RhdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjItXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNjM6Y29uZmlnIE1BQzgwMjExX0hUX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjQtXHRib29sIFwmIzM0O1ZlcmJvc2UgSFQgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTc0LVxubmV0L21hYzgwMjExL0tjb25maWc6MTc1OmNvbmZpZyBNQUM4MDIxMV9PQ0JfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3Ni1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBPQ0IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMTg1LVxubmV0L21hYzgwMjExL0tjb25maWc6MTg2OmNvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODctXHRib29sIFwmIzM0O1ZlcmJvc2UgSUJTUyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTYtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxOTc6Y29uZmlnIE1BQzgwMjExX1BTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTgtXHRib29sIFwmIzM0O1ZlcmJvc2UgcG93ZXJzYXZlIG1vZGUgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjA4LVxubmV0L21hYzgwMjExL0tjb25maWc6MjA5OmNvbmZpZyBNQUM4MDIxMV9NUExfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHBlZXIgbGluayBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjEtXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjI6Y29uZmlnIE1BQzgwMjExX01QQVRIX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjMtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwYXRoIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjIzNTpjb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNi1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIEhXTVAgcm91dGluZyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDg6Y29uZmlnIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggc3luY2hyb25pemF0aW9uIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1OC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MDpjb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjcxLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI4MC1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI4MTpjb25maWcgTUFDODAyMTFfVERMU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjgyLVx0Ym9vbCBcJiMzNDtWZXJib3NlIFRETFMgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjkyLVxubmV0L21hYzgwMjExL0tjb25maWc6MjkzOmNvbmZpZyBNQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xubmV0L21hYzgwMjExL0tjb25maWctMjk0LVx0Ym9vbCBcJiMzNDtFeHRyYSBzdGF0aXN0aWNzIGZvciBUWC9SWCBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDctXG5uZXQvbWFjODAyMTEvS2NvbmZpZzozMDg6Y29uZmlnIE1BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDktXHRpbnQgXCYjMzQ7U3RhdGlvbiBoYXNoIHRhYmxlIG1heGltdW0gc2l6ZVwmIzM0OyBpZiBNQUM4MDIxMV9ERUJVR19NRU5VXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjY1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gY29uZmlndXJpbmcgdGhpcyBzeXN0ZW0gcmVsYXRlZCB0byB3aXJlbGVzcyBuZXR3b3JraW5nLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyaW5nIGluIGBNQUM4MDIxMWAgYXMgdGhlIGNlbnRyYWwgcGllY2UuIEkgdGhlbiBuZWVkIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBgQ0ZHODAyMTFgIGFuZCBgTUFDODAyMTFfSFdTSU1gIGJlY2F1c2UgSSYjMzk7bSBxdWl0ZSBzdXJlIHRoZXkmIzM5O3JlIHRpZ2h0bHkgY291cGxlZCB3aXRoIHRoaXMuIEhtbSwgd2FpdCBhIG1vbWVudOKApiBJIG5lZWQgdG8gY29uc2lkZXIgYG5sODAyMTFfY29sb3JfY2hhbmdlYC4gVGhhdCYjMzk7cyBhY3R1YWxseSB3aXRoaW4gYGNmZzgwMjExYCwgaXNuJiMzOTt0IGl0PwoKUmlnaHQsIHRoZSBrZXkgcG9pbnQgdG8gcmVtZW1iZXIgaXMgdGhhdCBgY2ZnODAyMTFgIGRvZXNuJiMzOTt0ICphYnNvbHV0ZWx5KiBuZWVkIGBtYWM4MDIxMWAuIEl0JiMzOTtzIHBvc3NpYmxlIHRvIHVzZSBgY2ZnODAyMTFgIGluZGVwZW5kZW50bHksIGVzcGVjaWFsbHkgZm9yIGZ1bGxtYWMgZGV2aWNlcy4gSG93ZXZlciwgYG1hYzgwMjExX2h3c2ltYCwgd2hpY2ggSSBkZWZpbml0ZWx5IHdhbnQsIHJlcXVpcmVzIGBNQUM4MDIxMWAuIFNvLCBjb25maXJtaW5nIG15IGVhcmxpZXIgaW50dWl0aW9uOiBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYCBpdCBpcy4gVGhvc2UgYXJlIGRlZmluaXRlbHkgZ29vZCB0byBpbmNsdWRlLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkmIzM5O2xsIGRvdWJsZSBjaGVjayB0aGF0IGBubDgwMjExX2NvbG9yX2NoYW5nZWAgaXMgcmVhY2hhYmxlLiBUaGF0IGhhbmRsZXIgaXMgdGllZCB0byB0aGUgYE5MODAyMTFfQ01EX0NPTE9SX0NIQU5HRWAgbmV0bGluayBjb21tYW5kLiBMb29rcyBsaWtlIGl0IGhhcyBkZXBlbmRlbmNpZXMgb24gYHJkZXYtJmd0O29wcy0mZ3Q7Y29sb3JfY2hhbmdlYCBhbmQgYE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SYC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQsIGJ1dCBqdXN0IHRvIGJlIHN1cmU6IGRvZXMgYG1hYzgwMjExX2h3c2ltYCBzdXBwb3J0IGBjb2xvcl9jaGFuZ2VgPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaW50ZWdyYXRpb24gY29tcGxldGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2xvcl9jaGFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5ODMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpZ2dpbmcgaW50byB0aGUgYGNvbG9yX2NoYW5nZWAgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IGBtYWM4MDIxMV9od3NpbWAgc3VwcG9ydGVkICphbGwqIHRoZSBzdGFuZGFyZCBmdW5jdGlvbmFsaXR5LCBidXQgbm93IEkmIzM5O20gcXVlc3Rpb25pbmcgd2hldGhlciBpdCBhY3R1YWxseSBpbXBsZW1lbnRzIGBjb2xvcl9jaGFuZ2VgLiBUaGF0IHdvdWxkIGJlIGEgaHVnZSBvdmVyc2lnaHQgaWYgaXQmIzM5O3MgbWlzc2luZywgc2luY2UgdGhpcyBpcyBhbiBpbXBvcnRhbnQgcGFydCBvZiB0aGUgODAyLjExIHN0YW5kYXJkLCBlc3BlY2lhbGx5IGZvciBhZHZhbmNlZCBmZWF0dXJlcy4gSSBuZWVkIHRvIHZlcmlmeSB0aGlzIGltbWVkaWF0ZWx5LiBBbHJpZ2h0LCBsZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBgbWFjODAyMTFgIG9wZXJhdGlvbnMgYW5kIG1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGlzIHByZXNlbnQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBjb2xvcl9jaGFuZ2VgIGlzIGNvcnJlY3RseSBjYWxsZWQsIGFuZCB3b3JraW5nIGNvcnJlY3RseSwgb3IgZmlndXJlIG91dCAqd2h5KiBpdCYjMzk7cyBhYnNlbnQgZnJvbSBgbWFjODAyMTFfaHdzaW1gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2xvcl9jaGFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9jZmcuYz0xMDk4PWllZWU4MDIxMV9zZXRfcHJvYmVfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMTEwMC1cdFx0XHQgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jc2Ffc2V0dGluZ3MgKmNzYSxcbm5ldC9tYWM4MDIxMS9jZmcuYzoxMTAxOlx0XHRcdCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NvbG9yX2NoYW5nZV9zZXR0aW5ncyAqY2NhLFxubmV0L21hYzgwMjExL2NmZy5jLTExMDItXHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rKVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz0xNDY0PWllZWU4MDIxMV9hc3NpZ25fYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy0xNDY3LVx0XHRcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY3NhX3NldHRpbmdzICpjc2EsXG5uZXQvbWFjODAyMTEvY2ZnLmM6MTQ2ODpcdFx0XHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NvbG9yX2NoYW5nZV9zZXR0aW5ncyAqY2NhLFxubmV0L21hYzgwMjExL2NmZy5jLTE0NjktXHRcdFx0dTY0ICpjaGFuZ2VkKVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz0xOTM3PXN0YXRpYyBpbnQgaWVlZTgwMjExX2NoYW5nZV9iZWFjb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMTk1OS1cdCAqL1xubmV0L21hYzgwMjExL2NmZy5jOjE5NjA6XHRpZiAobGlua19jb25mLVx1MDAzZWNzYV9hY3RpdmUgfHwgbGlua19jb25mLVx1MDAzZWNvbG9yX2NoYW5nZV9hY3RpdmUpXG5uZXQvbWFjODAyMTEvY2ZnLmMtMTk2MS1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9MjAxMT1zdGF0aWMgaW50IGllZWU4MDIxMV9zdG9wX2FwKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTIwNDUtXHRsaW5rX2NvbmYtXHUwMDNlY3NhX2FjdGl2ZSA9IGZhbHNlO1xubmV0L21hYzgwMjExL2NmZy5jOjIwNDY6XHRsaW5rX2NvbmYtXHUwMDNlY29sb3JfY2hhbmdlX2FjdGl2ZSA9IGZhbHNlO1xubmV0L21hYzgwMjExL2NmZy5jLTIwNDctXHRpZWVlODAyMTFfdmlmX3VuYmxvY2tfcXVldWVzX2NzYShzZGF0YSk7XG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTQ1NjM9c3RhdGljIGludCBpZWVlODAyMTFfc2V0X2NzYV9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmtfZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY5My1cbm5ldC9tYWM4MDIxMS9jZmcuYzo0Njk0OnN0YXRpYyB2b2lkIGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfYWJvcnQoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmspXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY5NS17XG5uZXQvbWFjODAyMTEvY2ZnLmM6NDY5NjpcdGxpbmstXHUwMDNlY29uZi1cdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlID0gZmFsc2U7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY5Ny1cbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY5OS1cbm5ldC9tYWM4MDIxMS9jZmcuYzo0NzAwOlx0Y2ZnODAyMTFfY29sb3JfY2hhbmdlX2Fib3J0ZWRfbm90aWZ5KGxpbmstXHUwMDNlc2RhdGEtXHUwMDNlZGV2LCBsaW5rLVx1MDAzZWxpbmtfaWQpO1xubmV0L21hYzgwMjExL2NmZy5jLTQ3MDEtfVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz00NzA0PV9faWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTQ3OTEtXHQvKiBpZiB0aGVyZSBpcyBhIGNvbG9yIGNoYW5nZSBpbiBwcm9ncmVzcywgYWJvcnQgaXQgKi9cbm5ldC9tYWM4MDIxMS9jZmcuYzo0NzkyOlx0aWYgKGxpbmtfY29uZi1cdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlKVxubmV0L21hYzgwMjExL2NmZy5jOjQ3OTM6XHRcdGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfYWJvcnQobGlua19kYXRhKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy00Nzk0LVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz01NTA4PXN0YXRpYyBpbnRcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NTA5OmllZWU4MDIxMV9zZXRfYWZ0ZXJfY29sb3JfY2hhbmdlX2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NTEwLVx0XHRcdFx0XHR1NjQgKmNoYW5nZWQpXG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTU1Mzk9c3RhdGljIGludFxubmV0L21hYzgwMjExL2NmZy5jOjU1NDA6aWVlZTgwMjExX3NldF9jb2xvcl9jaGFuZ2VfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxubmV0L21hYzgwMjExL2NmZy5jOjU1NDE6XHRcdFx0XHQgIHN0cnVjdCBjZmc4MDIxMV9jb2xvcl9jaGFuZ2Vfc2V0dGluZ3MgKnBhcmFtcyxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NTQyLVx0XHRcdFx0ICB1NjQgKmNoYW5nZWQpXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTU1NDQtXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IGxpbmstXHUwMDNlc2RhdGE7XG5uZXQvbWFjODAyMTEvY2ZnLmM6NTU0NTpcdHN0cnVjdCBpZWVlODAyMTFfY29sb3JfY2hhbmdlX3NldHRpbmdzIGNvbG9yX2NoYW5nZSA9IHt9O1xubmV0L21hYzgwMjExL2NmZy5jLTU1NDYtXHRpbnQgZXJyO1xuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy01NTU3LVxubmV0L21hYzgwMjExL2NmZy5jOjU1NTg6XHRcdGNvbG9yX2NoYW5nZS5jb3VudGVyX29mZnNldF9iZWFjb24gPVxubmV0L21hYzgwMjExL2NmZy5jLTU1NTktXHRcdFx0cGFyYW1zLVx1MDAzZWNvdW50ZXJfb2Zmc2V0X2JlYWNvbjtcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NTYwOlx0XHRjb2xvcl9jaGFuZ2UuY291bnRlcl9vZmZzZXRfcHJlc3AgPVxubmV0L21hYzgwMjExL2NmZy5jLTU1NjEtXHRcdFx0cGFyYW1zLVx1MDAzZWNvdW50ZXJfb2Zmc2V0X3ByZXNwO1xubmV0L21hYzgwMjExL2NmZy5jOjU1NjI6XHRcdGNvbG9yX2NoYW5nZS5jb3VudCA9IHBhcmFtcy1cdTAwM2Vjb3VudDtcbm5ldC9tYWM4MDIxMS9jZmcuYy01NTYzLVxubmV0L21hYzgwMjExL2NmZy5jLTU1NjQtXHRcdGVyciA9IGllZWU4MDIxMV9hc3NpZ25fYmVhY29uKHNkYXRhLCBsaW5rLFxubmV0L21hYzgwMjExL2NmZy5jOjU1NjU6XHRcdFx0XHRcdCAgICAgIFx1MDAyNnBhcmFtcy1cdTAwM2ViZWFjb25fY29sb3JfY2hhbmdlLFxubmV0L21hYzgwMjExL2NmZy5jOjU1NjY6XHRcdFx0XHRcdCAgICAgIE5VTEwsIFx1MDAyNmNvbG9yX2NoYW5nZSwgY2hhbmdlZCk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNTU2Ny1cdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz01NTc5PXN0YXRpYyB2b2lkXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTU4MDppZWVlODAyMTFfY29sb3JfY2hhbmdlX2Jzc19jb25maWdfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxubmV0L21hYzgwMjExL2NmZy5jLTU1ODEtXHRcdFx0XHRcdCB1OCBjb2xvciwgaW50IGVuYWJsZSwgdTY0IGNoYW5nZWQpXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTU2MDktXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTYxMDpzdGF0aWMgaW50IGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfZmluYWxpemUoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmspXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYxMS17XG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTU2MTgtXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTYxOTpcdGxpbmstXHUwMDNlY29uZi1cdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlID0gZmFsc2U7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYyMC1cbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjIxOlx0ZXJyID0gaWVlZTgwMjExX3NldF9hZnRlcl9jb2xvcl9jaGFuZ2VfYmVhY29uKGxpbmssIFx1MDAyNmNoYW5nZWQpO1xubmV0L21hYzgwMjExL2NmZy5jLTU2MjItXHRpZiAoZXJyKSB7XG5uZXQvbWFjODAyMTEvY2ZnLmM6NTYyMzpcdFx0Y2ZnODAyMTFfY29sb3JfY2hhbmdlX2Fib3J0ZWRfbm90aWZ5KHNkYXRhLVx1MDAzZWRldiwgbGluay1cdTAwM2VsaW5rX2lkKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy01NjI0LVx0XHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy01NjI2LVxubmV0L21hYzgwMjExL2NmZy5jOjU2Mjc6XHRpZWVlODAyMTFfY29sb3JfY2hhbmdlX2Jzc19jb25maWdfbm90aWZ5KGxpbmssXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTYyODpcdFx0XHRcdFx0XHQgbGluay1cdTAwM2Vjb25mLVx1MDAzZWNvbG9yX2NoYW5nZV9jb2xvcixcbm5ldC9tYWM4MDIxMS9jZmcuYy01NjI5LVx0XHRcdFx0XHRcdCAxLCBjaGFuZ2VkKTtcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjMwOlx0Y2ZnODAyMTFfY29sb3JfY2hhbmdlX25vdGlmeShzZGF0YS1cdTAwM2VkZXYsIGxpbmstXHUwMDNlbGlua19pZCk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYzMS1cbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYzNC1cbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjM1OnZvaWQgaWVlZTgwMjExX2NvbG9yX2NoYW5nZV9maW5hbGl6ZV93b3JrKHN0cnVjdCB3aXBoeSAqd2lwaHksXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYzNi1cdFx0XHRcdFx0ICBzdHJ1Y3Qgd2lwaHlfd29yayAqd29yaylcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYzOS1cdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhLFxubmV0L21hYzgwMjExL2NmZy5jOjU2NDA6XHRcdFx0ICAgICBjb2xvcl9jaGFuZ2VfZmluYWxpemVfd29yayk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY0MS1cdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbGluay1cdTAwM2VzZGF0YTtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY0Ny1cdC8qIEFQIG1pZ2h0IGhhdmUgYmVlbiBzdG9wcGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBsb2NrLiAqL1xubmV0L21hYzgwMjExL2NmZy5jOjU2NDg6XHRpZiAoIWxpbmtfY29uZi1cdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlKVxubmV0L21hYzgwMjExL2NmZy5jLTU2NDktXHRcdHJldHVybjtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY1My1cbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjU0Olx0aWVlZTgwMjExX2NvbG9yX2NoYW5nZV9maW5hbGl6ZShsaW5rKTtcbm5ldC9tYWM4MDIxMS9jZmcuYy01NjU1LX1cbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTY1Nz12b2lkIGllZWU4MDIxMV9jb2xvcl9jb2xsaXNpb25fZGV0ZWN0aW9uX3dvcmsoc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY2OC1cbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjY5OnZvaWQgaWVlZTgwMjExX2NvbG9yX2NoYW5nZV9maW5pc2goc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggbGlua19pZClcbm5ldC9tYWM4MDIxMS9jZmcuYy01NjcwLXtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY4NS1cdHdpcGh5X3dvcmtfcXVldWUoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTY4NjpcdFx0XHQgXHUwMDI2bGluay1cdTAwM2Vjb2xvcl9jaGFuZ2VfZmluYWxpemVfd29yayk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY4Ny1cbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY4OS19XG5uZXQvbWFjODAyMTEvY2ZnLmM6NTY5MDpFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFfY29sb3JfY2hhbmdlX2ZpbmlzaCk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY5MS1cbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTY5Mz1pZWVlODAyMTFfb2Jzc19jb2xvcl9jb2xsaXNpb25fbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTU3MDktXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTcxMDpcdGlmIChsaW5rLVx1MDAzZWNvbmYtXHUwMDNlY29sb3JfY2hhbmdlX2FjdGl2ZSB8fCBsaW5rLVx1MDAzZWNvbmYtXHUwMDNlY3NhX2FjdGl2ZSkge1xubmV0L21hYzgwMjExL2NmZy5jLTU3MTEtXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz01NzMzPXN0YXRpYyBpbnRcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NzM0OmllZWU4MDIxMV9jb2xvcl9jaGFuZ2Uoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NzM1Olx0XHQgICAgICAgc3RydWN0IGNmZzgwMjExX2NvbG9yX2NoYW5nZV9zZXR0aW5ncyAqcGFyYW1zKVxubmV0L21hYzgwMjExL2NmZy5jLTU3MzYte1xuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy01NzYxLVx0ICovXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTc2MjpcdGlmIChsaW5rX2NvbmYtXHUwMDNlY29sb3JfY2hhbmdlX2FjdGl2ZSB8fCBsaW5rX2NvbmYtXHUwMDNlY3NhX2FjdGl2ZSkge1xubmV0L21hYzgwMjExL2NmZy5jLTU3NjMtXHRcdGVyciA9IC1FQlVTWTtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTc3Mi1cbm5ldC9tYWM4MDIxMS9jZmcuYzo1NzczOlx0ZXJyID0gaWVlZTgwMjExX3NldF9jb2xvcl9jaGFuZ2VfYmVhY29uKGxpbmssIHBhcmFtcywgXHUwMDI2Y2hhbmdlZCk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNTc3NC1cdGlmIChlcnIpXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTU3NzYtXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTc3NzpcdGxpbmtfY29uZi1cdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlID0gdHJ1ZTtcbm5ldC9tYWM4MDIxMS9jZmcuYzo1Nzc4Olx0bGlua19jb25mLVx1MDAzZWNvbG9yX2NoYW5nZV9jb2xvciA9IHBhcmFtcy1cdTAwM2Vjb2xvcjtcbm5ldC9tYWM4MDIxMS9jZmcuYy01Nzc5LVxubmV0L21hYzgwMjExL2NmZy5jOjU3ODA6XHRjZmc4MDIxMV9jb2xvcl9jaGFuZ2Vfc3RhcnRlZF9ub3RpZnkoc2RhdGEtXHUwMDNlZGV2LCBwYXJhbXMtXHUwMDNlY291bnQsIGxpbmtfaWQpO1xubmV0L21hYzgwMjExL2NmZy5jLTU3ODEtXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTc4Mi1cdGlmIChjaGFuZ2VkKVxubmV0L21hYzgwMjExL2NmZy5jOjU3ODM6XHRcdGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfYnNzX2NvbmZpZ19ub3RpZnkobGluaywgMCwgMCwgY2hhbmdlZCk7XG5uZXQvbWFjODAyMTEvY2ZnLmMtNTc4NC1cdGVsc2Vcbm5ldC9tYWM4MDIxMS9jZmcuYy01Nzg1LVx0XHQvKiBpZiB0aGUgYmVhY29uIGRpZG4mIzM5O3QgY2hhbmdlLCB3ZSBjYW4gZmluYWxpemUgaW1tZWRpYXRlbHkgKi9cbm5ldC9tYWM4MDIxMS9jZmcuYzo1Nzg2Olx0XHRpZWVlODAyMTFfY29sb3JfY2hhbmdlX2ZpbmFsaXplKGxpbmspO1xubmV0L21hYzgwMjExL2NmZy5jLTU3ODctXG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTU5OTE9Y29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyBtYWM4MDIxMV9jb25maWdfb3BzID0ge1xuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYy02MDk0LVx0LnNldF9zYXJfc3BlY3MgPSBpZWVlODAyMTFfc2V0X3Nhcl9zcGVjcyxcbm5ldC9tYWM4MDIxMS9jZmcuYzo2MDk1Olx0LmNvbG9yX2NoYW5nZSA9IGllZWU4MDIxMV9jb2xvcl9jaGFuZ2UsXG5uZXQvbWFjODAyMTEvY2ZnLmMtNjA5Ni1cdC5zZXRfcmFkYXJfYmFja2dyb3VuZCA9IGllZWU4MDIxMV9zZXRfcmFkYXJfYmFja2dyb3VuZCxcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yNjQ9c3RydWN0IGllZWU4MDIxMV9jc2Ffc2V0dGluZ3Mge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTI3My1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjI3NDpzdHJ1Y3QgaWVlZTgwMjExX2NvbG9yX2NoYW5nZV9zZXR0aW5ncyB7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yNzUtXHR1MTYgY291bnRlcl9vZmZzZXRfYmVhY29uO1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTEwOTk9c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTExMTgtXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoxMTE5Olx0c3RydWN0IHdpcGh5X3dvcmsgY29sb3JfY2hhbmdlX2ZpbmFsaXplX3dvcms7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMTIwLVx0c3RydWN0IHdpcGh5X2RlbGF5ZWRfd29yayBjb2xvcl9jb2xsaXNpb25fZGV0ZWN0X3dvcms7XG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MjE2NT1pbnQgaWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjE2OC0vKiBjb2xvciBjaGFuZ2UgaGFuZGxpbmcgKi9cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjIxNjk6dm9pZCBpZWVlODAyMTFfY29sb3JfY2hhbmdlX2ZpbmFsaXplX3dvcmsoc3RydWN0IHdpcGh5ICp3aXBoeSxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIxNzAtXHRcdFx0XHRcdCAgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspO1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTQ3OT1zdGF0aWMgdm9pZCBpZWVlODAyMTFfZG9fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCBnb2luZ19kb3duKVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTU3My1cdHdpcGh5X3dvcmtfY2FuY2VsKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxubmV0L21hYzgwMjExL2lmYWNlLmM6NTc0Olx0XHRcdCAgXHUwMDI2c2RhdGEtXHUwMDNlZGVmbGluay5jb2xvcl9jaGFuZ2VfZmluYWxpemVfd29yayk7XG5uZXQvbWFjODAyMTEvaWZhY2UuYy01NzUtXHR3aXBoeV9ocnRpbWVyX3dvcmtfY2FuY2VsKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuLS1cbm5ldC9tYWM4MDIxMS9saW5rLmM9OTU9dm9pZCBpZWVlODAyMTFfbGlua19pbml0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9saW5rLmMtMTMxLVx0XHRcdGllZWU4MDIxMV9jc2FfZmluYWxpemVfd29yayk7XG5uZXQvbWFjODAyMTEvbGluay5jOjEzMjpcdHdpcGh5X3dvcmtfaW5pdChcdTAwMjZsaW5rLVx1MDAzZWNvbG9yX2NoYW5nZV9maW5hbGl6ZV93b3JrLFxubmV0L21hYzgwMjExL2xpbmsuYzoxMzM6XHRcdFx0aWVlZTgwMjExX2NvbG9yX2NoYW5nZV9maW5hbGl6ZV93b3JrKTtcbm5ldC9tYWM4MDIxMS9saW5rLmMtMTM0LVx0d2lwaHlfZGVsYXllZF93b3JrX2luaXQoXHUwMDI2bGluay1cdTAwM2Vjb2xvcl9jb2xsaXNpb25fZGV0ZWN0X3dvcmssXG4tLVxubmV0L21hYzgwMjExL2xpbmsuYz0xNjI9dm9pZCBpZWVlODAyMTFfbGlua19zdG9wKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rKVxuLS1cbm5ldC9tYWM4MDIxMS9saW5rLmMtMTY5LVx0d2lwaHlfd29ya19jYW5jZWwobGluay1cdTAwM2VzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbm5ldC9tYWM4MDIxMS9saW5rLmM6MTcwOlx0XHRcdCAgXHUwMDI2bGluay1cdTAwM2Vjb2xvcl9jaGFuZ2VfZmluYWxpemVfd29yayk7XG5uZXQvbWFjODAyMTEvbGluay5jLTE3MS1cdHdpcGh5X3dvcmtfY2FuY2VsKGxpbmstXHUwMDNlc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksXG4tLVxubmV0L21hYzgwMjExL3J4LmM9MzQ3OT1pZWVlODAyMTFfcnhfY2hlY2tfYnNzX2NvbG9yX2NvbGxpc2lvbihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jLTM0OTMtXHRic3NfY29uZiA9IHJ4LVx1MDAzZWxpbmstXHUwMDNlY29uZjtcbm5ldC9tYWM4MDIxMS9yeC5jOjM0OTQ6XHRpZiAoYnNzX2NvbmYtXHUwMDNlY3NhX2FjdGl2ZSB8fCBic3NfY29uZi1cdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlIHx8XG5uZXQvbWFjODAyMTEvcnguYy0zNDk1LVx0ICAgICFic3NfY29uZi1cdTAwM2VoZV9ic3NfY29sb3IuZW5hYmxlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzOTIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgQlNTIENvbG9yIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvICptYWM4MDIxMSogaW1wbGVtZW50cyB0aGUgKmNvbG9yX2NoYW5nZSogZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggYGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VgLiBUaGF0IG1ha2VzIHNlbnNlLiBBbmQgKm1hYzgwMjExX2h3c2ltKiBpcyBidWlsdCBvbiB0b3Agb2YgKm1hYzgwMjExKiwgbWVhbmluZyBpdCBpbmhlcmVudGx5IHVzZXMgdGhlICptYWM4MDIxMSogY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLiBUaGlzIGluY2x1ZGVzIHJlZ2lzdGVyaW5nIGBtYWM4MDIxMV9jb25maWdfb3BzYCwgYW5kIGltcG9ydGFudGx5LCB0aGUgYC5jb2xvcl9jaGFuZ2VgIGZ1bmN0aW9uIHBvaW50ZXIgaXMgY29ycmVjdGx5IGFzc2lnbmVkIHRvIGBpZWVlODAyMTFfY29sb3JfY2hhbmdlYCB3aXRoaW4gdGhhdCBzdHJ1Y3R1cmUuCgpBaGEsIGFuZCAqbWFjODAyMTFfaHdzaW0qIHJlZ2lzdGVycyBhICp3aXBoeSogd2l0aCAqbWFjODAyMTEqLiBUaGVyZWZvcmUsIGl0IHNob3VsZCBpbmhlcml0IHRob3NlICptYWM4MDIxMV9jb25maWdfb3BzKi4gU28sICpubDgwMjExX2NvbG9yX2NoYW5nZSogKnNob3VsZCogYmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIHRocm91Z2ggKm1hYzgwMjExX2h3c2ltKiB0aGVuLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHdpdGggYSBjaGVjay4uLiBJIHRoaW5rIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUgZGlyZWN0IHBhdGggbm93LgoKTm93LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIGxvb2sgYXQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciAqbWFjODAyMTFfaHdzaW0qIG9yICpOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUiouIEkga25vdyB0aGF0IHRoZSBmZWF0dXJlICpOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUiogaXMganVzdCBhIGZlYXR1cmUgZmxhZy4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiAqbWFjODAyMTEqIGl0c2VsZiBzZXRzIHRoaXMgZmxhZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Tkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9yeC5jPTM0Nzk9aWVlZTgwMjExX3J4X2NoZWNrX2Jzc19jb2xvcl9jb2xsaXNpb24oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbi0tXG5uZXQvbWFjODAyMTEvcnguYy0zNDg2LVx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldChyeC1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSxcbm5ldC9tYWM4MDIxMS9yeC5jOjM0ODc6XHRcdFx0XHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SKSlcbm5ldC9tYWM4MDIxMS9yeC5jLTM0ODgtXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxNzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGVidWdnaW5nIGEgTWlzc2luZyBCU1MgQ29sb3IgRmVhdHVyZSoqCgpIbW0sIGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgaXQgdHJ1ZSB0aGF0IGBtYWM4MDIxMWAgZG9lc24mIzM5O3QgYXV0b21hdGljYWxseSBzZXQgdGhlIGBOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUmAgZXh0ZW5zaW9uIGZlYXR1cmU/IFRoYXQgc2VlbXMgb2RkLCBnaXZlbiBob3cgY3J1Y2lhbCBCU1MgY29sb3IgaXMgYmVjb21pbmcgaW4gbW9kZXJuIDgwMi4xMSBkZXBsb3ltZW50cy4gSSBuZWVkIHRvIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24uIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29kZSBhbmQgZGV0ZXJtaW5lIGV4YWN0bHkgKndoZXJlKiB0aGlzIGZsYWcgaXMgc2V0IChvciwgYXMgdGhlIGNhc2UgbWF5IGJlLCAqaXNuJiMzOTt0KiBzZXQpLiBXZSBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIGFuZCBhbnkgcG90ZW50aWFsIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcyBmbGFnJiMzOTtzIHN0YXRlIHdpdGhpbiB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcy4gVGltZSB0byBmaXJlIHVwIHRoZSBkZWJ1Z2dlciBhbmQgc3RhcnQgdHJhY2luZyB0aHJvdWdoIHRoZSByZWxldmFudCBjb2RlIHBhdGhzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMjozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jPTEwNDQyPXN0YXRpYyBpbnQgX19hdGgxMWtfbWFjX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMWsgKmFyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmMtMTA1OTgtXHRcdHdpcGh5X2V4dF9mZWF0dXJlX3NldChhci1cdTAwM2Vody1cdTAwM2V3aXBoeSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvbWFjLmM6MTA1OTk6XHRcdFx0XHQgICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jLTEwNjAwLVx0XHRpZWVlODAyMTFfaHdfc2V0KGFyLVx1MDAzZWh3LCBERVRFQ1RTX0NPTE9SX0NPTExJU0lPTik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYz0xNDc3ND1zdGF0aWMgaW50IGF0aDEya19tYWNfaHdfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19odyAqYWgpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDk1Ni1cdFx0ICAgICBhYi1cdTAwM2V3bWlfYWIuc3ZjX21hcCkpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmM6MTQ5NTc6XHRcdHdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYy0xNDk1OC1cdFx0aWVlZTgwMjExX2h3X3NldChodywgREVURUNUU19DT0xPUl9DT0xMSVNJT04pO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2luaXQuYz0zNTg9bXQ3OTE1X2luaXRfd2lwaHkoc3RydWN0IG10NzkxNV9waHkgKnBoeSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9pbml0LmMtMzg3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvaW5pdC5jOjM4ODpcdHdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvaW5pdC5jLTM4OS1cdHdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9WSFRfSUJTUyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvaW5pdC5jPTQ3OD1tdDc5OTZfaW5pdF93aXBoeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IG10a193ZWRfZGV2aWNlICp3ZWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvaW5pdC5jLTUxNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L2luaXQuYzo1MTY6XHR3aXBoeV9leHRfZmVhdHVyZV9zZXQod2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L2luaXQuYy01MTctXHR3aXBoeV9leHRfZmVhdHVyZV9zZXQod2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfVkhUX0lCU1MpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jPTU2NTA9c3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9uZXdfcmFkaW8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01OTM2LVx0d2lwaHlfZXh0X2ZlYXR1cmVfc2V0KGh3LVx1MDAzZXdpcGh5LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NTkzNzpcdFx0XHQgICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01OTM4LVx0d2lwaHlfZXh0X2ZlYXR1cmVfc2V0KGh3LVx1MDAzZXdpcGh5LFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmg9NjgxMD1lbnVtIG5sODAyMTFfZmVhdHVyZV9mbGFncyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaC03MDE2LSAqXG5pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oOjcwMTc6ICogQE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SOiBUaGUgZHJpdmVyIHN1cHBvcnRzIEJTUyBjb2xvciBjb2xsaXNpb25cbmluY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgtNzAxOC0gKlx0ZGV0ZWN0aW9uIGFuZCBjaGFuZ2UgYW5ub3VuY2VtbnRzLlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmg9NzA5MT1lbnVtIG5sODAyMTFfZXh0X2ZlYXR1cmVfaW5kZXgge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgtNzE1MS1cdE5MODAyMTFfRVhUX0ZFQVRVUkVfUFJPVF9SQU5HRV9ORUdPX0FORF9NRUFTVVJFLFxuaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaDo3MTUyOlx0Tkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1IsXG5pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oLTcxNTMtXHROTDgwMjExX0VYVF9GRUFUVVJFX0ZJTFNfQ1JZUFRPX09GRkxPQUQsXG4tLVxubmV0L21hYzgwMjExL3J4LmM9MzQ3OT1pZWVlODAyMTFfcnhfY2hlY2tfYnNzX2NvbG9yX2NvbGxpc2lvbihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jLTM0ODYtXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHJ4LVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5LFxubmV0L21hYzgwMjExL3J4LmM6MzQ4NzpcdFx0XHRcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1IpKVxubmV0L21hYzgwMjExL3J4LmMtMzQ4OC1cdFx0cmV0dXJuO1xuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTg3MjE9c3RhdGljIGludCBubDgwMjExX2NvbG9yX2NoYW5nZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg3MzQtXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFx1MDAyNnJkZXYtXHUwMDNld2lwaHksXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NzM1Olx0XHRcdFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUikpXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NzM2LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDIwCgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDE0NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgbWFjODAyMTEgTWVtb3J5IExlYWsgRml4KioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQgc2VlbXMgdGhlIGBOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUmAgZmVhdHVyZSBpcyBzZXQgd2l0aGluIGBtYWM4MDIxMV9od3NpbV9tYWluLmNgLCBtZWFuaW5nIGl0JiMzOTtzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSB0aHJvdWdoIGBtYWM4MDIxMV9od3NpbWAuIFRoZSBjcml0aWNhbCBjb25maWdzIEkgbmVlZCB0byBoYXZlIGVuYWJsZWQgYXJlIGBDRkc4MDIxMWAsIGBNQUM4MDIxMWAsIGFuZCBgTUFDODAyMTFfSFdTSU1gLiBUaGUgZnVuY3Rpb24gSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGlzIGBubDgwMjExX2NvbG9yX2NoYW5nZWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgY2hhbmdlIGFpbWVkIGF0IGZpeGluZyBhIG1lbW9yeSBsZWFrIGluIGEgcmVhY2hhYmxlIE5ldGxpbmsgaGFuZGxlci4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgY29uZmlncyBhZ2FpbjsgdGhleSBhcmUgaW5kZWVkIGBDRkc4MDIxMWAsIGBNQUM4MDIxMWAsIGFuZCBgTUFDODAyMTFfSFdTSU1gLgoKTm93LCByZXZpZXdpbmcgdGhlIHBhdGNoIGl0c2VsZi4uLiBJIHNlZSB0aGF0IGluIHRoZSBvcmlnaW5hbCBjb2RlLCBgdGJgIChwcmVzdW1hYmx5IGEgdGFibGUgb3IgYnVmZmVyKSB3YXMgYmVpbmcgYWxsb2NhdGVkICphZnRlciogY2FsbGluZyBgbmw4MDIxMV9wYXJzZV9iZWFjb25gLiBJZiB0aGUgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBmdW5jdGlvbiBmYWlsZWQsIGl0IHdvdWxkIGp1c3QgcmV0dXJuIHRoZSBlcnJvciwgbGVhdmluZyB3aGF0ZXZlciBtZW1vcnkgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBhbGxvY2F0ZWQgYmVoaW5k4oCUYSBsZWFrLiBGdXJ0aGVybW9yZSwgZXZlbiBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIHN1Y2NlZWRlZCBidXQgdGhlIHN1YnNlcXVlbnQgYGt6YWxsb2Nfb2Jqc2AgZmFpbGVkLCBpdCB3b3VsZCBzdGlsbCByZXR1cm4gYC1FTk9NRU1gLCBsZWFraW5nIGFueSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGBubDgwMjExX3BhcnNlX2JlYWNvbmAuIEJhc2ljYWxseSwgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIG11bHRpcGxlIGxlYWsgc2NlbmFyaW9zLgoKVGhlIHBhdGNoIGNvcnJlY3RzIHRoaXMgYnkgYWxsb2NhdGluZyBgdGJgICpiZWZvcmUqIGNhbGxpbmcgYG5sODAyMTFfcGFyc2VfYmVhY29uYC4gSWYgYGt6YWxsb2Nfb2Jqc2AgZmFpbHMgbm93LCBpdCByZXR1cm5zIGAtRU5PTUVNYCBkaXJlY3RseSwgcHJldmVudGluZyB0aGUgbGVhayBiZWNhdXNlIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgaGFzbiYjMzk7dCBiZWVuIGNhbGxlZCB5ZXQuIENydWNpYWxseSwgaWYgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBmYWlscywgdGhlIGNvZGUgbm93ICpqdW1wcyogdG8gdGhlIGBvdXRgIGxhYmVsLiBUaGlzIGBvdXRgIGxhYmVsIHRoZW4gZnJlZXMgYm90aCBgdGJgICphbmQqIGBwYXJhbXMuYmVhY29uX25leHRg4oCUd2hpY2ggbWlnaHQgaGF2ZSBwYXJ0aWFsbHkgYWxsb2NhdGVkIGRhdGEuCgpUaGUgY3JpdGljYWwgcGllY2UgaGVyZSBpcyB0aGUgZmFjdCB0aGF0IGBubDgwMjExX3BhcnNlX2JlYWNvbmAgKmNhbiogbGVhdmUgcGFydGlhbCBhbGxvY2F0aW9ucyBpZiBpdCBmYWlscy4gTG9va2luZyBhdCB0aGUgY29kZSBmb3IgYG5sODAyMTFfcGFyc2VfYmVhY29uYCwgcGFydGljdWxhcmx5IHRoZSBwYXJ0cyBoYW5kbGluZyBgTkw4MDIxMV9BVFRSX01CU1NJRF9FTEVNU2AgYW5kIGBOTDgwMjExX0FUVFJfRU1BX1JOUl9FTEVNU2AsIEkgc2VlIHRoYXQgaWYgYG5sODAyMTFfY2FsY3VsYXRlX2FwX29wZXJhdGlvbmAgZmFpbHMsIGl0IHJldHVybnMgdGhlIGVycm9yIGNvZGUgKmJ1dCogbGVhdmVzIGBiY24tJmd0O21ic3NpZF9pZXNgIGFuZCBgYmNuLSZndDtybnJfaWVzYCBhbGxvY2F0ZWQuIFRoZSBwYXRjaCYjMzk7cyBjaGFuZ2UgZnJvbSBgcmV0dXJuIGVycjtgIHRvIGBnb3RvIG91dDtgIGZpeGVzIHRoaXMgYnkgbWFraW5nIHN1cmUgdGhvc2UgYWxsb2NhdGVkIGl0ZW1zIGFyZSBhbHdheXMgZnJlZWQgaW4gY2FzZSBvZiBmYWlsdXJlLiBBbHNvIGJ5IG1vdmluZyBga3phbGxvY19vYmpzYCBiZWZvcmUgYG5sODAyMTFfcGFyc2VfYmVhY29uYCwgdGhlIGNhc2Ugd2hlcmUgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBzdWNjZWVkcyBidXQgYGt6YWxsb2Nfb2Jqc2AgZmFpbHMgYW5kIHdvdWxkIGFsc28gbGVhayBgcGFyYW1zLmJlYWNvbl9uZXh0YCBpcyBhdm9pZGVkLgoKU28sIGluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgYSBzb2xpZCBidWcgZml4IHRoYXQgYWRkcmVzc2VzIG1lbW9yeSBsZWFrcyB3aXRoaW4gYG5sODAyMTFfY29sb3JfY2hhbmdlYCBjYXVzZWQgYnkgcGFydGlhbCBhbGxvY2F0aW9ucyBkdXJpbmcgYmVhY29uIHBhcnNpbmcsIGVzcGVjaWFsbHkgd2hlbiBlcnJvcnMgb2NjdXIuIEl0IGVuc3VyZXMgdGhhdCBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkIGNvcnJlY3RseSBpbiBhbGwgZXJyb3IgcGF0aHMuIEkmIzM5O2xsIHVzZSBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIGFzIHRoZSBmb2N1cyBzeW1ib2wsIGFzIGl0JiMzOTtzIHRoZSB0YXJnZXQgb2YgdGhlIG1lbW9yeSBsZWFrIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV9jb2xvcl9jaGFuZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgYG5sODAyMTFfY29sb3JfY2hhbmdlYCBuZXRsaW5rIGhhbmRsZXIuIEl0IGVuc3VyZXMgdGhhdCBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZhaWxzLCBhbnkgcGFydGlhbGx5IGFsbG9jYXRlZCBtZW1vcnkgaXMgcHJvcGVybHkgZnJlZWQsIGFuZCBpdCBwcmV2ZW50cyBhIGxlYWsgaWYgdGhlIHN1YnNlcXVlbnQgYWxsb2NhdGlvbiBmb3IgYHRiYCBmYWlscyBieSBtb3ZpbmcgaXQgYmVmb3JlIHRoZSBwYXJzaW5nIHN0ZXAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSB3aXJlbGVzcyBjb2RlIChlbXVsYXRlZCB2aWEgbWFjODAyMTFfaHdzaW0pLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25sODAyMTFfY29sb3JfY2hhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGBubDgwMjExX2NvbG9yX2NoYW5nZWAgbmV0bGluayBoYW5kbGVyLiBJdCBlbnN1cmVzIHRoYXQgaWYgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBmYWlscywgYW55IHBhcnRpYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIHByb3Blcmx5IGZyZWVkLCBhbmQgaXQgcHJldmVudHMgYSBsZWFrIGlmIHRoZSBzdWJzZXF1ZW50IGFsbG9jYXRpb24gZm9yIGB0YmAgZmFpbHMgYnkgbW92aW5nIGl0IGJlZm9yZSB0aGUgcGFyc2luZyBzdGVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgd2lyZWxlc3MgY29kZSAoZW11bGF0ZWQgdmlhIG1hYzgwMjExX2h3c2ltKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjQ1LjA3MzkzNTY5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyODEwNjE0NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX2NvbG9yX2NoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGBubDgwMjExX2NvbG9yX2NoYW5nZWAgbmV0bGluayBoYW5kbGVyLiBJdCBlbnN1cmVzIHRoYXQgaWYgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBmYWlscywgYW55IHBhcnRpYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIHByb3Blcmx5IGZyZWVkLCBhbmQgaXQgcHJldmVudHMgYSBsZWFrIGlmIHRoZSBzdWJzZXF1ZW50IGFsbG9jYXRpb24gZm9yIGB0YmAgZmFpbHMgYnkgbW92aW5nIGl0IGJlZm9yZSB0aGUgcGFyc2luZyBzdGVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgd2lyZWxlc3MgY29kZSAoZW11bGF0ZWQgdmlhIG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NDUuMDczOTQ0NzkzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjY3NjU5NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ZGEzMmRhZDE3ZWRhODZlNDM2OWFmNmEyNDVkNjkwYjRkOGY0N2NlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMTI6Mjk6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG5pbmRleCA1YWRjYjZiZDBmYzU2Li43NTVmOGZlNzExZmIyIDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuQEAgLTE4NzUwLDE1ICsxODc1MCwxNSBAQCBzdGF0aWMgaW50IG5sODAyMTFfY29sb3JfY2hhbmdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdGlmICghd2Rldi1cXHUwMDNlbGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmJlYWNvbl9pbnRlcnZhbClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbitcXHR0YiA9IGt6YWxsb2Nfb2JqcygqdGIsIE5MODAyMTFfQVRUUl9NQVggKyAxKTtcXG4rXFx0aWYgKCF0YilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbiBcXHRlcnIgPSBubDgwMjExX3BhcnNlX2JlYWNvbihyZGV2LCBpbmZvLVxcdTAwM2VhdHRycywgXFx1MDAyNnBhcmFtcy5iZWFjb25fbmV4dCxcXG4gXFx0XFx0XFx0XFx0ICAgd2Rldi1cXHUwMDNlbGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmNoYW5kZWYuY2hhbixcXG4gXFx0XFx0XFx0XFx0ICAgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFxuLVxcdHRiID0ga3phbGxvY19vYmpzKCp0YiwgTkw4MDIxMV9BVFRSX01BWCArIDEpO1xcbi1cXHRpZiAoIXRiKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBOTDgwMjExX0FUVFJfTUFYLFxcbiBcXHRcXHRcXHQgICAgICAgaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NPTE9SX0NIQU5HRV9FTEVNU10sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjQ1LjY0MTU0ODU4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkyMjQyOTkwODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX2NvbG9yX2NoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGBubDgwMjExX2NvbG9yX2NoYW5nZWAgbmV0bGluayBoYW5kbGVyLiBJdCBlbnN1cmVzIHRoYXQgaWYgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBmYWlscywgYW55IHBhcnRpYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIHByb3Blcmx5IGZyZWVkLCBhbmQgaXQgcHJldmVudHMgYSBsZWFrIGlmIHRoZSBzdWJzZXF1ZW50IGFsbG9jYXRpb24gZm9yIGB0YmAgZmFpbHMgYnkgbW92aW5nIGl0IGJlZm9yZSB0aGUgcGFyc2luZyBzdGVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgd2lyZWxlc3MgY29kZSAoZW11bGF0ZWQgdmlhIG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWRhMzJkYWQxN2VkYTg2ZTQzNjlhZjZhMjQ1ZDY5MGI0ZDhmNDdjZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTI6Mjk6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuaW5kZXggNWFkY2I2YmQwZmM1Ni4uNzU1ZjhmZTcxMWZiMiAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbkBAIC0xODc1MCwxNSArMTg3NTAsMTUgQEAgc3RhdGljIGludCBubDgwMjExX2NvbG9yX2NoYW5nZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0aWYgKCF3ZGV2LVx1MDAzZWxpbmtzW3BhcmFtcy5saW5rX2lkXS5hcC5iZWFjb25faW50ZXJ2YWwpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0dGIgPSBremFsbG9jX29ianMoKnRiLCBOTDgwMjExX0FUVFJfTUFYICsgMSk7XG4rXHRpZiAoIXRiKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbiBcdGVyciA9IG5sODAyMTFfcGFyc2VfYmVhY29uKHJkZXYsIGluZm8tXHUwMDNlYXR0cnMsIFx1MDAyNnBhcmFtcy5iZWFjb25fbmV4dCxcbiBcdFx0XHRcdCAgIHdkZXYtXHUwMDNlbGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmNoYW5kZWYuY2hhbixcbiBcdFx0XHRcdCAgIGluZm8tXHUwMDNlZXh0YWNrKTtcbiBcdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4tXHR0YiA9IGt6YWxsb2Nfb2JqcygqdGIsIE5MODAyMTFfQVRUUl9NQVggKyAxKTtcbi1cdGlmICghdGIpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRnb3RvIG91dDtcbiBcbiBcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIE5MODAyMTFfQVRUUl9NQVgsXG4gXHRcdFx0ICAgICAgIGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NPTE9SX0NIQU5HRV9FTEVNU10sXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjoyOTo0NS42NDE1NTA4OThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc4MzExNjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFdpRmkgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLiBJbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgd2l0aGluIHRoZSBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggcmVvcmRlcnMgdGhlIGFsbG9jYXRpb24gb2YgYGt6YWxsb2Nfb2Jqc2AgYW5kIHRoZSBjYWxsIHRvIGBubDgwMjExX3BhcnNlX2JlYWNvbmAuIEl0IGxvb2tzIGxpa2UgaXQgbm93IGFsbG9jYXRlcyBgdGJgICpiZWZvcmUqIGNhbGxpbmcgYG5sODAyMTFfcGFyc2VfYmVhY29uYC4gQW5kLCBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZhaWxzLCBpbnN0ZWFkIG9mIGltbWVkaWF0ZWx5IHJldHVybmluZyBhbiBlcnJvciwgaXQgdXNlcyBgZ290byBvdXQ7YC5cblxuV2FpdCBhIG1pbnV0ZS4uLiB0aGF0IGBnb3RvIG91dDtgIGp1bXDigKYgdGhhdCdzIGdvdCBtZSB0aGlua2luZy4gSXQncyBsaWtlbHkgdGhhdCBgb3V0OmAgd2lsbCAqZnJlZSogYHRiYCBhbmQgcG90ZW50aWFsbHkgYHBhcmFtcy5iZWFjb25fbmV4dGAsIGJ1dCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBBIHN1YnRsZSBjaGFuZ2UgbGlrZSB0aGlzIGNvdWxkIGludHJvZHVjZSBhIG1lbW9yeSBsZWFrIG9yIG90aGVyIHN1YnRsZSBzaWRlIGVmZmVjdHMuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gYG5sODAyMTFfY29sb3JfY2hhbmdlYCBpdHNlbGYgdG8gdmVyaWZ5IHRoYXQgYGdvdG8gb3V0O2AgaXMgaW5kZWVkIGhhbmRsaW5nIHRoZSBjbGVhbnVwIG9mIHRoZXNlIHJlc291cmNlcyBhcyBleHBlY3RlZC4gR290dGEgbWFrZSBzdXJlIGl0J3Mgbm90IGEgcmlza3kgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjM4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NDkuNTE5ODY1NzA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5OTI0OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sODAyMTFfY29sb3JfY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuYz0xODY2NT1zdGF0aWMgaW50IG5sODAyMTFfc2V0X3RpZF9jb25maWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg3MjAtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODcyMTpzdGF0aWMgaW50IG5sODAyMTFfY29sb3JfY2hhbmdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODcyMi17XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NTQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjAzNDctXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjAzNDg6XFx0XFx0LmRvaXQgPSBubDgwMjExX2NvbG9yX2NoYW5nZSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwMzQ5LVxcdFxcdC5mbGFncyA9IEdFTkxfVU5TX0FETUlOX1BFUk0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjQ5LjYxOTc5NjY4M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjQ1MDU3MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBubDgwMjExX2NvbG9yX2NoYW5nZWAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIGZ1bmN0aW9uLiBJbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgc2lmdGluZyB0aHJvdWdoIHBvdGVudGlhbCBjb250ZXh0cy4gKm5sODAyMTEqIHNjcmVhbXMgd2lyZWxlc3MgbmV0d29ya2luZywgb2J2aW91c2x5LiBTbywgd2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBzb21lIGFzcGVjdCBvZiA4MDIuMTEgbWFuYWdlbWVudCB0aHJvdWdoIHRoZSBOZXRsaW5rIGludGVyZmFjZS4gVGhlIFwiY29sb3JcIiBwYXJ0IGlzIGludHJpZ3VpbmcuIEluIHdpcmVsZXNzLCBcImNvbG9yXCIgY291bGQgcmVsYXRlIHRvIGEgdmFyaWV0eSBvZiB0aGluZ3M6IGZyZXF1ZW5jeSBiYW5kcywgY2hhbm5lbCBkZXNpZ25hdGlvbiwgcGVyaGFwcyBldmVuIHNvbWUga2luZCBvZiBjb25mbGljdCByZXNvbHV0aW9uIG1lY2hhbmlzbSB3aXRoaW4gYSBkZW5zZSBuZXR3b3JrLlxuXG5NeSBpbml0aWFsIHF1ZXN0aW9ucyBhcmUgcGlsaW5nIHVwIGFscmVhZHk6XG5cbiogICBXaGF0IHNwZWNpZmljIG9wZXJhdGlvbiBpcyB0aGlzIGZ1bmN0aW9uIHJlbGF0ZWQgdG8/IElzIGl0IGEgY29uZmlndXJhdGlvbiBjaGFuZ2UsIGEgc3RhdHVzIHVwZGF0ZSwgb3IgYSBjb21tYW5kIGV4ZWN1dGlvbj9cbiogICBIb3cgaXMgXCJjb2xvclwiIHVzZWQgaW4gdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmw4MDIxMSBzdGFjaz8gSXMgaXQgYW4gYWJzdHJhY3QgY29uY2VwdCBvciBhIGRpcmVjdCBoYXJkd2FyZSBwYXJhbWV0ZXI/XG4qICAgSXMgaXQgcmVsYXRlZCB0byBzcGVjdHJ1bSBtYW5hZ2VtZW50LCBvciBpcyBpdCBtb3JlIGEgTUFDLWxheWVyIGNvbmNlcm4/XG4qICAgQXJlIHRoZXJlIGVycm9yIGNhc2VzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj9cblxuRXNzZW50aWFsbHksIEkgbmVlZCB0byBrbm93IHRoZSAqd2h5KiBhbmQgdGhlICpob3cqIGJlaGluZCB0aGlzIGZ1bmN0aW9uJ3MgZXhpc3RlbmNlIGFuZCBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBpdHMgY2FsbCBzaXRlcywgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIGFuZCB0aGUgb3ZlcmFsbCBzdGF0ZSBtYWNoaW5lIGl0IGludGVyYWN0cyB3aXRoIHdpdGhpbiB0aGUgYnJvYWRlciBubDgwMjExIGZyYW1ld29yay4gSSBhbnRpY2lwYXRlIHRoaXMgd2lsbCBpbnZvbHZlIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZSBhbmQgdGhlIHBvc3NpYmxlIHNpZGUgZWZmZWN0cyBpdCBtYXkgaGF2ZSBvbiB0aGUgd2lyZWxlc3MgaW50ZXJmYWNlJ3Mgb3BlcmF0aW9ucy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTk3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NTMuNDQ0MzA2MTg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYxNDE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NzIxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg3MjE6XFx0c3RhdGljIGludCBubDgwMjExX2NvbG9yX2NoYW5nZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjE4NzIyOlxcdHtcXG4xODcyMzpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG4xODcyNDpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfY29sb3JfY2hhbmdlX3NldHRpbmdzIHBhcmFtcyA9IHt9O1xcbjE4NzI1OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clsxXTtcXG4xODcyNjpcXHRcXHRzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyO1xcbjE4NzI3OlxcdFxcdHN0cnVjdCBubGF0dHIgKip0YjtcXG4xODcyODpcXHRcXHR1MTYgb2Zmc2V0O1xcbjE4NzI5OlxcdFxcdGludCBlcnI7XFxuMTg3MzA6XFx0XFxuMTg3MzE6XFx0XFx0aWYgKCFyZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWNvbG9yX2NoYW5nZSlcXG4xODczMjpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTg3MzM6XFx0XFxuMTg3MzQ6XFx0XFx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksXFxuMTg3MzU6XFx0XFx0XFx0XFx0XFx0ICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUikpXFxuMTg3MzY6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE4NzM3OlxcdFxcbjE4NzM4OlxcdFxcdGlmICh3ZGV2LVxcdTAwM2VpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApXFxuMTg3Mzk6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE4NzQwOlxcdFxcbjE4NzQxOlxcdFxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NPTE9SX0NIQU5HRV9DT1VOVF0gfHxcXG4xODc0MjpcXHRcXHQgICAgIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DT0xPUl9DSEFOR0VfQ09MT1JdIHx8XFxuMTg3NDM6XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfQ09MT1JfQ0hBTkdFX0VMRU1TXSlcXG4xODc0NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODc0NTpcXHRcXG4xODc0NjpcXHRcXHRwYXJhbXMuY291bnQgPSBubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DT0xPUl9DSEFOR0VfQ09VTlRdKTtcXG4xODc0NzpcXHRcXHRwYXJhbXMuY29sb3IgPSBubGFfZ2V0X3U4KGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9DT0xPUl9DSEFOR0VfQ09MT1JdKTtcXG4xODc0ODpcXHRcXG4xODc0OTpcXHRcXHRwYXJhbXMubGlua19pZCA9IG5sODAyMTFfbGlua19pZChpbmZvLVxcdTAwM2VhdHRycyk7XFxuMTg3NTA6XFx0XFx0aWYgKCF3ZGV2LVxcdTAwM2VsaW5rc1twYXJhbXMubGlua19pZF0uYXAuYmVhY29uX2ludGVydmFsKVxcbjE4NzUxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4NzUyOlxcdFxcbjE4NzUzOlxcdFxcdHRiID0ga3phbGxvY19vYmpzKCp0YiwgTkw4MDIxMV9BVFRSX01BWCArIDEpO1xcbjE4NzU0OlxcdFxcdGlmICghdGIpXFxuMTg3NTU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTg3NTY6XFx0XFxuMTg3NTc6XFx0XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgaW5mby1cXHUwMDNlYXR0cnMsIFxcdTAwMjZwYXJhbXMuYmVhY29uX25leHQsXFxuMTg3NTg6XFx0XFx0XFx0XFx0XFx0ICAgd2Rldi1cXHUwMDNlbGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmNoYW5kZWYuY2hhbixcXG4xODc1OTpcXHRcXHRcXHRcXHRcXHQgICBpbmZvLVxcdTAwM2VleHRhY2spO1xcbjE4NzYwOlxcdFxcdGlmIChlcnIpXFxuMTg3NjE6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTg3NjI6XFx0XFxuMTg3NjM6XFx0XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTkw4MDIxMV9BVFRSX01BWCxcXG4xODc2NDpcXHRcXHRcXHRcXHQgICAgICAgaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0NPTE9SX0NIQU5HRV9FTEVNU10sXFxuMTg3NjU6XFx0XFx0XFx0XFx0ICAgICAgIG5sODAyMTFfcG9saWN5LCBpbmZvLVxcdTAwM2VleHRhY2spO1xcbjE4NzY2OlxcdFxcdGlmIChlcnIpXFxuMTg3Njc6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTg3Njg6XFx0XFxuMTg3Njk6XFx0XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgdGIsIFxcdTAwMjZwYXJhbXMuYmVhY29uX2NvbG9yX2NoYW5nZSxcXG4xODc3MDpcXHRcXHRcXHRcXHRcXHQgICB3ZGV2LVxcdTAwM2VsaW5rc1twYXJhbXMubGlua19pZF0uYXAuY2hhbmRlZi5jaGFuLFxcbjE4NzcxOlxcdFxcdFxcdFxcdFxcdCAgIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuMTg3NzI6XFx0XFx0aWYgKGVycilcXG4xODc3MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4xODc3NDpcXHRcXG4xODc3NTpcXHRcXHRpZiAoIXRiW05MODAyMTFfQVRUUl9DTlREV05fT0ZGU19CRUFDT05dKSB7XFxuMTg3NzY6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xODc3NzpcXHRcXHRcXHRnb3RvIG91dDtcXG4xODc3ODpcXHRcXHR9XFxuMTg3Nzk6XFx0XFxuMTg3ODA6XFx0XFx0aWYgKG5sYV9sZW4odGJbTkw4MDIxMV9BVFRSX0NOVERXTl9PRkZTX0JFQUNPTl0pICE9IHNpemVvZih1MTYpKSB7XFxuMTg3ODE6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xODc4MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4xODc4MzpcXHRcXHR9XFxuMTg3ODQ6XFx0XFxuMTg3ODU6XFx0XFx0b2Zmc2V0ID0gbmxhX2dldF91MTYodGJbTkw4MDIxMV9BVFRSX0NOVERXTl9PRkZTX0JFQUNPTl0pO1xcbjE4Nzg2OlxcdFxcdGlmIChvZmZzZXQgXFx1MDAzZT0gcGFyYW1zLmJlYWNvbl9jb2xvcl9jaGFuZ2UudGFpbF9sZW4pIHtcXG4xODc4NzpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjE4Nzg4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE4Nzg5OlxcdFxcdH1cXG4xODc5MDpcXHRcXG4xODc5MTpcXHRcXHRpZiAocGFyYW1zLmJlYWNvbl9jb2xvcl9jaGFuZ2UudGFpbFtvZmZzZXRdICE9IHBhcmFtcy5jb3VudCkge1xcbjE4NzkyOlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTg3OTM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTg3OTQ6XFx0XFx0fVxcbjE4Nzk1OlxcdFxcbjE4Nzk2OlxcdFxcdHBhcmFtcy5jb3VudGVyX29mZnNldF9iZWFjb24gPSBvZmZzZXQ7XFxuMTg3OTc6XFx0XFxuMTg3OTg6XFx0XFx0aWYgKHRiW05MODAyMTFfQVRUUl9DTlREV05fT0ZGU19QUkVTUF0pIHtcXG4xODc5OTpcXHRcXHRcXHRpZiAobmxhX2xlbih0YltOTDgwMjExX0FUVFJfQ05URFdOX09GRlNfUFJFU1BdKSAhPVxcbjE4ODAwOlxcdFxcdFxcdCAgICBzaXplb2YodTE2KSkge1xcbjE4ODAxOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTg4MDI6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTg4MDM6XFx0XFx0XFx0fVxcbjE4ODA0OlxcdFxcbjE4ODA1OlxcdFxcdFxcdG9mZnNldCA9IG5sYV9nZXRfdTE2KHRiW05MODAyMTFfQVRUUl9DTlREV05fT0ZGU19QUkVTUF0pO1xcbjE4ODA2OlxcdFxcdFxcdGlmIChvZmZzZXQgXFx1MDAzZT0gcGFyYW1zLmJlYWNvbl9jb2xvcl9jaGFuZ2UucHJvYmVfcmVzcF9sZW4pIHtcXG4xODgwNzpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjE4ODA4OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE4ODA5OlxcdFxcdFxcdH1cXG4xODgxMDpcXHRcXG4xODgxMTpcXHRcXHRcXHRpZiAocGFyYW1zLmJlYWNvbl9jb2xvcl9jaGFuZ2UucHJvYmVfcmVzcFtvZmZzZXRdICE9XFxuMTg4MTI6XFx0XFx0XFx0ICAgIHBhcmFtcy5jb3VudCkge1xcbjE4ODEzOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTg4MTQ6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTg4MTU6XFx0XFx0XFx0fVxcbjE4ODE2OlxcdFxcbjE4ODE3OlxcdFxcdFxcdHBhcmFtcy5jb3VudGVyX29mZnNldF9wcmVzcCA9IG9mZnNldDtcXG4xODgxODpcXHRcXHR9XFxuMTg4MTk6XFx0XFxuMTg4MjA6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9VTlNPTF9CQ0FTVF9QUk9CRV9SRVNQXSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjoyOTo1My40NDY5MjU3NjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTkxMzAwODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKk15IEltbWVkaWF0ZSBBbmFseXNpcyBvZiB0aGUgQ29kZSBTbmlwcGV0KipcblxuSG1tLCBJIHNlZSBhIGZyYWdtZW50IG9mIGEgZnVuY3Rpb24sIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBwYXVzZS4gSSBjYW4ndCBqdW1wIHRvIGNvbmNsdXNpb25zIG9yIG1ha2UgYW55IGRlZmluaXRpdmUgc3RhdGVtZW50cyBhYm91dCBpdHMgcHVycG9zZSBvciBiZWhhdmlvciB3aXRob3V0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQuIFRoZSBjcnVjaWFsIHZhcmlhYmxlIGlzIGBvdXRgIOKAkyBpdCdzIGNsZWFybHkgYSBjZW50cmFsIGVsZW1lbnQsIGFuZCBpdHMgdWx0aW1hdGUgZnVuY3Rpb24gaXMgY29tcGxldGVseSB1bmtub3duIGF0IHRoaXMgcG9pbnQuIEkgbmVlZCB0byBzZWUgdGhlIGVudGlyZSBmdW5jdGlvbiBkZWZpbml0aW9uIHRvIHVuZGVyc3RhbmQgd2hlcmUgYG91dGAgY29tZXMgZnJvbSwgaG93IGl0J3MgYmVpbmcgdXNlZCwgYW5kIHdoYXQgZGF0YSBpdCdzIGhvbGRpbmcsIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGdvYWwgb2YgdGhpcyBjb2RlLiBXaXRob3V0IHRoYXQgY29tcGxldGUgcGljdHVyZSwgYW55IHNwZWN1bGF0aW9uIGlzIHByZW1hdHVyZS4gSSBtdXN0IGhhdmUgbW9yZSBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIxMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6Mjk6NTYuNDM4MjI4OTk0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NDY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4ODIxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg4MjE6XFx0XFx0XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV91bnNvbF9iY2FzdF9wcm9iZV9yZXNwKFxcbjE4ODIyOlxcdFxcdFxcdFxcdHJkZXYsIGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9VTlNPTF9CQ0FTVF9QUk9CRV9SRVNQXSxcXG4xODgyMzpcXHRcXHRcXHRcXHRcXHUwMDI2cGFyYW1zLnVuc29sX2JjYXN0X3Byb2JlX3Jlc3ApO1xcbjE4ODI0OlxcdFxcdFxcdGlmIChlcnIpXFxuMTg4MjU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTg4MjY6XFx0XFx0fVxcbjE4ODI3OlxcdFxcbjE4ODI4OlxcdFxcdGVyciA9IHJkZXZfY29sb3JfY2hhbmdlKHJkZXYsIGRldiwgXFx1MDAyNnBhcmFtcyk7XFxuMTg4Mjk6XFx0XFxuMTg4MzA6XFx0b3V0OlxcbjE4ODMxOlxcdFxcdGtmcmVlKHBhcmFtcy5iZWFjb25fbmV4dC5tYnNzaWRfaWVzKTtcXG4xODgzMjpcXHRcXHRrZnJlZShwYXJhbXMuYmVhY29uX2NvbG9yX2NoYW5nZS5tYnNzaWRfaWVzKTtcXG4xODgzMzpcXHRcXHRrZnJlZShwYXJhbXMuYmVhY29uX25leHQucm5yX2llcyk7XFxuMTg4MzQ6XFx0XFx0a2ZyZWUocGFyYW1zLmJlYWNvbl9jb2xvcl9jaGFuZ2Uucm5yX2llcyk7XFxuMTg4MzU6XFx0XFx0a2ZyZWUodGIpO1xcbjE4ODM2OlxcdFxcdHJldHVybiBlcnI7XFxuMTg4Mzc6XFx0fVxcbjE4ODM4OlxcdFxcbjE4ODM5OlxcdHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfZmlsc19hYWQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xODg0MDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjE4ODQxOlxcdHtcXG4xODg0MjpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG4xODg0MzpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMV07XFxuMTg4NDQ6XFx0XFx0c3RydWN0IGNmZzgwMjExX2ZpbHNfYWFkIGZpbHNfYWFkID0ge307XFxuMTg4NDU6XFx0XFx0dTggKm5vbmNlcztcXG4xODg0NjpcXHRcXG4xODg0NzpcXHRcXHRpZiAoIWluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9NQUNdIHx8XFxuMTg4NDg6XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRklMU19LRUtdIHx8XFxuMTg4NDk6XFx0XFx0ICAgICFpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRklMU19OT05DRVNdKVxcbjE4ODUwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4ODUxOlxcdFxcbjE4ODUyOlxcdFxcdGZpbHNfYWFkLm1hY2FkZHIgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7XFxuMTg4NTM6XFx0XFx0Zmlsc19hYWQua2VrX2xlbiA9IG5sYV9sZW4oaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZJTFNfS0VLXSk7XFxuMTg4NTQ6XFx0XFx0Zmlsc19hYWQua2VrID0gbmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZJTFNfS0VLXSk7XFxuMTg4NTU6XFx0XFx0bm9uY2VzID0gbmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZJTFNfTk9OQ0VTXSk7XFxuMTg4NTY6XFx0XFx0Zmlsc19hYWQuc25vbmNlID0gbm9uY2VzO1xcbjE4ODU3OlxcdFxcdGZpbHNfYWFkLmFub25jZSA9IG5vbmNlcyArIEZJTFNfTk9OQ0VfTEVOO1xcbjE4ODU4OlxcdFxcbjE4ODU5OlxcdFxcdHJldHVybiByZGV2X3NldF9maWxzX2FhZChyZGV2LCBkZXYsIFxcdTAwMjZmaWxzX2FhZCk7XFxuMTg4NjA6XFx0fVxcbjE4ODYxOlxcdFxcbjE4ODYyOlxcdHN0YXRpYyBpbnQgbmw4MDIxMV9hZGRfbGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjE4ODYzOlxcdHtcXG4xODg2NDpcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLVxcdTAwM2V1c2VyX3B0clswXTtcXG4xODg2NTpcXHRcXHR1bnNpZ25lZCBpbnQgbGlua19pZCA9IG5sODAyMTFfbGlua19pZChpbmZvLVxcdTAwM2VhdHRycyk7XFxuMTg4NjY6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tXFx1MDAzZXVzZXJfcHRyWzFdO1xcbjE4ODY3OlxcdFxcdHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHI7XFxuMTg4Njg6XFx0XFx0aW50IHJldDtcXG4xODg2OTpcXHRcXG4xODg3MDpcXHRcXHRpZiAoISh3ZGV2LVxcdTAwM2V3aXBoeS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBXSVBIWV9GTEFHX1NVUFBPUlRTX01MTykpXFxuMTg4NzE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTg4NzI6XFx0XFxuMTg4NzM6XFx0XFx0c3dpdGNoICh3ZGV2LVxcdTAwM2VpZnR5cGUpIHtcXG4xODg3NDpcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX0FQOlxcbjE4ODc1OlxcdFxcdFxcdGJyZWFrO1xcbjE4ODc2OlxcdFxcdGRlZmF1bHQ6XFxuMTg4Nzc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTg4Nzg6XFx0XFx0fVxcbjE4ODc5OlxcdFxcbjE4ODgwOlxcdFxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10gfHxcXG4xODg4MTpcXHRcXHQgICAgIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pKSlcXG4xODg4MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODg4MzpcXHRcXG4xODg4NDpcXHRcXHR3ZGV2LVxcdTAwM2V2YWxpZF9saW5rcyB8PSBCSVQobGlua19pZCk7XFxuMTg4ODU6XFx0XFx0ZXRoZXJfYWRkcl9jb3B5KHdkZXYtXFx1MDAzZWxpbmtzW2xpbmtfaWRdLmFkZHIsXFxuMTg4ODY6XFx0XFx0XFx0XFx0bmxhX2RhdGEoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pKTtcXG4xODg4NzpcXHRcXG4xODg4ODpcXHRcXHRyZXQgPSByZGV2X2FkZF9pbnRmX2xpbmsocmRldiwgd2RldiwgbGlua19pZCk7XFxuMTg4ODk6XFx0XFx0aWYgKHJldCkge1xcbjE4ODkwOlxcdFxcdFxcdHdkZXYtXFx1MDAzZXZhbGlkX2xpbmtzIFxcdTAwMjY9IH5CSVQobGlua19pZCk7XFxuMTg4OTE6XFx0XFx0XFx0ZXRoX3plcm9fYWRkcih3ZGV2LVxcdTAwM2VsaW5rc1tsaW5rX2lkXS5hZGRyKTtcXG4xODg5MjpcXHRcXHR9XFxuMTg4OTM6XFx0XFxuMTg4OTQ6XFx0XFx0cmV0dXJuIHJldDtcXG4xODg5NTpcXHR9XFxuMTg4OTY6XFx0XFxuMTg4OTc6XFx0c3RhdGljIGludCBubDgwMjExX3JlbW92ZV9saW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuMTg4OTg6XFx0e1xcbjE4ODk5OlxcdFxcdHVuc2lnbmVkIGludCBsaW5rX2lkID0gbmw4MDIxMV9saW5rX2lkKGluZm8tXFx1MDAzZWF0dHJzKTtcXG4xODkwMDpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMV07XFxuMTg5MDE6XFx0XFx0c3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi1cXHUwMDNlaWVlZTgwMjExX3B0cjtcXG4xODkwMjpcXHRcXG4xODkwMzpcXHRcXHQvKiBjYW5ub3QgcmVtb3ZlIGlmIHRoZXJlJ3Mgbm8gbGluayAqL1xcbjE4OTA0OlxcdFxcdGlmICghaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX01MT19MSU5LX0lEXSlcXG4xODkwNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODkwNjpcXHRcXG4xODkwNzpcXHRcXHRzd2l0Y2ggKHdkZXYtXFx1MDAzZWlmdHlwZSkge1xcbjE4OTA4OlxcdFxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6XFxuMTg5MDk6XFx0XFx0XFx0YnJlYWs7XFxuMTg5MTA6XFx0XFx0ZGVmYXVsdDpcXG4xODkxMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODkxMjpcXHRcXHR9XFxuMTg5MTM6XFx0XFxuMTg5MTQ6XFx0XFx0Y2ZnODAyMTFfcmVtb3ZlX2xpbmsod2RldiwgbGlua19pZCk7XFxuMTg5MTU6XFx0XFxuMTg5MTY6XFx0XFx0cmV0dXJuIDA7XFxuMTg5MTc6XFx0fVxcbjE4OTE4OlxcdFxcbjE4OTE5OlxcdHN0YXRpYyBpbnRcXG4xODkyMDpcXHRubDgwMjExX2FkZF9tb2RfbGlua19zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjI5OjU2LjQzOTg3NjIzNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTU2NTI0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IExlYWsgaW4gdGhlIEJlYWNvbiBQYXJzaW5nIFJvdXRpbmUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBtZW1vcnkgbGVhay4gTGV0J3Mgc2VlLi4uIHRoZSBjb2RlIGJlZm9yZSB0aGUgZml4IGludm9sdmVzIHBhcnNpbmcgYSBiZWFjb24uIFNwZWNpZmljYWxseSwgaXQgY2FsbHMgYG5sODAyMTFfcGFyc2VfYmVhY29uYCwgYW5kIGlmIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciwgd2UgaW1tZWRpYXRlbHkgZXhpdC4gUmlnaHQsIHNvIHdlIGNhbGwgYG5sODAyMTFfcGFyc2VfYmVhY29uYCwgYW5kIHRoZW4gYWxsb2NhdGUgYSB0YWJsZSB3aXRoIGBremFsbG9jX29ianNgLiBCdXQsIHdhaXQgYSBtaW51dGUsIHRoZSBwcm9ibGVtICptdXN0KiBiZSB0aGF0IGBubDgwMjExX3BhcnNlX2JlYWNvbmAgKml0c2VsZiogY291bGQgYmUgYWxsb2NhdGluZyBtZW1vcnkgaW4gYHBhcmFtcy5iZWFjb25fbmV4dC5tYnNzaWRfaWVzYCBhbmQgYHBhcmFtcy5iZWFjb25fbmV4dC5ybnJfaWVzYC4gVGhhdCBtZW1vcnksIGlmIGFsbG9jYXRlZCwgaXNuJ3QgYmVpbmcgZnJlZWQgaWYgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBmYWlscyEgU28sIHRoZSBsZWFrIGlzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLi4uIEkgYmV0dGVyIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGFsbG9jYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nIHRoZXJlLiBHb3QgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNzEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDowMC43NTU1MzE4NThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTAxNDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sODAyMTFfcGFyc2VfYmVhY29uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuYz02NjMxPXN0YXRpYyBpbnQgbmw4MDIxMV9jYWxjdWxhdGVfYXBfb3BlcmF0aW9uKHN0cnVjdCBubGF0dHIgKmF0dHJzW10sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTY3MDMtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzo2NzA0OnN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9iZWFjb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNjcwNS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICphdHRyc1tdLFxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz03MTk1PXN0YXRpYyBpbnQgbmw4MDIxMV9zdGFydF9hcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy03MzQ3LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NzM0ODpcXHRlcnIgPSBubDgwMjExX3BhcnNlX2JlYWNvbihyZGV2LCBpbmZvLVxcdTAwM2VhdHRycywgXFx1MDAyNnBhcmFtcy1cXHUwMDNlYmVhY29uLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNzM0OS1cXHRcXHRcXHRcXHQgICBwYXJhbXMtXFx1MDAzZWNoYW5kZWYuY2hhbiwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9NzUwMj1zdGF0aWMgaW50IG5sODAyMTFfc2V0X2JlYWNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy03NTI2LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6NzUyNzpcXHRlcnIgPSBubDgwMjExX3BhcnNlX2JlYWNvbihyZGV2LCBpbmZvLVxcdTAwM2VhdHRycywgXFx1MDAyNnBhcmFtcy1cXHUwMDNlYmVhY29uLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtNzUyOC1cXHRcXHRcXHRcXHQgICB3ZGV2LVxcdTAwM2VsaW5rc1tsaW5rX2lkXS5hcC5jaGFuZGVmLmNoYW4sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTEyMDcyPXN0YXRpYyBpbnQgbmw4MDIxMV9jaGFubmVsX3N3aXRjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjE1MS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjEyMTUyOlxcdGVyciA9IG5sODAyMTFfcGFyc2VfYmVhY29uKHJkZXYsIGluZm8tXFx1MDAzZWF0dHJzLCBcXHUwMDI2cGFyYW1zLmJlYWNvbl9hZnRlcixcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMTUzLVxcdFxcdFxcdFxcdCAgIHBhcmFtcy5jaGFuZGVmLmNoYW4sIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTEyMTY4LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTIxNjk6XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgY3NhX2F0dHJzLCBcXHUwMDI2cGFyYW1zLmJlYWNvbl9jc2EsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xMjE3MC1cXHRcXHRcXHRcXHQgICB3ZGV2LVxcdTAwM2VsaW5rc1tsaW5rX2lkXS5hcC5jaGFuZGVmLmNoYW4sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE4NzIxPXN0YXRpYyBpbnQgbmw4MDIxMV9jb2xvcl9jaGFuZ2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg3NTYtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODc1NzpcXHRlcnIgPSBubDgwMjExX3BhcnNlX2JlYWNvbihyZGV2LCBpbmZvLVxcdTAwM2VhdHRycywgXFx1MDAyNnBhcmFtcy5iZWFjb25fbmV4dCxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NzU4LVxcdFxcdFxcdFxcdCAgIHdkZXYtXFx1MDAzZWxpbmtzW3BhcmFtcy5saW5rX2lkXS5hcC5jaGFuZGVmLmNoYW4sXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NzY4LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTg3Njk6XFx0ZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgdGIsIFxcdTAwMjZwYXJhbXMuYmVhY29uX2NvbG9yX2NoYW5nZSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE4NzcwLVxcdFxcdFxcdFxcdCAgIHdkZXYtXFx1MDAzZWxpbmtzW3BhcmFtcy5saW5rX2lkXS5hcC5jaGFuZGVmLmNoYW4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjAwLjg0NTA0MDA5M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTAxMzUwNzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmVhY29uIFBhcnNpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIG1vdmluZyB0aGUgYGt6YWxsb2Nfb2Jqc2AgYWxsb2NhdGlvbiBiZWZvcmUgdGhlIGluaXRpYWwgY2FsbCB0byBgbmw4MDIxMV9wYXJzZV9iZWFjb25gLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgb3B0aW1pemF0aW9uIHRvIGhhbmRsZSB0aGUgYC1FTk9NRU1gIGNhc2UgZWFybHkuIElmIGBremFsbG9jX29ianNgIGZhaWxzLCB3ZSBqdXN0IGJhaWwgb3V0IGltbWVkaWF0ZWx5LlxuXG5Ob3csIGlmIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgKmRvZXMqIGZhaWwgYWZ0ZXIgdGhlIHBhdGNoLCB0aGUgY29kZSBub3cgY29ycmVjdGx5IGp1bXBzIHRvIHRoZSBgb3V0YCBsYWJlbC4gVGhhdCdzIGdvb2QsIGJlY2F1c2UgYG91dGAgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgYHBhcmFtcy5iZWFjb25fbmV4dC5tYnNzaWRfaWVzYCwgYHBhcmFtcy5iZWFjb25fbmV4dC5ybnJfaWVzYCwgYW5kIHRoZSBgdGJgIHN0cnVjdHVyZSwgYW1vbmcgb3RoZXIgdGhpbmdzLiBMb29rcyBsaWtlIHdlJ3JlIGNsZWFuaW5nIHVwIGFmdGVyIG91cnNlbHZlcy5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwcmUtcGF0Y2ggYmVoYXZpb3IuIEJlZm9yZSB0aGlzIGNoYW5nZSwgaWYgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBmYWlsZWQsIGl0IGp1c3QgcmV0dXJuZWQgdGhlIGBlcnJgIHZhbHVlIGRpcmVjdGx5LiBUaGF0IGltcGxpZXMgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWshIEFueSBhbGxvY2F0aW9ucyBtYWRlICp3aXRoaW4qIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgZm9yIGBwYXJhbXMuYmVhY29uX25leHRgIGJlZm9yZSB0aGUgZnVuY3Rpb24gZmFpbGVkIHdvdWxkIGhhdmUgYmVlbiBvcnBoYW5lZCwgcmlnaHQ/XG5cbkFscmlnaHQsIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIHNvdXJjZSBjb2RlIG9mIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgaXRzZWxmIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQgaGFuZGxlcyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gc2VlIHdoYXQgaGFwcGVucyB3aGVuIGl0IGVuY291bnRlcnMgYW4gZXJyb3IgYW5kIGRldGVybWluZSB3aGF0IG1lbW9yeSBpcyBvciBpc24ndCBmcmVlZCB1bmRlciB0aGF0IGNvbmRpdGlvbi4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IHZ1bG5lcmFiaWxpdHkuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc1MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDowNS45NDYzOTU1OTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA1OTg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3MDQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NzA0OlxcdHN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9iZWFjb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbjY3MDU6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqYXR0cnNbXSxcXG42NzA2OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBjZmc4MDIxMV9iZWFjb25fZGF0YSAqYmNuLFxcbjY3MDc6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLFxcbjY3MDg6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjY3MDk6XFx0e1xcbjY3MTA6XFx0XFx0Ym9vbCBoYXZlaW5mbyA9IGZhbHNlO1xcbjY3MTE6XFx0XFx0aW50IGVycjtcXG42NzEyOlxcdFxcbjY3MTM6XFx0XFx0bWVtc2V0KGJjbiwgMCwgc2l6ZW9mKCpiY24pKTtcXG42NzE0OlxcdFxcbjY3MTU6XFx0XFx0YmNuLVxcdTAwM2VsaW5rX2lkID0gbmw4MDIxMV9saW5rX2lkKGF0dHJzKTtcXG42NzE2OlxcdFxcbjY3MTc6XFx0XFx0aWYgKGF0dHJzW05MODAyMTFfQVRUUl9CRUFDT05fSEVBRF0pIHtcXG42NzE4OlxcdFxcdFxcdGJjbi1cXHUwMDNlaGVhZCA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9CRUFDT05fSEVBRF0pO1xcbjY3MTk6XFx0XFx0XFx0YmNuLVxcdTAwM2VoZWFkX2xlbiA9IG5sYV9sZW4oYXR0cnNbTkw4MDIxMV9BVFRSX0JFQUNPTl9IRUFEXSk7XFxuNjcyMDpcXHRcXHRcXHRpZiAoIWJjbi1cXHUwMDNlaGVhZF9sZW4pXFxuNjcyMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42NzIyOlxcdFxcdFxcdGhhdmVpbmZvID0gdHJ1ZTtcXG42NzIzOlxcdFxcdH1cXG42NzI0OlxcdFxcbjY3MjU6XFx0XFx0aWYgKGF0dHJzW05MODAyMTFfQVRUUl9CRUFDT05fVEFJTF0pIHtcXG42NzI2OlxcdFxcdFxcdGJjbi1cXHUwMDNldGFpbCA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9CRUFDT05fVEFJTF0pO1xcbjY3Mjc6XFx0XFx0XFx0YmNuLVxcdTAwM2V0YWlsX2xlbiA9IG5sYV9sZW4oYXR0cnNbTkw4MDIxMV9BVFRSX0JFQUNPTl9UQUlMXSk7XFxuNjcyODpcXHRcXHRcXHRoYXZlaW5mbyA9IHRydWU7XFxuNjcyOTpcXHRcXHR9XFxuNjczMDpcXHRcXG42NzMxOlxcdFxcdGlmICghaGF2ZWluZm8pXFxuNjczMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42NzMzOlxcdFxcbjY3MzQ6XFx0XFx0aWYgKGF0dHJzW05MODAyMTFfQVRUUl9JRV0pIHtcXG42NzM1OlxcdFxcdFxcdGJjbi1cXHUwMDNlYmVhY29uX2llcyA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9JRV0pO1xcbjY3MzY6XFx0XFx0XFx0YmNuLVxcdTAwM2ViZWFjb25faWVzX2xlbiA9IG5sYV9sZW4oYXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7XFxuNjczNzpcXHRcXHR9XFxuNjczODpcXHRcXG42NzM5OlxcdFxcdGlmIChhdHRyc1tOTDgwMjExX0FUVFJfSUVfUFJPQkVfUkVTUF0pIHtcXG42NzQwOlxcdFxcdFxcdGJjbi1cXHUwMDNlcHJvYmVyZXNwX2llcyA9XFxuNjc0MTpcXHRcXHRcXHRcXHRubGFfZGF0YShhdHRyc1tOTDgwMjExX0FUVFJfSUVfUFJPQkVfUkVTUF0pO1xcbjY3NDI6XFx0XFx0XFx0YmNuLVxcdTAwM2Vwcm9iZXJlc3BfaWVzX2xlbiA9XFxuNjc0MzpcXHRcXHRcXHRcXHRubGFfbGVuKGF0dHJzW05MODAyMTFfQVRUUl9JRV9QUk9CRV9SRVNQXSk7XFxuNjc0NDpcXHRcXHR9XFxuNjc0NTpcXHRcXG42NzQ2OlxcdFxcdGlmIChhdHRyc1tOTDgwMjExX0FUVFJfSUVfQVNTT0NfUkVTUF0pIHtcXG42NzQ3OlxcdFxcdFxcdGJjbi1cXHUwMDNlYXNzb2NyZXNwX2llcyA9XFxuNjc0ODpcXHRcXHRcXHRcXHRubGFfZGF0YShhdHRyc1tOTDgwMjExX0FUVFJfSUVfQVNTT0NfUkVTUF0pO1xcbjY3NDk6XFx0XFx0XFx0YmNuLVxcdTAwM2Vhc3NvY3Jlc3BfaWVzX2xlbiA9XFxuNjc1MDpcXHRcXHRcXHRcXHRubGFfbGVuKGF0dHJzW05MODAyMTFfQVRUUl9JRV9BU1NPQ19SRVNQXSk7XFxuNjc1MTpcXHRcXHR9XFxuNjc1MjpcXHRcXG42NzUzOlxcdFxcdGlmIChhdHRyc1tOTDgwMjExX0FUVFJfUFJPQkVfUkVTUF0pIHtcXG42NzU0OlxcdFxcdFxcdGJjbi1cXHUwMDNlcHJvYmVfcmVzcCA9IG5sYV9kYXRhKGF0dHJzW05MODAyMTFfQVRUUl9QUk9CRV9SRVNQXSk7XFxuNjc1NTpcXHRcXHRcXHRiY24tXFx1MDAzZXByb2JlX3Jlc3BfbGVuID0gbmxhX2xlbihhdHRyc1tOTDgwMjExX0FUVFJfUFJPQkVfUkVTUF0pO1xcbjY3NTY6XFx0XFx0fVxcbjY3NTc6XFx0XFxuNjc1ODpcXHRcXHRpZiAoYXR0cnNbTkw4MDIxMV9BVFRSX0ZUTV9SRVNQT05ERVJdKSB7XFxuNjc1OTpcXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltOTDgwMjExX0ZUTV9SRVNQX0FUVFJfTUFYICsgMV07XFxuNjc2MDpcXHRcXG42NzYxOlxcdFxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YixcXG42NzYyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgTkw4MDIxMV9GVE1fUkVTUF9BVFRSX01BWCxcXG42NzYzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgYXR0cnNbTkw4MDIxMV9BVFRSX0ZUTV9SRVNQT05ERVJdLFxcbjY3NjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBOVUxMLCBOVUxMKTtcXG42NzY1OlxcdFxcdFxcdGlmIChlcnIpXFxuNjc2NjpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjY3Njc6XFx0XFxuNjc2ODpcXHRcXHRcXHRpZiAodGJbTkw4MDIxMV9GVE1fUkVTUF9BVFRSX0VOQUJMRURdIFxcdTAwMjZcXHUwMDI2XFxuNjc2OTpcXHRcXHRcXHQgICAgd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LFxcbjY3NzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfRU5BQkxFX0ZUTV9SRVNQT05ERVIpKVxcbjY3NzE6XFx0XFx0XFx0XFx0YmNuLVxcdTAwM2VmdG1fcmVzcG9uZGVyID0gMTtcXG42NzcyOlxcdFxcdFxcdGVsc2VcXG42NzczOlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG42Nzc0OlxcdFxcbjY3NzU6XFx0XFx0XFx0aWYgKHRiW05MODAyMTFfRlRNX1JFU1BfQVRUUl9MQ0ldKSB7XFxuNjc3NjpcXHRcXHRcXHRcXHRiY24tXFx1MDAzZWxjaSA9IG5sYV9kYXRhKHRiW05MODAyMTFfRlRNX1JFU1BfQVRUUl9MQ0ldKTtcXG42Nzc3OlxcdFxcdFxcdFxcdGJjbi1cXHUwMDNlbGNpX2xlbiA9IG5sYV9sZW4odGJbTkw4MDIxMV9GVE1fUkVTUF9BVFRSX0xDSV0pO1xcbjY3Nzg6XFx0XFx0XFx0fVxcbjY3Nzk6XFx0XFxuNjc4MDpcXHRcXHRcXHRpZiAodGJbTkw4MDIxMV9GVE1fUkVTUF9BVFRSX0NJVklDTE9DXSkge1xcbjY3ODE6XFx0XFx0XFx0XFx0YmNuLVxcdTAwM2VjaXZpY2xvYyA9IG5sYV9kYXRhKHRiW05MODAyMTFfRlRNX1JFU1BfQVRUUl9DSVZJQ0xPQ10pO1xcbjY3ODI6XFx0XFx0XFx0XFx0YmNuLVxcdTAwM2VjaXZpY2xvY19sZW4gPSBubGFfbGVuKHRiW05MODAyMTFfRlRNX1JFU1BfQVRUUl9DSVZJQ0xPQ10pO1xcbjY3ODM6XFx0XFx0XFx0fVxcbjY3ODQ6XFx0XFx0fSBlbHNlIHtcXG42Nzg1OlxcdFxcdFxcdGJjbi1cXHUwMDNlZnRtX3Jlc3BvbmRlciA9IC0xO1xcbjY3ODY6XFx0XFx0fVxcbjY3ODc6XFx0XFxuNjc4ODpcXHRcXHRpZiAoYXR0cnNbTkw4MDIxMV9BVFRSX0hFX0JTU19DT0xPUl0pIHtcXG42Nzg5OlxcdFxcdFxcdGVyciA9IG5sODAyMTFfcGFyc2VfaGVfYnNzX2NvbG9yKGF0dHJzW05MODAyMTFfQVRUUl9IRV9CU1NfQ09MT1JdLFxcbjY3OTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZiY24tXFx1MDAzZWhlX2Jzc19jb2xvcik7XFxuNjc5MTpcXHRcXHRcXHRpZiAoZXJyKVxcbjY3OTI6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG42NzkzOlxcdFxcdFxcdGJjbi1cXHUwMDNlaGVfYnNzX2NvbG9yX3ZhbGlkID0gdHJ1ZTtcXG42Nzk0OlxcdFxcdH1cXG42Nzk1OlxcdFxcbjY3OTY6XFx0XFx0aWYgKGF0dHJzW05MODAyMTFfQVRUUl9NQlNTSURfRUxFTVNdKSB7XFxuNjc5NzpcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfbWJzc2lkX2VsZW1zICptYnNzaWQgPVxcbjY3OTg6XFx0XFx0XFx0XFx0bmw4MDIxMV9wYXJzZV9tYnNzaWRfZWxlbXMoXFx1MDAyNnJkZXYtXFx1MDAzZXdpcGh5LFxcbjY3OTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgYXR0cnNbTkw4MDIxMV9BVFRSX01CU1NJRF9FTEVNU10sXFxuNjgwMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBleHRhY2spO1xcbjY4MDE6XFx0XFxuNjgwMjpcXHRcXHRcXHRpZiAoSVNfRVJSKG1ic3NpZCkpXFxuNjgwMzpcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihtYnNzaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDowNS45NTM0NjI0MzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0ODA1OTE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gQmVhY29uIFBhcnNpbmcqKlxuXG5BbHJpZ2h0LCBJJ20gdHJhY2luZyB0aHJvdWdoIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgbm93LiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbnMgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhbGxvY2F0aW5nIG1lbW9yeS4gSSBzdXNwZWN0IEkgbWlnaHQgYmUgYWJsZSB0byBpZGVudGlmeSBzb21lIGluZWZmaWNpZW5jaWVzIG9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgdGhpcyB3YXkuIFVuZGVyc3RhbmRpbmcgaG93IGl0IGhhbmRsZXMgbWVtb3J5IGlzIGNyaXRpY2FsIHRvIGZpZ3VyaW5nIG91dCB0aGUgbnVhbmNlcyBvZiB0aGUgY29kZS4gTGV0J3Mgc2VlIGlmIHRoaXMgcmV2ZWFscyBhbnl0aGluZyBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMzQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjA5LjAwMTUyNjM2MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzQwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2ODA0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjgwNDpcXHRcXG42ODA1OlxcdFxcdFxcdGJjbi1cXHUwMDNlbWJzc2lkX2llcyA9IG1ic3NpZDtcXG42ODA2OlxcdFxcbjY4MDc6XFx0XFx0XFx0aWYgKGJjbi1cXHUwMDNlbWJzc2lkX2llcyBcXHUwMDI2XFx1MDAyNiBhdHRyc1tOTDgwMjExX0FUVFJfRU1BX1JOUl9FTEVNU10pIHtcXG42ODA4OlxcdFxcdFxcdFxcdHN0cnVjdCBjZmc4MDIxMV9ybnJfZWxlbXMgKnJuciA9XFxuNjgwOTpcXHRcXHRcXHRcXHRcXHRubDgwMjExX3BhcnNlX3Jucl9lbGVtcyhcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksXFxuNjgxMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRhdHRyc1tOTDgwMjExX0FUVFJfRU1BX1JOUl9FTEVNU10sXFxuNjgxMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRleHRhY2spO1xcbjY4MTI6XFx0XFxuNjgxMzpcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKHJucikpXFxuNjgxNDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihybnIpO1xcbjY4MTU6XFx0XFxuNjgxNjpcXHRcXHRcXHRcXHRpZiAocm5yIFxcdTAwMjZcXHUwMDI2IHJuci1cXHUwMDNlY250IFxcdTAwM2MgYmNuLVxcdTAwM2VtYnNzaWRfaWVzLVxcdTAwM2VjbnQpIHtcXG42ODE3OlxcdFxcdFxcdFxcdFxcdGtmcmVlKHJucik7XFxuNjgxODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42ODE5OlxcdFxcdFxcdFxcdH1cXG42ODIwOlxcdFxcbjY4MjE6XFx0XFx0XFx0XFx0YmNuLVxcdTAwM2VybnJfaWVzID0gcm5yO1xcbjY4MjI6XFx0XFx0XFx0fVxcbjY4MjM6XFx0XFx0fVxcbjY4MjQ6XFx0XFxuNjgyNTpcXHRcXHRlcnIgPSBubDgwMjExX2NhbGN1bGF0ZV9hcF9vcGVyYXRpb24oYXR0cnMsIGJjbiwgZXh0YWNrKTtcXG42ODI2OlxcdFxcdGlmIChlcnIpXFxuNjgyNzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjY4Mjg6XFx0XFxuNjgyOTpcXHRcXHRpZiAoYmNuLVxcdTAwM2VoZV9vcGVyIFxcdTAwMjZcXHUwMDI2IChjaGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IElFRUU4MDIxMV9DSEFOX05PX0hFKSlcXG42ODMwOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG42ODMxOlxcdFxcbjY4MzI6XFx0XFx0aWYgKGJjbi1cXHUwMDNlZWh0X29wZXIgXFx1MDAyNlxcdTAwMjYgKGNoYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX0NIQU5fTk9fRUhUKSlcXG42ODMzOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG42ODM0OlxcdFxcbjY4MzU6XFx0XFx0aWYgKGJjbi1cXHUwMDNldWhyX29wZXIgXFx1MDAyNlxcdTAwMjYgKGNoYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUVFRTgwMjExX0NIQU5fTk9fVUhSKSlcXG42ODM2OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG42ODM3OlxcdFxcbjY4Mzg6XFx0XFx0cmV0dXJuIDA7XFxuNjgzOTpcXHR9XFxuNjg0MDpcXHRcXG42ODQxOlxcdHN0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9oZV9vYnNzX3BkKHN0cnVjdCBubGF0dHIgKmF0dHJzLFxcbjY4NDI6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfaGVfb2Jzc19wZCAqaGVfb2Jzc19wZClcXG42ODQzOlxcdHtcXG42ODQ0OlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW05MODAyMTFfSEVfT0JTU19QRF9BVFRSX01BWCArIDFdO1xcbjY4NDU6XFx0XFx0aW50IGVycjtcXG42ODQ2OlxcdFxcbjY4NDc6XFx0XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfTUFYLCBhdHRycyxcXG42ODQ4OlxcdFxcdFxcdFxcdCAgICAgICBoZV9vYnNzX3BkX3BvbGljeSwgTlVMTCk7XFxuNjg0OTpcXHRcXHRpZiAoZXJyKVxcbjY4NTA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG42ODUxOlxcdFxcbjY4NTI6XFx0XFx0aWYgKCF0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9TUl9DVFJMXSlcXG42ODUzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjY4NTQ6XFx0XFxuNjg1NTpcXHRcXHRoZV9vYnNzX3BkLVxcdTAwM2Vzcl9jdHJsID0gbmxhX2dldF91OCh0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9TUl9DVFJMXSk7XFxuNjg1NjpcXHRcXG42ODU3OlxcdFxcdGlmICh0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9NSU5fT0ZGU0VUXSlcXG42ODU4OlxcdFxcdFxcdGhlX29ic3NfcGQtXFx1MDAzZW1pbl9vZmZzZXQgPVxcbjY4NTk6XFx0XFx0XFx0XFx0bmxhX2dldF91OCh0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9NSU5fT0ZGU0VUXSk7XFxuNjg2MDpcXHRcXHRpZiAodGJbTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfTUFYX09GRlNFVF0pXFxuNjg2MTpcXHRcXHRcXHRoZV9vYnNzX3BkLVxcdTAwM2VtYXhfb2Zmc2V0ID1cXG42ODYyOlxcdFxcdFxcdFxcdG5sYV9nZXRfdTgodGJbTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfTUFYX09GRlNFVF0pO1xcbjY4NjM6XFx0XFx0aWYgKHRiW05MODAyMTFfSEVfT0JTU19QRF9BVFRSX05PTl9TUkdfTUFYX09GRlNFVF0pXFxuNjg2NDpcXHRcXHRcXHRoZV9vYnNzX3BkLVxcdTAwM2Vub25fc3JnX21heF9vZmZzZXQgPVxcbjY4NjU6XFx0XFx0XFx0XFx0bmxhX2dldF91OCh0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9OT05fU1JHX01BWF9PRkZTRVRdKTtcXG42ODY2OlxcdFxcbjY4Njc6XFx0XFx0aWYgKGhlX29ic3NfcGQtXFx1MDAzZW1pbl9vZmZzZXQgXFx1MDAzZSBoZV9vYnNzX3BkLVxcdTAwM2VtYXhfb2Zmc2V0KVxcbjY4Njg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNjg2OTpcXHRcXG42ODcwOlxcdFxcdGlmICh0YltOTDgwMjExX0hFX09CU1NfUERfQVRUUl9CU1NfQ09MT1JfQklUTUFQXSlcXG42ODcxOlxcdFxcdFxcdG1lbWNweShoZV9vYnNzX3BkLVxcdTAwM2Vic3NfY29sb3JfYml0bWFwLFxcbjY4NzI6XFx0XFx0XFx0ICAgICAgIG5sYV9kYXRhKHRiW05MODAyMTFfSEVfT0JTU19QRF9BVFRSX0JTU19DT0xPUl9CSVRNQVBdKSxcXG42ODczOlxcdFxcdFxcdCAgICAgICBzaXplb2YoaGVfb2Jzc19wZC1cXHUwMDNlYnNzX2NvbG9yX2JpdG1hcCkpO1xcbjY4NzQ6XFx0XFxuNjg3NTpcXHRcXHRpZiAodGJbTkw4MDIxMV9IRV9PQlNTX1BEX0FUVFJfUEFSVElBTF9CU1NJRF9CSVRNQVBdKVxcbjY4NzY6XFx0XFx0XFx0bWVtY3B5KGhlX29ic3NfcGQtXFx1MDAzZXBhcnRpYWxfYnNzaWRfYml0bWFwLFxcbjY4Nzc6XFx0XFx0XFx0ICAgICAgIG5sYV9kYXRhKHRiW05MODAyMTFfSEVfT0JTU19QRF9BVFRSX1BBUlRJQUxfQlNTSURfQklUTUFQXSksXFxuNjg3ODpcXHRcXHRcXHQgICAgICAgc2l6ZW9mKGhlX29ic3NfcGQtXFx1MDAzZXBhcnRpYWxfYnNzaWRfYml0bWFwKSk7XFxuNjg3OTpcXHRcXG42ODgwOlxcdFxcdGhlX29ic3NfcGQtXFx1MDAzZWVuYWJsZSA9IHRydWU7XFxuNjg4MTpcXHRcXG42ODgyOlxcdFxcdHJldHVybiAwO1xcbjY4ODM6XFx0fVxcbjY4ODQ6XFx0XFxuNjg4NTpcXHRzdGF0aWMgaW50IG5sODAyMTFfcGFyc2VfZmlsc19kaXNjb3Zlcnkoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxcbjY4ODY6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqYXR0cnMsXFxuNjg4NzpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgY2ZnODAyMTFfZmlsc19kaXNjb3ZlcnkgKmZkKVxcbjY4ODg6XFx0e1xcbjY4ODk6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbTkw4MDIxMV9GSUxTX0RJU0NPVkVSWV9BVFRSX01BWCArIDFdO1xcbjY4OTA6XFx0XFx0aW50IHJldDtcXG42ODkxOlxcdFxcbjY4OTI6XFx0XFx0aWYgKCF3aXBoeV9leHRfZmVhdHVyZV9pc3NldChcXHUwMDI2cmRldi1cXHUwMDNld2lwaHksXFxuNjg5MzpcXHRcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfRklMU19ESVNDT1ZFUlkpKVxcbjY4OTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNjg5NTpcXHRcXG42ODk2OlxcdFxcdHJldCA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIE5MODAyMTFfRklMU19ESVNDT1ZFUllfQVRUUl9NQVgsIGF0dHJzLFxcbjY4OTc6XFx0XFx0XFx0XFx0ICAgICAgIE5VTEwsIE5VTEwpO1xcbjY4OTg6XFx0XFx0aWYgKHJldClcXG42ODk5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuNjkwMDpcXHRcXG42OTAxOlxcdFxcdGlmICghdGJbTkw4MDIxMV9GSUxTX0RJU0NPVkVSWV9BVFRSX0lOVF9NSU5dIFxcdTAwMjZcXHUwMDI2XFxuNjkwMjpcXHRcXHQgICAgIXRiW05MODAyMTFfRklMU19ESVNDT1ZFUllfQVRUUl9JTlRfTUFYXSBcXHUwMDI2XFx1MDAyNlxcbjY5MDM6XFx0XFx0ICAgICF0YltOTDgwMjExX0ZJTFNfRElTQ09WRVJZX0FUVFJfVE1QTF0pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MDkuMDAyNDAzMjgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDEyNDU0OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBMZWFrIEZpeCBpbiBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyB0aGUgbG9naWMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBubDgwMjExX3BhcnNlX2JlYWNvbmAgYWxsb2NhdGVzIG1lbW9yeSBmb3IgYGJjbi1cdTAwM2VtYnNzaWRfaWVzYCBhbmQgYGJjbi1cdTAwM2VybnJfaWVzYCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggY2FsbHMgdG8gYG5sODAyMTFfcGFyc2VfbWJzc2lkX2VsZW1zYCBhbmQgYG5sODAyMTFfcGFyc2Vfcm5yX2VsZW1zYC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgcG90ZW50aWFsIGxlYWs6IGlmIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgc3VjY2VlZGVkLCBidXQgdGhlIHN1YnNlcXVlbnQgYGt6YWxsb2Nfb2Jqc2AgZmFpbGVkLCBtZW1vcnkgaW4gYHBhcmFtcy5iZWFjb25fbmV4dGAgd291bGQgYmUgbGVmdCBkYW5nbGluZy4gVGhlIHBhdGNoIGF0dGVtcHRzIHRvIGZpeCB0aGlzIGJ5IGFsbG9jYXRpbmcgYHRiYCBmaXJzdCBhbmQgdGhlbiwgaWYgYG5sODAyMTFfcGFyc2VfYmVhY29uYCAqZmFpbHMqLCBqdW1waW5nIHRvIGBvdXRgIHRvIGZyZWUgdGhlIGFsbG9jYXRlZCBgcGFyYW1zLmJlYWNvbl9uZXh0Lm1ic3NpZF9pZXNgIGFuZCBgcGFyYW1zLmJlYWNvbl9uZXh0LnJucl9pZXNgLiBUaGF0IHNlZW1lZCBsaWtlIGEgcmVhc29uYWJsZSBmaXguXG5cblRoZW4gSSByZWFsaXplZCwgaG9sZCBvbiBhIHNlY29uZCEgV2hhdCBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZhaWxzIGludGVybmFsbHkgKmJlZm9yZSogdGhlIHBhdGNoIGlzIGFwcGxpZWQ/IEZvciBpbnN0YW5jZSwgd2hhdCBpZiBgbmw4MDIxMV9jYWxjdWxhdGVfYXBfb3BlcmF0aW9uYCBmYWlscyB3aXRoaW4gYG5sODAyMTFfcGFyc2VfYmVhY29uYD8gSW4gdGhhdCBjYXNlLCBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIHJldHVybnMgYW4gZXJyb3IsIGJ1dCBpdCBkb2Vzbid0IGV4cGxpY2l0bHkgZnJlZSB0aGUgYWxsb2NhdGVkIGBiY24tXHUwMDNlbWJzc2lkX2llc2AgYW5kIGBiY24tXHUwMDNlcm5yX2llc2AuIEkgbmVlZCB0byByZXZpc2l0IHRoZSBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGZ1bmN0aW9uIHRvIGNvbmZpcm0uXG5cbk9rYXksIGhlcmUncyB3aGF0IHRoZSBjb2RlIGxvb2tzIGxpa2U6XG5cbmBgYGNcblx0ZXJyID0gbmw4MDIxMV9jYWxjdWxhdGVfYXBfb3BlcmF0aW9uKGF0dHJzLCBiY24sIGV4dGFjayk7XG5cdGlmIChlcnIpXG5cdFx0cmV0dXJuIGVycjtcbmBgYFxuXG5ZdXAuIElmIGBubDgwMjExX2NhbGN1bGF0ZV9hcF9vcGVyYXRpb25gIGZhaWxzLCBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIGp1c3QgcmV0dXJucyB0aGUgZXJyb3IgZGlyZWN0bHksIGxlYXZpbmcgdGhvc2Ugc3RydWN0dXJlcyBhbGxvY2F0ZWQhIFNvLCBpdCdzIHRoZSAqY2FsbGVyJ3MqIHJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgdGhvc2UgaWYgaXQgZmFpbHMuIEJlZm9yZSB0aGUgcGF0Y2gsIGBubDgwMjExX2NvbG9yX2NoYW5nZWAgZGlkIHNvbWV0aGluZyBsaWtlIHRoaXM6XG5cbmBgYGNcblx0ZXJyID0gbmw4MDIxMV9wYXJzZV9iZWFjb24ocmRldiwgaW5mby1cdTAwM2VhdHRycywgXHUwMDI2cGFyYW1zLmJlYWNvbl9uZXh0LFxuXHRcdFx0XHQgICB3ZGV2LVx1MDAzZWxpbmtzW3BhcmFtcy5saW5rX2lkXS5hcC5jaGFuZGVmLmNoYW4sXG5cdFx0XHRcdCAgIGluZm8tXHUwMDNlZXh0YWNrKTtcblx0aWYgKGVycilcblx0XHRyZXR1cm4gZXJyO1xuYGBgXG5cbkluIHRoZSBldmVudCBvZiBhbiBlcnJvciBmcm9tIGBubDgwMjExX3BhcnNlX2JlYWNvbmAsIGBwYXJhbXMuYmVhY29uX25leHRgIHdhcyBsZWFrZWQuIE5vdywgKndpdGgqIHRoZSBwYXRjaDpcblxuYGBgY1xuXHRlcnIgPSBubDgwMjExX3BhcnNlX2JlYWNvbihyZGV2LCBpbmZvLVx1MDAzZWF0dHJzLCBcdTAwMjZwYXJhbXMuYmVhY29uX25leHQsXG5cdFx0XHRcdCAgIHdkZXYtXHUwMDNlbGlua3NbcGFyYW1zLmxpbmtfaWRdLmFwLmNoYW5kZWYuY2hhbixcblx0XHRcdFx0ICAgaW5mby1cdTAwM2VleHRhY2spO1xuXHRpZiAoZXJyKVxuXHRcdGdvdG8gb3V0O1xuYGBgXG5cbkFuZCBgb3V0YCAqZG9lcyogZnJlZSB0aGUgbWVtb3J5OlxuXG5gYGBjXG5vdXQ6XG5cdGtmcmVlKHBhcmFtcy5iZWFjb25fbmV4dC5tYnNzaWRfaWVzKTtcblx0a2ZyZWUocGFyYW1zLmJlYWNvbl9jb2xvcl9jaGFuZ2UubWJzc2lkX2llcyk7XG5cdGtmcmVlKHBhcmFtcy5iZWFjb25fbmV4dC5ybnJfaWVzKTtcblx0a2ZyZWUocGFyYW1zLmJlYWNvbl9jb2xvcl9jaGFuZ2Uucm5yX2llcyk7XG5cdGtmcmVlKHRiKTtcblx0cmV0dXJuIGVycjtcbmBgYFxuXG5ZZXMhIFRoYXQncyBpdC4gVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsuIFRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXguIEdpdmVuIHRoYXQgaXQncyBpbiBhIG5ldGxpbmsgaGFuZGxlciwgaXQncyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMgb3IgdnVsbmVyYWJpbGl0aWVzIGludHJvZHVjZWQuIFNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uIGlzIGBubDgwMjExX2NvbG9yX2NoYW5nZWAuIFRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhcmUgYENPTkZJR19NQUM4MDIxMWAgYW5kIGBDT05GSUdfQ0ZHODAyMTFgLiBTbyBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIGJlbG9uZ3MgdG8gYGNmZzgwMjExYC4gSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGJvdGggYGNmZzgwMjExYCBhbmQgYG1hYzgwMjExYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjE5LjQxNDg2MzIzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0OTI1Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRkc4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZz0xND1jb25maWcgV0VYVF9QUklWXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzpjb25maWcgQ0ZHODAyMTFcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnPTM4PWNvbmZpZyBOTDgwMjExX1RFU1RNT0RFXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo1Mjpjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTXFxubmV0L3dpcmVsZXNzL0tjb25maWctNTMtXFx0Ym9vbCBcXFwiZW5hYmxlIGRldmVsb3BlciB3YXJuaW5nc1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY3LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjY4OmNvbmZpZyBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cXHRib29sIFxcXCJjZmc4MDIxMSBjZXJ0aWZpY2F0aW9uIG9udXNcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy04OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05MC1cXHRib29sIFxcXCJyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo5OTpjb25maWcgQ0ZHODAyMTFfVVNFX0tFUk5FTF9SRUdEQl9LRVlTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTAwLVxcdGJvb2wgXFxcImFsbG93IHJlZ2RiIGtleXMgc2hpcHBlZCB3aXRoIHRoZSBrZXJuZWxcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTEwLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjExMTpjb25maWcgQ0ZHODAyMTFfRVhUUkFfUkVHREJfS0VZRElSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVxcdHN0cmluZyBcXFwiYWRkaXRpb25hbCByZWdkYiBrZXkgZGlyZWN0b3J5XFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEyMy1cXHRib29sIFxcXCJjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMzU6Y29uZmlnIENGRzgwMjExX1JFR19SRUxBWF9OT19JUlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNi1cXHRib29sIFxcXCJjZmc4MDIxMSBzdXBwb3J0IGZvciBOT19JUiByZWxheGF0aW9uXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTU4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE1OTpjb25maWcgQ0ZHODAyMTFfREVGQVVMVF9QU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cXHRib29sIFxcXCJlbmFibGUgcG93ZXJzYXZlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNjgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTcwLVxcdGJvb2wgXFxcImNmZzgwMjExIERlYnVnRlMgZW50cmllc1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNzc6Y29uZmlnIENGRzgwMjExX0NSREFfU1VQUE9SVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3OC1cXHRib29sIFxcXCJzdXBwb3J0IENSREFcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE4Nzpjb25maWcgQ0ZHODAyMTFfV0VYVFxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJjZmc4MDIxMSB3aXJlbGVzcyBleHRlbnNpb25zIGNvbXBhdGliaWxpdHlcXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTMtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTk1LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MTkuNTE5Nzk2MzQ0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDk3MzkyNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgQ0ZHODAyMTFgIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIHJldm9sdmVzIGFyb3VuZCBgQ0ZHODAyMTFgLiBUaGF0J3MgdGhlIGNvcmUgb2Ygd2lyZWxlc3MgY29uZmlndXJhdGlvbiBpbiB0aGUgTGludXgga2VybmVsLCBhIHdlbGwtdHJvZGRlbiBwYXRoLiBCdXQgdG8gKnJlYWxseSogZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzaW11bGF0ZSB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb25zLCBJIGtub3cgSSdsbCBuZWVkIGBtYWM4MDIxMV9od3NpbWAuIFRoYXQncyB0aGUgZW11bGF0aW9uIGxheWVyIHRoYXQgbGV0cyBtZSBpbnRlcmFjdCB3aXRoIHRoaXMgY29yZSB3aXRob3V0IGFjdHVhbCBwaHlzaWNhbCB3aXJlbGVzcyBkZXZpY2VzLiBJdOKAmXMgdGhlIGtleSB0byBmdWxseSB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGFsbCBoYW5ncyB0b2dldGhlciwgZXNwZWNpYWxseSBmb3IgdGVzdCBjYXNlcyBhbmQgZGV2ZWxvcG1lbnQuXG5cbkxldCdzIG1ha2UgYWJzb2x1dGVseSBzdXJlIGBNQUM4MDIxMV9IV1NJTWAgaXMgZW5hYmxlZC4gVGltZSB0byB2ZXJpZnkgdGhhdCBhbmQgc2VlIGlmIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGFjZS4gR290dGEgZ2V0IHRoYXQgZW52aXJvbm1lbnQgc2V0IHVwIGNvcnJlY3RseSBiZWZvcmUgSSBnbyBtdWNoIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDU3LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MjMuMTY5NTM5ODVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDY1NTM5MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExX0hXU0lNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjIzLjI3NDIwODcxM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjkwNTY5NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRmluZGluZyB0aGUgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiB3aGVyZSB3YXMgdGhhdCBzZXR0aW5nIHJlbGF0ZWQgdG8gdGhlIGhhcmR3YXJlIHNpbXVsYXRpb24gZm9yIG1hYzgwMjExIGFnYWluPyBIbW0sIGlmIG1lbW9yeSBzZXJ2ZXMsIGFuZCBpdCB1c3VhbGx5IGRvZXMgaW4gdGhlc2UgbWF0dGVycywgaXQncyB2ZXJ5IGxpa2VseSBuZXN0ZWQgZGVlcCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIHRoaW5nLCBJJ2QgYmV0IHRoZSBmYXJtIGl0J3MgcHJvYmFibHkgaGFuZ2luZyBvdXQgdW5kZXIgdGhlIG5ldHdvcmsgZHJpdmVycywgc3BlY2lmaWNhbGx5IHRoZSB3aXJlbGVzcyBzZWN0aW9uLCBhbmQgd2l0aGluIHRoYXQsIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0uIEFuZCBpZiBJJ20gdGhpbmtpbmcgYWxvbmcgdGhlIHJpZ2h0IGxpbmVzLCB0aGUgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpdHNlbGYgd291bGQgYmUgc29tZXRoaW5nIGxpa2UgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltL0tjb25maWdgLiBPciBzb21ldGhpbmcgc2ltaWxhci4gSSdtIHByZXR0eSBjZXJ0YWluIHRoYXQncyB0aGUgYXJlYSBJIG5lZWQgdG8gemVybyBpbiBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDoyNi41NjQ3ODEyNzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NTU0NTg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTFfSFdTSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZzoxOmNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgcmFkaW8gdGVzdGluZyB0b29sIGZvciBtYWM4MDIxMVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MjYuODMwMzM1NDY0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzc2MzA1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNQUM4MDIxMV9IV1NJTSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgZm9jdXMgaXMgYE1BQzgwMjExX0hXU0lNYC4gVGhhdCdzIHRoZSBjb25maWcgaW4gcGxheSBoZXJlLiBNeSBtZW50YWwgbW9kZWwgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGhhcmR3YXJlIHNpbXVsYXRpb24gYXNwZWN0LCBhbmQgSSdtIGluc3RhbnRseSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciB0ZXN0aW5nIGFuZCBkZXZlbG9wbWVudC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIHRoZSBjb250ZXh0LlxuXG5Ib2xkIG9uLCB0aGUgYG5sODAyMTFfY29sb3JfY2hhbmdlYCBzeW1ib2wgaXMganVtcGluZyBvdXQgYXQgbWUgYXMgYSBrZXkgYXJlYSBvZiBpbnRlcmVzdC4gV2h5IGlzIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gZ2V0dGluZyBhdHRlbnRpb24gaW4gdGhpcyBjb250ZXh0PyBJdCdzIG1ha2luZyBtZSB3b25kZXIgaWYgdGhleSdyZSBsb29raW5nIGF0IGNvbG9yIHNwYWNlIGNoYW5nZXMsIHBvc3NpYmx5IGZvciBkZWJ1Z2dpbmcgb3Igc29tZSBoYXJkd2FyZSBkZXBlbmRlbnQgdGhpbmcuXG5cbk15IG1pbmQgaXMgbm93IHJhY2luZyB0b3dhcmRzIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMuIEJlZm9yZSBnb2luZyB0b28gZmFyIGRvd24gdGhhdCByYWJiaXQgaG9sZSwgSSBuZWVkIHRvIGtub3cgdGhlIGJpZ2dlciBwaWN0dXJlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIGZvciBvdGhlciBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgYXJlIHJlbGF0ZWQgdG8gdGhhdCBzcGVjaWZpYyBjYWxsOyBJIG5lZWQgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIHRoZSBjaGFuZ2VzIGludm9sdmVkIGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgYXJlIGltcGFjdGVkIGJ5IHRoaXMgZm9jdXMgb24gY29sb3IgY2hhbmdlLiBJdCBtYWtlcyBtZSBjdXJpb3VzIGlmIGl0IGlzIHJlbGF0ZWQgdG8gYW4gaXNzdWUsIG9yIGFuIGVuaGFuY2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY4MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjMwLjg2Nzk2OTAyNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MDEyOTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sODAyMTFfY29sb3JfY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC93aXJlbGVzcy9ubDgwMjExLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3dpcmVsZXNzL25sODAyMTEuYz0xODY2NT1zdGF0aWMgaW50IG5sODAyMTFfc2V0X3RpZF9jb25maWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg3MjAtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxODcyMTpzdGF0aWMgaW50IG5sODAyMTFfY29sb3JfY2hhbmdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODcyMi17XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE5NTQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmw4MDIxMV9zbWFsbF9vcHNbXSA9IHtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjAzNDctXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjAzNDg6XFx0XFx0LmRvaXQgPSBubDgwMjExX2NvbG9yX2NoYW5nZSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwMzQ5LVxcdFxcdC5mbGFncyA9IEdFTkxfVU5TX0FETUlOX1BFUk0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjMwLjk3Mzk4Nzk2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjUxNjg2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBsYXNlci1mb2N1c2VkOyBpdCdzIGp1c3QgdG91Y2hpbmcgYG5sODAyMTFfY29sb3JfY2hhbmdlYC4gVGhhdCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIEEgdGFyZ2V0ZWQgZml4IGxpa2UgdGhpcywgZXNwZWNpYWxseSB3aGVuIGl0J3MgYWJvdXQgYSBOZXRsaW5rIGhhbmRsZXIsIHNjcmVhbXMgXCJwb3RlbnRpYWwgZm9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucyxcIiBhbmQgdGhhdCdzIHNvbWV0aGluZyBJIG5lZWQgdG8gZXZhbHVhdGUuIEFuZCB0aGUgZGVzY3JpcHRpb24gaXMgcHJldHR5IGNsZWFyOiBpdCBhZGRyZXNzZXMgYSBtZW1vcnkgbGVhay4gVGhpcyB3YXJyYW50cyBhIGNsb3NlciBsb29rLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBpcyBpdCBmdXp6LXdvcnRoeT8gR2l2ZW4gdGhhdCBpdCdzIGEgYnVnIGZpeCB3aXRoaW4gYSBOZXRsaW5rIGhhbmRsZXIsIGFic29sdXRlbHkuIE5ldGxpbmsgaGFuZGxlcnMgYXJlIG5vdG9yaW91cyBmb3IgYmVpbmcgYXR0YWNrIHZlY3RvcnMsIGFuZCBtZW1vcnkgbGVha3Mgb2Z0ZW4gaW5kaWNhdGUgZGVlcGVyIGlzc3VlcyB0aGF0IGZ1enppbmcgY291bGQgZXhwb3NlLlxuXG5UaGUgY2VudHJhbCBzeW1ib2wgdG8gZm9jdXMgb24gaXMsIG9mIGNvdXJzZSwgYG5sODAyMTFfY29sb3JfY2hhbmdlYC4gSSdsbCBiZSBkaWdnaW5nIGludG8gdGhlIGNhbGwgZ3JhcGggYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLlxuXG5Ob3csIGZvciBjb25maWd1cmF0aW9uLCBgQ0ZHODAyMTFgIGlzIHJlbGV2YW50LCBvYnZpb3VzbHkuIEkgYWxzbyBzZWUgYE1BQzgwMjExX0hXU0lNYCBsaXN0ZWQuIFdhaXQgYSBzZWNvbmQsIGlzIGBNQUM4MDIxMV9IV1NJTWAgcmVsaWFudCBvbiBgTUFDODAyMTFgPyBBaCwgeWVzLiBJdCdzIGEgaGFyZHdhcmUgc2ltdWxhdG9yLCBzbyBpdCBtYWtlcyBzZW5zZSBpdCBkZXBlbmRzIG9uIHRoZSBjb3JlIE1BQzgwMjExIGZyYW1ld29yay4gR29vZCwgdGhhdCBuYXJyb3dzIGRvd24gdGhlIHNldHVwIHJlcXVpcmVtZW50cyBmb3IgdGVzdGluZyBzaWduaWZpY2FudGx5LiBJJ2xsIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBzZXR0aW5nIHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM0MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDozNi4yOTkxNTg5NjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzk4NTc0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uIE1BQzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc9MT1jb25maWcgTUFDODAyMTFfSFdTSU1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjM6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy00LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MzYuNDAzMTUwMTc2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NTMyODQ3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbnNpZGVyaW5nIHRoZSBBcmNoaXRlY3R1cmUqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY29tcHJlaGVuc2l2ZSBoZXJlLiBDbGVhcmx5LCB0aGlzIGRpc2N1c3Npb24gbmVlZHMgdG8gZW5jb21wYXNzIGBNQUM4MDIxMWAgdG9vLiBJdCdzIGEgZnVuZGFtZW50YWwgY29tcG9uZW50IGluIHRoaXMgYXJlYS4gQmVmb3JlIGdvaW5nIGZ1cnRoZXIsIGEgcXVpY2sgZGVwZW5kZW5jeSBjaGVjayBvbiBgTUFDODAyMTFgIGlzIGluIG9yZGVyLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cCBwcm9wZXJseSBhbmQgdGhhdCBJIGhhdmVuJ3QgbWlzc2VkIGFueSBjcnVjaWFsIGNvbm5lY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzkwOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjM4Ljk1NjQzNzk3OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQzNDQ0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L21hYzgwMjExL0tjb25maWc6Mjpjb25maWcgTUFDODAyMTFcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTE5PWlmIE1BQzgwMjExICE9IG5cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTpjb25maWcgTUFDODAyMTFfSEFTX1JDXFxubmV0L21hYzgwMjExL0tjb25maWctMjItXFx0Ym9vbFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0OmNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTMxPWNob2ljZVxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNDAtXFxubmV0L21hYzgwMjExL0tjb25maWc6NDE6Y29uZmlnIE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy00Mi1cXHRib29sIFxcXCJNaW5zdHJlbFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTQ4PWVuZGNob2ljZVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTQ5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjUwOmNvbmZpZyBNQUM4MDIxMV9SQ19ERUZBVUxUXFxubmV0L21hYzgwMjExL0tjb25maWctNTEtXFx0c3RyaW5nXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZz01Nz1jb21tZW50IFxcXCJTb21lIHdpcmVsZXNzIGRyaXZlcnMgcmVxdWlyZSBhIHJhdGUgY29udHJvbCBhbGdvcml0aG1cXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy01OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo2MDpjb25maWcgTUFDODAyMTFfS1VOSVRfVEVTVFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTYxLVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgbWFjODAyMTFcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctNzgtXFxubmV0L21hYzgwMjExL0tjb25maWc6Nzk6Y29uZmlnIE1BQzgwMjExX0xFRFNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04MC1cXHRib29sIFxcXCJFbmFibGUgTEVEIHRyaWdnZXJzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctODctXFxubmV0L21hYzgwMjExL0tjb25maWc6ODg6Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy04OS1cXHRib29sIFxcXCJFeHBvcnQgbWFjODAyMTEgaW50ZXJuYWxzIGluIERlYnVnRlNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy05Ni1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzo5Nzpjb25maWcgTUFDODAyMTFfTUVTU0FHRV9UUkFDSU5HXFxubmV0L21hYzgwMjExL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiVHJhY2UgYWxsIG1hYzgwMjExIGRlYnVnIG1lc3NhZ2VzXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTA5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjExMDptZW51Y29uZmlnIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiU2VsZWN0IG1hYzgwMjExIGRlYnVnZ2luZyBmZWF0dXJlc1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTExNS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxMTY6Y29uZmlnIE1BQzgwMjExX05PSU5MSU5FXFxubmV0L21hYzgwMjExL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkRvIG5vdCBpbmxpbmUgVFgvUlggaGFuZGxlcnNcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xMzEtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTMyOmNvbmZpZyBNQUM4MDIxMV9WRVJCT1NFX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTMzLVxcdGJvb2wgXFxcIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dFxcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE0Mi1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNDM6Y29uZmlnIE1BQzgwMjExX01MTUVfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNDQtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtYW5hZ2VkIE1MTUUgb3V0cHV0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMTUzLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjE1NDpjb25maWcgTUFDODAyMTFfU1RBX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTU1LVxcdGJvb2wgXFxcIlZlcmJvc2Ugc3RhdGlvbiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xNjItXFxubmV0L21hYzgwMjExL0tjb25maWc6MTYzOmNvbmZpZyBNQUM4MDIxMV9IVF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE2NC1cXHRib29sIFxcXCJWZXJib3NlIEhUIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3NC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoxNzU6Y29uZmlnIE1BQzgwMjExX09DQl9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE3Ni1cXHRib29sIFxcXCJWZXJib3NlIE9DQiBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xODUtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTg2OmNvbmZpZyBNQUM4MDIxMV9JQlNTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMTg3LVxcdGJvb2wgXFxcIlZlcmJvc2UgSUJTUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0xOTYtXFxubmV0L21hYzgwMjExL0tjb25maWc6MTk3OmNvbmZpZyBNQUM4MDIxMV9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTE5OC1cXHRib29sIFxcXCJWZXJib3NlIHBvd2Vyc2F2ZSBtb2RlIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIwOC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMDk6Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggcGVlciBsaW5rIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyMS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjI6Y29uZmlnIE1BQzgwMjExX01QQVRIX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjIzLVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBwYXRoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNC1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzU6Y29uZmlnIE1BQzgwMjExX01IV01QX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjM2LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBIV01QIHJvdXRpbmcgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yODAtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjgxOmNvbmZpZyBNQUM4MDIxMV9URExTX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjgyLVxcdGJvb2wgXFxcIlZlcmJvc2UgVERMUyBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yOTItXFxubmV0L21hYzgwMjExL0tjb25maWc6MjkzOmNvbmZpZyBNQUM4MDIxMV9ERUJVR19DT1VOVEVSU1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI5NC1cXHRib29sIFxcXCJFeHRyYSBzdGF0aXN0aWNzIGZvciBUWC9SWCBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0zMDctXFxubmV0L21hYzgwMjExL0tjb25maWc6MzA4OmNvbmZpZyBNQUM4MDIxMV9TVEFfSEFTSF9NQVhfU0laRVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTMwOS1cXHRpbnQgXFxcIlN0YXRpb24gaGFzaCB0YWJsZSBtYXhpbXVtIHNpemVcXFwiIGlmIE1BQzgwMjExX0RFQlVHX01FTlVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6MzkuMDIwNzg4MDE1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNjA0NjI2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gY29uZmlndXJpbmcgdGhpcyBzeXN0ZW0gcmVsYXRlZCB0byB3aXJlbGVzcyBuZXR3b3JraW5nLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyaW5nIGluIGBNQUM4MDIxMWAgYXMgdGhlIGNlbnRyYWwgcGllY2UuIEkgdGhlbiBuZWVkIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBgQ0ZHODAyMTFgIGFuZCBgTUFDODAyMTFfSFdTSU1gIGJlY2F1c2UgSSdtIHF1aXRlIHN1cmUgdGhleSdyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCB0aGlzLiBIbW0sIHdhaXQgYSBtb21lbnTigKYgSSBuZWVkIHRvIGNvbnNpZGVyIGBubDgwMjExX2NvbG9yX2NoYW5nZWAuIFRoYXQncyBhY3R1YWxseSB3aXRoaW4gYGNmZzgwMjExYCwgaXNuJ3QgaXQ/XG5cblJpZ2h0LCB0aGUga2V5IHBvaW50IHRvIHJlbWVtYmVyIGlzIHRoYXQgYGNmZzgwMjExYCBkb2Vzbid0ICphYnNvbHV0ZWx5KiBuZWVkIGBtYWM4MDIxMWAuIEl0J3MgcG9zc2libGUgdG8gdXNlIGBjZmc4MDIxMWAgaW5kZXBlbmRlbnRseSwgZXNwZWNpYWxseSBmb3IgZnVsbG1hYyBkZXZpY2VzLiBIb3dldmVyLCBgbWFjODAyMTFfaHdzaW1gLCB3aGljaCBJIGRlZmluaXRlbHkgd2FudCwgcmVxdWlyZXMgYE1BQzgwMjExYC4gU28sIGNvbmZpcm1pbmcgbXkgZWFybGllciBpbnR1aXRpb246IGBDRkc4MDIxMWAsIGBNQUM4MDIxMWAsIGFuZCBgTUFDODAyMTFfSFdTSU1gIGl0IGlzLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBnb29kIHRvIGluY2x1ZGUuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSdsbCBkb3VibGUgY2hlY2sgdGhhdCBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIGlzIHJlYWNoYWJsZS4gVGhhdCBoYW5kbGVyIGlzIHRpZWQgdG8gdGhlIGBOTDgwMjExX0NNRF9DT0xPUl9DSEFOR0VgIG5ldGxpbmsgY29tbWFuZC4gTG9va3MgbGlrZSBpdCBoYXMgZGVwZW5kZW5jaWVzIG9uIGByZGV2LVx1MDAzZW9wcy1cdTAwM2Vjb2xvcl9jaGFuZ2VgIGFuZCBgTkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1JgLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkLCBidXQganVzdCB0byBiZSBzdXJlOiBkb2VzIGBtYWM4MDIxMV9od3NpbWAgc3VwcG9ydCBgY29sb3JfY2hhbmdlYD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGludGVncmF0aW9uIGNvbXBsZXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjY1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEyOjMwOjQ0LjM4MTI1NDQzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NTk5NDEzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2xvcl9jaGFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6NDQuNDk3ODY3ODU4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzE2NzM2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgY29sb3JfY2hhbmdlYCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgbWFjODAyMTFfaHdzaW1gIHN1cHBvcnRlZCAqYWxsKiB0aGUgc3RhbmRhcmQgZnVuY3Rpb25hbGl0eSwgYnV0IG5vdyBJJ20gcXVlc3Rpb25pbmcgd2hldGhlciBpdCBhY3R1YWxseSBpbXBsZW1lbnRzIGBjb2xvcl9jaGFuZ2VgLiBUaGF0IHdvdWxkIGJlIGEgaHVnZSBvdmVyc2lnaHQgaWYgaXQncyBtaXNzaW5nLCBzaW5jZSB0aGlzIGlzIGFuIGltcG9ydGFudCBwYXJ0IG9mIHRoZSA4MDIuMTEgc3RhbmRhcmQsIGVzcGVjaWFsbHkgZm9yIGFkdmFuY2VkIGZlYXR1cmVzLiBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgaW1tZWRpYXRlbHkuIEFscmlnaHQsIGxldCdzIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgYG1hYzgwMjExYCBvcGVyYXRpb25zIGFuZCBtYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBpcyBwcmVzZW50LiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBjb2xvcl9jaGFuZ2VgIGlzIGNvcnJlY3RseSBjYWxsZWQsIGFuZCB3b3JraW5nIGNvcnJlY3RseSwgb3IgZmlndXJlIG91dCAqd2h5KiBpdCdzIGFic2VudCBmcm9tIGBtYWM4MDIxMV9od3NpbWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTgzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6NDcuOTY5NTQ1MTE0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY4NDMxMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sb3JfY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2NmZy5jPTEwOTg9aWVlZTgwMjExX3NldF9wcm9iZV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTExMDAtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY3NhX3NldHRpbmdzICpjc2EsXFxubmV0L21hYzgwMjExL2NmZy5jOjExMDE6XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY29sb3JfY2hhbmdlX3NldHRpbmdzICpjY2EsXFxubmV0L21hYzgwMjExL2NmZy5jLTExMDItXFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rKVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTE0NjQ9aWVlZTgwMjExX2Fzc2lnbl9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtMTQ2Ny1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NzYV9zZXR0aW5ncyAqY3NhLFxcbm5ldC9tYWM4MDIxMS9jZmcuYzoxNDY4OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY29sb3JfY2hhbmdlX3NldHRpbmdzICpjY2EsXFxubmV0L21hYzgwMjExL2NmZy5jLTE0NjktXFx0XFx0XFx0dTY0ICpjaGFuZ2VkKVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTE5Mzc9c3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX2JlYWNvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTE5NTktXFx0ICovXFxubmV0L21hYzgwMjExL2NmZy5jOjE5NjA6XFx0aWYgKGxpbmtfY29uZi1cXHUwMDNlY3NhX2FjdGl2ZSB8fCBsaW5rX2NvbmYtXFx1MDAzZWNvbG9yX2NoYW5nZV9hY3RpdmUpXFxubmV0L21hYzgwMjExL2NmZy5jLTE5NjEtXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz0yMDExPXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0b3BfYXAoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMDQ1LVxcdGxpbmtfY29uZi1cXHUwMDNlY3NhX2FjdGl2ZSA9IGZhbHNlO1xcbm5ldC9tYWM4MDIxMS9jZmcuYzoyMDQ2OlxcdGxpbmtfY29uZi1cXHUwMDNlY29sb3JfY2hhbmdlX2FjdGl2ZSA9IGZhbHNlO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMDQ3LVxcdGllZWU4MDIxMV92aWZfdW5ibG9ja19xdWV1ZXNfY3NhKHNkYXRhKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz00NTYzPXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9jc2FfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rX2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY5My1cXG5uZXQvbWFjODAyMTEvY2ZnLmM6NDY5NDpzdGF0aWMgdm9pZCBpZWVlODAyMTFfY29sb3JfY2hhbmdlX2Fib3J0KHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rKVxcbm5ldC9tYWM4MDIxMS9jZmcuYy00Njk1LXtcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NDY5NjpcXHRsaW5rLVxcdTAwM2Vjb25mLVxcdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlID0gZmFsc2U7XFxubmV0L21hYzgwMjExL2NmZy5jLTQ2OTctXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY5OS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM6NDcwMDpcXHRjZmc4MDIxMV9jb2xvcl9jaGFuZ2VfYWJvcnRlZF9ub3RpZnkobGluay1cXHUwMDNlc2RhdGEtXFx1MDAzZWRldiwgbGluay1cXHUwMDNlbGlua19pZCk7XFxubmV0L21hYzgwMjExL2NmZy5jLTQ3MDEtfVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTQ3MDQ9X19pZWVlODAyMTFfY2hhbm5lbF9zd2l0Y2goc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy00NzkxLVxcdC8qIGlmIHRoZXJlIGlzIGEgY29sb3IgY2hhbmdlIGluIHByb2dyZXNzLCBhYm9ydCBpdCAqL1xcbm5ldC9tYWM4MDIxMS9jZmcuYzo0NzkyOlxcdGlmIChsaW5rX2NvbmYtXFx1MDAzZWNvbG9yX2NoYW5nZV9hY3RpdmUpXFxubmV0L21hYzgwMjExL2NmZy5jOjQ3OTM6XFx0XFx0aWVlZTgwMjExX2NvbG9yX2NoYW5nZV9hYm9ydChsaW5rX2RhdGEpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy00Nzk0LVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTU1MDg9c3RhdGljIGludFxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NTA5OmllZWU4MDIxMV9zZXRfYWZ0ZXJfY29sb3JfY2hhbmdlX2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayxcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTUxMC1cXHRcXHRcXHRcXHRcXHR1NjQgKmNoYW5nZWQpXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9NTUzOT1zdGF0aWMgaW50XFxubmV0L21hYzgwMjExL2NmZy5jOjU1NDA6aWVlZTgwMjExX3NldF9jb2xvcl9jaGFuZ2VfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NTQxOlxcdFxcdFxcdFxcdCAgc3RydWN0IGNmZzgwMjExX2NvbG9yX2NoYW5nZV9zZXR0aW5ncyAqcGFyYW1zLFxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NTQyLVxcdFxcdFxcdFxcdCAgdTY0ICpjaGFuZ2VkKVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU1NDQtXFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBsaW5rLVxcdTAwM2VzZGF0YTtcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTU0NTpcXHRzdHJ1Y3QgaWVlZTgwMjExX2NvbG9yX2NoYW5nZV9zZXR0aW5ncyBjb2xvcl9jaGFuZ2UgPSB7fTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTU0Ni1cXHRpbnQgZXJyO1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU1NTctXFxubmV0L21hYzgwMjExL2NmZy5jOjU1NTg6XFx0XFx0Y29sb3JfY2hhbmdlLmNvdW50ZXJfb2Zmc2V0X2JlYWNvbiA9XFxubmV0L21hYzgwMjExL2NmZy5jLTU1NTktXFx0XFx0XFx0cGFyYW1zLVxcdTAwM2Vjb3VudGVyX29mZnNldF9iZWFjb247XFxubmV0L21hYzgwMjExL2NmZy5jOjU1NjA6XFx0XFx0Y29sb3JfY2hhbmdlLmNvdW50ZXJfb2Zmc2V0X3ByZXNwID1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTU2MS1cXHRcXHRcXHRwYXJhbXMtXFx1MDAzZWNvdW50ZXJfb2Zmc2V0X3ByZXNwO1xcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NTYyOlxcdFxcdGNvbG9yX2NoYW5nZS5jb3VudCA9IHBhcmFtcy1cXHUwMDNlY291bnQ7XFxubmV0L21hYzgwMjExL2NmZy5jLTU1NjMtXFxubmV0L21hYzgwMjExL2NmZy5jLTU1NjQtXFx0XFx0ZXJyID0gaWVlZTgwMjExX2Fzc2lnbl9iZWFjb24oc2RhdGEsIGxpbmssXFxubmV0L21hYzgwMjExL2NmZy5jOjU1NjU6XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnBhcmFtcy1cXHUwMDNlYmVhY29uX2NvbG9yX2NoYW5nZSxcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTU2NjpcXHRcXHRcXHRcXHRcXHQgICAgICBOVUxMLCBcXHUwMDI2Y29sb3JfY2hhbmdlLCBjaGFuZ2VkKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTU2Ny1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTU1Nzk9c3RhdGljIHZvaWRcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTU4MDppZWVlODAyMTFfY29sb3JfY2hhbmdlX2Jzc19jb25maWdfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rLFxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NTgxLVxcdFxcdFxcdFxcdFxcdCB1OCBjb2xvciwgaW50IGVuYWJsZSwgdTY0IGNoYW5nZWQpXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYwOS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTYxMDpzdGF0aWMgaW50IGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfZmluYWxpemUoc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmspXFxubmV0L21hYzgwMjExL2NmZy5jLTU2MTEte1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU2MTgtXFxubmV0L21hYzgwMjExL2NmZy5jOjU2MTk6XFx0bGluay1cXHUwMDNlY29uZi1cXHUwMDNlY29sb3JfY2hhbmdlX2FjdGl2ZSA9IGZhbHNlO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy01NjIwLVxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjIxOlxcdGVyciA9IGllZWU4MDIxMV9zZXRfYWZ0ZXJfY29sb3JfY2hhbmdlX2JlYWNvbihsaW5rLCBcXHUwMDI2Y2hhbmdlZCk7XFxubmV0L21hYzgwMjExL2NmZy5jLTU2MjItXFx0aWYgKGVycikge1xcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjIzOlxcdFxcdGNmZzgwMjExX2NvbG9yX2NoYW5nZV9hYm9ydGVkX25vdGlmeShzZGF0YS1cXHUwMDNlZGV2LCBsaW5rLVxcdTAwM2VsaW5rX2lkKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYyNC1cXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU2MjYtXFxubmV0L21hYzgwMjExL2NmZy5jOjU2Mjc6XFx0aWVlZTgwMjExX2NvbG9yX2NoYW5nZV9ic3NfY29uZmlnX25vdGlmeShsaW5rLFxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjI4OlxcdFxcdFxcdFxcdFxcdFxcdCBsaW5rLVxcdTAwM2Vjb25mLVxcdTAwM2Vjb2xvcl9jaGFuZ2VfY29sb3IsXFxubmV0L21hYzgwMjExL2NmZy5jLTU2MjktXFx0XFx0XFx0XFx0XFx0XFx0IDEsIGNoYW5nZWQpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjMwOlxcdGNmZzgwMjExX2NvbG9yX2NoYW5nZV9ub3RpZnkoc2RhdGEtXFx1MDAzZWRldiwgbGluay1cXHUwMDNlbGlua19pZCk7XFxubmV0L21hYzgwMjExL2NmZy5jLTU2MzEtXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYzNC1cXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTYzNTp2b2lkIGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfZmluYWxpemVfd29yayhzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NjM2LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHdpcGh5X3dvcmsgKndvcmspXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTYzOS1cXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEsXFxubmV0L21hYzgwMjExL2NmZy5jOjU2NDA6XFx0XFx0XFx0ICAgICBjb2xvcl9jaGFuZ2VfZmluYWxpemVfd29yayk7XFxubmV0L21hYzgwMjExL2NmZy5jLTU2NDEtXFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBsaW5rLVxcdTAwM2VzZGF0YTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NjQ3LVxcdC8qIEFQIG1pZ2h0IGhhdmUgYmVlbiBzdG9wcGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBsb2NrLiAqL1xcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjQ4OlxcdGlmICghbGlua19jb25mLVxcdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlKVxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NjQ5LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NjUzLVxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjU0OlxcdGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfZmluYWxpemUobGluayk7XFxubmV0L21hYzgwMjExL2NmZy5jLTU2NTUtfVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTU2NTc9dm9pZCBpZWVlODAyMTFfY29sb3JfY29sbGlzaW9uX2RldGVjdGlvbl93b3JrKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY2OC1cXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTY2OTp2b2lkIGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfZmluaXNoKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4IGxpbmtfaWQpXFxubmV0L21hYzgwMjExL2NmZy5jLTU2NzAte1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU2ODUtXFx0d2lwaHlfd29ya19xdWV1ZShzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1Njg2OlxcdFxcdFxcdCBcXHUwMDI2bGluay1cXHUwMDNlY29sb3JfY2hhbmdlX2ZpbmFsaXplX3dvcmspO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy01Njg3LVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU2ODktfVxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NjkwOkVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfZmluaXNoKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTY5MS1cXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz01NjkzPWllZWU4MDIxMV9vYnNzX2NvbG9yX2NvbGxpc2lvbl9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NzA5LVxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NzEwOlxcdGlmIChsaW5rLVxcdTAwM2Vjb25mLVxcdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlIHx8IGxpbmstXFx1MDAzZWNvbmYtXFx1MDAzZWNzYV9hY3RpdmUpIHtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTcxMS1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz01NzMzPXN0YXRpYyBpbnRcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTczNDppZWVlODAyMTFfY29sb3JfY2hhbmdlKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L21hYzgwMjExL2NmZy5jOjU3MzU6XFx0XFx0ICAgICAgIHN0cnVjdCBjZmc4MDIxMV9jb2xvcl9jaGFuZ2Vfc2V0dGluZ3MgKnBhcmFtcylcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTczNi17XFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTc2MS1cXHQgKi9cXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTc2MjpcXHRpZiAobGlua19jb25mLVxcdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlIHx8IGxpbmtfY29uZi1cXHUwMDNlY3NhX2FjdGl2ZSkge1xcbm5ldC9tYWM4MDIxMS9jZmcuYy01NzYzLVxcdFxcdGVyciA9IC1FQlVTWTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NzcyLVxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NzczOlxcdGVyciA9IGllZWU4MDIxMV9zZXRfY29sb3JfY2hhbmdlX2JlYWNvbihsaW5rLCBwYXJhbXMsIFxcdTAwMjZjaGFuZ2VkKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTc3NC1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jLTU3NzYtXFxubmV0L21hYzgwMjExL2NmZy5jOjU3Nzc6XFx0bGlua19jb25mLVxcdTAwM2Vjb2xvcl9jaGFuZ2VfYWN0aXZlID0gdHJ1ZTtcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTc3ODpcXHRsaW5rX2NvbmYtXFx1MDAzZWNvbG9yX2NoYW5nZV9jb2xvciA9IHBhcmFtcy1cXHUwMDNlY29sb3I7XFxubmV0L21hYzgwMjExL2NmZy5jLTU3NzktXFxubmV0L21hYzgwMjExL2NmZy5jOjU3ODA6XFx0Y2ZnODAyMTFfY29sb3JfY2hhbmdlX3N0YXJ0ZWRfbm90aWZ5KHNkYXRhLVxcdTAwM2VkZXYsIHBhcmFtcy1cXHUwMDNlY291bnQsIGxpbmtfaWQpO1xcbm5ldC9tYWM4MDIxMS9jZmcuYy01NzgxLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy01NzgyLVxcdGlmIChjaGFuZ2VkKVxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1NzgzOlxcdFxcdGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfYnNzX2NvbmZpZ19ub3RpZnkobGluaywgMCwgMCwgY2hhbmdlZCk7XFxubmV0L21hYzgwMjExL2NmZy5jLTU3ODQtXFx0ZWxzZVxcbm5ldC9tYWM4MDIxMS9jZmcuYy01Nzg1LVxcdFxcdC8qIGlmIHRoZSBiZWFjb24gZGlkbid0IGNoYW5nZSwgd2UgY2FuIGZpbmFsaXplIGltbWVkaWF0ZWx5ICovXFxubmV0L21hYzgwMjExL2NmZy5jOjU3ODY6XFx0XFx0aWVlZTgwMjExX2NvbG9yX2NoYW5nZV9maW5hbGl6ZShsaW5rKTtcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTc4Ny1cXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz01OTkxPWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy02MDk0LVxcdC5zZXRfc2FyX3NwZWNzID0gaWVlZTgwMjExX3NldF9zYXJfc3BlY3MsXFxubmV0L21hYzgwMjExL2NmZy5jOjYwOTU6XFx0LmNvbG9yX2NoYW5nZSA9IGllZWU4MDIxMV9jb2xvcl9jaGFuZ2UsXFxubmV0L21hYzgwMjExL2NmZy5jLTYwOTYtXFx0LnNldF9yYWRhcl9iYWNrZ3JvdW5kID0gaWVlZTgwMjExX3NldF9yYWRhcl9iYWNrZ3JvdW5kLFxcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MjY0PXN0cnVjdCBpZWVlODAyMTFfY3NhX3NldHRpbmdzIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTI3My1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyNzQ6c3RydWN0IGllZWU4MDIxMV9jb2xvcl9jaGFuZ2Vfc2V0dGluZ3Mge1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTI3NS1cXHR1MTYgY291bnRlcl9vZmZzZXRfYmVhY29uO1xcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MTA5OT1zdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0xMTE4LVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjExMTk6XFx0c3RydWN0IHdpcGh5X3dvcmsgY29sb3JfY2hhbmdlX2ZpbmFsaXplX3dvcms7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMTEyMC1cXHRzdHJ1Y3Qgd2lwaHlfZGVsYXllZF93b3JrIGNvbG9yX2NvbGxpc2lvbl9kZXRlY3Rfd29yaztcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTIxNjU9aW50IGllZWU4MDIxMV9jaGFubmVsX3N3aXRjaChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjE2OC0vKiBjb2xvciBjaGFuZ2UgaGFuZGxpbmcgKi9cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyMTY5OnZvaWQgaWVlZTgwMjExX2NvbG9yX2NoYW5nZV9maW5hbGl6ZV93b3JrKHN0cnVjdCB3aXBoeSAqd2lwaHksXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjE3MC1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB3aXBoeV93b3JrICp3b3JrKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTQ3OT1zdGF0aWMgdm9pZCBpZWVlODAyMTFfZG9fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCBnb2luZ19kb3duKVxcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtNTczLVxcdHdpcGh5X3dvcmtfY2FuY2VsKGxvY2FsLVxcdTAwM2Vody53aXBoeSxcXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo1NzQ6XFx0XFx0XFx0ICBcXHUwMDI2c2RhdGEtXFx1MDAzZWRlZmxpbmsuY29sb3JfY2hhbmdlX2ZpbmFsaXplX3dvcmspO1xcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTU3NS1cXHR3aXBoeV9ocnRpbWVyX3dvcmtfY2FuY2VsKGxvY2FsLVxcdTAwM2Vody53aXBoeSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9saW5rLmM9OTU9dm9pZCBpZWVlODAyMTFfbGlua19pbml0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL2xpbmsuYy0xMzEtXFx0XFx0XFx0aWVlZTgwMjExX2NzYV9maW5hbGl6ZV93b3JrKTtcXG5uZXQvbWFjODAyMTEvbGluay5jOjEzMjpcXHR3aXBoeV93b3JrX2luaXQoXFx1MDAyNmxpbmstXFx1MDAzZWNvbG9yX2NoYW5nZV9maW5hbGl6ZV93b3JrLFxcbm5ldC9tYWM4MDIxMS9saW5rLmM6MTMzOlxcdFxcdFxcdGllZWU4MDIxMV9jb2xvcl9jaGFuZ2VfZmluYWxpemVfd29yayk7XFxubmV0L21hYzgwMjExL2xpbmsuYy0xMzQtXFx0d2lwaHlfZGVsYXllZF93b3JrX2luaXQoXFx1MDAyNmxpbmstXFx1MDAzZWNvbG9yX2NvbGxpc2lvbl9kZXRlY3Rfd29yayxcXG4tLVxcbm5ldC9tYWM4MDIxMS9saW5rLmM9MTYyPXZvaWQgaWVlZTgwMjExX2xpbmtfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaylcXG4tLVxcbm5ldC9tYWM4MDIxMS9saW5rLmMtMTY5LVxcdHdpcGh5X3dvcmtfY2FuY2VsKGxpbmstXFx1MDAzZXNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxubmV0L21hYzgwMjExL2xpbmsuYzoxNzA6XFx0XFx0XFx0ICBcXHUwMDI2bGluay1cXHUwMDNlY29sb3JfY2hhbmdlX2ZpbmFsaXplX3dvcmspO1xcbm5ldC9tYWM4MDIxMS9saW5rLmMtMTcxLVxcdHdpcGh5X3dvcmtfY2FuY2VsKGxpbmstXFx1MDAzZXNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYz0zNDc5PWllZWU4MDIxMV9yeF9jaGVja19ic3NfY29sb3JfY29sbGlzaW9uKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYy0zNDkzLVxcdGJzc19jb25mID0gcngtXFx1MDAzZWxpbmstXFx1MDAzZWNvbmY7XFxubmV0L21hYzgwMjExL3J4LmM6MzQ5NDpcXHRpZiAoYnNzX2NvbmYtXFx1MDAzZWNzYV9hY3RpdmUgfHwgYnNzX2NvbmYtXFx1MDAzZWNvbG9yX2NoYW5nZV9hY3RpdmUgfHxcXG5uZXQvbWFjODAyMTEvcnguYy0zNDk1LVxcdCAgICAhYnNzX2NvbmYtXFx1MDAzZWhlX2Jzc19jb2xvci5lbmFibGVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDo0OC4wODY0MDgyODdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE5NjEyODYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBCU1MgQ29sb3IgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyAqbWFjODAyMTEqIGltcGxlbWVudHMgdGhlICpjb2xvcl9jaGFuZ2UqIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSB0aHJvdWdoIGBpZWVlODAyMTFfY29sb3JfY2hhbmdlYC4gVGhhdCBtYWtlcyBzZW5zZS4gQW5kICptYWM4MDIxMV9od3NpbSogaXMgYnVpbHQgb24gdG9wIG9mICptYWM4MDIxMSosIG1lYW5pbmcgaXQgaW5oZXJlbnRseSB1c2VzIHRoZSAqbWFjODAyMTEqIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucy4gVGhpcyBpbmNsdWRlcyByZWdpc3RlcmluZyBgbWFjODAyMTFfY29uZmlnX29wc2AsIGFuZCBpbXBvcnRhbnRseSwgdGhlIGAuY29sb3JfY2hhbmdlYCBmdW5jdGlvbiBwb2ludGVyIGlzIGNvcnJlY3RseSBhc3NpZ25lZCB0byBgaWVlZTgwMjExX2NvbG9yX2NoYW5nZWAgd2l0aGluIHRoYXQgc3RydWN0dXJlLlxuXG5BaGEsIGFuZCAqbWFjODAyMTFfaHdzaW0qIHJlZ2lzdGVycyBhICp3aXBoeSogd2l0aCAqbWFjODAyMTEqLiBUaGVyZWZvcmUsIGl0IHNob3VsZCBpbmhlcml0IHRob3NlICptYWM4MDIxMV9jb25maWdfb3BzKi4gU28sICpubDgwMjExX2NvbG9yX2NoYW5nZSogKnNob3VsZCogYmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIHRocm91Z2ggKm1hYzgwMjExX2h3c2ltKiB0aGVuLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHdpdGggYSBjaGVjay4uLiBJIHRoaW5rIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoZSBkaXJlY3QgcGF0aCBub3cuXG5cbk5vdywgSSdtIHRoaW5raW5nIEkgc2hvdWxkIGxvb2sgYXQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciAqbWFjODAyMTFfaHdzaW0qIG9yICpOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUiouIEkga25vdyB0aGF0IHRoZSBmZWF0dXJlICpOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUiogaXMganVzdCBhIGZlYXR1cmUgZmxhZy4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiAqbWFjODAyMTEqIGl0c2VsZiBzZXRzIHRoaXMgZmxhZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzOTIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6NTMuMjgyNTM5ODc4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc2MjQyMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvcnguYz0zNDc5PWllZWU4MDIxMV9yeF9jaGVja19ic3NfY29sb3JfY29sbGlzaW9uKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYy0zNDg2LVxcdGlmICghd2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQocngtXFx1MDAzZWxvY2FsLVxcdTAwM2Vody53aXBoeSxcXG5uZXQvbWFjODAyMTEvcnguYzozNDg3OlxcdFxcdFxcdFxcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1IpKVxcbm5ldC9tYWM4MDIxMS9yeC5jLTM0ODgtXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMDo1My4zOTAxNjg1MjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMjU2NDMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOlxuXG4qKkRlYnVnZ2luZyBhIE1pc3NpbmcgQlNTIENvbG9yIEZlYXR1cmUqKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgaXQgdHJ1ZSB0aGF0IGBtYWM4MDIxMWAgZG9lc24ndCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SYCBleHRlbnNpb24gZmVhdHVyZT8gVGhhdCBzZWVtcyBvZGQsIGdpdmVuIGhvdyBjcnVjaWFsIEJTUyBjb2xvciBpcyBiZWNvbWluZyBpbiBtb2Rlcm4gODAyLjExIGRlcGxveW1lbnRzLiBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4gTGV0J3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIGRldGVybWluZSBleGFjdGx5ICp3aGVyZSogdGhpcyBmbGFnIGlzIHNldCAob3IsIGFzIHRoZSBjYXNlIG1heSBiZSwgKmlzbid0KiBzZXQpLiBXZSBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBwYXRoIGFuZCBhbnkgcG90ZW50aWFsIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcyBmbGFnJ3Mgc3RhdGUgd2l0aGluIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGRlYnVnZ2VyIGFuZCBzdGFydCB0cmFjaW5nIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTcyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTI6MzA6NTcuMjEyNzM1MTM2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTAwNzUzMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jPTEwNDQyPXN0YXRpYyBpbnQgX19hdGgxMWtfbWFjX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMWsgKmFyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9tYWMuYy0xMDU5OC1cXHRcXHR3aXBoeV9leHRfZmVhdHVyZV9zZXQoYXItXFx1MDAzZWh3LVxcdTAwM2V3aXBoeSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jOjEwNTk5OlxcdFxcdFxcdFxcdCAgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL21hYy5jLTEwNjAwLVxcdFxcdGllZWU4MDIxMV9od19zZXQoYXItXFx1MDAzZWh3LCBERVRFQ1RTX0NPTE9SX0NPTExJU0lPTik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jPTE0Nzc0PXN0YXRpYyBpbnQgYXRoMTJrX21hY19od19yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX2h3ICphaClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWFjLmMtMTQ5NTYtXFx0XFx0ICAgICBhYi1cXHUwMDNld21pX2FiLnN2Y19tYXApKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9tYWMuYzoxNDk1NzpcXHRcXHR3aXBoeV9leHRfZmVhdHVyZV9zZXQod2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21hYy5jLTE0OTU4LVxcdFxcdGllZWU4MDIxMV9od19zZXQoaHcsIERFVEVDVFNfQ09MT1JfQ09MTElTSU9OKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2luaXQuYz0zNTg9bXQ3OTE1X2luaXRfd2lwaHkoc3RydWN0IG10NzkxNV9waHkgKnBoeSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2luaXQuYy0zODctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvaW5pdC5jOjM4ODpcXHR3aXBoeV9leHRfZmVhdHVyZV9zZXQod2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9pbml0LmMtMzg5LVxcdHdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9WSFRfSUJTUyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9pbml0LmM9NDc4PW10Nzk5Nl9pbml0X3dpcGh5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgbXRrX3dlZF9kZXZpY2UgKndlZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTk2L2luaXQuYy01MTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5OTYvaW5pdC5jOjUxNjpcXHR3aXBoeV9leHRfZmVhdHVyZV9zZXQod2lwaHksIE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzk5Ni9pbml0LmMtNTE3LVxcdHdpcGh5X2V4dF9mZWF0dXJlX3NldCh3aXBoeSwgTkw4MDIxMV9FWFRfRkVBVFVSRV9WSFRfSUJTUyk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYz01NjUwPXN0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1fbmV3X3JhZGlvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYy01OTM2LVxcdHdpcGh5X2V4dF9mZWF0dXJlX3NldChody1cXHUwMDNld2lwaHksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmM6NTkzNzpcXHRcXHRcXHQgICAgICBOTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMtNTkzOC1cXHR3aXBoeV9leHRfZmVhdHVyZV9zZXQoaHctXFx1MDAzZXdpcGh5LFxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaD02ODEwPWVudW0gbmw4MDIxMV9mZWF0dXJlX2ZsYWdzIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgtNzAxNi0gKlxcbmluY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmg6NzAxNzogKiBATkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1I6IFRoZSBkcml2ZXIgc3VwcG9ydHMgQlNTIGNvbG9yIGNvbGxpc2lvblxcbmluY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgtNzAxOC0gKlxcdGRldGVjdGlvbiBhbmQgY2hhbmdlIGFubm91bmNlbW50cy5cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmg9NzA5MT1lbnVtIG5sODAyMTFfZXh0X2ZlYXR1cmVfaW5kZXgge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaC03MTUxLVxcdE5MODAyMTFfRVhUX0ZFQVRVUkVfUFJPVF9SQU5HRV9ORUdPX0FORF9NRUFTVVJFLFxcbmluY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmg6NzE1MjpcXHROTDgwMjExX0VYVF9GRUFUVVJFX0JTU19DT0xPUixcXG5pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oLTcxNTMtXFx0Tkw4MDIxMV9FWFRfRkVBVFVSRV9GSUxTX0NSWVBUT19PRkZMT0FELFxcbi0tXFxubmV0L21hYzgwMjExL3J4LmM9MzQ3OT1pZWVlODAyMTFfcnhfY2hlY2tfYnNzX2NvbG9yX2NvbGxpc2lvbihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbi0tXFxubmV0L21hYzgwMjExL3J4LmMtMzQ4Ni1cXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KHJ4LVxcdTAwM2Vsb2NhbC1cXHUwMDNlaHcud2lwaHksXFxubmV0L21hYzgwMjExL3J4LmM6MzQ4NzpcXHRcXHRcXHRcXHQgICAgIE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SKSlcXG5uZXQvbWFjODAyMTEvcnguYy0zNDg4LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM9MTg3MjE9c3RhdGljIGludCBubDgwMjExX2NvbG9yX2NoYW5nZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xODczNC1cXHRpZiAoIXdpcGh5X2V4dF9mZWF0dXJlX2lzc2V0KFxcdTAwMjZyZGV2LVxcdTAwM2V3aXBoeSxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE4NzM1OlxcdFxcdFxcdFxcdCAgICAgTkw4MDIxMV9FWFRfRkVBVFVSRV9CU1NfQ09MT1IpKVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTg3MzYtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMTowMC4xMTM0OTY2NjhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc2NDE2NTcxMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgbWFjODAyMTEgTWVtb3J5IExlYWsgRml4KipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBpdCBzZWVtcyB0aGUgYE5MODAyMTFfRVhUX0ZFQVRVUkVfQlNTX0NPTE9SYCBmZWF0dXJlIGlzIHNldCB3aXRoaW4gYG1hYzgwMjExX2h3c2ltX21haW4uY2AsIG1lYW5pbmcgaXQncyBkZWZpbml0ZWx5IGFjY2Vzc2libGUgdGhyb3VnaCBgbWFjODAyMTFfaHdzaW1gLiBUaGUgY3JpdGljYWwgY29uZmlncyBJIG5lZWQgdG8gaGF2ZSBlbmFibGVkIGFyZSBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYC4gVGhlIGZ1bmN0aW9uIEknbSB6ZXJvaW5nIGluIG9uIGlzIGBubDgwMjExX2NvbG9yX2NoYW5nZWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgY2hhbmdlIGFpbWVkIGF0IGZpeGluZyBhIG1lbW9yeSBsZWFrIGluIGEgcmVhY2hhYmxlIE5ldGxpbmsgaGFuZGxlci5cblxuSSd2ZSBjb25maXJtZWQgdGhlIGNvbmZpZ3MgYWdhaW47IHRoZXkgYXJlIGluZGVlZCBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBhbmQgYE1BQzgwMjExX0hXU0lNYC5cblxuTm93LCByZXZpZXdpbmcgdGhlIHBhdGNoIGl0c2VsZi4uLiBJIHNlZSB0aGF0IGluIHRoZSBvcmlnaW5hbCBjb2RlLCBgdGJgIChwcmVzdW1hYmx5IGEgdGFibGUgb3IgYnVmZmVyKSB3YXMgYmVpbmcgYWxsb2NhdGVkICphZnRlciogY2FsbGluZyBgbmw4MDIxMV9wYXJzZV9iZWFjb25gLiBJZiB0aGUgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBmdW5jdGlvbiBmYWlsZWQsIGl0IHdvdWxkIGp1c3QgcmV0dXJuIHRoZSBlcnJvciwgbGVhdmluZyB3aGF0ZXZlciBtZW1vcnkgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBhbGxvY2F0ZWQgYmVoaW5k4oCUYSBsZWFrLiBGdXJ0aGVybW9yZSwgZXZlbiBpZiBgbmw4MDIxMV9wYXJzZV9iZWFjb25gIHN1Y2NlZWRlZCBidXQgdGhlIHN1YnNlcXVlbnQgYGt6YWxsb2Nfb2Jqc2AgZmFpbGVkLCBpdCB3b3VsZCBzdGlsbCByZXR1cm4gYC1FTk9NRU1gLCBsZWFraW5nIGFueSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGBubDgwMjExX3BhcnNlX2JlYWNvbmAuIEJhc2ljYWxseSwgdGhlIG9yaWdpbmFsIGNvZGUgaGFkIG11bHRpcGxlIGxlYWsgc2NlbmFyaW9zLlxuXG5UaGUgcGF0Y2ggY29ycmVjdHMgdGhpcyBieSBhbGxvY2F0aW5nIGB0YmAgKmJlZm9yZSogY2FsbGluZyBgbmw4MDIxMV9wYXJzZV9iZWFjb25gLiBJZiBga3phbGxvY19vYmpzYCBmYWlscyBub3csIGl0IHJldHVybnMgYC1FTk9NRU1gIGRpcmVjdGx5LCBwcmV2ZW50aW5nIHRoZSBsZWFrIGJlY2F1c2UgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBoYXNuJ3QgYmVlbiBjYWxsZWQgeWV0LiBDcnVjaWFsbHksIGlmIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgZmFpbHMsIHRoZSBjb2RlIG5vdyAqanVtcHMqIHRvIHRoZSBgb3V0YCBsYWJlbC4gVGhpcyBgb3V0YCBsYWJlbCB0aGVuIGZyZWVzIGJvdGggYHRiYCAqYW5kKiBgcGFyYW1zLmJlYWNvbl9uZXh0YOKAlHdoaWNoIG1pZ2h0IGhhdmUgcGFydGlhbGx5IGFsbG9jYXRlZCBkYXRhLlxuXG5UaGUgY3JpdGljYWwgcGllY2UgaGVyZSBpcyB0aGUgZmFjdCB0aGF0IGBubDgwMjExX3BhcnNlX2JlYWNvbmAgKmNhbiogbGVhdmUgcGFydGlhbCBhbGxvY2F0aW9ucyBpZiBpdCBmYWlscy4gTG9va2luZyBhdCB0aGUgY29kZSBmb3IgYG5sODAyMTFfcGFyc2VfYmVhY29uYCwgcGFydGljdWxhcmx5IHRoZSBwYXJ0cyBoYW5kbGluZyBgTkw4MDIxMV9BVFRSX01CU1NJRF9FTEVNU2AgYW5kIGBOTDgwMjExX0FUVFJfRU1BX1JOUl9FTEVNU2AsIEkgc2VlIHRoYXQgaWYgYG5sODAyMTFfY2FsY3VsYXRlX2FwX29wZXJhdGlvbmAgZmFpbHMsIGl0IHJldHVybnMgdGhlIGVycm9yIGNvZGUgKmJ1dCogbGVhdmVzIGBiY24tXHUwMDNlbWJzc2lkX2llc2AgYW5kIGBiY24tXHUwMDNlcm5yX2llc2AgYWxsb2NhdGVkLiBUaGUgcGF0Y2gncyBjaGFuZ2UgZnJvbSBgcmV0dXJuIGVycjtgIHRvIGBnb3RvIG91dDtgIGZpeGVzIHRoaXMgYnkgbWFraW5nIHN1cmUgdGhvc2UgYWxsb2NhdGVkIGl0ZW1zIGFyZSBhbHdheXMgZnJlZWQgaW4gY2FzZSBvZiBmYWlsdXJlLiBBbHNvIGJ5IG1vdmluZyBga3phbGxvY19vYmpzYCBiZWZvcmUgYG5sODAyMTFfcGFyc2VfYmVhY29uYCwgdGhlIGNhc2Ugd2hlcmUgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBzdWNjZWVkcyBidXQgYGt6YWxsb2Nfb2Jqc2AgZmFpbHMgYW5kIHdvdWxkIGFsc28gbGVhayBgcGFyYW1zLmJlYWNvbl9uZXh0YCBpcyBhdm9pZGVkLlxuXG5TbywgaW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBhIHNvbGlkIGJ1ZyBmaXggdGhhdCBhZGRyZXNzZXMgbWVtb3J5IGxlYWtzIHdpdGhpbiBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIGNhdXNlZCBieSBwYXJ0aWFsIGFsbG9jYXRpb25zIGR1cmluZyBiZWFjb24gcGFyc2luZywgZXNwZWNpYWxseSB3aGVuIGVycm9ycyBvY2N1ci4gSXQgZW5zdXJlcyB0aGF0IGFsbG9jYXRlZCBtZW1vcnkgaXMgZnJlZWQgY29ycmVjdGx5IGluIGFsbCBlcnJvciBwYXRocy4gSSdsbCB1c2UgYG5sODAyMTFfY29sb3JfY2hhbmdlYCBhcyB0aGUgZm9jdXMgc3ltYm9sLCBhcyBpdCdzIHRoZSB0YXJnZXQgb2YgdGhlIG1lbW9yeSBsZWFrIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkwMjAsIk91dHB1dFRva2VucyI6MTcwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMjozMToxNy43NTUxNTgwMjJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkzNzY3ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX2NvbG9yX2NoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGBubDgwMjExX2NvbG9yX2NoYW5nZWAgbmV0bGluayBoYW5kbGVyLiBJdCBlbnN1cmVzIHRoYXQgaWYgYG5sODAyMTFfcGFyc2VfYmVhY29uYCBmYWlscywgYW55IHBhcnRpYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIHByb3Blcmx5IGZyZWVkLCBhbmQgaXQgcHJldmVudHMgYSBsZWFrIGlmIHRoZSBzdWJzZXF1ZW50IGFsbG9jYXRpb24gZm9yIGB0YmAgZmFpbHMgYnkgbW92aW5nIGl0IGJlZm9yZSB0aGUgcGFyc2luZyBzdGVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgd2lyZWxlc3MgY29kZSAoZW11bGF0ZWQgdmlhIG1hYzgwMjExX2h3c2ltKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmw4MDIxMV9jb2xvcl9jaGFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBgbmw4MDIxMV9jb2xvcl9jaGFuZ2VgIG5ldGxpbmsgaGFuZGxlci4gSXQgZW5zdXJlcyB0aGF0IGlmIGBubDgwMjExX3BhcnNlX2JlYWNvbmAgZmFpbHMsIGFueSBwYXJ0aWFsbHkgYWxsb2NhdGVkIG1lbW9yeSBpcyBwcm9wZXJseSBmcmVlZCwgYW5kIGl0IHByZXZlbnRzIGEgbGVhayBpZiB0aGUgc3Vic2VxdWVudCBhbGxvY2F0aW9uIGZvciBgdGJgIGZhaWxzIGJ5IG1vdmluZyBpdCBiZWZvcmUgdGhlIHBhcnNpbmcgc3RlcC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIHdpcmVsZXNzIGNvZGUgKGVtdWxhdGVkIHZpYSBtYWM4MDIxMV9od3NpbSkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowd27lb[1] Phase: Succeeded StartedAt: 2026-08-01 12:31:29 +0000 UTC FinishedAt: 2026-08-01 12:31:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 12:31:29 +0000 UTC FinishedAt: 2026-08-01 12:31:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2] Phase: Succeeded StartedAt: 2026-08-01 12:31:29 +0000 UTC FinishedAt: 2026-08-01 16:36:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 12:31:29 +0000 UTC FinishedAt: 2026-08-01 16:36:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 12:31:29 +0000 UTC FinishedAt: 2026-08-01 12:31:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 12:31:29 +0000 UTC FinishedAt: 2026-08-01 12:31:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd27lb/series-workflowd27lb-convert-artifact-2799218757/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 12:31:41 +0000 UTC FinishedAt: 2026-08-01 13:09:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 12:31:41 +0000 UTC FinishedAt: 2026-08-01 13:09:16 +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:*3592d6df-64d0-44c6-b062-3a976b9fe1d8,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-workflowd27lb/series-workflowd27lb-convert-artifact-2799218757/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": "5319de41-cf24-40dc-8f10-d32968e8af99", "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-workflowd27lb/series-workflowd27lb-build-action-1306089195/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 12:31:41 +0000 UTC FinishedAt: 2026-08-01 13:09: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:*3592d6df-64d0-44c6-b062-3a976b9fe1d8,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-workflowd27lb/series-workflowd27lb-convert-artifact-2799218757/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": "5319de41-cf24-40dc-8f10-d32968e8af99", "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-workflowd27lb/series-workflowd27lb-build-action-1306089195/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 13:09:16 +0000 UTC FinishedAt: 2026-08-01 13:09:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 13:09:16 +0000 UTC FinishedAt: 2026-08-01 13:09:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 13:09:16 +0000 UTC FinishedAt: 2026-08-01 13:09:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 13:09:16 +0000 UTC FinishedAt: 2026-08-01 13:09:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd27lb/series-workflowd27lb-convert-artifact-3133073440/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 13:09:41 +0000 UTC FinishedAt: 2026-08-01 13:11:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 13:09:41 +0000 UTC FinishedAt: 2026-08-01 13:11:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5319de41-cf24-40dc-8f10-d32968e8af99,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-workflowd27lb/series-workflowd27lb-build-action-1306089195/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-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 13:11:43 +0000 UTC FinishedAt: 2026-08-01 13:11:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 13:11:43 +0000 UTC FinishedAt: 2026-08-01 13:11:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 13:11:43 +0000 UTC FinishedAt: 2026-08-01 13:33:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 13:11:43 +0000 UTC FinishedAt: 2026-08-01 13:33:18 +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:*3592d6df-64d0-44c6-b062-3a976b9fe1d8,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-workflowd27lb/series-workflowd27lb-convert-artifact-3133073440/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": "cde5c98f-2eea-46b3-bf99-14276bc077b5", "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-workflowd27lb/series-workflowd27lb-build-action-3806322140/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 13:11:43 +0000 UTC FinishedAt: 2026-08-01 13:33:08 +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:*3592d6df-64d0-44c6-b062-3a976b9fe1d8,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-workflowd27lb/series-workflowd27lb-convert-artifact-3133073440/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": "cde5c98f-2eea-46b3-bf99-14276bc077b5", "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-workflowd27lb/series-workflowd27lb-build-action-3806322140/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 13:33:18 +0000 UTC FinishedAt: 2026-08-01 13:33:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 13:33:18 +0000 UTC FinishedAt: 2026-08-01 13:33:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 13:33:18 +0000 UTC FinishedAt: 2026-08-01 13:35:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 13:33:18 +0000 UTC FinishedAt: 2026-08-01 13:35:07 +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:*cde5c98f-2eea-46b3-bf99-14276bc077b5,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-workflowd27lb/series-workflowd27lb-build-action-3806322140/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-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 13:35:17 +0000 UTC FinishedAt: 2026-08-01 16:36:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 13:35:17 +0000 UTC FinishedAt: 2026-08-01 16:36:37 +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":["nl80211_color_change"],"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:*5319de41-cf24-40dc-8f10-d32968e8af99,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cde5c98f-2eea-46b3-bf99-14276bc077b5,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-workflowd27lb/series-workflowd27lb-build-action-1306089195/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-workflowd27lb/series-workflowd27lb-build-action-3806322140/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 13:35:17 +0000 UTC FinishedAt: 2026-08-01 13:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 13:35:17 +0000 UTC FinishedAt: 2026-08-01 13:35:21 +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":["nl80211_color_change"],"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-workflowd27lb/series-workflowd27lb-convert-artifact-805832313/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 13:35:17 +0000 UTC FinishedAt: 2026-08-01 13:35:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 13:35:17 +0000 UTC FinishedAt: 2026-08-01 13:35:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 13:35:17 +0000 UTC FinishedAt: 2026-08-01 13:35:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 13:35:27 +0000 UTC FinishedAt: 2026-08-01 16:36:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd27lb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_color_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"57aa1718d5953dd532137d43b696c68545c2e0b3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_HWSIM"],"series_id":"2384afe9-65ba-4d43-a842-bcdb82ca7c23","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 13:35:27 +0000 UTC FinishedAt: 2026-08-01 16:36:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5319de41-cf24-40dc-8f10-d32968e8af99,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cde5c98f-2eea-46b3-bf99-14276bc077b5,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-workflowd27lb/series-workflowd27lb-build-action-1306089195/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-workflowd27lb/series-workflowd27lb-build-action-3806322140/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-workflowd27lb/series-workflowd27lb-convert-artifact-805832313/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,}