Name: series-workflowjhccr Phase: Succeeded StartedAt: 2026-09-07 06:23:45 +0000 UTC FinishedAt: 2026-09-07 08:29:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[0] Phase: Succeeded StartedAt: 2026-09-07 06:23:45 +0000 UTC FinishedAt: 2026-09-07 06:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 06:23:45 +0000 UTC FinishedAt: 2026-09-07 06:55:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PLFXLC", "WLAN_VENDOR_PURELIFI", "MAC80211", "CFG80211", "USB", "WLAN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PLFXLC", "WLAN_VENDOR_PURELIFI", "MAC80211", "CFG80211", "USB", "WLAN" ], "series_id": "028a71d4-0324-4c51-8e2b-ed934f2fec5a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "plfxlc_mac_rx", "rx_urb_complete", "handle_rx_packet" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BMRlhMQyYjMzQ7LAogICAgJiMzNDtXTEFOX1ZFTkRPUl9QVVJFTElGSSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7V0xBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BsZnhsY19tYWNfcngmIzM0OywKICAgICYjMzQ7cnhfdXJiX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O2hhbmRsZV9yeF9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwYWNrZXQgdmFsaWRhdGlvbiBpbiB0aGUgUHVyZUxpRmkgKHBsZnhsYykgd2lyZWxlc3MgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0IHVzZXMgYHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoYCByYXRoZXIgdGhhbiBhbiB1bnZhbGlkYXRlZCBmaWVsZCBmcm9tIHRoZSBidWZmZXIsIGFkZHMgbWluaW11bSBsZW5ndGggY2hlY2tzIGJlZm9yZSBwYXJzaW5nIGByeF9zdGF0dXNgIGFuZCBwYXlsb2FkIGxlbmd0aCwgdmVyaWZpZXMgdGhhdCB0aGUgcGF5bG9hZCBsZW5ndGggZG9lcyBub3QgZXhjZWVkIHRoZSBVUkIgYnVmZmVyIGxlbmd0aCwgYW5kIGZpeGVzIHRoZSBidWZmZXIgb2Zmc2V0IHBhc3NlZCB0byBgcGxmeGxjX2ZpbHRlcl9hY2soKWAuXG5cblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBvdXQtb2YtYm91bmRzIGJ1ZmZlciBvdmVycmVhZHMsIHdoaWNoIGZhbGwgc3F1YXJlbHkgdW5kZXIgS0FTQU4mIzM5O3MgZG9tYWluLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGUgcmVhZHMsIGRvZXMgbm90IGFsdGVyIHN0cnVjdHVyZSBwYWRkaW5nL2luaXRpYWxpemF0aW9uIHNlbnQgdG8gdXNlcnNwYWNlLCBhbmQgYWxsIGxvY2FsIHN0cnVjdHVyZXMgKHN1Y2ggYXMgYHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHN0YXRzYCkgYXJlIGV4cGxpY2l0bHkgemVyb2VkIHdpdGggYG1lbXNldGAuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgcmVjZXB0aW9uIGFuZCBsZW5ndGggdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgUHVyZUxpRmkgVVNCIHdpcmVsZXNzIGRyaXZlciAocGxmeGxjX21hY19yeCBhbmQgcnhfdXJiX2NvbXBsZXRlKS4gVVNCIG5ldHdvcmsgZHJpdmVycyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB1c2luZyBVU0IgcmF3LWdhZGdldCAvIGR1bW15X2hjZCBlbXVsYXRpb24uIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gdmVyaWZ5IHRoZSBuZXcgYm91bmRzIGNoZWNrcyBhbmQgZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb24gbWFsZm9ybWVkIFVTQiBmcmFtZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNzJmNTU4YmI5YTcyNWYyMDQwMjBiZjkzMzEzZjc2M2NiZTQzYjQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNjo1MzoyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmNcbmluZGV4IGE5MDA0MjE3NTNhYzYuLmQyNjkwY2NlNzk2YTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuY1xuQEAgLTQwNyw2ICYjNDM7NDA3LDkgQEAgaW50IHBsZnhsY19tYWNfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpidWZmZXIsXG4gXHRpZiAoIW1hYy1cdTAwM2V2aWYpXG4gXHRcdHJldHVybiAwO1xuIFxuJiM0MztcdGlmIChsZW5ndGggXHUwMDNjIHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSAmIzQzOyBzaXplb2YodTMyKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdHN0YXR1cyA9IChzdHJ1Y3Qgcnhfc3RhdHVzICopYnVmZmVyO1xuIFxuIFx0bWVtc2V0KFx1MDAyNnN0YXRzLCAwLCBzaXplb2Yoc3RhdHMpKTtcbkBAIC00MjUsMTkgJiM0Mzs0MjgsMTkgQEAgaW50IHBsZnhsY19tYWNfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpidWZmZXIsXG4gXG4gXHRtYWMtXHUwMDNlY3JjX2Vycm9ycyA9IGJlNjRfdG9fY3B1KHN0YXR1cy1cdTAwM2VjcmNfZXJyb3JfY291bnQpO1xuIFxuLVx0LyogVE9ETyBiYWQgZnJhbWUgY2hlY2sgZm9yIENSQyBlcnJvciovXG4tXHRpZiAocGxmeGxjX2ZpbHRlcl9hY2soaHcsIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWJ1ZmZlciwgXHUwMDI2c3RhdHMpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFtYWMtXHUwMDNlcGFzc19jdHJsKVxuLVx0XHRyZXR1cm4gMDtcbi1cbiBcdGJ1ZmZlciAmIzQzOz0gc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpO1xuIFx0cGF5bG9hZF9sZW5ndGggPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyKTtcbiYjNDM7XHRidWZmZXIgJiM0Mzs9IHNpemVvZih1MzIpO1xuIFxuLVx0aWYgKHBheWxvYWRfbGVuZ3RoIFx1MDAzZSAxNTYwKSB7XG4mIzQzO1x0aWYgKHBheWxvYWRfbGVuZ3RoIFx1MDAzZSAxNTYwIHx8XG4mIzQzO1x0ICAgIHBheWxvYWRfbGVuZ3RoICYjNDM7IHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSAmIzQzOyBzaXplb2YodTMyKSBcdTAwM2UgbGVuZ3RoKSB7XG4gXHRcdGRldl9lcnIocGxmeGxjX21hY19kZXYobWFjKSwgXCYjMzQ7IFx1MDAzZSBNVFUgJXVcXG5cJiMzNDssIHBheWxvYWRfbGVuZ3RoKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4tXHRidWZmZXIgJiM0Mzs9IHNpemVvZih1MzIpO1xuJiM0MztcbiYjNDM7XHRpZiAocGxmeGxjX2ZpbHRlcl9hY2soaHcsIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWJ1ZmZlciwgXHUwMDI2c3RhdHMpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhbWFjLVx1MDAzZXBhc3NfY3RybClcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuIFx0ZmMgPSBnZXRfdW5hbGlnbmVkKChfX2xlMTYgKilidWZmZXIpO1xuIFx0bmVlZF9wYWRkaW5nID0gaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSBeIGllZWU4MDIxMV9oYXNfYTQoZmMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuY1xuaW5kZXggNmQyNDA4NmViOGI3YS4uYzMzYjkxMzFiZmRkZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jXG5AQCAtMTE3LDEwICYjNDM7MTE3LDkgQEAgc3RhdGljIHZvaWQgcnhfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbiBcdH1cbiBcbiBcdGJ1ZmZlciA9IHVyYi1cdTAwM2V0cmFuc2Zlcl9idWZmZXI7XG4tXHRsZW5ndGggPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKShidWZmZXIgJiM0Mzsgc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpKSlcbi1cdFx0ICYjNDM7IHNpemVvZih1MzIpO1xuJiM0MztcdGxlbmd0aCA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoO1xuIFxuLVx0aWYgKHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoICE9IChQTEZfTVNHX1NUQVRVU19PRkZTRVQgJiM0MzsgMSkpIHtcbiYjNDM7XHRpZiAobGVuZ3RoICE9IChQTEZfTVNHX1NUQVRVU19PRkZTRVQgJiM0MzsgMSkpIHtcbiBcdFx0aWYgKHVzYi1cdTAwM2Vpbml0aWFsaXplZCBcdTAwMjZcdTAwMjYgdXNiLVx1MDAzZWxpbmtfdXApXG4gXHRcdFx0aGFuZGxlX3J4X3BhY2tldCh1c2IsIGJ1ZmZlciwgbGVuZ3RoKTtcbiBcdFx0Z290byByZXN1Ym1pdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQTEZYTEMmIzM0OywKICAgICYjMzQ7V0xBTl9WRU5ET1JfUFVSRUxJRkkmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O1dMQU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwbGZ4bGNfbWFjX3J4JiMzNDssCiAgICAmIzM0O3J4X3VyYl9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDtoYW5kbGVfcnhfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCByZWNlcHRpb24gYW5kIGxlbmd0aCB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBQdXJlTGlGaSBVU0Igd2lyZWxlc3MgZHJpdmVyIChwbGZ4bGNfbWFjX3J4IGFuZCByeF91cmJfY29tcGxldGUpLiBVU0IgbmV0d29yayBkcml2ZXJzIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHVzaW5nIFVTQiByYXctZ2FkZ2V0IC8gZHVtbXlfaGNkIGVtdWxhdGlvbi4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byB2ZXJpZnkgdGhlIG5ldyBib3VuZHMgY2hlY2tzIGFuZCBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBvbiBtYWxmb3JtZWQgVVNCIGZyYW1lcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI3MmY1NThiYjlhNzI1ZjIwNDAyMGJmOTMzMTNmNzYzY2JlNDNiNDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA2OjUzOjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jCmluZGV4IGE5MDA0MjE3NTNhYzYuLmQyNjkwY2NlNzk2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMKQEAgLTQwNyw2ICYjNDM7NDA3LDkgQEAgaW50IHBsZnhsY19tYWNfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpidWZmZXIsCiAJaWYgKCFtYWMtJmd0O3ZpZikKIAkJcmV0dXJuIDA7CiAKJiM0MzsJaWYgKGxlbmd0aCAmbHQ7IHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSAmIzQzOyBzaXplb2YodTMyKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCXN0YXR1cyA9IChzdHJ1Y3Qgcnhfc3RhdHVzICopYnVmZmVyOwogCiAJbWVtc2V0KCZhbXA7c3RhdHMsIDAsIHNpemVvZihzdGF0cykpOwpAQCAtNDI1LDE5ICYjNDM7NDI4LDE5IEBAIGludCBwbGZ4bGNfbWFjX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqYnVmZmVyLAogCiAJbWFjLSZndDtjcmNfZXJyb3JzID0gYmU2NF90b19jcHUoc3RhdHVzLSZndDtjcmNfZXJyb3JfY291bnQpOwogCi0JLyogVE9ETyBiYWQgZnJhbWUgY2hlY2sgZm9yIENSQyBlcnJvciovCi0JaWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsICZhbXA7c3RhdHMpICZhbXA7JmFtcDsKLQkgICAgIW1hYy0mZ3Q7cGFzc19jdHJsKQotCQlyZXR1cm4gMDsKLQogCWJ1ZmZlciAmIzQzOz0gc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpOwogCXBheWxvYWRfbGVuZ3RoID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1ZmZlcik7CiYjNDM7CWJ1ZmZlciAmIzQzOz0gc2l6ZW9mKHUzMik7CiAKLQlpZiAocGF5bG9hZF9sZW5ndGggJmd0OyAxNTYwKSB7CiYjNDM7CWlmIChwYXlsb2FkX2xlbmd0aCAmZ3Q7IDE1NjAgfHwKJiM0MzsJICAgIHBheWxvYWRfbGVuZ3RoICYjNDM7IHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSAmIzQzOyBzaXplb2YodTMyKSAmZ3Q7IGxlbmd0aCkgewogCQlkZXZfZXJyKHBsZnhsY19tYWNfZGV2KG1hYyksICYjMzQ7ICZndDsgTVRVICV1XG4mIzM0OywgcGF5bG9hZF9sZW5ndGgpOwogCQlyZXR1cm4gMDsKIAl9Ci0JYnVmZmVyICYjNDM7PSBzaXplb2YodTMyKTsKJiM0MzsKJiM0MzsJaWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsICZhbXA7c3RhdHMpICZhbXA7JmFtcDsKJiM0MzsJICAgICFtYWMtJmd0O3Bhc3NfY3RybCkKJiM0MzsJCXJldHVybiAwOwogCiAJZmMgPSBnZXRfdW5hbGlnbmVkKChfX2xlMTYgKilidWZmZXIpOwogCW5lZWRfcGFkZGluZyA9IGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykgXiBpZWVlODAyMTFfaGFzX2E0KGZjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYwppbmRleCA2ZDI0MDg2ZWI4YjdhLi5jMzNiOTEzMWJmZGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jCkBAIC0xMTcsMTAgJiM0MzsxMTcsOSBAQCBzdGF0aWMgdm9pZCByeF91cmJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQogCX0KIAogCWJ1ZmZlciA9IHVyYi0mZ3Q7dHJhbnNmZXJfYnVmZmVyOwotCWxlbmd0aCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopKGJ1ZmZlciAmIzQzOyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykpKQotCQkgJiM0Mzsgc2l6ZW9mKHUzMik7CiYjNDM7CWxlbmd0aCA9IHVyYi0mZ3Q7YWN0dWFsX2xlbmd0aDsKIAotCWlmICh1cmItJmd0O2FjdHVhbF9sZW5ndGggIT0gKFBMRl9NU0dfU1RBVFVTX09GRlNFVCAmIzQzOyAxKSkgewomIzQzOwlpZiAobGVuZ3RoICE9IChQTEZfTVNHX1NUQVRVU19PRkZTRVQgJiM0MzsgMSkpIHsKIAkJaWYgKHVzYi0mZ3Q7aW5pdGlhbGl6ZWQgJmFtcDsmYW1wOyB1c2ItJmd0O2xpbmtfdXApCiAJCQloYW5kbGVfcnhfcGFja2V0KHVzYiwgYnVmZmVyLCBsZW5ndGgpOwogCQlnb3RvIHJlc3VibWl0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTk4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHVyZUxpRmkgVVNCIERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgcmVhY2hhYmlsaXR5IGFuZCBmdXp6YWJpbGl0eS4gRmlyc3QsIHRoZSB0b3VjaGVkIGZpbGVzIGFyZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jYCBhbmQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuY2AuIEdvb2QsIHRoYXQmIzM5O3MgYSBzdGFydGluZyBwb2ludC4gTm93IEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZHJpdmVyIGl0c2VsZiDigJMgaG93IGl0IHdvcmtzLCBpdHMgY29uZmlndXJhdGlvbiwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBVU0IuIFRpbWUgdG8gcHVsbCB1cCBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgYW5kIGluc3BlY3QuCgpBaGEsIGl0JiMzOTtzIHRoZSBgcGxmeGxjYCBkcml2ZXIsIGEgUHVyZUxpRmkgVVNCIHdpcmVsZXNzIGRyaXZlciwgYXMgZXhwZWN0ZWQuIFRoaXMgbWFrZXMgbWUgY29uc2lkZXIgU3l6a2FsbGVyJiMzOTtzIFVTQiByYXcgZ2FkZ2V0IGVtdWxhdGlvbi4gU2luY2UgaXTigJlzIGEgVVNCIGRyaXZlciwgaXQgKm1pZ2h0KiBiZSBmdXp6YWJsZSB0aHJvdWdoIGBzeXpfdXNiX2Nvbm5lY3RgLCBgdmhjaV9oY2RgLCBgZHVtbXlfaGNkYCwgb3IgYHJhdy1nYWRnZXRgLiBCdXQgY2FuIFN5emthbGxlciByZWFsaXN0aWNhbGx5IGZ1enogUHVyZUxpRmkgVVNCIGRldmljZXMgdXNpbmcgdGhpcyBwYXJ0aWN1bGFyIHJhdyBnYWRnZXQgZW11bGF0aW9uPyBUaGF04oCZcyB0aGUgY3JpdGljYWwgcXVlc3Rpb24uCgpOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGNgIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGNvbmZpZ3VyYXRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIFRoYXQgd2lsbCBnaXZlIG1lIGEgbW9yZSBjb25jcmV0ZSBpZGVhIG9mIGl0cyBhdHRhY2sgc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQTEZYTEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfUExGWExDKVx0XHQ6PSBwbGZ4bGMvXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9LY29uZmlnOjI6Y29uZmlnIFBMRlhMQ1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O3B1cmVMaUZpIFgsIFhMLCBYQyBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1BMRlhMQylcdDo9IHBsZnhsYy5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvTWFrZWZpbGUtMy1wbGZ4bGMtb2JqcyBcdFx0JiM0Mzs9IGNoaXAubyBmaXJtd2FyZS5vIHVzYi5vIG1hYy5vXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaC01LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaDo2OiNpZm5kZWYgUExGWExDX0NISVBfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaDo3OiNkZWZpbmUgUExGWExDX0NISVBfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaC04LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9jaGlwLmg9MTg9ZW51bSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvY2hpcC5oOjE5Olx0UExGWExDX1JBRElPX09GRiA9IDAsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvY2hpcC5oOjIwOlx0UExGWExDX1JBRElPX09OID0gMSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9jaGlwLmgtMjEtfTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvY2hpcC5oPTY0PXN0YXRpYyBpbmxpbmUgdm9pZCBwbGZ4bGNfbWNfYWRkX2FsbChzdHJ1Y3QgcGxmeGxjX21jX2hhc2ggKmhhc2gpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaC02OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9jaGlwLmg6NzA6I2VuZGlmIC8qIFBMRlhMQ19DSElQX0ggKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmgtNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuaDo2OiNpZm5kZWYgUExGWExDX01BQ19IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmg6NzojZGVmaW5lIFBMRlhMQ19NQUNfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5oLTgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5oPTE4Mj1pbnQgcGxmeGxjX3Jlc3RvcmVfc2V0dGluZ3Moc3RydWN0IHBsZnhsY19tYWMgKm1hYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmgtMTgzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5oOjE4NDojZW5kaWYgLyogUExGWExDX01BQ19IICovXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jPTU3OT1zdGF0aWMgaW50IHByb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy02NDctXHRtc2xlZXAoUExGX01TTEVFUF9USU1FKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYzo2NDg6XHRyID0gcGxmeGxjX2NoaXBfc3dpdGNoX3JhZGlvKGNoaXAsIFBMRlhMQ19SQURJT19PTik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtNjQ5LVx0aWYgKHIgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmgtNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuaDo2OiNpZm5kZWYgUExGWExDX1VTQl9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmg6NzojZGVmaW5lIFBMRlhMQ19VU0JfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5oLTgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5oPTE5ND1pbnQgcGxmeGxjX3VwbG9hZF9tYWNfYW5kX3NlcmlhbChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmgtMTk3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5oOjE5ODojZW5kaWYgLyogUExGWExDX1VTQl9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI4NAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBQdXJlTGlGaSBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzOiBvcHRpb25zIHJlbGF0ZWQgdG8gZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBQdXJlTGlGaSBQTEZYTEMgZHJpdmVyIGl0c2VsZiwgcGVyaGFwcyBncmFudWxhcml0eSBhdCBhIGZlYXR1cmUgbGV2ZWwgKGUuZy4sIHNwZWNpZmljIFBIWSBsYXllciBmdW5jdGlvbnMsIGRlYnVnZ2luZyBhaWRzLCBvciBwb3dlciBtYW5hZ2VtZW50IGNvbnRyb2xzKS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFuZCBob3cgdGhlIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjay4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBidWlsZCBzeXN0ZW0gaGFuZGxlcyBpbmNsdXNpb24vZXhjbHVzaW9uIGJhc2VkIG9uIHRhcmdldCBhcmNoaXRlY3R1cmUsIGtlcm5lbCB2ZXJzaW9uLCBvciBvdGhlciBkZXBlbmRlbmNpZXMuIEFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGNvbXBvbmVudHMgYXJlIG9mIHBhcnRpY3VsYXIgaW50ZXJlc3QuIEkmIzM5O20gYWxzbyBrZWVuIHRvIHNwb3QgYW55IHVudXN1YWwgb3Igbm9uLXN0YW5kYXJkIEtjb25maWcgdHJpY2tzIHRoYXQgdGhlIFB1cmVMaUZpIGZvbGtzIG1pZ2h0IGhhdmUgZW1wbG95ZWQuIFVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYWJpbGl0eSBvZiB0aGlzIGRyaXZlciBhbmQgaG93IGVhc3kgaXQgaXMgdG8gY3VzdG9taXplIGZvciBzcGVjaWZpYyBkZXBsb3ltZW50IHNjZW5hcmlvcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBQTEZYTENcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O3B1cmVMaUZpIFgsIFhMLCBYQyBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMSBcdTAwMjZcdTAwMjYgTUFDODAyMTEgXHUwMDI2XHUwMDI2IFVTQlxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBwdXJlTGlGaSBMaUZpIFVTQiB3aXJlbGVzc1xuICAgNzpcdFx0ICAgYWRhcHRlcnMuIFRoZSBwdXJlTGlGaSBYLCBYTCwgWEMgVVNCIGRldmljZXMgYXJlIGJhc2VkIG9uXG4gICA4Olx0XHQgICA4MDIuMTEgT0ZETSBQSFkgYnV0IHVzZXMgbGlnaHQgYXMgdGhlIHRyYW5zbWlzc2lvbiBtZWRpdW0uXG4gICA5Olx0XHQgICBUaGUgZHJpdmVyIHN1cHBvcnRzIGNvbW1vbiA4MDIuMTEgZW5jcnlwdGlvbi9hdXRoZW50aWNhdGlvblxuICAxMDpcdFx0ICAgbWV0aG9kcyBpbmNsdWRpbmcgT3BlbiwgV1BBLCBXUEEyLVBlcnNvbmFsIGFuZFxuICAxMTpcdFx0ICAgV1BBMi1FbnRlcnByaXNlICg4MDIuMVgpLlxuICAxMjpcdFxuICAxMzpcdFx0ICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIG0gaGVyZS4gVGhlIG1vZHVsZSB3aWxsXG4gIDE0Olx0XHQgICBiZSBjYWxsZWQgcGxmeGxjLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NDUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLY29uZmlnIERpdmUgZm9yIFB1cmVMaUZpKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7UmlnaHQsIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBQdXJlTGlGaSBkcml2ZXIgY29uZmlndXJhdGlvbi4mIzM0OyBUaGUgaW1tZWRpYXRlIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBnb2luZyBzdHJhaWdodCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlLiBUaGlzIGZpbGUgaXMsIG9mIGNvdXJzZSwgdGhlIGhlYXJ0IG9mIGRlZmluaW5nIHdoYXQgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSwgd2hpY2ggZGVwZW5kZW5jaWVzIG5lZWQgdG8gYmUgbWV0LCBhbmQgaG93IHRoZSB1c2VyIHdpbGwgaW50ZXJhY3Qgd2l0aCB0aGUgZHJpdmVyIGF0IGJ1aWxkIHRpbWUuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCB2YXJpYWJsZXMsIHdoaWNoIGZlYXR1cmVzIGFyZSBjb25kaXRpb25hbCwgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGludGVncmF0ZXMgaW50byB0aGUgd2lkZXIgbmV0d29yayBzdGFjay4gVGltZSB0byBwYXJzZSB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXM7IEFyZSB0aGVyZSBhbnkgdW51c3VhbCBsaWJyYXJ5IHJlcXVpcmVtZW50cyBJIHNob3VsZCBrbm93IGFib3V0PyBBcmUgdGhlIGRldmljZSYjMzk7cyBkZWZhdWx0IHNldHRpbmdzIHByb3Blcmx5IGRlZmluZWQgaGVyZT8gSG93IGNhbiBJIGVuc3VyZSBwcm9wZXIgYnVpbGQgY29tcGF0aWJpbGl0eSBmb3IgYWxsIHJlbGV2YW50IGFyY2hpdGVjdHVyZXM/IE5vIG5lZWQgZm9yIGEgZGVlcC1kaXZlIHlldCwgYnV0IGEgcXVpY2sgc2NhbiB3aWxsIHRlbGwgbWUgaWYgdGhlcmUgYXJlIGFueSBpbW1lZGlhdGUgcmVkIGZsYWdzLCBvciBhbnkgb3B0aW9ucyB0aGF0IHNlZW0gcGFydGljdWxhcmx5IGltcG9ydGFudCBmb3IgbXkgY3VycmVudCB0YXNrLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlOiBJcyBpdCB1c2luZyBzdGFuZGFyZCBuZXR3b3JrIGludGVyZmFjZXM/IEhvdyYjMzk7cyB0aGUgZmlybXdhcmUgaGFuZGxpbmcgY29uZmlndXJlZD8gQXJlIHRoZXJlIGFueSBleHBlcmltZW50YWwgb3IgZGVidWcgb3B0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQW5kIG1vc3QgaW1wb3J0YW50bHksIGNhbiBJIGdldCB0aGlzIGRyaXZlciB0byBkbyB3aGF0IEkgbmVlZCBpdCB0byBkbz8gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSBteSByb2FkbWFwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B1cmVsaWZpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZz0zMT1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWc6MzI6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWctMzMtc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JhbGluay9LY29uZmlnXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX05YUCkgJiM0Mzs9IG54cC9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9QVVJFTElGSSkgJiM0Mzs9IHB1cmVsaWZpL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX1FVQU5URU5OQSkgJiM0Mzs9IHF1YW50ZW5uYS9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnPTEzPWlmIFdMQU5fVkVORE9SX1BVUkVMSUZJXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnLTE0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZzoxNTpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWctMTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ2MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIGNoZWNrOgoKKipFeGFtaW5pbmcgdGhlIFdMQU5fVkVORE9SX1BVUkVMSUZJIERlcGVuZGVuY3kqKgoKUmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBXTEFOX1ZFTkRPUl9QVVJFTElGSWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHN0ZXAgZm9yIG1lLCBzbyBJJiMzOTttIGhlYWRpbmcgZGlyZWN0bHkgdG8gdGhlIGxpa2VseSBzb3VyY2Ug4oCTIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBmb3IgdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZyBzeW1ib2wgd2lsbCBsaXZlLCBhbG9uZ3NpZGUgaXRzIGRlcGVuZGVuY2llcy4gS25vd2luZyB3aGF0IGNvbmRpdGlvbnMgbmVlZCB0byBiZSBtZXQgdG8gZW5hYmxlIHRoaXMgZHJpdmVyIGlzIGNydWNpYWwsIHdoZXRoZXIgSSYjMzk7bSBkaWFnbm9zaW5nIGEgYnVpbGQgaXNzdWUsIGxvb2tpbmcgZm9yIGZlYXR1cmUgYXZhaWxhYmlsaXR5LCBvciBqdXN0IHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGtlcm5lbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBzcGVsbCBvdXQgZXhhY3RseSB3aGF0IGVsc2UgbmVlZHMgdG8gYmUgaW4gcGxhY2UgZm9yIFB1cmVMaUZpIHN1cHBvcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXTEFOX1ZFTkRPUl9QVVJFTElGSVxuICAgMzpcdFx0Ym9vbCBcJiMzNDtwdXJlTGlGaSBkZXZpY2VzXCYjMzQ7XG4gICA0Olx0XHRkZWZhdWx0IHlcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgSWYgeW91IGhhdmUgYSBwdXJlTGlGaSBkZXZpY2UsIHNheSBZLlxuICAgNzpcdFxuICAgODpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgIDk6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcbiAgMTA6XHRcdCAgcXVlc3Rpb25zIGFib3V0IHRoZXNlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxuICAxMTpcdFx0ICB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDEyOlx0XG4gIDEzOlx0aWYgV0xBTl9WRU5ET1JfUFVSRUxJRklcbiAgMTQ6XHRcbiAgMTU6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL0tjb25maWdcJiMzNDtcbiAgMTY6XHRcbiAgMTc6XHRlbmRpZiAjIFdMQU5fVkVORE9SX1BVUkVMSUZJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW4uCgoqKkluaXRpYWwgQ29kZSBJbnZlc3RpZ2F0aW9uKioKClJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmNgIGFuZCBgdXNiLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgb3ZlcnZpZXcgb2YgdGhlIGNvcmUgTUFDIGZ1bmN0aW9uYWxpdHkgYW5kIGhvdyBpdCYjMzk7cyBpbnRlcmZhY2luZyB3aXRoIHRoZSBVU0IgbGF5ZXIsIHJlc3BlY3RpdmVseS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGZyYW1ld29yayB0byB0aGVuIGRyaWxsIGRvd24gaW50byB0aGUgc3BlY2lmaWNzLiBVbmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmUgZmlyc3QgaXMga2V5LiBLbm93aW5nICpob3cqIHRoZSBjb2RlIHdvcmtzLCBhbmQgdGhlbiAqd2hhdCogd2FzIGNoYW5nZWQsIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyBxdWlja2x5IGFuZCBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFx0c3RydWN0IHBsZnhsY191c2JfdHggKnR4O1xuIDQwMTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA0MDI6XHRcdGludCBuZWVkX3BhZGRpbmc7XG4gNDAzOlx0XHRfX2xlMTYgZmM7XG4gNDA0Olx0XHRpbnQgc2lkeDtcbiA0MDU6XHRcbiA0MDY6XHRcdC8qIFBhY2tldCBibG9ja2FkZSBkdXJpbmcgZGlzYWJsZWQgaW50ZXJmYWNlLiAqL1xuIDQwNzpcdFx0aWYgKCFtYWMtXHUwMDNldmlmKVxuIDQwODpcdFx0XHRyZXR1cm4gMDtcbiA0MDk6XHRcbiA0MTA6XHRcdGlmIChsZW5ndGggXHUwMDNjIHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSAmIzQzOyBzaXplb2YodTMyKSlcbiA0MTE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDEyOlx0XG4gNDEzOlx0XHRzdGF0dXMgPSAoc3RydWN0IHJ4X3N0YXR1cyAqKWJ1ZmZlcjtcbiA0MTQ6XHRcbiA0MTU6XHRcdG1lbXNldChcdTAwMjZzdGF0cywgMCwgc2l6ZW9mKHN0YXRzKSk7XG4gNDE2Olx0XG4gNDE3Olx0XHRzdGF0cy5mbGFnICAgICA9IDA7XG4gNDE4Olx0XHRzdGF0cy5mcmVxICAgICA9IDI0MTI7XG4gNDE5Olx0XHRzdGF0cy5iYW5kICAgICA9IE5MODAyMTFfQkFORF9MQztcbiA0MjA6XHRcdG1hYy1cdTAwM2Vyc3NpICAgICAgPSAtMTUgKiBiZTE2X3RvX2NwdShzdGF0dXMtXHUwMDNlcnNzaSkgLyAxMDtcbiA0MjE6XHRcbiA0MjI6XHRcdHN0YXRzLnNpZ25hbCAgID0gbWFjLVx1MDAzZXJzc2k7XG4gNDIzOlx0XG4gNDI0Olx0XHRpZiAoc3RhdHVzLVx1MDAzZXJhdGVfaWR4IFx1MDAzZSA3KVxuIDQyNTpcdFx0XHRzdGF0cy5yYXRlX2lkeCA9IDA7XG4gNDI2Olx0XHRlbHNlXG4gNDI3Olx0XHRcdHN0YXRzLnJhdGVfaWR4ID0gc3RhdHVzLVx1MDAzZXJhdGVfaWR4O1xuIDQyODpcdFxuIDQyOTpcdFx0bWFjLVx1MDAzZWNyY19lcnJvcnMgPSBiZTY0X3RvX2NwdShzdGF0dXMtXHUwMDNlY3JjX2Vycm9yX2NvdW50KTtcbiA0MzA6XHRcbiA0MzE6XHRcdGJ1ZmZlciAmIzQzOz0gc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpO1xuIDQzMjpcdFx0cGF5bG9hZF9sZW5ndGggPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyKTtcbiA0MzM6XHRcdGJ1ZmZlciAmIzQzOz0gc2l6ZW9mKHUzMik7XG4gNDM0Olx0XG4gNDM1Olx0XHRpZiAocGF5bG9hZF9sZW5ndGggXHUwMDNlIDE1NjAgfHxcbiA0MzY6XHRcdCAgICBwYXlsb2FkX2xlbmd0aCAmIzQzOyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykgJiM0Mzsgc2l6ZW9mKHUzMikgXHUwMDNlIGxlbmd0aCkge1xuIDQzNzpcdFx0XHRkZXZfZXJyKHBsZnhsY19tYWNfZGV2KG1hYyksIFwmIzM0OyBcdTAwM2UgTVRVICV1XFxuXCYjMzQ7LCBwYXlsb2FkX2xlbmd0aCk7XG4gNDM4Olx0XHRcdHJldHVybiAwO1xuIDQzOTpcdFx0fVxuIDQ0MDpcdFxuIDQ0MTpcdFx0aWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsIFx1MDAyNnN0YXRzKSBcdTAwMjZcdTAwMjZcbiA0NDI6XHRcdCAgICAhbWFjLVx1MDAzZXBhc3NfY3RybClcbiA0NDM6XHRcdFx0cmV0dXJuIDA7XG4gNDQ0Olx0XG4gNDQ1Olx0XHRmYyA9IGdldF91bmFsaWduZWQoKF9fbGUxNiAqKWJ1ZmZlcik7XG4gNDQ2Olx0XHRuZWVkX3BhZGRpbmcgPSBpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpIF4gaWVlZTgwMjExX2hhc19hNChmYyk7XG4gNDQ3Olx0XG4gNDQ4Olx0XHR0eCA9IFx1MDAyNm1hYy1cdTAwM2VjaGlwLnVzYi50eDtcbiA0NDk6XHRcbiA0NTA6XHRcdGZvciAoc2lkeCA9IDA7IHNpZHggXHUwMDNjIE1BWF9TVEFfTlVNIC0gMTsgc2lkeCYjNDM7JiM0MzspIHtcbiA0NTE6XHRcdFx0aWYgKG1lbWNtcChcdTAwMjZidWZmZXJbMTBdLCB0eC1cdTAwM2VzdGF0aW9uW3NpZHhdLm1hYywgRVRIX0FMRU4pKVxuIDQ1MjpcdFx0XHRcdGNvbnRpbnVlO1xuIDQ1MzpcdFx0XHRpZiAodHgtXHUwMDNlc3RhdGlvbltzaWR4XS5mbGFnIFx1MDAyNiBTVEFUSU9OX0NPTk5FQ1RFRF9GTEFHKSB7XG4gNDU0Olx0XHRcdFx0dHgtXHUwMDNlc3RhdGlvbltzaWR4XS5mbGFnIHw9IFNUQVRJT05fSEVBUlRCRUFUX0ZMQUc7XG4gNDU1Olx0XHRcdFx0YnJlYWs7XG4gNDU2Olx0XHRcdH1cbiA0NTc6XHRcdH1cbiA0NTg6XHRcbiA0NTk6XHRcdGlmIChzaWR4ID09IE1BWF9TVEFfTlVNIC0gMSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTQ3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgUlggUGF0aCBpbiB0aGUgUHVyZUxpRmkgVVNCIERyaXZlcioqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgcmVjZXB0aW9uIHByb2Nlc3Mgd2l0aGluIHRoaXMgYHBsZnhsY2AgZHJpdmVyIGZvciB0aGUgUHVyZUxpRmkgVVNCIGRldmljZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIGZyb20gdGhlIGNvbXBsZXRpb24gb2YgdGhlIFJlY2VpdmUgVVJCIChgcnhfdXJiX2NvbXBsZXRlYCkgdG8gdGhlIGhhbmRsaW5nIG9mIHRoZSByZWNlaXZlZCBwYWNrZXQgKGBoYW5kbGVfcnhfcGFja2V0YCkuIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QuIFdoYXQgZGF0YSBpcyBwYXNzZWQ/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IEFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zPyBJcyB0aGlzIGEgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzIHBhdGg/IFVuZGVyc3RhbmRpbmcgdGhpcyBzZWN0aW9uIG9mIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNgIGlzIGtleSB0byBnZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGluY29taW5nIHdpcmVsZXNzIGRhdGEuIEkgc3VzcGVjdCBsb29raW5nIGF0IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gYW5kIGV4YW1pbmluZyBhbnkgc2hhcmVkIGRhdGEgc3RydWN0dXJlcyB3aWxsIHlpZWxkIHRoZSBrZXkgaW5mb3JtYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0Y2FzZSAtRU5PREVWOlxuIDEwMTpcdFx0Y2FzZSAtRU5PRU5UOlxuIDEwMjpcdFx0Y2FzZSAtRUNPTk5SRVNFVDpcbiAxMDM6XHRcdGNhc2UgLUVQSVBFOlxuIDEwNDpcdFx0XHRkZXZfZGJnKHBsZnhsY191cmJfZGV2KHVyYiksIFwmIzM0O3VyYiAlcCBlcnJvciAlZFxcblwmIzM0OywgdXJiLCB1cmItXHUwMDNlc3RhdHVzKTtcbiAxMDU6XHRcdFx0cmV0dXJuO1xuIDEwNjpcdFx0ZGVmYXVsdDpcbiAxMDc6XHRcdFx0ZGV2X2RiZyhwbGZ4bGNfdXJiX2Rldih1cmIpLCBcJiMzNDt1cmIgJXAgZXJyb3IgJWRcXG5cJiMzNDssIHVyYiwgdXJiLVx1MDAzZXN0YXR1cyk7XG4gMTA4Olx0XHRcdGlmICh0eC1cdTAwM2VzdWJtaXR0ZWRfdXJicyYjNDM7JiM0MzsgXHUwMDNjIFBVUkVMSUZJX1VSQl9SRVRSWV9NQVgpIHtcbiAxMDk6XHRcdFx0XHRkZXZfZGJnKHBsZnhsY191cmJfZGV2KHVyYiksIFwmIzM0O3VyYiAlcCByZXN1Ym1pdCAlZFwmIzM0OywgdXJiLFxuIDExMDpcdFx0XHRcdFx0dHgtXHUwMDNlc3VibWl0dGVkX3VyYnMmIzQzOyYjNDM7KTtcbiAxMTE6XHRcdFx0XHRnb3RvIHJlc3VibWl0O1xuIDExMjpcdFx0XHR9IGVsc2Uge1xuIDExMzpcdFx0XHRcdGRldl9kYmcocGxmeGxjX3VyYl9kZXYodXJiKSwgXCYjMzQ7dXJiICVwICBtYXggcmVzdWJtaXRzIHJlYWNoZWRcJiMzNDssIHVyYik7XG4gMTE0Olx0XHRcdFx0dHgtXHUwMDNlc3VibWl0dGVkX3VyYnMgPSAwO1xuIDExNTpcdFx0XHRcdHJldHVybjtcbiAxMTY6XHRcdFx0fVxuIDExNzpcdFx0fVxuIDExODpcdFxuIDExOTpcdFx0YnVmZmVyID0gdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcjtcbiAxMjA6XHRcdGxlbmd0aCA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoO1xuIDEyMTpcdFxuIDEyMjpcdFx0aWYgKGxlbmd0aCAhPSAoUExGX01TR19TVEFUVVNfT0ZGU0VUICYjNDM7IDEpKSB7XG4gMTIzOlx0XHRcdGlmICh1c2ItXHUwMDNlaW5pdGlhbGl6ZWQgXHUwMDI2XHUwMDI2IHVzYi1cdTAwM2VsaW5rX3VwKVxuIDEyNDpcdFx0XHRcdGhhbmRsZV9yeF9wYWNrZXQodXNiLCBidWZmZXIsIGxlbmd0aCk7XG4gMTI1Olx0XHRcdGdvdG8gcmVzdWJtaXQ7XG4gMTI2Olx0XHR9XG4gMTI3Olx0XG4gMTI4Olx0XHRzdGF0dXMgPSBidWZmZXJbUExGX01TR19TVEFUVVNfT0ZGU0VUXTtcbiAxMjk6XHRcbiAxMzA6XHRcdHN3aXRjaCAoc3RhdHVzKSB7XG4gMTMxOlx0XHRjYXNlIFNUQVRJT05fRklGT19BTE1PU1RfRlVMTF9OT1RfTUVTU0FHRTpcbiAxMzI6XHRcdFx0ZGV2X2RiZyhcdTAwMjZ1c2ItXHUwMDNlaW50Zi1cdTAwM2VkZXYsXG4gMTMzOlx0XHRcdFx0XCYjMzQ7RklGTyBmdWxsIG5vdCBwYWNrZXQgcmVjZWlwdFxcblwmIzM0Oyk7XG4gMTM0Olx0XHRcdHR4LVx1MDAzZW1hY19maWZvX2Z1bGwgPSAxO1xuIDEzNTpcdFx0XHRmb3IgKHNpZHggPSAwOyBzaWR4IFx1MDAzYyBNQVhfU1RBX05VTTsgc2lkeCYjNDM7JiM0MzspXG4gMTM2Olx0XHRcdFx0dHgtXHUwMDNlc3RhdGlvbltzaWR4XS5mbGFnIHw9IFNUQVRJT05fRklGT19GVUxMX0ZMQUc7XG4gMTM3Olx0XHRcdGJyZWFrO1xuIDEzODpcdFx0Y2FzZSBTVEFUSU9OX0ZJRk9fQUxNT1NUX0ZVTExfTUVTU0FHRTpcbiAxMzk6XHRcdFx0ZGV2X2RiZyhcdTAwMjZ1c2ItXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwmIzM0O0ZJRk8gZnVsbCBwYWNrZXQgcmVjZWlwdFxcblwmIzM0Oyk7XG4gMTQwOlx0XG4gMTQxOlx0XHRcdGZvciAoc2lkeCA9IDA7IHNpZHggXHUwMDNjIE1BWF9TVEFfTlVNOyBzaWR4JiM0MzsmIzQzOylcbiAxNDI6XHRcdFx0XHR0eC1cdTAwM2VzdGF0aW9uW3NpZHhdLmZsYWcgXHUwMDI2PSBTVEFUSU9OX0FDVElWRV9GTEFHO1xuIDE0MzpcdFxuIDE0NDpcdFx0XHRwbGZ4bGNfc2VuZF9wYWNrZXRfZnJvbV9kYXRhX3F1ZXVlKHVzYik7XG4gMTQ1Olx0XHRcdGJyZWFrO1xuIDE0NjpcdFx0Y2FzZSBTVEFUSU9OX0NPTk5FQ1RfTUVTU0FHRTpcbiAxNDc6XHRcdFx0dXNiLVx1MDAzZWxpbmtfdXAgPSAxO1xuIDE0ODpcdFx0XHRkZXZfZGJnKFx1MDAyNnVzYi1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7U1RfQ09OTkVDVF9NU0cgcGFja2V0IHJlY2VpcHRcXG5cJiMzNDspO1xuIDE0OTpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI4MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBEZWVwZXIgaW50byBQYWNrZXQgSGFuZGxpbmcqKgoKT2theSwgc28gd2UmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgb3ZlcmFsbCBmbG93LCBidXQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvciwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIE5vdywgbGV0JiMzOTtzIHR1cm4gb3VyIGF0dGVudGlvbiB0byB0aGUgYGhhbmRsZV9yeF9wYWNrZXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gc2VlIHByZWNpc2VseSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aGVuIGEgcGFja2V0IGFjdHVhbGx5ICphcnJpdmVzKi4gVGhpcyBpcyB0aGUgY3JpdGljYWwgcG9pbnQgd2hlcmUgdGhlIGRhdGEgc3RyZWFtIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0mIzM5O3MgaW50ZXJuYWwgbG9naWMuIFdoYXQgYXJlIHRoZSBpbW1lZGlhdGUgYWN0aW9ucz8gQXJlIHRoZXJlIGFueSBwcmVjb25kaXRpb25zIGl0IGNoZWNrcz8gSG93IGRvZXMgaXQgaW50ZXJwcmV0IHRoZSBwYWNrZXQgaGVhZGVyPyBEb2VzIGl0IGNhbGwgYW55IG90aGVyIGZ1bmN0aW9ucz8gVGhlIGBoYW5kbGVfcnhfcGFja2V0YCBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGtleSB0byB1bmxvY2tpbmcgaG93IHRoaXMgc3lzdGVtIGlzIHByb2Nlc3NpbmcsIGZpbHRlcmluZywgYW5kIGFjdGluZyBvbiBpbmNvbWluZyBkYXRhLiBJdCYjMzk7cyB0aW1lIHRvIGZvbGxvdyB0aGUgZXhlY3V0aW9uIHBhdGggdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhbmRsZV9yeF9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jPTM2PXZvaWQgcGxmeGxjX3NlbmRfcGFja2V0X2Zyb21fZGF0YV9xdWV1ZShzdHJ1Y3QgcGxmeGxjX3VzYiAqdXNiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy02Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYzo2MzpzdGF0aWMgdm9pZCBoYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBwbGZ4bGNfdXNiICp1c2IsIGNvbnN0IHU4ICpidWZmZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtNjQtXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYz02OT1zdGF0aWMgdm9pZCByeF91cmJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy0xMjMtXHRcdGlmICh1c2ItXHUwMDNlaW5pdGlhbGl6ZWQgXHUwMDI2XHUwMDI2IHVzYi1cdTAwM2VsaW5rX3VwKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jOjEyNDpcdFx0XHRoYW5kbGVfcnhfcGFja2V0KHVzYiwgYnVmZmVyLCBsZW5ndGgpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jLTEyNS1cdFx0Z290byByZXN1Ym1pdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgwNwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgYGhhbmRsZV9yeF9wYWNrZXRgIEZ1bmN0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgaGFuZGxlX3J4X3BhY2tldGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQgcmVzaWRlcyBpbiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuY2AgZmlsZS4gVGhpcyBwb2ludHMgdG8gYSBQdXJlTGlGaSBpbXBsZW1lbnRhdGlvbiB1c2luZyB0aGVpciBVU0IgaW50ZXJmYWNlLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IHRoZSBkcml2ZXIgZGVhbHMgd2l0aCBpbmNvbWluZyB3aXJlbGVzcyBwYWNrZXRzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBidWZmZXIgbWFuYWdlbWVudCwgZXJyb3IgaGFuZGxpbmcsIGhvdyB0aGUgZGF0YSBpcyBwYXNzZWQgdXAgdGhlIG5ldHdvcmsgc3RhY2ssIGFuZCBhbnkgc3BlY2lmaWMgUHVyZUxpRmktcmVsYXRlZCBudWFuY2VzIGluIHRoZSByZWNlcHRpb24gcHJvY2Vzcy4gS25vd2luZyB0aGUgbG9jYXRpb24sIGFuZCB0aGUgc3BlY2lmaWNzIGFyb3VuZCB3aGljaCBpbnRlcmZhY2UgdGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRvLCBhbGxvd3MgbWUgdG8gcHJlZGljdCB0aGUgY29tcGxleGl0aWVzIEkgd2lsbCBiZSBmaW5kaW5nIGFuZCB3aGF0IGtub3dsZWRnZSBJIHNob3VsZCBicmluZyB0byBiZWFyLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIFVTQi1zcGVjaWZpYyBjb25zaWRlcmF0aW9ucyBpbiB0aGUgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuICA2MTpcdH1cbiAgNjI6XHRcbiAgNjM6XHRzdGF0aWMgdm9pZCBoYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBwbGZ4bGNfdXNiICp1c2IsIGNvbnN0IHU4ICpidWZmZXIsXG4gIDY0Olx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKVxuICA2NTpcdHtcbiAgNjY6XHRcdHBsZnhsY19tYWNfcngocGxmeGxjX3VzYl90b19odyh1c2IpLCBidWZmZXIsIGxlbmd0aCk7XG4gIDY3Olx0fVxuICA2ODpcdFxuICA2OTpcdHN0YXRpYyB2b2lkIHJ4X3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gIDcwOlx0e1xuICA3MTpcdFx0c3RydWN0IHBsZnhsY191c2JfdHggKnR4O1xuICA3MjpcdFx0c3RydWN0IHBsZnhsY191c2IgKnVzYjtcbiAgNzM6XHRcdHVuc2lnbmVkIGludCBsZW5ndGg7XG4gIDc0Olx0XHRjb25zdCB1OCAqYnVmZmVyO1xuICA3NTpcdFx0dTE2IHN0YXR1cztcbiAgNzY6XHRcdHU4IHNpZHg7XG4gIDc3Olx0XHRpbnQgcjtcbiAgNzg6XHRcbiAgNzk6XHRcdGlmICghdXJiKSB7XG4gIDgwOlx0XHRcdHByX2VycihcJiMzNDt1cmIgaXMgTlVMTFxcblwmIzM0Oyk7XG4gIDgxOlx0XHRcdHJldHVybjtcbiAgODI6XHRcdH1cbiAgODM6XHRcdGlmICghdXJiLVx1MDAzZWNvbnRleHQpIHtcbiAgODQ6XHRcdFx0cHJfZXJyKFwmIzM0O3VyYiBjdHggaXMgTlVMTFxcblwmIzM0Oyk7XG4gIDg1Olx0XHRcdHJldHVybjtcbiAgODY6XHRcdH1cbiAgODc6XHRcdHVzYiA9IHVyYi1cdTAwM2Vjb250ZXh0O1xuICA4ODpcdFxuICA4OTpcdFx0aWYgKHVzYi1cdTAwM2Vpbml0aWFsaXplZCAhPSAxKSB7XG4gIDkwOlx0XHRcdHByX2VycihcJiMzNDt1c2IgaXMgbm90IGluaXRpYWxpemVkXFxuXCYjMzQ7KTtcbiAgOTE6XHRcdFx0cmV0dXJuO1xuICA5MjpcdFx0fVxuICA5MzpcdFxuICA5NDpcdFx0dHggPSBcdTAwMjZ1c2ItXHUwMDNldHg7XG4gIDk1Olx0XHRzd2l0Y2ggKHVyYi1cdTAwM2VzdGF0dXMpIHtcbiAgOTY6XHRcdGNhc2UgMDpcbiAgOTc6XHRcdFx0YnJlYWs7XG4gIDk4Olx0XHRjYXNlIC1FU0hVVERPV046XG4gIDk5Olx0XHRjYXNlIC1FSU5WQUw6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTc2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFB1cmVMaUZpIFVTQiBEcml2ZXIqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBVU0IgYnVzLiBUaGUga2V5IGFyZWFzIG9mIGludGVyZXN0IGFyZSBsaWtlbHkgZ29pbmcgdG8gYmUgdGhlIGBwcm9iZWAgcm91dGluZSwgYXMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIHR5cGljYWxseSBoYXBwZW5zLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaWRlbnRpZmllcyBhbmQgY2xhaW1zIHRoZSBQdXJlTGlGaSBVU0IgZGV2aWNlLiBBbHNvLCB0aGUgYHVzYl9kZXZpY2VfaWRgIHRhYmxlIGlzIGRlZmluaXRlbHkgb24gbXkgcmFkYXIuIFRoaXMgaXMgd2hlcmUgdGhlIHZlbmRvciBhbmQgcHJvZHVjdCBJRHMgYXJlIGRlY2xhcmVkLCBhbGxvd2luZyB0aGUgZHJpdmVyIHRvIHJlY29nbml6ZSAqc3BlY2lmaWMqIFB1cmVMaUZpIGhhcmR3YXJlLiBJJiMzOTtsbCBjaGVjayBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgaGFyZHdhcmUgdmVyc2lvbnMgb3IgcmV2aXNpb25zLiBUaGlzIHdpbGwgYmUgdGhlIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgdGhlIGJ1cyBpcyBtYW5hZ2VkLiBUaGlzIGlzIHdoZXJlIHRoZSBpbml0aWFsIGJyaW5nIHVwIGlzIG1vc3QgbGlrZWx5IGhhbmRsZWQuIEkmIzM5O20gZXhwZWN0aW5nIHN0YW5kYXJkIFVTQiBzZXR1cCByb3V0aW5lcywgYnV0IEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyBQdXJlTGlGaSBoYXMgZXh0ZW5kZWQgb3IgY3VzdG9taXplZCB0aG9zZSB0byBhY2NvbW1vZGF0ZSB0aGVpciBvcHRpY2FsIGNvbW11bmljYXRpb24gaW50ZXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2JfZGV2aWNlX2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy0yNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYzoyNjpzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2lkc1tdID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jLTI3LVx0eyBVU0JfREVWSUNFKFBVUkVMSUZJX1hfVkVORE9SX0lEXzAsIFBVUkVMSUZJX1hfUFJPRFVDVF9JRF8wKSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM9NTc5PXN0YXRpYyBpbnQgcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM6NTgwOlx0XHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jLTU4MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTEyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgb2YgdGhlIFB1cmVMaUZpIFVTQiBXaUZpIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmaXhpbmcgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGluIHRoZSBgcGxmeGxjX21hY19yeGAgZnVuY3Rpb24gYW5kIHNvbWUgcmVsYXRlZCBpc3N1ZXMgaW4gYHJ4X3VyYl9jb21wbGV0ZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIGZ1enphYmxlPyBTaG91bGQgSSBzcGVuZCBteSB0aW1lIGRpZ2dpbmcgZGVlcGVyPyYjMzQ7IExldCYjMzk7cyBicmVhayBpdCBkb3duIG1ldGhvZGljYWxseS4KCkZpcnN0LCBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIHZpYSBmdXp6aW5nPyBDb25zaWRlcmluZyBJJiMzOTttIHdvcmtpbmcgaW4gdGhlIGNvbnRleHQgb2YgVVNCLCBhbmQgc3BlY2lmaWNhbGx5IFVTQiBSYXcgR2FkZ2V0L3N5emthbGxlciwgaXQgc2VlbXMgcGxhdXNpYmxlLiBJIGNhbiBlbXVsYXRlIFVTQiBkZXZpY2VzLCBhbmQgUHVyZUxpRmkgaXMgYSAqVVNCKiBXaUZpIGRyaXZlci4gVGhlIHRleHQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBVU0IgcGFja2V0IHJlY2VwdGlvbiBhbmQgaGFuZGxpbmcgYXJlIHJlYWNoYWJsZSB2aWEgdGhpcyBtZXRob2QuIEV4Y2VsbGVudCwgc28gZmFyLCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWcgb3B0aW9ucy4gVGhlIGRlc2NyaXB0aW9uIG1lbnRpb25zIHRoYXQgYFBMRlhMQ2AgKHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSBkcml2ZXIpIGRlcGVuZHMgb24gYENGRzgwMjExYCwgYE1BQzgwMjExYCwgYW5kIGBVU0JgIGluIGl0cyBLY29uZmlnIGZpbGUuIENydWNpYWxseSwgaXQgYWxzbyBwb2ludHMgb3V0IGBXTEFOX1ZFTkRPUl9QVVJFTElGSWAgaXMgcmVxdWlyZWQgaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIHNldC4gRnVydGhlciBpbnNwZWN0aW9uIG9mIGBkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnYCBhbmQgYE1ha2VmaWxlYCBjb25maXJtcyB0aGUgbmVlZCBmb3IgYFdMQU5fVkVORE9SX1BVUkVMSUZJYC4KClNvLCBib3R0b20gbGluZTogSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIGNvbmZpZ3MsIGVzcGVjaWFsbHkgYFdMQU5fVkVORE9SX1BVUkVMSUZJYCBhcmUgZW5hYmxlZCBpbiBteSBmdXp6aW5nIGVudmlyb25tZW50LiBJZiB0aGUgY29uZmlncyBhcmUgdGhlcmUsIHRoZW4gdGhlIHBhdGNoIGlzIHJlYWNoYWJsZSwgYW5kIHRoZSBlZmZvcnQgdG8gZnV6eiBpcyB3YXJyYW50ZWQuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3Mgd29ydGggYSBzaG90LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtXTEFOX1ZFTkRPUl9QVVJFTElGSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9OWFApICYjNDM7PSBueHAvXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfV0xBTl9WRU5ET1JfUFVSRUxJRkkpICYjNDM7PSBwdXJlbGlmaS9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9RVUFOVEVOTkEpICYjNDM7PSBxdWFudGVubmEvXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZzoyOmNvbmZpZyBXTEFOX1ZFTkRPUl9QVVJFTElGSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtwdXJlTGlGaSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZy0xMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWc6MTM6aWYgV0xBTl9WRU5ET1JfUFVSRUxJRklcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWctMTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnPTE1PXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZy0xNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWc6MTc6ZW5kaWYgIyBXTEFOX1ZFTkRPUl9QVVJFTElGSVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMyMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGZhbWlsaWFyIHdpdGggdGhlIExpbnV4IGtlcm5lbCBuZXR3b3JraW5nIHN0YWNrOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBXTEFOX1ZFTkRPUl9QVVJFTElGSSBLY29uZmlnIEVudHJ5KioKCk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgcG9pbnRpbmcgbWUgdG93YXJkcyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZ2AuIFJpZ2h0IGF3YXksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSB3aXJlbGVzcyBuZXR3b3JraW5nIGRyaXZlciBzdWJzeXN0ZW0uIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZm9jdXNpbmcgb24gYFdMQU5fVkVORE9SX1BVUkVMSUZJYCB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBhYm91dCBzdXBwb3J0IGZvciBhIHNwZWNpZmljIHZlbmRvciYjMzk7cyBXaS1GaSBoYXJkd2FyZSwgUHVyZUxpZmkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgb3IgY29uZGl0aW9uYWxpemVzIHRoaXMgZmVhdHVyZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIEtjb25maWcgZmlsZSBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgdGhpcyBzcGVjaWZpYyBzeW1ib2wgd2l0aGluIHRoYXQgZmlsZS4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWU6CgoqICAgV2hhdCBkZXBlbmRlbmNpZXMgZG9lcyB0aGlzIG9wdGlvbiBoYXZlPyBJcyBpdCB0aWVkIHRvIGFueSBzcGVjaWZpYyBoYXJkd2FyZSwgb3RoZXIga2VybmVsIG9wdGlvbnMsIG9yIHN1Yi1kcml2ZXJzPwoqICAgV2hhdCBpcyBpdHMgZGVmYXVsdCBzZXR0aW5nPyBJcyBpdCBlbmFibGVkIGJ5IGRlZmF1bHQsIG9yIGlzIGl0IGRpc2FibGVkPwoqICAgQXJlIHRoZXJlIGFueSByZWxldmFudCBoZWxwIG1lc3NhZ2VzIG9yIGRlc2NyaXB0aW9ucyBhc3NvY2lhdGVkIHdpdGggaXQ/IFRoZXNlIGNhbiB0ZWxsIG1lIHdoYXQgUHVyZUxpZmkmIzM5O3MgZHJpdmVycyBkbyBhbmQgYW55IHNwZWNpYWwgY29uc2lkZXJhdGlvbnMuCiogICBJcyBpdCBjb25kaXRpb25hbGx5IGVuYWJsZWQgYmFzZWQgb24gb3RoZXIgc2V0dGluZ3M/IElmIHNvLCB3aGF0IGFyZSB0aG9zZSBjb25kaXRpb25zPwoKSSYjMzk7bSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZGVlcCBkaXZlIGludG8gdGhlIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3RzIG9mIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gb24gdGhlIGtlcm5lbCYjMzk7cyBjb21waWxhdGlvbiBhbmQgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIFB1cmVMaWZpLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBXaXJlbGVzcyBMQU4gZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBXTEFOXG4gICA3Olx0XHRib29sIFwmIzM0O1dpcmVsZXNzIExBTlwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiAhUzM5MFxuICAgOTpcdFx0ZGVwZW5kcyBvbiBORVRcbiAgMTA6XHRcdHNlbGVjdCBXSVJFTEVTU1xuICAxMTpcdFx0ZGVmYXVsdCB5XG4gIDEyOlx0XHRoZWxwXG4gIDEzOlx0XHQgIFRoaXMgc2VjdGlvbiBjb250YWlucyBhbGwgdGhlIHByZSA4MDIuMTEgYW5kIDgwMi4xMSB3aXJlbGVzc1xuICAxNDpcdFx0ICBkZXZpY2UgZHJpdmVycy4gRm9yIGEgY29tcGxldGUgbGlzdCBvZiBkcml2ZXJzIGFuZCBkb2N1bWVudGF0aW9uXG4gIDE1Olx0XHQgIG9uIHRoZW0gcmVmZXIgdG8gdGhlIHdpcmVsZXNzIHdpa2k6XG4gIDE2Olx0XG4gIDE3Olx0XHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnNcbiAgMTg6XHRcbiAgMTk6XHRpZiBXTEFOXG4gIDIwOlx0XG4gIDIxOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbXRlay9LY29uZmlnXCYjMzQ7XG4gIDIyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnXCYjMzQ7XG4gIDIzOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsL0tjb25maWdcJiMzNDtcbiAgMjQ6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vS2NvbmZpZ1wmIzM0O1xuICAyNTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9LY29uZmlnXCYjMzQ7XG4gIDI2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL0tjb25maWdcJiMzNDtcbiAgMjc6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9LY29uZmlnXCYjMzQ7XG4gIDI4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL0tjb25maWdcJiMzNDtcbiAgMjk6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWljcm9jaGlwL0tjb25maWdcJiMzNDtcbiAgMzA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnXCYjMzQ7XG4gIDMxOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9LY29uZmlnXCYjMzQ7XG4gIDMyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWdcJiMzNDtcbiAgMzM6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcmFsaW5rL0tjb25maWdcJiMzNDtcbiAgMzQ6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9LY29uZmlnXCYjMzQ7XG4gIDM1Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnXCYjMzQ7XG4gIDM2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy9LY29uZmlnXCYjMzQ7XG4gIDM3Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L0tjb25maWdcJiMzNDtcbiAgMzg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvS2NvbmZpZ1wmIzM0O1xuICAzOTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy9LY29uZmlnXCYjMzQ7XG4gIDQwOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzE3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUga2V5OiBgUExGWExDYCwgYFdMQU5fVkVORE9SX1BVUkVMSUZJYCwgYENGRzgwMjExYCwgYE1BQzgwMjExYCwgYFVTQmAsIGFuZCBgV0xBTmAuIFRob3NlIGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzLCB0aGUgZm91bmRhdGlvbiB0aGlzIHBhdGNoIGlzIHdvcmtpbmcgd2l0aC4gTm93LCB0aGUgbWVhdCBvZiBpdC4KCkkmIzM5O3ZlIGlkZW50aWZpZWQgdHdvIG1vZGlmaWVkIGZ1bmN0aW9uczogYHBsZnhsY19tYWNfcnhgIGluIGBtYWMuY2AsIGFuZCBgcnhfdXJiX2NvbXBsZXRlYCBpbiBgdXNiLmNgLiBNeSBuZXh0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciBzY29wZS4gSSBzZWUgdGhhdCBgcGxmeGxjX21hY19yeGAgaXMgYSBnbG9iYWwgZnVuY3Rpb24sIG1lYW5pbmcgaXQmIzM5O3MgdmlzaWJsZSBvdXRzaWRlIG9mIGl0cyBvd24gc291cmNlIGZpbGUsIHdoaWNoIGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyBpdCYjMzk7cyBjYWxsZWQgYW5kIG1vZGlmaWVkLiBgcnhfdXJiX2NvbXBsZXRlYCBpcyBzdGF0aWMgd2l0aGluIGB1c2IuY2AsIGJ1dCBpdCBpcyBzdGlsbCBhIGZ1bmN0aW9uIHN5bWJvbCwgYW5kIGlzIHRodXMgY2FsbGFibGUgZnJvbSBlbHNld2hlcmUuIFRoaXMgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cuCgpOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBlbHNlIGlzIGdvaW5nIG9uIGluIGBtYWMuY2AgYW5kIGB1c2IuY2AgYW5kIGhvdyBgcGxmeGxjX2ZpbHRlcl9hY2tgIGNvbWVzIGludG8gcGxheS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb21wbGV0ZSBjaGFpbiBvZiBldmVudHMsIGZyb20gcGFja2V0IHJlY2VwdGlvbiB0byBwcm9jZXNzaW5nLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGluZyBgcGxmeGxjX21hY19yeGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BsZnhsY19tYWNfcngmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jPTMzOD1zdGF0aWMgaW50IHBsZnhsY19maWx0ZXJfYWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcnhfaGRyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYy0zOTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmM6MzkzOmludCBwbGZ4bGNfbWFjX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqYnVmZmVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jLTM5NC1cdFx0ICB1bnNpZ25lZCBpbnQgbGVuZ3RoKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuaD0xNzQ9aW50IHBsZnhsY19tYWNfaW5pdF9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmgtMTc1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5oOjE3NjppbnQgcGxmeGxjX21hY19yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY29uc3QgdTggKmJ1ZmZlcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuaC0xNzctXHRcdCAgdW5zaWduZWQgaW50IGxlbmd0aCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jPTYzPXN0YXRpYyB2b2lkIGhhbmRsZV9yeF9wYWNrZXQoc3RydWN0IHBsZnhsY191c2IgKnVzYiwgY29uc3QgdTggKmJ1ZmZlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtNjUte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jOjY2Olx0cGxmeGxjX21hY19yeChwbGZ4bGNfdXNiX3RvX2h3KHVzYiksIGJ1ZmZlciwgbGVuZ3RoKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy02Ny19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDEwCgkJCQkJCQlvdXRwdXQ6IDE4MwoJCQkJCQkJdGhvdWdodHM6IDM2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUHVyZUxpRmkgVVNCIERyaXZlciBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgaXMgc3F1YXJlbHkgb24gdGhlIGBwbGZ4bGNfbWFjX3J4YCBhbmQgYHJ4X3VyYl9jb21wbGV0ZWAgZnVuY3Rpb25zIOKAkyB0aG9zZSBhcmUgdGhlIGRpcmVjdCBtb2RpZmljYXRpb25zIEkgbmVlZCB0byBleGFtaW5lLiBUaGUgaW1tZWRpYXRlIGNhbGxlciBvZiB0aGVzZSwgYWNjb3JkaW5nIHRvIHRoaXMsIGlzIGBoYW5kbGVfcnhfcGFja2V0YCB3aXRoaW4gYHVzYi5jYC4gR29vZCwgZ290IG15IGZvY2FsIHBvaW50cyBjbGVhcmx5IGRlZmluZWQuCgpCZWZvcmUgSSBwcm9jZWVkLCBsZXQmIzM5O3MgZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNvbmZpZ3VyYXRpb24td2lzZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgUExGWExDYCwgYFdMQU5fVkVORE9SX1BVUkVMSUZJYCwgYE1BQzgwMjExYCwgYENGRzgwMjExYCwgYFVTQmAsIGFuZCBgV0xBTmAgYXJlIGFsbCBhY2NvdW50ZWQgZm9yIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLgoKTm93LCBsZXQmIzM5O3MgY3Jvc3MtcmVmZXJlbmNlIGFnYWluc3QgdGhlIEtjb25maWcgZmlsZXMuIEkgc2VlIGhlcmUgdGhhdCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL0tjb25maWdgLCBgUExGWExDYCBzcGVjaWZpY2FsbHkgZGVwZW5kcyBvbiBgQ0ZHODAyMTEgJmFtcDsmYW1wOyBNQUM4MDIxMSAmYW1wOyZhbXA7IFVTQmAuIFRoYXQgbWFrZXMgc2Vuc2UuIEFsc28gYFdMQU5fVkVORE9SX1BVUkVMSUZJYCBpcyBoYW5kbGVkIGF0IHRoZSByaWdodCBsZXZlbCBhbmQgdGhlIGBXTEFOYCBjb25maWcgaXMgcHJvcGVybHkgbWFuYWdlZC4KCk5vdyB0aGUgY29yZSByYXRpb25hbGUuIFRoaXMgcGF0Y2ggaXMgYWJvdXQgYm91bmRzIHZhbGlkYXRpb24gaW4gdGhlIGBwbGZ4bGNfbWFjX3J4YCBhbmQgVW5pdmVyc2FsIFNlcmlhbCBCdXMgKFVTQikgbGVuZ3RoIGhhbmRsaW5nIGluIGByeF91cmJfY29tcGxldGVgLiBJdCYjMzk7cyBhbGwgYWJvdXQgdGhhdCBQdXJlTGlGaSBVU0Igd2lyZWxlc3MgYWRhcHRlciBkcml2ZXIuIEl0JiMzOTtzIGdvb2QgdG8ga25vdyB0aGF0IHRoaXMgY2FuIGJlIHRyaWdnZXJlZCBhbmQgdGVzdGVkIHVzaW5nIFVTQiByYXcgZ2FkZ2V0IGVtdWxhdGlvbiwgbGlrZSBgZHVtbXlfaGNkYCBhbmQgYHN5el91c2JfY29ubmVjdGAuIFRoZSBjaGFuZ2VzIGltcGFjdCBwYWNrZXQgcmVjZXB0aW9uIGFuZCBwYXJzaW5nLCBzbyBVU0IgZW5kcG9pbnQgdHJhZmZpYyBpcyB0aGUgY3JpdGljYWwgdmVjdG9yLgoKQWxyaWdodCwgZXZlcnl0aGluZyBhcHBlYXJzIHNvdW5kIGFuZCB2ZXJpZmlhYmxlLiBUaW1lIHRvIHB1c2ggdGhpcyB0aHJvdWdoLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UExGWExDJiMzNDssCiAgICAmIzM0O1dMQU5fVkVORE9SX1BVUkVMSUZJJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtXTEFOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGxmeGxjX21hY19yeCYjMzQ7LAogICAgJiMzNDtyeF91cmJfY29tcGxldGUmIzM0OywKICAgICYjMzQ7aGFuZGxlX3J4X3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgcmVjZXB0aW9uIGFuZCBsZW5ndGggdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgUHVyZUxpRmkgVVNCIHdpcmVsZXNzIGRyaXZlciAocGxmeGxjX21hY19yeCBhbmQgcnhfdXJiX2NvbXBsZXRlKS4gVVNCIG5ldHdvcmsgZHJpdmVycyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB1c2luZyBVU0IgcmF3LWdhZGdldCAvIGR1bW15X2hjZCBlbXVsYXRpb24uIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gdmVyaWZ5IHRoZSBuZXcgYm91bmRzIGNoZWNrcyBhbmQgZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb24gbWFsZm9ybWVkIFVTQiBmcmFtZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BMRlhMQyYjMzQ7LAogICAgJiMzNDtXTEFOX1ZFTkRPUl9QVVJFTElGSSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7V0xBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BsZnhsY19tYWNfcngmIzM0OywKICAgICYjMzQ7cnhfdXJiX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O2hhbmRsZV9yeF9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHJlY2VwdGlvbiBhbmQgbGVuZ3RoIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIFB1cmVMaUZpIFVTQiB3aXJlbGVzcyBkcml2ZXIgKHBsZnhsY19tYWNfcnggYW5kIHJ4X3VyYl9jb21wbGV0ZSkuIFVTQiBuZXR3b3JrIGRyaXZlcnMgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgdXNpbmcgVVNCIHJhdy1nYWRnZXQgLyBkdW1teV9oY2QgZW11bGF0aW9uLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIHZlcmlmeSB0aGUgbmV3IGJvdW5kcyBjaGVja3MgYW5kIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIG9uIG1hbGZvcm1lZCBVU0IgZnJhbWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcGFja2V0IHZhbGlkYXRpb24gaW4gdGhlIFB1cmVMaUZpIChwbGZ4bGMpIHdpcmVsZXNzIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCB1c2VzIGB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aGAgcmF0aGVyIHRoYW4gYW4gdW52YWxpZGF0ZWQgZmllbGQgZnJvbSB0aGUgYnVmZmVyLCBhZGRzIG1pbmltdW0gbGVuZ3RoIGNoZWNrcyBiZWZvcmUgcGFyc2luZyBgcnhfc3RhdHVzYCBhbmQgcGF5bG9hZCBsZW5ndGgsIHZlcmlmaWVzIHRoYXQgdGhlIHBheWxvYWQgbGVuZ3RoIGRvZXMgbm90IGV4Y2VlZCB0aGUgVVJCIGJ1ZmZlciBsZW5ndGgsIGFuZCBmaXhlcyB0aGUgYnVmZmVyIG9mZnNldCBwYXNzZWQgdG8gYHBsZnhsY19maWx0ZXJfYWNrKClgLlxuXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3MgaW5wdXQgdmFsaWRhdGlvbiBhbmQgb3V0LW9mLWJvdW5kcyBidWZmZXIgb3ZlcnJlYWRzLCB3aGljaCBmYWxsIHNxdWFyZWx5IHVuZGVyIEtBU0FOJiMzOTtzIGRvbWFpbi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlIHJlYWRzLCBkb2VzIG5vdCBhbHRlciBzdHJ1Y3R1cmUgcGFkZGluZy9pbml0aWFsaXphdGlvbiBzZW50IHRvIHVzZXJzcGFjZSwgYW5kIGFsbCBsb2NhbCBzdHJ1Y3R1cmVzIChzdWNoIGFzIGBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0c2ApIGFyZSBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXRgLiBUaHVzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI3MmY1NThiYjlhNzI1ZjIwNDAyMGJmOTMzMTNmNzYzY2JlNDNiNDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA2OjUzOjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jCmluZGV4IGE5MDA0MjE3NTNhYzYuLmQyNjkwY2NlNzk2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMKQEAgLTQwNyw2ICYjNDM7NDA3LDkgQEAgaW50IHBsZnhsY19tYWNfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpidWZmZXIsCiAJaWYgKCFtYWMtJmd0O3ZpZikKIAkJcmV0dXJuIDA7CiAKJiM0MzsJaWYgKGxlbmd0aCAmbHQ7IHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSAmIzQzOyBzaXplb2YodTMyKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCXN0YXR1cyA9IChzdHJ1Y3Qgcnhfc3RhdHVzICopYnVmZmVyOwogCiAJbWVtc2V0KCZhbXA7c3RhdHMsIDAsIHNpemVvZihzdGF0cykpOwpAQCAtNDI1LDE5ICYjNDM7NDI4LDE5IEBAIGludCBwbGZ4bGNfbWFjX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqYnVmZmVyLAogCiAJbWFjLSZndDtjcmNfZXJyb3JzID0gYmU2NF90b19jcHUoc3RhdHVzLSZndDtjcmNfZXJyb3JfY291bnQpOwogCi0JLyogVE9ETyBiYWQgZnJhbWUgY2hlY2sgZm9yIENSQyBlcnJvciovCi0JaWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsICZhbXA7c3RhdHMpICZhbXA7JmFtcDsKLQkgICAgIW1hYy0mZ3Q7cGFzc19jdHJsKQotCQlyZXR1cm4gMDsKLQogCWJ1ZmZlciAmIzQzOz0gc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpOwogCXBheWxvYWRfbGVuZ3RoID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1ZmZlcik7CiYjNDM7CWJ1ZmZlciAmIzQzOz0gc2l6ZW9mKHUzMik7CiAKLQlpZiAocGF5bG9hZF9sZW5ndGggJmd0OyAxNTYwKSB7CiYjNDM7CWlmIChwYXlsb2FkX2xlbmd0aCAmZ3Q7IDE1NjAgfHwKJiM0MzsJICAgIHBheWxvYWRfbGVuZ3RoICYjNDM7IHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSAmIzQzOyBzaXplb2YodTMyKSAmZ3Q7IGxlbmd0aCkgewogCQlkZXZfZXJyKHBsZnhsY19tYWNfZGV2KG1hYyksICYjMzQ7ICZndDsgTVRVICV1XG4mIzM0OywgcGF5bG9hZF9sZW5ndGgpOwogCQlyZXR1cm4gMDsKIAl9Ci0JYnVmZmVyICYjNDM7PSBzaXplb2YodTMyKTsKJiM0MzsKJiM0MzsJaWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsICZhbXA7c3RhdHMpICZhbXA7JmFtcDsKJiM0MzsJICAgICFtYWMtJmd0O3Bhc3NfY3RybCkKJiM0MzsJCXJldHVybiAwOwogCiAJZmMgPSBnZXRfdW5hbGlnbmVkKChfX2xlMTYgKilidWZmZXIpOwogCW5lZWRfcGFkZGluZyA9IGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykgXiBpZWVlODAyMTFfaGFzX2E0KGZjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYwppbmRleCA2ZDI0MDg2ZWI4YjdhLi5jMzNiOTEzMWJmZGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jCkBAIC0xMTcsMTAgJiM0MzsxMTcsOSBAQCBzdGF0aWMgdm9pZCByeF91cmJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQogCX0KIAogCWJ1ZmZlciA9IHVyYi0mZ3Q7dHJhbnNmZXJfYnVmZmVyOwotCWxlbmd0aCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopKGJ1ZmZlciAmIzQzOyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykpKQotCQkgJiM0Mzsgc2l6ZW9mKHUzMik7CiYjNDM7CWxlbmd0aCA9IHVyYi0mZ3Q7YWN0dWFsX2xlbmd0aDsKIAotCWlmICh1cmItJmd0O2FjdHVhbF9sZW5ndGggIT0gKFBMRl9NU0dfU1RBVFVTX09GRlNFVCAmIzQzOyAxKSkgewomIzQzOwlpZiAobGVuZ3RoICE9IChQTEZfTVNHX1NUQVRVU19PRkZTRVQgJiM0MzsgMSkpIHsKIAkJaWYgKHVzYi0mZ3Q7aW5pdGlhbGl6ZWQgJmFtcDsmYW1wOyB1c2ItJmd0O2xpbmtfdXApCiAJCQloYW5kbGVfcnhfcGFja2V0KHVzYiwgYnVmZmVyLCBsZW5ndGgpOwogCQlnb3RvIHJlc3VibWl0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxMAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIHRoZSBQYXRjaCBTZXJpZXMgZm9yIEtNU0FOIEZ1enppbmcqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBpdHMgb3duIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0JiMzOTtzIHJ1biB0aGlzIHRocm91Z2ggbXkgbWVudGFsIHNhZmV0eSBjaGVja2xpc3QgZmlyc3QuIFRoaXMgaXMgYSBiZW5pZ24sIGRlZmVuc2l2ZSB0YXNrIOKAkyBJJiMzOTttIGp1c3QgZXZhbHVhdGluZyB0aGUgcGF0Y2hlcyB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBzYW5pdGl6ZXIgKEtBU0FOIHZlcnN1cyBLTVNBTikgZm9yIHRoZW0uIE5vIG1hbGljaW91cyBpbnRlbnQsIG5vIGV4cGxvaXQgZ2VuZXJhdGlvbiwgbm90aGluZyBsaWtlIHRoYXQuIFBlcmZlY3RseSBzYWZlLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGNvZGUuIFRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmNgIGFuZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jYC4gVGltZSB0byBmaXJlIHVwIHRoZSB0b29sczogSSYjMzk7bGwgdXNlIGNvZGVzZWFyY2gsIG9yIG1heWJlIGV2ZW4ganVzdCByZWFkIHRoZSBmaWxlcyBkaXJlY3RseSwgb3IgZ3JlcHBlciBpZiBJIG5lZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgY29tcGxleCwgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhvc2UgZmlsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgY2hhbmdlcyBhcmUgKmRvaW5nKiBiZWZvcmUgSSBjYW4gbWFrZSBhIGNhbGwgb24gS01TQU4gcmVxdWlyZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0XHRzdHJ1Y3QgcGxmeGxjX3VzYl90eCAqdHg7XG4gNDAxOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDQwMjpcdFx0aW50IG5lZWRfcGFkZGluZztcbiA0MDM6XHRcdF9fbGUxNiBmYztcbiA0MDQ6XHRcdGludCBzaWR4O1xuIDQwNTpcdFxuIDQwNjpcdFx0LyogUGFja2V0IGJsb2NrYWRlIGR1cmluZyBkaXNhYmxlZCBpbnRlcmZhY2UuICovXG4gNDA3Olx0XHRpZiAoIW1hYy1cdTAwM2V2aWYpXG4gNDA4Olx0XHRcdHJldHVybiAwO1xuIDQwOTpcdFxuIDQxMDpcdFx0aWYgKGxlbmd0aCBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpICYjNDM7IHNpemVvZih1MzIpKVxuIDQxMTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0MTI6XHRcbiA0MTM6XHRcdHN0YXR1cyA9IChzdHJ1Y3Qgcnhfc3RhdHVzICopYnVmZmVyO1xuIDQxNDpcdFxuIDQxNTpcdFx0bWVtc2V0KFx1MDAyNnN0YXRzLCAwLCBzaXplb2Yoc3RhdHMpKTtcbiA0MTY6XHRcbiA0MTc6XHRcdHN0YXRzLmZsYWcgICAgID0gMDtcbiA0MTg6XHRcdHN0YXRzLmZyZXEgICAgID0gMjQxMjtcbiA0MTk6XHRcdHN0YXRzLmJhbmQgICAgID0gTkw4MDIxMV9CQU5EX0xDO1xuIDQyMDpcdFx0bWFjLVx1MDAzZXJzc2kgICAgICA9IC0xNSAqIGJlMTZfdG9fY3B1KHN0YXR1cy1cdTAwM2Vyc3NpKSAvIDEwO1xuIDQyMTpcdFxuIDQyMjpcdFx0c3RhdHMuc2lnbmFsICAgPSBtYWMtXHUwMDNlcnNzaTtcbiA0MjM6XHRcbiA0MjQ6XHRcdGlmIChzdGF0dXMtXHUwMDNlcmF0ZV9pZHggXHUwMDNlIDcpXG4gNDI1Olx0XHRcdHN0YXRzLnJhdGVfaWR4ID0gMDtcbiA0MjY6XHRcdGVsc2VcbiA0Mjc6XHRcdFx0c3RhdHMucmF0ZV9pZHggPSBzdGF0dXMtXHUwMDNlcmF0ZV9pZHg7XG4gNDI4Olx0XG4gNDI5Olx0XHRtYWMtXHUwMDNlY3JjX2Vycm9ycyA9IGJlNjRfdG9fY3B1KHN0YXR1cy1cdTAwM2VjcmNfZXJyb3JfY291bnQpO1xuIDQzMDpcdFxuIDQzMTpcdFx0YnVmZmVyICYjNDM7PSBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cyk7XG4gNDMyOlx0XHRwYXlsb2FkX2xlbmd0aCA9IGdldF91bmFsaWduZWRfYmUzMihidWZmZXIpO1xuIDQzMzpcdFx0YnVmZmVyICYjNDM7PSBzaXplb2YodTMyKTtcbiA0MzQ6XHRcbiA0MzU6XHRcdGlmIChwYXlsb2FkX2xlbmd0aCBcdTAwM2UgMTU2MCB8fFxuIDQzNjpcdFx0ICAgIHBheWxvYWRfbGVuZ3RoICYjNDM7IHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSAmIzQzOyBzaXplb2YodTMyKSBcdTAwM2UgbGVuZ3RoKSB7XG4gNDM3Olx0XHRcdGRldl9lcnIocGxmeGxjX21hY19kZXYobWFjKSwgXCYjMzQ7IFx1MDAzZSBNVFUgJXVcXG5cJiMzNDssIHBheWxvYWRfbGVuZ3RoKTtcbiA0Mzg6XHRcdFx0cmV0dXJuIDA7XG4gNDM5Olx0XHR9XG4gNDQwOlx0XG4gNDQxOlx0XHRpZiAocGxmeGxjX2ZpbHRlcl9hY2soaHcsIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWJ1ZmZlciwgXHUwMDI2c3RhdHMpIFx1MDAyNlx1MDAyNlxuIDQ0MjpcdFx0ICAgICFtYWMtXHUwMDNlcGFzc19jdHJsKVxuIDQ0MzpcdFx0XHRyZXR1cm4gMDtcbiA0NDQ6XHRcbiA0NDU6XHRcdGZjID0gZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopYnVmZmVyKTtcbiA0NDY6XHRcdG5lZWRfcGFkZGluZyA9IGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykgXiBpZWVlODAyMTFfaGFzX2E0KGZjKTtcbiA0NDc6XHRcbiA0NDg6XHRcdHR4ID0gXHUwMDI2bWFjLVx1MDAzZWNoaXAudXNiLnR4O1xuIDQ0OTpcdFxuIDQ1MDpcdFx0Zm9yIChzaWR4ID0gMDsgc2lkeCBcdTAwM2MgTUFYX1NUQV9OVU0gLSAxOyBzaWR4JiM0MzsmIzQzOykge1xuIDQ1MTpcdFx0XHRpZiAobWVtY21wKFx1MDAyNmJ1ZmZlclsxMF0sIHR4LVx1MDAzZXN0YXRpb25bc2lkeF0ubWFjLCBFVEhfQUxFTikpXG4gNDUyOlx0XHRcdFx0Y29udGludWU7XG4gNDUzOlx0XHRcdGlmICh0eC1cdTAwM2VzdGF0aW9uW3NpZHhdLmZsYWcgXHUwMDI2IFNUQVRJT05fQ09OTkVDVEVEX0ZMQUcpIHtcbiA0NTQ6XHRcdFx0XHR0eC1cdTAwM2VzdGF0aW9uW3NpZHhdLmZsYWcgfD0gU1RBVElPTl9IRUFSVEJFQVRfRkxBRztcbiA0NTU6XHRcdFx0XHRicmVhaztcbiA0NTY6XHRcdFx0fVxuIDQ1NzpcdFx0fVxuIDQ1ODpcdFxuIDQ1OTpcdFx0aWYgKHNpZHggPT0gTUFYX1NUQV9OVU0gLSAxKSB7XG4gNDYwOlx0XHRcdGZvciAoc2lkeCA9IDA7IHNpZHggXHUwMDNjIE1BWF9TVEFfTlVNIC0gMTsgc2lkeCYjNDM7JiM0MzspIHtcbiA0NjE6XHRcdFx0XHRpZiAodHgtXHUwMDNlc3RhdGlvbltzaWR4XS5mbGFnIFx1MDAyNiBTVEFUSU9OX0NPTk5FQ1RFRF9GTEFHKVxuIDQ2MjpcdFx0XHRcdFx0Y29udGludWU7XG4gNDYzOlx0XHRcdFx0bWVtY3B5KHR4LVx1MDAzZXN0YXRpb25bc2lkeF0ubWFjLCBcdTAwMjZidWZmZXJbMTBdLCBFVEhfQUxFTik7XG4gNDY0Olx0XHRcdFx0dHgtXHUwMDNlc3RhdGlvbltzaWR4XS5mbGFnIHw9IFNUQVRJT05fQ09OTkVDVEVEX0ZMQUc7XG4gNDY1Olx0XHRcdFx0dHgtXHUwMDNlc3RhdGlvbltzaWR4XS5mbGFnIHw9IFNUQVRJT05fSEVBUlRCRUFUX0ZMQUc7XG4gNDY2Olx0XHRcdFx0YnJlYWs7XG4gNDY3Olx0XHRcdH1cbiA0Njg6XHRcdH1cbiA0Njk6XHRcbiA0NzA6XHRcdHN3aXRjaCAoYnVmZmVyWzBdKSB7XG4gNDcxOlx0XHRjYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6XG4gNDcyOlx0XHRcdGRldl9kYmcocGxmeGxjX21hY19kZXYobWFjKSwgXCYjMzQ7UHJvYmUgcmVxdWVzdFxcblwmIzM0Oyk7XG4gNDczOlx0XHRcdGJyZWFrO1xuIDQ3NDpcdFx0Y2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVROlxuIDQ3NTpcdFx0XHRkZXZfZGJnKHBsZnhsY19tYWNfZGV2KG1hYyksIFwmIzM0O0Fzc29jaWF0aW9uIHJlcXVlc3RcXG5cJiMzNDspO1xuIDQ3NjpcdFx0XHRicmVhaztcbiA0Nzc6XHRcdGNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6XG4gNDc4Olx0XHRcdGRldl9kYmcocGxmeGxjX21hY19kZXYobWFjKSwgXCYjMzQ7QXV0aGVudGljYXRpb24gcmVxXFxuXCYjMzQ7KTtcbiA0Nzk6XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MzYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZGVlcGx5IGltbWVyc2VkIGluIHRoaXMgcHJvamVjdDoKCioqRGlnZ2luZyBEZWVwZXIgaW50byB0aGUgQ29kZWJhc2UqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHpvb20gaW4gb24gYSBjb3VwbGUgb2YgY3JpdGljYWwgYXJlYXMgaW4gdGhlIGNvZGUuIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBjYXJ2ZSBvdXQgc29tZSBkZWRpY2F0ZWQgdGltZSB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgYG1hYy5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDQ4MCB0byA1NTAuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGVzZSBzZWN0aW9ucyBvZnRlbiBob2xkIGNydWNpYWwgbG9naWMgcmVsYXRpbmcgdG8gdGhlIE1BQyBsYXllciBvcGVyYXRpb25zLCBhbmQgSSBzdXNwZWN0IHRoZXJlJiMzOTtzIHNvbWV0aGluZyByZWxldmFudCB0byBvdXIgY3VycmVudCBpbnZlc3RpZ2F0aW9uIGx1cmtpbmcgdGhlcmUuIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsIGhlcmUsIHJlYWxseSB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIGhvdyB0aGF0IHNlZ21lbnQgaGFuZGxlcyBpdHMgZHV0aWVzLgoKQmV5b25kIHRoYXQsIHRoZSByZWNlcHRpb24gcGF0aCBpbiBgdXNiLmNgIGRlbWFuZHMgYXR0ZW50aW9uLiBJIHNob3VsZCByZWFsbHkgdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIHRvIGdyYWIgc3R1ZmYgb3V0IG9mIHRoZSBVU0IgaW50ZXJmYWNlIGFuZCBhY3R1YWxseSBwcm9jZXNzIGl0LiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBVU0IgUlggaGFuZGxpbmcsIGFzIHRoYXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgZGF0YSBmbG93IHdlIGFyZSBsb29raW5nIGF0LiBVbmRlcnN0YW5kaW5nIHRoZSBkZXRhaWxzIG9mIHRoaXMgc3BlY2lmaWMgYXJlYSBpcyBwYXJhbW91bnQgdG8gbXkgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ4MDpcdFx0Y2FzZSBJRUVFODAyMTFfRlRZUEVfREFUQTpcbiA0ODE6XHRcdFx0ZGV2X2RiZyhwbGZ4bGNfbWFjX2RldihtYWMpLCBcJiMzNDs4MDIuMTEgZGF0YSBmcmFtZVxcblwmIzM0Oyk7XG4gNDgyOlx0XHRcdGJyZWFrO1xuIDQ4MzpcdFx0fVxuIDQ4NDpcdFxuIDQ4NTpcdFx0c2tiID0gZGV2X2FsbG9jX3NrYihwYXlsb2FkX2xlbmd0aCAmIzQzOyAobmVlZF9wYWRkaW5nID8gMiA6IDApKTtcbiA0ODY6XHRcdGlmICghc2tiKVxuIDQ4NzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA0ODg6XHRcbiA0ODk6XHRcdGlmIChuZWVkX3BhZGRpbmcpXG4gNDkwOlx0XHRcdC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBwYXlsb2FkIGRhdGEgaXMgNCBieXRlIGFsaWduZWQuICovXG4gNDkxOlx0XHRcdHNrYl9yZXNlcnZlKHNrYiwgMik7XG4gNDkyOlx0XG4gNDkzOlx0XHRza2JfcHV0X2RhdGEoc2tiLCBidWZmZXIsIHBheWxvYWRfbGVuZ3RoKTtcbiA0OTQ6XHRcdG1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKSwgXHUwMDI2c3RhdHMsIHNpemVvZihzdGF0cykpO1xuIDQ5NTpcdFx0aWVlZTgwMjExX3J4X2lycXNhZmUoaHcsIHNrYik7XG4gNDk2Olx0XHRyZXR1cm4gMDtcbiA0OTc6XHR9XG4gNDk4Olx0XG4gNDk5Olx0c3RhdGljIGludCBwbGZ4bGNfb3BfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiA1MDA6XHRcdFx0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpXG4gNTAxOlx0e1xuIDUwMjpcdFx0c3RydWN0IHBsZnhsY19tYWMgKm1hYyA9IHBsZnhsY19od19tYWMoaHcpO1xuIDUwMzpcdFx0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpZnR5cGU4MDIxMVtdID0ge1xuIDUwNDpcdFx0XHRbTkw4MDIxMV9JRlRZUEVfU1RBVElPTl1cdD0gXCYjMzQ7U3RhdGlvblwmIzM0OyxcbiA1MDU6XHRcdFx0W05MODAyMTFfSUZUWVBFX0FESE9DXVx0XHQ9IFwmIzM0O0FkaG9jXCYjMzQ7XG4gNTA2Olx0XHR9O1xuIDUwNzpcdFxuIDUwODpcdFx0aWYgKG1hYy1cdTAwM2V0eXBlICE9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKVxuIDUwOTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gNTEwOlx0XG4gNTExOlx0XHRpZiAodmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHxcbiA1MTI6XHRcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7XG4gNTEzOlx0XHRcdGRldl9kYmcocGxmeGxjX21hY19kZXYobWFjKSwgXCYjMzQ7JXMgJXNcXG5cJiMzNDssIF9fZnVuY19fLFxuIDUxNDpcdFx0XHRcdGlmdHlwZTgwMjExW3ZpZi1cdTAwM2V0eXBlXSk7XG4gNTE1Olx0XHRcdG1hYy1cdTAwM2V0eXBlID0gdmlmLVx1MDAzZXR5cGU7XG4gNTE2Olx0XHRcdG1hYy1cdTAwM2V2aWYgPSB2aWY7XG4gNTE3Olx0XHRcdHJldHVybiAwO1xuIDUxODpcdFx0fVxuIDUxOTpcdFx0ZGV2X2RiZyhwbGZ4bGNfbWFjX2RldihtYWMpLCBcJiMzNDt1bnN1cHBvcnRlZCBpZnR5cGVcXG5cJiMzNDspO1xuIDUyMDpcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDUyMTpcdH1cbiA1MjI6XHRcbiA1MjM6XHRzdGF0aWMgdm9pZCBwbGZ4bGNfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiA1MjQ6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKVxuIDUyNTpcdHtcbiA1MjY6XHRcdHN0cnVjdCBwbGZ4bGNfbWFjICptYWMgPSBwbGZ4bGNfaHdfbWFjKGh3KTtcbiA1Mjc6XHRcbiA1Mjg6XHRcdG1hYy1cdTAwM2V0eXBlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7XG4gNTI5Olx0XHRtYWMtXHUwMDNldmlmID0gTlVMTDtcbiA1MzA6XHR9XG4gNTMxOlx0XG4gNTMyOlx0c3RhdGljIGludCBwbGZ4bGNfb3BfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcmFkaW9faWR4LCB1MzIgY2hhbmdlZClcbiA1MzM6XHR7XG4gNTM0Olx0XHRyZXR1cm4gMDtcbiA1MzU6XHR9XG4gNTM2Olx0XG4gNTM3Olx0I2RlZmluZSBTVVBQT1JURURfRklGX0ZMQUdTIFxcXG4gNTM4Olx0XHQoRklGX0FMTE1VTFRJIHwgRklGX0ZDU0ZBSUwgfCBGSUZfQ09OVFJPTCB8IFxcXG4gNTM5Olx0XHQgRklGX09USEVSX0JTUyB8IEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODc4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipGb2N1c2luZyBvbiB0aGUgUHVyZUxpRmkgVVNCIERyaXZlcioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBmb3IgdGhlIFB1cmVMaUZpIFVTQiBkcml2ZXIuJiMzNDsgU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNgLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBVU0IgaW50ZXJmYWNlIGZvciB0aGF0IHNwZWNpZmljIFB1cmVMaUZpIHBsYXRmb3JtIChgcGxmeGxjYCkgd2lsbCBiZSBoYW5kbGVkLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIGhvdyBpdCBpbml0aWFsaXplcywgaG93IGl0IGhhbmRsZXMgZGV2aWNlIGVudW1lcmF0aW9uIGFuZCBwb3dlciBtYW5hZ2VtZW50LCBob3cgaXQgbW92ZXMgcGFja2V0cywgYW5kIGhvdyBpdCBkZWFscyB3aXRoIGFueSBxdWlya3Mgc3BlY2lmaWMgdG8gdGhlIFVTQiBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGxvdy1sZXZlbCBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIGhvc3QgYW5kIHRoZSBQdXJlTGlGaSBoYXJkd2FyZSBoYXBwZW5zLCBzbyBJIG5lZWQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCBhbnkgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdXNlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdGNhc2UgLUVOT0RFVjpcbiAxMDE6XHRcdGNhc2UgLUVOT0VOVDpcbiAxMDI6XHRcdGNhc2UgLUVDT05OUkVTRVQ6XG4gMTAzOlx0XHRjYXNlIC1FUElQRTpcbiAxMDQ6XHRcdFx0ZGV2X2RiZyhwbGZ4bGNfdXJiX2Rldih1cmIpLCBcJiMzNDt1cmIgJXAgZXJyb3IgJWRcXG5cJiMzNDssIHVyYiwgdXJiLVx1MDAzZXN0YXR1cyk7XG4gMTA1Olx0XHRcdHJldHVybjtcbiAxMDY6XHRcdGRlZmF1bHQ6XG4gMTA3Olx0XHRcdGRldl9kYmcocGxmeGxjX3VyYl9kZXYodXJiKSwgXCYjMzQ7dXJiICVwIGVycm9yICVkXFxuXCYjMzQ7LCB1cmIsIHVyYi1cdTAwM2VzdGF0dXMpO1xuIDEwODpcdFx0XHRpZiAodHgtXHUwMDNlc3VibWl0dGVkX3VyYnMmIzQzOyYjNDM7IFx1MDAzYyBQVVJFTElGSV9VUkJfUkVUUllfTUFYKSB7XG4gMTA5Olx0XHRcdFx0ZGV2X2RiZyhwbGZ4bGNfdXJiX2Rldih1cmIpLCBcJiMzNDt1cmIgJXAgcmVzdWJtaXQgJWRcJiMzNDssIHVyYixcbiAxMTA6XHRcdFx0XHRcdHR4LVx1MDAzZXN1Ym1pdHRlZF91cmJzJiM0MzsmIzQzOyk7XG4gMTExOlx0XHRcdFx0Z290byByZXN1Ym1pdDtcbiAxMTI6XHRcdFx0fSBlbHNlIHtcbiAxMTM6XHRcdFx0XHRkZXZfZGJnKHBsZnhsY191cmJfZGV2KHVyYiksIFwmIzM0O3VyYiAlcCAgbWF4IHJlc3VibWl0cyByZWFjaGVkXCYjMzQ7LCB1cmIpO1xuIDExNDpcdFx0XHRcdHR4LVx1MDAzZXN1Ym1pdHRlZF91cmJzID0gMDtcbiAxMTU6XHRcdFx0XHRyZXR1cm47XG4gMTE2Olx0XHRcdH1cbiAxMTc6XHRcdH1cbiAxMTg6XHRcbiAxMTk6XHRcdGJ1ZmZlciA9IHVyYi1cdTAwM2V0cmFuc2Zlcl9idWZmZXI7XG4gMTIwOlx0XHRsZW5ndGggPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aDtcbiAxMjE6XHRcbiAxMjI6XHRcdGlmIChsZW5ndGggIT0gKFBMRl9NU0dfU1RBVFVTX09GRlNFVCAmIzQzOyAxKSkge1xuIDEyMzpcdFx0XHRpZiAodXNiLVx1MDAzZWluaXRpYWxpemVkIFx1MDAyNlx1MDAyNiB1c2ItXHUwMDNlbGlua191cClcbiAxMjQ6XHRcdFx0XHRoYW5kbGVfcnhfcGFja2V0KHVzYiwgYnVmZmVyLCBsZW5ndGgpO1xuIDEyNTpcdFx0XHRnb3RvIHJlc3VibWl0O1xuIDEyNjpcdFx0fVxuIDEyNzpcdFxuIDEyODpcdFx0c3RhdHVzID0gYnVmZmVyW1BMRl9NU0dfU1RBVFVTX09GRlNFVF07XG4gMTI5Olx0XG4gMTMwOlx0XHRzd2l0Y2ggKHN0YXR1cykge1xuIDEzMTpcdFx0Y2FzZSBTVEFUSU9OX0ZJRk9fQUxNT1NUX0ZVTExfTk9UX01FU1NBR0U6XG4gMTMyOlx0XHRcdGRldl9kYmcoXHUwMDI2dXNiLVx1MDAzZWludGYtXHUwMDNlZGV2LFxuIDEzMzpcdFx0XHRcdFwmIzM0O0ZJRk8gZnVsbCBub3QgcGFja2V0IHJlY2VpcHRcXG5cJiMzNDspO1xuIDEzNDpcdFx0XHR0eC1cdTAwM2VtYWNfZmlmb19mdWxsID0gMTtcbiAxMzU6XHRcdFx0Zm9yIChzaWR4ID0gMDsgc2lkeCBcdTAwM2MgTUFYX1NUQV9OVU07IHNpZHgmIzQzOyYjNDM7KVxuIDEzNjpcdFx0XHRcdHR4LVx1MDAzZXN0YXRpb25bc2lkeF0uZmxhZyB8PSBTVEFUSU9OX0ZJRk9fRlVMTF9GTEFHO1xuIDEzNzpcdFx0XHRicmVhaztcbiAxMzg6XHRcdGNhc2UgU1RBVElPTl9GSUZPX0FMTU9TVF9GVUxMX01FU1NBR0U6XG4gMTM5Olx0XHRcdGRldl9kYmcoXHUwMDI2dXNiLVx1MDAzZWludGYtXHUwMDNlZGV2LCBcJiMzNDtGSUZPIGZ1bGwgcGFja2V0IHJlY2VpcHRcXG5cJiMzNDspO1xuIDE0MDpcdFxuIDE0MTpcdFx0XHRmb3IgKHNpZHggPSAwOyBzaWR4IFx1MDAzYyBNQVhfU1RBX05VTTsgc2lkeCYjNDM7JiM0MzspXG4gMTQyOlx0XHRcdFx0dHgtXHUwMDNlc3RhdGlvbltzaWR4XS5mbGFnIFx1MDAyNj0gU1RBVElPTl9BQ1RJVkVfRkxBRztcbiAxNDM6XHRcbiAxNDQ6XHRcdFx0cGxmeGxjX3NlbmRfcGFja2V0X2Zyb21fZGF0YV9xdWV1ZSh1c2IpO1xuIDE0NTpcdFx0XHRicmVhaztcbiAxNDY6XHRcdGNhc2UgU1RBVElPTl9DT05ORUNUX01FU1NBR0U6XG4gMTQ3Olx0XHRcdHVzYi1cdTAwM2VsaW5rX3VwID0gMTtcbiAxNDg6XHRcdFx0ZGV2X2RiZyhcdTAwMjZ1c2ItXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwmIzM0O1NUX0NPTk5FQ1RfTVNHIHBhY2tldCByZWNlaXB0XFxuXCYjMzQ7KTtcbiAxNDk6XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5ODkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuIEhlcmUmIzM5O3MgaG93IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXQ6CgoqKkFuYWx5emluZyB0aGUgYGhhbmRsZV9yeF9wYWNrZXRgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdW5kZXJzdGFuZCB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbS4gV2hhdCBpcyBgaGFuZGxlX3J4X3BhY2tldGAgc3VwcG9zZWQgdG8gYmUgZG9pbmc/IE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHJlY2VpdmluZyBhbmQgcHJvY2Vzc2luZyBuZXR3b3JrIHBhY2tldHMuIEdpdmVuIHRoZSBuYW1lLCB0aGF0IGZlZWxzIGxpa2UgYSBzYWZlIGJldC4gQnV0IEkgbmVlZCB0byBnbyBkZWVwZXIgdGhhbiBqdXN0IGd1ZXNzaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCBoYW5kbGVzIHRob3NlIHBhY2tldHMuIFdoYXQgc3RlcHMgZG9lcyBpdCB0YWtlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgSSBjYW4gaW1tZWRpYXRlbHkgc3BvdCBiYXNlZCBvbiBpdHMgbmFtZSBhbG9uZT8gSSBuZWVkIHRvIHRoaW5rIGxpa2UgYW4gYXR0YWNrZXIgaGVyZS4gRG9lcyBpdCB2YWxpZGF0ZSB0aGUgc2l6ZSBvZiB0aGUgaW5jb21pbmcgcGFja2V0PyBEb2VzIGl0IGNoZWNrIGZvciBtYWxmb3JtZWQgZGF0YT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHBvaW50cyBvZiBvdmVyZmxvdz8gQmVmb3JlIEkgc3RhcnQgdG8gYW5hbHl6ZSwgSSYjMzk7bSBnb2luZyB0byBmb3JtdWxhdGUgYSBmZXcgcXVlc3Rpb25zIHRoYXQgbmVlZCBhbnN3ZXJpbmcuIEkmIzM5O2xsIG5lZWQgdG8ga25vdzoKKiAgIFdoYXQgaXMgdGhlIGlucHV0IHRvIHRoZSBmdW5jdGlvbj8KKiAgIFdoYXQgZG9lcyB0aGUgZnVuY3Rpb24gZG8gd2l0aCB0aGUgaW5wdXQ/CiogICBXaGF0IGFyZSB0aGUgb3V0cHV0cyBvZiB0aGUgZnVuY3Rpb24/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhbmRsZV9yeF9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYz0zNj12b2lkIHBsZnhsY19zZW5kX3BhY2tldF9mcm9tX2RhdGFfcXVldWUoc3RydWN0IHBsZnhsY191c2IgKnVzYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtNjItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM6NjM6c3RhdGljIHZvaWQgaGFuZGxlX3J4X3BhY2tldChzdHJ1Y3QgcGxmeGxjX3VzYiAqdXNiLCBjb25zdCB1OCAqYnVmZmVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jLTY0LVx0XHRcdCAgICAgdW5zaWduZWQgaW50IGxlbmd0aClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM9Njk9c3RhdGljIHZvaWQgcnhfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtMTIzLVx0XHRpZiAodXNiLVx1MDAzZWluaXRpYWxpemVkIFx1MDAyNlx1MDAyNiB1c2ItXHUwMDNlbGlua191cClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYzoxMjQ6XHRcdFx0aGFuZGxlX3J4X3BhY2tldCh1c2IsIGJ1ZmZlciwgbGVuZ3RoKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy0xMjUtXHRcdGdvdG8gcmVzdWJtaXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NjkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjoKCioqQW5hbHl6aW5nIHRoZSBSWCBQYWNrZXQgSGFuZGxpbmcgaW4gUHVyZUxpRmkgVVNCIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGBoYW5kbGVfcnhfcGFja2V0YCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgdGhlIGRyaXZlciByZWNlaXZlcyBhbmQgcHJvY2Vzc2VzIGRhdGEgY29taW5nIGluIG92ZXIgdGhlIFVTQiBjb25uZWN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRlYnVnIHBvdGVudGlhbCBpc3N1ZXMgb3Igb3B0aW1pemUgcGVyZm9ybWFuY2UgaW4gdGhpcyBQdXJlTGlGaSBzZXR1cC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBjb21tb24gdGhpbmdzIHRvIGxvb2sgZm9yOiBpbnRlcnJ1cHQgaGFuZGxpbmcsIGJ1ZmZlciBtYW5hZ2VtZW50LCBlcnJvciBjaGVja2luZywgYW5kIGRhdGEgdmFsaWRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBkcml2ZXIgZGVhbHMgd2l0aCBmcmFnbWVudGVkIHBhY2tldHMsIGFueSBjaGVja3N1bSB2ZXJpZmljYXRpb24sIGFuZCBob3cgaXQgaGFuZHMgdGhlIHByb2Nlc3NlZCBkYXRhIG9mZiB0byB0aGUgaGlnaGVyIG5ldHdvcmsgbGF5ZXJzLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIHN0YW5kYXJkIFVTQiBkZXZpY2UgaW50ZXJhY3Rpb24sIGxpa2UgcmVhZGluZyBmcm9tIGVuZHBvaW50cywgYW5kIHBlcmhhcHMgc29tZSBkZXZpY2Utc3BlY2lmaWMgY29tbWFuZHMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMuIExldCYjMzk7cyBzZWUgaG93IHdlbGwgaXQmIzM5O3MgYmVlbiBpbXBsZW1lbnRlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBpbXByb3ZlbWVudCBvciBvcHRpbWl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gIDYxOlx0fVxuICA2MjpcdFxuICA2MzpcdHN0YXRpYyB2b2lkIGhhbmRsZV9yeF9wYWNrZXQoc3RydWN0IHBsZnhsY191c2IgKnVzYiwgY29uc3QgdTggKmJ1ZmZlcixcbiAgNjQ6XHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpXG4gIDY1Olx0e1xuICA2NjpcdFx0cGxmeGxjX21hY19yeChwbGZ4bGNfdXNiX3RvX2h3KHVzYiksIGJ1ZmZlciwgbGVuZ3RoKTtcbiAgNjc6XHR9XG4gIDY4Olx0XG4gIDY5Olx0c3RhdGljIHZvaWQgcnhfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbiAgNzA6XHR7XG4gIDcxOlx0XHRzdHJ1Y3QgcGxmeGxjX3VzYl90eCAqdHg7XG4gIDcyOlx0XHRzdHJ1Y3QgcGxmeGxjX3VzYiAqdXNiO1xuICA3MzpcdFx0dW5zaWduZWQgaW50IGxlbmd0aDtcbiAgNzQ6XHRcdGNvbnN0IHU4ICpidWZmZXI7XG4gIDc1Olx0XHR1MTYgc3RhdHVzO1xuICA3NjpcdFx0dTggc2lkeDtcbiAgNzc6XHRcdGludCByO1xuICA3ODpcdFxuICA3OTpcdFx0aWYgKCF1cmIpIHtcbiAgODA6XHRcdFx0cHJfZXJyKFwmIzM0O3VyYiBpcyBOVUxMXFxuXCYjMzQ7KTtcbiAgODE6XHRcdFx0cmV0dXJuO1xuICA4MjpcdFx0fVxuICA4MzpcdFx0aWYgKCF1cmItXHUwMDNlY29udGV4dCkge1xuICA4NDpcdFx0XHRwcl9lcnIoXCYjMzQ7dXJiIGN0eCBpcyBOVUxMXFxuXCYjMzQ7KTtcbiAgODU6XHRcdFx0cmV0dXJuO1xuICA4NjpcdFx0fVxuICA4NzpcdFx0dXNiID0gdXJiLVx1MDAzZWNvbnRleHQ7XG4gIDg4Olx0XG4gIDg5Olx0XHRpZiAodXNiLVx1MDAzZWluaXRpYWxpemVkICE9IDEpIHtcbiAgOTA6XHRcdFx0cHJfZXJyKFwmIzM0O3VzYiBpcyBub3QgaW5pdGlhbGl6ZWRcXG5cJiMzNDspO1xuICA5MTpcdFx0XHRyZXR1cm47XG4gIDkyOlx0XHR9XG4gIDkzOlx0XG4gIDk0Olx0XHR0eCA9IFx1MDAyNnVzYi1cdTAwM2V0eDtcbiAgOTU6XHRcdHN3aXRjaCAodXJiLVx1MDAzZXN0YXR1cykge1xuICA5NjpcdFx0Y2FzZSAwOlxuICA5NzpcdFx0XHRicmVhaztcbiAgOTg6XHRcdGNhc2UgLUVTSFVURE9XTjpcbiAgOTk6XHRcdGNhc2UgLUVJTlZBTDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM1MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEwNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSWCBQYXRoIEJ1ZyBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgaG93IHRoZSByZWNlaXZlIHBhdGggaGFuZGxlcyBpbmNvbWluZyBVU0IgdHJhbnNmZXJzIGFuZCBwcm9jZXNzZXMgdGhlIGRhdGEuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXJlIHdlcmUgc2V2ZXJhbCByZWxhdGVkIHZ1bG5lcmFiaWxpdGllcywgbW9zdGx5IGxpbmtlZCB0byB1bmNoZWNrZWQgYXNzdW1wdGlvbnMgYWJvdXQgcGFja2V0IGxlbmd0aHMgYW5kIGJ1ZmZlciBwb2ludGVycywgd2hpY2ggY291bGQgbGVhZCB0byB2YXJpb3VzIGlzc3VlcyBmcm9tIG91dC1vZi1ib3VuZHMgcmVhZHMgdG8gaW5jb3JyZWN0IGZyYW1lIHByb2Nlc3NpbmcuCgpGaXJzdCwgaW4gYHJ4X3VyYl9jb21wbGV0ZWAsIHRoZSAmIzM0O2JlZm9yZSYjMzQ7IGNvZGUgaGFkIGEgbGVuZ3RoIGNhbGN1bGF0aW9uIHRoYXQgd2FzIGZ1bmRhbWVudGFsbHkgZmxhd2VkLiBJdCBhc3N1bWVkIGBsZW5ndGhgIGNvdWxkIGJlIHJlYWQgb3V0IGZyb20gYGJ1ZmZlciAmIzQzOyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cylgLCBidXQgdGhlIGltcGxlbWVudGF0aW9uIHdhcyBpbmNvcnJlY3Q6IGl0IHJlYWQgdXNpbmcgYGxlMzJfdG9fY3B1YCB3aGVuIGBiZTMyYCB3YXMgdXNlZC4gVGhlIGFjdHVhbCBwYWNrZXQgbGVuZ3RoIHdhcyBzdXBwb3NlZCB0byBiZSBpbiBgdXJiLSZndDthY3R1YWxfbGVuZ3RoYC4gVGhhdCYjMzk7cyBhIG1ham9yIHZ1bG5lcmFiaWxpdHkuIFRoZSBwYXRjaCBjb3JyZWN0bHkgY29ycmVjdHMgdGhpcyBhbmQgdXNlcyBgdXJiLSZndDthY3R1YWxfbGVuZ3RoYCBmb3IgbGVuZ3RoLiBUaGlzIGVuc3VyZXMgd2UmIzM5O3JlIG5vdCByZWFkaW5nIGdhcmJhZ2Ugb3IgYnlwYXNzaW5nIHBvdGVudGlhbCBzaXplIGNoZWNrcywgd2hpY2ggdGhlIGVhcmxpZXIgdmVyc2lvbiBkaWQuCgpTZWNvbmQsIHdpdGhpbiBgcGxmeGxjX21hY19yeGAsIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBtaXNzaW5nIGEgY3J1Y2lhbCBjaGVjazogY29uZmlybWluZyB0aGF0IHRoZSByZWNlaXZlZCBgbGVuZ3RoYCB3YXMgc3VmZmljaWVudCB0byBjb250YWluIHRoZSBiYXNpYyBoZWFkZXIgYW5kIHBheWxvYWQgbGVuZ3RoLiBXaXRob3V0IHRoYXQgaW5pdGlhbCBjaGVjaywgaXQgd2FzIHBvc3NpYmxlIGZvciB0aGUgY29kZSB0byBhdHRlbXB0IHRvIGRlcmVmZXJlbmNlIGEgYHN0cnVjdCByeF9zdGF0dXNgIHBvaW50ZXIgb3IgcmVhZCBhIHBheWxvYWQgbGVuZ3RoIGZyb20gYW4gaW52YWxpZCBtZW1vcnkgYWRkcmVzcywgb3BlbmluZyBpdCB1cCB0byBjcmFzaGluZyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIHVucHJlZGljdGFibGUgYmVoYXZpb3IuIFRoZSBmaXggYWRkcyB0aGUgY2hlY2sgYGxlbmd0aCAmbHQ7IHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSAmIzQzOyBzaXplb2YodTMyKWAsIHdoaWNoIGlzIGFic29sdXRlbHkgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGVyZSBpcyBlbm91Z2ggb2YgdGhlIGJ1ZmZlciB0byBldmVuIHBhcnNlIGJhc2ljIGRhdGEuCgpUaGlyZCwgYW5kIHBlcmhhcHMgbW9zdCBhbGFybWluZ2x5LCB0aGUgYHBsZnhsY19maWx0ZXJfYWNrYCBjYWxsIHdhcyBoYXBwZW5pbmcgKmJlZm9yZSogdGhlIGBidWZmZXJgIHBvaW50ZXIgaGFkIGJlZW4gYWR2YW5jZWQgdG8gcG9pbnQgdG8gdGhlIGFjdHVhbCA4MDIuMTEgZnJhbWUuIEVzc2VudGlhbGx5LCB0aGUgY29kZSB3YXMgdHJlYXRpbmcgYHJ4X3N0YXR1c2Agc3RydWN0dXJlIGFzIElFRUUgODAyLjExIGhlYWRlci4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGJ5IG1vdmluZyB0aGUgYGJ1ZmZlcmAgcG9pbnRlciAqYWZ0ZXIqIHJlYWRpbmcgYHJ4X3N0YXR1c2AgYW5kIGBwYXlsb2FkX2xlbmd0aGAuIFRoZSBwYXRjaCB0aGVuIG1ha2VzIE1UVSBjaGVja3MgYW5kIGNoZWNrcyB0aGF0IHRoZSBwYXlsb2FkIGxlbmd0aCBwbHVzIGhlYWRlcnMgaXMgbGVzcyB0aGFuIHRoZSB0b3RhbCBsZW5ndGgsIHRvIHByZXZlbnQgb3V0IG9mIGJvdW5kcyByZWFkcy4gVGhpcyBpcyBhbiBhYnNvbHV0ZWx5IGNyaXRpY2FsIGNvcnJlY3Rpb24gdG8gZW5zdXJlIHRoYXQgdGhlIHByb3BlciBmcmFtZSBpcyBiZWluZyBwcm9jZXNzZWQgYnkgdGhlIGZpbHRlcmluZyBmdW5jdGlvbi4KCkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgdGlnaHRlbmluZyB1cCBhIHNlcmllcyBvZiBsb29zZSBlbmRzIGluIHRoZSByZWNlaXZlIHBhdGguIEJ5IG1ha2luZyBpdCBzYWZlciwgd2UgYXJlIG5vdCBhbGxvd2luZyBkYXRhIHRvIGJlIG1pc3JlYWQsIGFuZCByZWR1Y2luZyB0aGUgbGlrZWxpaG9vZCBvZiBjcmFzaGVzIG9yIGluY29ycmVjdCBmcmFtZSBwcm9jZXNzaW5nLiBJIHdpbGwgZXhhbWluZSBgcGxmeGxjX2ZpbHRlcl9hY2tgIGZ1cnRoZXIgdG8gc2VlIHdoYXQgaXQmIzM5O3MgZG9pbmcgd2l0aCB0aGUgODAyLjExIGhlYWRlciwgYnV0IHRoaXMgc2V0IG9mIGZpeGVzIGlzIGRlZmluaXRlbHkgYSBtb3ZlIGluIHRoZSByaWdodCBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BsZnhsY19maWx0ZXJfYWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmM9Mjc4PXN0YXRpYyB2b2lkIHBsZnhsY19vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMtMzM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jOjMzODpzdGF0aWMgaW50IHBsZnhsY19maWx0ZXJfYWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcnhfaGRyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jLTMzOS1cdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmM9MzkzPWludCBwbGZ4bGNfbWFjX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqYnVmZmVyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYy00NDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmM6NDQxOlx0aWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsIFx1MDAyNnN0YXRzKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYy00NDItXHQgICAgIW1hYy1cdTAwM2VwYXNzX2N0cmwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzc0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYHBsZnhsY19maWx0ZXJfYWNrYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHBsZnhsY19maWx0ZXJfYWNrYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSnVzdCB0aGUgbmFtZSBhbG9uZSwgYGZpbHRlcl9hY2tgLCBzdWdnZXN0cyBhIHJvbGUgaW4gYWNrbm93bGVkZ2luZyBvciBwcm9jZXNzaW5nIGZpbHRlcmVkIGRhdGEuIFRoZSAmIzM0O3BsZnhsYyYjMzQ7IHByZWZpeOKApiB0aGF0IGhpbnRzIGF0IHRoZSBzcGVjaWZpYyBmaWx0ZXJpbmcgbWVjaGFuaXNtIG9yIG1vZHVsZSBpdCYjMzk7cyBwYXJ0IG9mOyBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIHRoZSBuYW1pbmcgY29udmVudGlvbnMgYW5kIGNvbnRleHQgd2l0aGluIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSBzdXNwZWN0IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBzb21lIGZvcm0gb2YgcGFja2V0IGxldmVsIGZpbHRlcmluZywgcG9zc2libHkgcmVsYXRlZCB0byBmbG93IGNvbnRyb2wgb3IgY29ubmVjdGlvbiBtYW5hZ2VtZW50LiBLbm93aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhcmVhcyB3aGVyZSBpdCBtaWdodCBiZSBleHBvc2VkIHRvIG1hbGljaW91cyBvciB1bmV4cGVjdGVkIGlucHV0cywgcGFydGljdWxhcmx5IGlmIGl0IGRlYWxzIHdpdGggYW55IHNvcnQgb2Ygc3RhdGUgbWFuYWdlbWVudC4gTGV0JiMzOTtzIHNlZSBob3cgaXQgaGFuZGxlcyB2YXJpb3VzIEFDSyB2YWx1ZXMgYW5kIGZsYWdzLiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgcGFzc2VkIGludG8gaXQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBsb29raW5nIGZvcj8gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBpZiB0aGlzIHRoaW5nIGlzIGFzIHJvYnVzdCBhcyBpdCBuZWVkcyB0byBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzODpcdHN0YXRpYyBpbnQgcGxmeGxjX2ZpbHRlcl9hY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpyeF9oZHIsXG4gMzM5Olx0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMpXG4gMzQwOlx0e1xuIDM0MTpcdFx0c3RydWN0IHBsZnhsY19tYWMgKm1hYyA9IHBsZnhsY19od19tYWMoaHcpO1xuIDM0MjpcdFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqcTtcbiAzNDM6XHRcdGludCBpLCBwb3NpdGlvbiA9IDA7XG4gMzQ0Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDM0NTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAzNDY6XHRcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiAzNDc6XHRcbiAzNDg6XHRcdGlmICghaWVlZTgwMjExX2lzX2FjayhyeF9oZHItXHUwMDNlZnJhbWVfY29udHJvbCkpXG4gMzQ5Olx0XHRcdHJldHVybiAwO1xuIDM1MDpcdFxuIDM1MTpcdFx0ZGV2X2RiZyhwbGZ4bGNfbWFjX2RldihtYWMpLCBcJiMzNDtBQ0sgUmVjZWl2ZWRcXG5cJiMzNDspO1xuIDM1MjpcdFxuIDM1MzpcdFx0LyogY29kZSBiYXNlZCBvbiB6eSBkcml2ZXIsIHRoaXMgbG9naWMgbWF5IG5lZWQgZml4ICovXG4gMzU0Olx0XHRxID0gXHUwMDI2bWFjLVx1MDAzZWFja193YWl0X3F1ZXVlO1xuIDM1NTpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gMzU2Olx0XG4gMzU3Olx0XHRza2JfcXVldWVfd2FsayhxLCBza2IpIHtcbiAzNTg6XHRcdFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKnR4X2hkcjtcbiAzNTk6XHRcbiAzNjA6XHRcdFx0cG9zaXRpb24mIzQzOyYjNDM7O1xuIDM2MTpcdFxuIDM2MjpcdFx0XHRpZiAobWFjLVx1MDAzZWFja19wZW5kaW5nIFx1MDAyNlx1MDAyNiBza2JfcXVldWVfaXNfZmlyc3QocSwgc2tiKSlcbiAzNjM6XHRcdFx0XHRjb250aW51ZTtcbiAzNjQ6XHRcdFx0aWYgKG1hYy1cdTAwM2VhY2tfcGVuZGluZyA9PSAwKVxuIDM2NTpcdFx0XHRcdGJyZWFrO1xuIDM2NjpcdFxuIDM2NzpcdFx0XHR0eF9oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YTtcbiAzNjg6XHRcdFx0aWYgKGxpa2VseShldGhlcl9hZGRyX2VxdWFsKHR4X2hkci1cdTAwM2VhZGRyMiwgcnhfaGRyLVx1MDAzZWFkZHIxKSkpIHtcbiAzNjk6XHRcdFx0XHRmb3VuZCA9IDE7XG4gMzcwOlx0XHRcdFx0YnJlYWs7XG4gMzcxOlx0XHRcdH1cbiAzNzI6XHRcdH1cbiAzNzM6XHRcbiAzNzQ6XHRcdGlmIChmb3VuZCkge1xuIDM3NTpcdFx0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBwb3NpdGlvbjsgaSYjNDM7JiM0MzspXG4gMzc2Olx0XHRcdFx0c2tiID0gX19za2JfZGVxdWV1ZShxKTtcbiAzNzc6XHRcdFx0aWYgKGkgPT0gcG9zaXRpb24pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMjkKCQkJCQkJCW91dHB1dDogMjE0CgkJCQkJCQl0aG91Z2h0czogNjk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQgb2YgdGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgS01TQU4gYW5kIEtBU0FOIHBlcnNwZWN0aXZlLCBJJiMzOTt2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCB0aGUgYHB1cmVsaWZpL3BsZnhsY2AgZHJpdmVyIGFuZCBmb2N1c2VzIG9uIGltcHJvdmluZyB0aGUgcm9idXN0bmVzcyBvZiBVU0IgUlggYnVmZmVyIGhhbmRsaW5nLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFib3V0IGFkZGluZyBtaXNzaW5nIGJvdW5kcyBhbmQgbGVuZ3RoIGNoZWNrcywgKmZpeGluZyogYnVmZmVyIG9mZnNldHMsIGFuZCBnZW5lcmFsbHkgc2hvcmluZyB1cCB0aGUgY29kZSYjMzk7cyByZXNpbGllbmNlIHRvIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzLgoKRmlyc3QsIEkgZXhhbWluZWQgaXQgZm9yIHBvdGVudGlhbCBLTVNBTiByZWQgZmxhZ3MuIEkgbG9va2VkIGZvciBpbnN0YW5jZXMgd2hlcmUga2VybmVsIHN0cnVjdHVyZXMgd2VyZSBiZWluZyBwYXNzZWQgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIGJ1dCBJIHNlZSBub25lLiBUaGUgZHJpdmVyIGRlYWxzIHdpdGggVVNCIGRhdGEgKGB1cmItJmd0O3RyYW5zZmVyX2J1ZmZlcmApLCBhbmQgaXQmIzM5O3MgYmVpbmcgZm9yd2FyZGVkIHRvIGBtYWM4MDIxMWAgdmlhIGBpZWVlODAyMTFfcnhfaXJxc2FmZSgpYC4gSW1wb3J0YW50bHksIGFueXRoaW5nIHJlbGF0ZWQgdG8gYHN0YXRzYCBpcyBleHBsaWNpdGx5IHplcm9lZCBvdXQgd2l0aCBgbWVtc2V0YC4gTm8gZGljZSBvbiB0aGUgdW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlLgoKTmV4dCwgSSBsb29rZWQgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBZ2Fpbiwgbm90aGluZy4gVGhlIGxlbmd0aHMgYXJlIGNvbWluZyBmcm9tIHRoZSBVU0IgY29yZSAoYHVyYi0mZ3Q7YWN0dWFsX2xlbmd0aGApLCBhbmQgYGJ1ZmZlcmAgaXMgdGhlIGB1cmItJmd0O3RyYW5zZmVyX2J1ZmZlcmAuIEFsbCBsb2NhbHMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEl0JiMzOTtzIGNsZWFuLgoKVGhpcmRseSwgSSBjaGVja2VkIGZvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBidXQgdGhpcyBpc24mIzM5O3QgdGhlIGNhc2UgaGVyZS4KCkZvdXJ0aCwgSSBjaGVja2VkIGZvciBjaGFuZ2VzIGludm9sdmluZyBidWZmZXIgbWFuaXB1bGF0aW9ucywgbGVuZ3RocywgYW5kIGFueSBsb2dpYyB0aGF0IG1pZ2h0IHBlcm1pdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLiBJbiBmYWN0LCB0aGlzIHBhdGNoIGlzICphZGRpbmcqIGJvdW5kcyBjaGVja3M7IHByZXZlbnRpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycyEgU3BlY2lmaWNhbGx5LCBuZXcgY2hlY2tzIG9uIGBsZW5ndGhgIGFyZSBhZGRlZCB0byBwcmV2ZW50IHRoZSBvdXQtb2YtYm91bmRzIHJlYWRzLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGFsbCBhc3BlY3RzLiBJIGNvbmZpcm1lZCB0aGF0IGByeF91cmJfY29tcGxldGVgIHVzZXMgYHVyYi0mZ3Q7YWN0dWFsX2xlbmd0aGAgY29ycmVjdGx5LCBub3QgYXR0ZW1wdGluZyB0byBpbnRlcnByZXQgYnl0ZXMgYXMgYSBsZW5ndGguIGBwbGZ4bGNfbWFjX3J4YCBjYXJlZnVsbHkgY2hlY2tzIGJ1ZmZlciBsZW5ndGggYWdhaW5zdCBoZWFkZXIgc2l6ZXMsIE1UVSwgYW5kIHRvdGFsIHBhY2tldCBsZW5ndGggYmVmb3JlIGNhbGxpbmcgYHBsZnhsY19maWx0ZXJfYWNrYC4gVGhpcyBmaXhlcyBidWdzLgoKTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgaXMgKm5vdCogYSBLTVNBTiBpc3N1ZS4gVGhlIGJ1Z3MgdGhhdCBhcmUgYmVpbmcgZml4ZWQgYXJlIGJvdW5kcyBjaGVjayBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb24gVVNCIFVSQiBidWZmZXJzLCBwcmVjaXNlbHkgdGhlIGtpbmRzIG9mIG1lbW9yeSBzYWZldHkgY29uY2VybnMgdGhhdCBLQVNBTiBleGNlbHMgYXQgZGV0ZWN0aW5nLiBLTVNBTiwgaW4gdGhpcyBjb250ZXh0LCBpcyB1bm5lY2Vzc2FyeS4gVGhlcmUmIzM5O3Mgbm8gaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBzdGFjay9oZWFwIHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoZSBgc3RhdHNgIHN0cnVjdHVyZSBpcyBiZWluZyB6ZXJvZWQuCgpTbywgZnJvbSBteSBwZXJzcGVjdGl2ZSwgTmVlZHNLTVNBTiBzaG91bGQgYWJzb2x1dGVseSBiZSBgZmFsc2VgLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcGFja2V0IHZhbGlkYXRpb24gaW4gdGhlIFB1cmVMaUZpIChwbGZ4bGMpIHdpcmVsZXNzIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCB1c2VzIGB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aGAgcmF0aGVyIHRoYW4gYW4gdW52YWxpZGF0ZWQgZmllbGQgZnJvbSB0aGUgYnVmZmVyLCBhZGRzIG1pbmltdW0gbGVuZ3RoIGNoZWNrcyBiZWZvcmUgcGFyc2luZyBgcnhfc3RhdHVzYCBhbmQgcGF5bG9hZCBsZW5ndGgsIHZlcmlmaWVzIHRoYXQgdGhlIHBheWxvYWQgbGVuZ3RoIGRvZXMgbm90IGV4Y2VlZCB0aGUgVVJCIGJ1ZmZlciBsZW5ndGgsIGFuZCBmaXhlcyB0aGUgYnVmZmVyIG9mZnNldCBwYXNzZWQgdG8gYHBsZnhsY19maWx0ZXJfYWNrKClgLlxuXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3MgaW5wdXQgdmFsaWRhdGlvbiBhbmQgb3V0LW9mLWJvdW5kcyBidWZmZXIgb3ZlcnJlYWRzLCB3aGljaCBmYWxsIHNxdWFyZWx5IHVuZGVyIEtBU0FOJiMzOTtzIGRvbWFpbi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlIHJlYWRzLCBkb2VzIG5vdCBhbHRlciBzdHJ1Y3R1cmUgcGFkZGluZy9pbml0aWFsaXphdGlvbiBzZW50IHRvIHVzZXJzcGFjZSwgYW5kIGFsbCBsb2NhbCBzdHJ1Y3R1cmVzIChzdWNoIGFzIGBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0c2ApIGFyZSBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXRgLiBUaHVzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBhY2tldCB2YWxpZGF0aW9uIGluIHRoZSBQdXJlTGlGaSAocGxmeGxjKSB3aXJlbGVzcyBkcml2ZXIuIFNwZWNpZmljYWxseSwgaXQgdXNlcyBgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGhgIHJhdGhlciB0aGFuIGFuIHVudmFsaWRhdGVkIGZpZWxkIGZyb20gdGhlIGJ1ZmZlciwgYWRkcyBtaW5pbXVtIGxlbmd0aCBjaGVja3MgYmVmb3JlIHBhcnNpbmcgYHJ4X3N0YXR1c2AgYW5kIHBheWxvYWQgbGVuZ3RoLCB2ZXJpZmllcyB0aGF0IHRoZSBwYXlsb2FkIGxlbmd0aCBkb2VzIG5vdCBleGNlZWQgdGhlIFVSQiBidWZmZXIgbGVuZ3RoLCBhbmQgZml4ZXMgdGhlIGJ1ZmZlciBvZmZzZXQgcGFzc2VkIHRvIGBwbGZ4bGNfZmlsdGVyX2FjaygpYC5cblxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGlucHV0IHZhbGlkYXRpb24gYW5kIG91dC1vZi1ib3VuZHMgYnVmZmVyIG92ZXJyZWFkcywgd2hpY2ggZmFsbCBzcXVhcmVseSB1bmRlciBLQVNBTiYjMzk7cyBkb21haW4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZSByZWFkcywgZG9lcyBub3QgYWx0ZXIgc3RydWN0dXJlIHBhZGRpbmcvaW5pdGlhbGl6YXRpb24gc2VudCB0byB1c2Vyc3BhY2UsIGFuZCBhbGwgbG9jYWwgc3RydWN0dXJlcyAoc3VjaCBhcyBgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHNgKSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBgbWVtc2V0YC4gVGh1cywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjUzOjI3LjI3MDAwNjY0NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNDgyMjQ3NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBMRlhMQ1wiLFxuICAgIFwiV0xBTl9WRU5ET1JfUFVSRUxJRklcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJXTEFOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGxmeGxjX21hY19yeFwiLFxuICAgIFwicnhfdXJiX2NvbXBsZXRlXCIsXG4gICAgXCJoYW5kbGVfcnhfcGFja2V0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwYWNrZXQgdmFsaWRhdGlvbiBpbiB0aGUgUHVyZUxpRmkgKHBsZnhsYykgd2lyZWxlc3MgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0IHVzZXMgYHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aGAgcmF0aGVyIHRoYW4gYW4gdW52YWxpZGF0ZWQgZmllbGQgZnJvbSB0aGUgYnVmZmVyLCBhZGRzIG1pbmltdW0gbGVuZ3RoIGNoZWNrcyBiZWZvcmUgcGFyc2luZyBgcnhfc3RhdHVzYCBhbmQgcGF5bG9hZCBsZW5ndGgsIHZlcmlmaWVzIHRoYXQgdGhlIHBheWxvYWQgbGVuZ3RoIGRvZXMgbm90IGV4Y2VlZCB0aGUgVVJCIGJ1ZmZlciBsZW5ndGgsIGFuZCBmaXhlcyB0aGUgYnVmZmVyIG9mZnNldCBwYXNzZWQgdG8gYHBsZnhsY19maWx0ZXJfYWNrKClgLlxcblxcblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBvdXQtb2YtYm91bmRzIGJ1ZmZlciBvdmVycmVhZHMsIHdoaWNoIGZhbGwgc3F1YXJlbHkgdW5kZXIgS0FTQU4ncyBkb21haW4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZSByZWFkcywgZG9lcyBub3QgYWx0ZXIgc3RydWN0dXJlIHBhZGRpbmcvaW5pdGlhbGl6YXRpb24gc2VudCB0byB1c2Vyc3BhY2UsIGFuZCBhbGwgbG9jYWwgc3RydWN0dXJlcyAoc3VjaCBhcyBgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHNgKSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBgbWVtc2V0YC4gVGh1cywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHJlY2VwdGlvbiBhbmQgbGVuZ3RoIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIFB1cmVMaUZpIFVTQiB3aXJlbGVzcyBkcml2ZXIgKHBsZnhsY19tYWNfcnggYW5kIHJ4X3VyYl9jb21wbGV0ZSkuIFVTQiBuZXR3b3JrIGRyaXZlcnMgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgdXNpbmcgVVNCIHJhdy1nYWRnZXQgLyBkdW1teV9oY2QgZW11bGF0aW9uLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIHZlcmlmeSB0aGUgbmV3IGJvdW5kcyBjaGVja3MgYW5kIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIG9uIG1hbGZvcm1lZCBVU0IgZnJhbWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1MzoyNy4yNzAwMTcyMzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNzI0OTQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI3MmY1NThiYjlhNzI1ZjIwNDAyMGJmOTMzMTNmNzYzY2JlNDNiNDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAwNjo1MzoyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmNcXG5pbmRleCBhOTAwNDIxNzUzYWM2Li5kMjY5MGNjZTc5NmE4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuY1xcbkBAIC00MDcsNiArNDA3LDkgQEAgaW50IHBsZnhsY19tYWNfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpidWZmZXIsXFxuIFxcdGlmICghbWFjLVxcdTAwM2V2aWYpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0aWYgKGxlbmd0aCBcXHUwMDNjIHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSArIHNpemVvZih1MzIpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdHN0YXR1cyA9IChzdHJ1Y3Qgcnhfc3RhdHVzICopYnVmZmVyO1xcbiBcXG4gXFx0bWVtc2V0KFxcdTAwMjZzdGF0cywgMCwgc2l6ZW9mKHN0YXRzKSk7XFxuQEAgLTQyNSwxOSArNDI4LDE5IEBAIGludCBwbGZ4bGNfbWFjX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqYnVmZmVyLFxcbiBcXG4gXFx0bWFjLVxcdTAwM2VjcmNfZXJyb3JzID0gYmU2NF90b19jcHUoc3RhdHVzLVxcdTAwM2VjcmNfZXJyb3JfY291bnQpO1xcbiBcXG4tXFx0LyogVE9ETyBiYWQgZnJhbWUgY2hlY2sgZm9yIENSQyBlcnJvciovXFxuLVxcdGlmIChwbGZ4bGNfZmlsdGVyX2FjayhodywgKHN0cnVjdCBpZWVlODAyMTFfaGRyICopYnVmZmVyLCBcXHUwMDI2c3RhdHMpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhbWFjLVxcdTAwM2VwYXNzX2N0cmwpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4gXFx0YnVmZmVyICs9IHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKTtcXG4gXFx0cGF5bG9hZF9sZW5ndGggPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyKTtcXG4rXFx0YnVmZmVyICs9IHNpemVvZih1MzIpO1xcbiBcXG4tXFx0aWYgKHBheWxvYWRfbGVuZ3RoIFxcdTAwM2UgMTU2MCkge1xcbitcXHRpZiAocGF5bG9hZF9sZW5ndGggXFx1MDAzZSAxNTYwIHx8XFxuK1xcdCAgICBwYXlsb2FkX2xlbmd0aCArIHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSArIHNpemVvZih1MzIpIFxcdTAwM2UgbGVuZ3RoKSB7XFxuIFxcdFxcdGRldl9lcnIocGxmeGxjX21hY19kZXYobWFjKSwgXFxcIiBcXHUwMDNlIE1UVSAldVxcXFxuXFxcIiwgcGF5bG9hZF9sZW5ndGgpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbi1cXHRidWZmZXIgKz0gc2l6ZW9mKHUzMik7XFxuK1xcbitcXHRpZiAocGxmeGxjX2ZpbHRlcl9hY2soaHcsIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWJ1ZmZlciwgXFx1MDAyNnN0YXRzKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW1hYy1cXHUwMDNlcGFzc19jdHJsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGZjID0gZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopYnVmZmVyKTtcXG4gXFx0bmVlZF9wYWRkaW5nID0gaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSBeIGllZWU4MDIxMV9oYXNfYTQoZmMpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNcXG5pbmRleCA2ZDI0MDg2ZWI4YjdhLi5jMzNiOTEzMWJmZGRlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuY1xcbkBAIC0xMTcsMTAgKzExNyw5IEBAIHN0YXRpYyB2b2lkIHJ4X3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXFxuIFxcdH1cXG4gXFxuIFxcdGJ1ZmZlciA9IHVyYi1cXHUwMDNldHJhbnNmZXJfYnVmZmVyO1xcbi1cXHRsZW5ndGggPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKShidWZmZXIgKyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykpKVxcbi1cXHRcXHQgKyBzaXplb2YodTMyKTtcXG4rXFx0bGVuZ3RoID0gdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoO1xcbiBcXG4tXFx0aWYgKHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aCAhPSAoUExGX01TR19TVEFUVVNfT0ZGU0VUICsgMSkpIHtcXG4rXFx0aWYgKGxlbmd0aCAhPSAoUExGX01TR19TVEFUVVNfT0ZGU0VUICsgMSkpIHtcXG4gXFx0XFx0aWYgKHVzYi1cXHUwMDNlaW5pdGlhbGl6ZWQgXFx1MDAyNlxcdTAwMjYgdXNiLVxcdTAwM2VsaW5rX3VwKVxcbiBcXHRcXHRcXHRoYW5kbGVfcnhfcGFja2V0KHVzYiwgYnVmZmVyLCBsZW5ndGgpO1xcbiBcXHRcXHRnb3RvIHJlc3VibWl0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1MzoyNy45Nzc4ODY0NjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ0MTg4MDEzMDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBMRlhMQ1wiLFxuICAgIFwiV0xBTl9WRU5ET1JfUFVSRUxJRklcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJXTEFOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGxmeGxjX21hY19yeFwiLFxuICAgIFwicnhfdXJiX2NvbXBsZXRlXCIsXG4gICAgXCJoYW5kbGVfcnhfcGFja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHJlY2VwdGlvbiBhbmQgbGVuZ3RoIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIFB1cmVMaUZpIFVTQiB3aXJlbGVzcyBkcml2ZXIgKHBsZnhsY19tYWNfcnggYW5kIHJ4X3VyYl9jb21wbGV0ZSkuIFVTQiBuZXR3b3JrIGRyaXZlcnMgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgdXNpbmcgVVNCIHJhdy1nYWRnZXQgLyBkdW1teV9oY2QgZW11bGF0aW9uLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIHZlcmlmeSB0aGUgbmV3IGJvdW5kcyBjaGVja3MgYW5kIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIG9uIG1hbGZvcm1lZCBVU0IgZnJhbWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3MmY1NThiYjlhNzI1ZjIwNDAyMGJmOTMzMTNmNzYzY2JlNDNiNDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA2OjUzOjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jXG5pbmRleCBhOTAwNDIxNzUzYWM2Li5kMjY5MGNjZTc5NmE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmNcbkBAIC00MDcsNiArNDA3LDkgQEAgaW50IHBsZnhsY19tYWNfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpidWZmZXIsXG4gXHRpZiAoIW1hYy1cdTAwM2V2aWYpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0aWYgKGxlbmd0aCBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpICsgc2l6ZW9mKHUzMikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0c3RhdHVzID0gKHN0cnVjdCByeF9zdGF0dXMgKilidWZmZXI7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c3RhdHMsIDAsIHNpemVvZihzdGF0cykpO1xuQEAgLTQyNSwxOSArNDI4LDE5IEBAIGludCBwbGZ4bGNfbWFjX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqYnVmZmVyLFxuIFxuIFx0bWFjLVx1MDAzZWNyY19lcnJvcnMgPSBiZTY0X3RvX2NwdShzdGF0dXMtXHUwMDNlY3JjX2Vycm9yX2NvdW50KTtcbiBcbi1cdC8qIFRPRE8gYmFkIGZyYW1lIGNoZWNrIGZvciBDUkMgZXJyb3IqL1xuLVx0aWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsIFx1MDAyNnN0YXRzKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhbWFjLVx1MDAzZXBhc3NfY3RybClcbi1cdFx0cmV0dXJuIDA7XG4tXG4gXHRidWZmZXIgKz0gc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpO1xuIFx0cGF5bG9hZF9sZW5ndGggPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyKTtcbitcdGJ1ZmZlciArPSBzaXplb2YodTMyKTtcbiBcbi1cdGlmIChwYXlsb2FkX2xlbmd0aCBcdTAwM2UgMTU2MCkge1xuK1x0aWYgKHBheWxvYWRfbGVuZ3RoIFx1MDAzZSAxNTYwIHx8XG4rXHQgICAgcGF5bG9hZF9sZW5ndGggKyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykgKyBzaXplb2YodTMyKSBcdTAwM2UgbGVuZ3RoKSB7XG4gXHRcdGRldl9lcnIocGxmeGxjX21hY19kZXYobWFjKSwgXCIgXHUwMDNlIE1UVSAldVxcblwiLCBwYXlsb2FkX2xlbmd0aCk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuLVx0YnVmZmVyICs9IHNpemVvZih1MzIpO1xuK1xuK1x0aWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsIFx1MDAyNnN0YXRzKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhbWFjLVx1MDAzZXBhc3NfY3RybClcbitcdFx0cmV0dXJuIDA7XG4gXG4gXHRmYyA9IGdldF91bmFsaWduZWQoKF9fbGUxNiAqKWJ1ZmZlcik7XG4gXHRuZWVkX3BhZGRpbmcgPSBpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpIF4gaWVlZTgwMjExX2hhc19hNChmYyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jXG5pbmRleCA2ZDI0MDg2ZWI4YjdhLi5jMzNiOTEzMWJmZGRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNcbkBAIC0xMTcsMTAgKzExNyw5IEBAIHN0YXRpYyB2b2lkIHJ4X3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gXHR9XG4gXG4gXHRidWZmZXIgPSB1cmItXHUwMDNldHJhbnNmZXJfYnVmZmVyO1xuLVx0bGVuZ3RoID0gbGUzMl90b19jcHUoKihfX2xlMzIgKikoYnVmZmVyICsgc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpKSlcbi1cdFx0ICsgc2l6ZW9mKHUzMik7XG4rXHRsZW5ndGggPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aDtcbiBcbi1cdGlmICh1cmItXHUwMDNlYWN0dWFsX2xlbmd0aCAhPSAoUExGX01TR19TVEFUVVNfT0ZGU0VUICsgMSkpIHtcbitcdGlmIChsZW5ndGggIT0gKFBMRl9NU0dfU1RBVFVTX09GRlNFVCArIDEpKSB7XG4gXHRcdGlmICh1c2ItXHUwMDNlaW5pdGlhbGl6ZWQgXHUwMDI2XHUwMDI2IHVzYi1cdTAwM2VsaW5rX3VwKVxuIFx0XHRcdGhhbmRsZV9yeF9wYWNrZXQodXNiLCBidWZmZXIsIGxlbmd0aCk7XG4gXHRcdGdvdG8gcmVzdWJtaXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1MzoyNy45Nzc4ODgxODNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjUyODEwNzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHVyZUxpRmkgVVNCIERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgZm9yIHJlYWNoYWJpbGl0eSBhbmQgZnV6emFiaWxpdHkuIEZpcnN0LCB0aGUgdG91Y2hlZCBmaWxlcyBhcmUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuY2AgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNgLiBHb29kLCB0aGF0J3MgYSBzdGFydGluZyBwb2ludC4gTm93IEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkcml2ZXIgaXRzZWxmIOKAkyBob3cgaXQgd29ya3MsIGl0cyBjb25maWd1cmF0aW9uLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIFVTQi4gVGltZSB0byBwdWxsIHVwIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCBhbmQgaW5zcGVjdC5cblxuQWhhLCBpdCdzIHRoZSBgcGxmeGxjYCBkcml2ZXIsIGEgUHVyZUxpRmkgVVNCIHdpcmVsZXNzIGRyaXZlciwgYXMgZXhwZWN0ZWQuIFRoaXMgbWFrZXMgbWUgY29uc2lkZXIgU3l6a2FsbGVyJ3MgVVNCIHJhdyBnYWRnZXQgZW11bGF0aW9uLiBTaW5jZSBpdOKAmXMgYSBVU0IgZHJpdmVyLCBpdCAqbWlnaHQqIGJlIGZ1enphYmxlIHRocm91Z2ggYHN5el91c2JfY29ubmVjdGAsIGB2aGNpX2hjZGAsIGBkdW1teV9oY2RgLCBvciBgcmF3LWdhZGdldGAuIEJ1dCBjYW4gU3l6a2FsbGVyIHJlYWxpc3RpY2FsbHkgZnV6eiBQdXJlTGlGaSBVU0IgZGV2aWNlcyB1c2luZyB0aGlzIHBhcnRpY3VsYXIgcmF3IGdhZGdldCBlbXVsYXRpb24/IFRoYXTigJlzIHRoZSBjcml0aWNhbCBxdWVzdGlvbi5cblxuTm93IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjYCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIG1vcmUgY29uY3JldGUgaWRlYSBvZiBpdHMgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1MzozNS42MzA3MDIyN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDgwNDg1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQTEZYTENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19QTEZYTEMpXFx0XFx0Oj0gcGxmeGxjL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvS2NvbmZpZzoyOmNvbmZpZyBQTEZYTENcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJwdXJlTGlGaSBYLCBYTCwgWEMgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfUExGWExDKVxcdDo9IHBsZnhsYy5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL01ha2VmaWxlLTMtcGxmeGxjLW9ianMgXFx0XFx0Kz0gY2hpcC5vIGZpcm13YXJlLm8gdXNiLm8gbWFjLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9jaGlwLmgtNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvY2hpcC5oOjY6I2lmbmRlZiBQTEZYTENfQ0hJUF9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaDo3OiNkZWZpbmUgUExGWExDX0NISVBfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9jaGlwLmgtOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9jaGlwLmg9MTg9ZW51bSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaDoxOTpcXHRQTEZYTENfUkFESU9fT0ZGID0gMCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvY2hpcC5oOjIwOlxcdFBMRlhMQ19SQURJT19PTiA9IDEsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaC0yMS19O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaD02ND1zdGF0aWMgaW5saW5lIHZvaWQgcGxmeGxjX21jX2FkZF9hbGwoc3RydWN0IHBsZnhsY19tY19oYXNoICpoYXNoKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaC02OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvY2hpcC5oOjcwOiNlbmRpZiAvKiBQTEZYTENfQ0hJUF9IICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmgtNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmg6NjojaWZuZGVmIFBMRlhMQ19NQUNfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuaDo3OiNkZWZpbmUgUExGWExDX01BQ19IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5oLTgtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmg9MTgyPWludCBwbGZ4bGNfcmVzdG9yZV9zZXR0aW5ncyhzdHJ1Y3QgcGxmeGxjX21hYyAqbWFjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmgtMTgzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuaDoxODQ6I2VuZGlmIC8qIFBMRlhMQ19NQUNfSCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jPTU3OT1zdGF0aWMgaW50IHByb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jLTY0Ny1cXHRtc2xlZXAoUExGX01TTEVFUF9USU1FKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM6NjQ4OlxcdHIgPSBwbGZ4bGNfY2hpcF9zd2l0Y2hfcmFkaW8oY2hpcCwgUExGWExDX1JBRElPX09OKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtNjQ5LVxcdGlmIChyIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5oLTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5oOjY6I2lmbmRlZiBQTEZYTENfVVNCX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmg6NzojZGVmaW5lIFBMRlhMQ19VU0JfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuaC04LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5oPTE5ND1pbnQgcGxmeGxjX3VwbG9hZF9tYWNfYW5kX3NlcmlhbChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuaC0xOTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5oOjE5ODojZW5kaWYgLyogUExGWExDX1VTQl9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjUzOjM1LjY5NTUxMjY5OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MDkzODk1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQdXJlTGlGaSBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9LY29uZmlnYCBmaWxlLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdXN1YWwgc3VzcGVjdHM6IG9wdGlvbnMgcmVsYXRlZCB0byBlbmFibGluZy9kaXNhYmxpbmcgdGhlIFB1cmVMaUZpIFBMRlhMQyBkcml2ZXIgaXRzZWxmLCBwZXJoYXBzIGdyYW51bGFyaXR5IGF0IGEgZmVhdHVyZSBsZXZlbCAoZS5nLiwgc3BlY2lmaWMgUEhZIGxheWVyIGZ1bmN0aW9ucywgZGVidWdnaW5nIGFpZHMsIG9yIHBvd2VyIG1hbmFnZW1lbnQgY29udHJvbHMpLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBidWlsZCBjb25maWd1cmF0aW9ucyBhbmQgaG93IHRoZSBkcml2ZXIgaW50ZWdyYXRlcyB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgc3RhY2suIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBidWlsZCBzeXN0ZW0gaGFuZGxlcyBpbmNsdXNpb24vZXhjbHVzaW9uIGJhc2VkIG9uIHRhcmdldCBhcmNoaXRlY3R1cmUsIGtlcm5lbCB2ZXJzaW9uLCBvciBvdGhlciBkZXBlbmRlbmNpZXMuIEFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGNvbXBvbmVudHMgYXJlIG9mIHBhcnRpY3VsYXIgaW50ZXJlc3QuIEknbSBhbHNvIGtlZW4gdG8gc3BvdCBhbnkgdW51c3VhbCBvciBub24tc3RhbmRhcmQgS2NvbmZpZyB0cmlja3MgdGhhdCB0aGUgUHVyZUxpRmkgZm9sa3MgbWlnaHQgaGF2ZSBlbXBsb3llZC4gVWx0aW1hdGVseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhYmlsaXR5IG9mIHRoaXMgZHJpdmVyIGFuZCBob3cgZWFzeSBpdCBpcyB0byBjdXN0b21pemUgZm9yIHNwZWNpZmljIGRlcGxveW1lbnQgc2NlbmFyaW9zLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyODQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1MzozOC4xMDQ5MDYyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBQTEZYTENcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJwdXJlTGlGaSBYLCBYTCwgWEMgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjExIFxcdTAwMjZcXHUwMDI2IFVTQlxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBwdXJlTGlGaSBMaUZpIFVTQiB3aXJlbGVzc1xcbiAgIDc6XFx0XFx0ICAgYWRhcHRlcnMuIFRoZSBwdXJlTGlGaSBYLCBYTCwgWEMgVVNCIGRldmljZXMgYXJlIGJhc2VkIG9uXFxuICAgODpcXHRcXHQgICA4MDIuMTEgT0ZETSBQSFkgYnV0IHVzZXMgbGlnaHQgYXMgdGhlIHRyYW5zbWlzc2lvbiBtZWRpdW0uXFxuICAgOTpcXHRcXHQgICBUaGUgZHJpdmVyIHN1cHBvcnRzIGNvbW1vbiA4MDIuMTEgZW5jcnlwdGlvbi9hdXRoZW50aWNhdGlvblxcbiAgMTA6XFx0XFx0ICAgbWV0aG9kcyBpbmNsdWRpbmcgT3BlbiwgV1BBLCBXUEEyLVBlcnNvbmFsIGFuZFxcbiAgMTE6XFx0XFx0ICAgV1BBMi1FbnRlcnByaXNlICg4MDIuMVgpLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgbSBoZXJlLiBUaGUgbW9kdWxlIHdpbGxcXG4gIDE0OlxcdFxcdCAgIGJlIGNhbGxlZCBwbGZ4bGMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjUzOjM4LjEwNTAwNjQyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU3MzU4MDczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2NvbmZpZyBEaXZlIGZvciBQdXJlTGlGaSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJSaWdodCwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFB1cmVMaUZpIGRyaXZlciBjb25maWd1cmF0aW9uLlwiIFRoZSBpbW1lZGlhdGUgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgc3RyYWlnaHQgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZS4gVGhpcyBmaWxlIGlzLCBvZiBjb3Vyc2UsIHRoZSBoZWFydCBvZiBkZWZpbmluZyB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIHdoaWNoIGRlcGVuZGVuY2llcyBuZWVkIHRvIGJlIG1ldCwgYW5kIGhvdyB0aGUgdXNlciB3aWxsIGludGVyYWN0IHdpdGggdGhlIGRyaXZlciBhdCBidWlsZCB0aW1lLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCB2YXJpYWJsZXMsIHdoaWNoIGZlYXR1cmVzIGFyZSBjb25kaXRpb25hbCwgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGludGVncmF0ZXMgaW50byB0aGUgd2lkZXIgbmV0d29yayBzdGFjay4gVGltZSB0byBwYXJzZSB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXM7IEFyZSB0aGVyZSBhbnkgdW51c3VhbCBsaWJyYXJ5IHJlcXVpcmVtZW50cyBJIHNob3VsZCBrbm93IGFib3V0PyBBcmUgdGhlIGRldmljZSdzIGRlZmF1bHQgc2V0dGluZ3MgcHJvcGVybHkgZGVmaW5lZCBoZXJlPyBIb3cgY2FuIEkgZW5zdXJlIHByb3BlciBidWlsZCBjb21wYXRpYmlsaXR5IGZvciBhbGwgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlcz8gTm8gbmVlZCBmb3IgYSBkZWVwLWRpdmUgeWV0LCBidXQgYSBxdWljayBzY2FuIHdpbGwgdGVsbCBtZSBpZiB0aGVyZSBhcmUgYW55IGltbWVkaWF0ZSByZWQgZmxhZ3MsIG9yIGFueSBvcHRpb25zIHRoYXQgc2VlbSBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBteSBjdXJyZW50IHRhc2suIEknbSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZTogSXMgaXQgdXNpbmcgc3RhbmRhcmQgbmV0d29yayBpbnRlcmZhY2VzPyBIb3cncyB0aGUgZmlybXdhcmUgaGFuZGxpbmcgY29uZmlndXJlZD8gQXJlIHRoZXJlIGFueSBleHBlcmltZW50YWwgb3IgZGVidWcgb3B0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQW5kIG1vc3QgaW1wb3J0YW50bHksIGNhbiBJIGdldCB0aGlzIGRyaXZlciB0byBkbyB3aGF0IEkgbmVlZCBpdCB0byBkbz8gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSBteSByb2FkbWFwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODQ1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1Mzo0Mi42Nzg1OTAwOTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyMDQyODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB1cmVsaWZpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWc9MzE9c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnOjMyOnNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTMzLXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmFsaW5rL0tjb25maWdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfV0xBTl9WRU5ET1JfTlhQKSArPSBueHAvXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX1BVUkVMSUZJKSArPSBwdXJlbGlmaS9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfV0xBTl9WRU5ET1JfUVVBTlRFTk5BKSArPSBxdWFudGVubmEvXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnPTEzPWlmIFdMQU5fVkVORE9SX1BVUkVMSUZJXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZy0xNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnOjE1OnNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZy0xNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTM6NDIuODgwNjY2NzI0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgxMTgzNDIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSBjaGVjazpcblxuKipFeGFtaW5pbmcgdGhlIFdMQU5fVkVORE9SX1BVUkVMSUZJIERlcGVuZGVuY3kqKlxuXG5SaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFdMQU5fVkVORE9SX1BVUkVMSUZJYC4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgc3RlcCBmb3IgbWUsIHNvIEknbSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBsaWtlbHkgc291cmNlIOKAkyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBmb3IgdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZyBzeW1ib2wgd2lsbCBsaXZlLCBhbG9uZ3NpZGUgaXRzIGRlcGVuZGVuY2llcy4gS25vd2luZyB3aGF0IGNvbmRpdGlvbnMgbmVlZCB0byBiZSBtZXQgdG8gZW5hYmxlIHRoaXMgZHJpdmVyIGlzIGNydWNpYWwsIHdoZXRoZXIgSSdtIGRpYWdub3NpbmcgYSBidWlsZCBpc3N1ZSwgbG9va2luZyBmb3IgZmVhdHVyZSBhdmFpbGFiaWxpdHksIG9yIGp1c3QgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwga2VybmVsIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIHNwZWxsIG91dCBleGFjdGx5IHdoYXQgZWxzZSBuZWVkcyB0byBiZSBpbiBwbGFjZSBmb3IgUHVyZUxpRmkgc3VwcG9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ2MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjUzOjQ1LjY5MjUwMzgzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgV0xBTl9WRU5ET1JfUFVSRUxJRklcXG4gICAzOlxcdFxcdGJvb2wgXFxcInB1cmVMaUZpIGRldmljZXNcXFwiXFxuICAgNDpcXHRcXHRkZWZhdWx0IHlcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBwdXJlTGlGaSBkZXZpY2UsIHNheSBZLlxcbiAgIDc6XFx0XFxuICAgODpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAgOTpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAxMDpcXHRcXHQgIHF1ZXN0aW9ucyBhYm91dCB0aGVzZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcXG4gIDExOlxcdFxcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBXTEFOX1ZFTkRPUl9QVVJFTElGSVxcbiAgMTQ6XFx0XFxuICAxNTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9LY29uZmlnXFxcIlxcbiAgMTY6XFx0XFxuICAxNzpcXHRlbmRpZiAjIFdMQU5fVkVORE9SX1BVUkVMSUZJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjUzOjQ1LjY5MjU2MjQ5OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODE3MzYzMjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGluLlxuXG4qKkluaXRpYWwgQ29kZSBJbnZlc3RpZ2F0aW9uKipcblxuUmlnaHQsIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMuIEknbGwgc3RhcnQgd2l0aCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jYCBhbmQgYHVzYi5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIHRoZSBjb3JlIE1BQyBmdW5jdGlvbmFsaXR5IGFuZCBob3cgaXQncyBpbnRlcmZhY2luZyB3aXRoIHRoZSBVU0IgbGF5ZXIsIHJlc3BlY3RpdmVseS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGZyYW1ld29yayB0byB0aGVuIGRyaWxsIGRvd24gaW50byB0aGUgc3BlY2lmaWNzLiBVbmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmUgZmlyc3QgaXMga2V5LiBLbm93aW5nICpob3cqIHRoZSBjb2RlIHdvcmtzLCBhbmQgdGhlbiAqd2hhdCogd2FzIGNoYW5nZWQsIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyBxdWlja2x5IGFuZCBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk1NCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTM6NDcuNTA5OTMwMTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDA6XFx0XFx0c3RydWN0IHBsZnhsY191c2JfdHggKnR4O1xcbiA0MDE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gNDAyOlxcdFxcdGludCBuZWVkX3BhZGRpbmc7XFxuIDQwMzpcXHRcXHRfX2xlMTYgZmM7XFxuIDQwNDpcXHRcXHRpbnQgc2lkeDtcXG4gNDA1OlxcdFxcbiA0MDY6XFx0XFx0LyogUGFja2V0IGJsb2NrYWRlIGR1cmluZyBkaXNhYmxlZCBpbnRlcmZhY2UuICovXFxuIDQwNzpcXHRcXHRpZiAoIW1hYy1cXHUwMDNldmlmKVxcbiA0MDg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQwOTpcXHRcXG4gNDEwOlxcdFxcdGlmIChsZW5ndGggXFx1MDAzYyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykgKyBzaXplb2YodTMyKSlcXG4gNDExOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MTI6XFx0XFxuIDQxMzpcXHRcXHRzdGF0dXMgPSAoc3RydWN0IHJ4X3N0YXR1cyAqKWJ1ZmZlcjtcXG4gNDE0OlxcdFxcbiA0MTU6XFx0XFx0bWVtc2V0KFxcdTAwMjZzdGF0cywgMCwgc2l6ZW9mKHN0YXRzKSk7XFxuIDQxNjpcXHRcXG4gNDE3OlxcdFxcdHN0YXRzLmZsYWcgICAgID0gMDtcXG4gNDE4OlxcdFxcdHN0YXRzLmZyZXEgICAgID0gMjQxMjtcXG4gNDE5OlxcdFxcdHN0YXRzLmJhbmQgICAgID0gTkw4MDIxMV9CQU5EX0xDO1xcbiA0MjA6XFx0XFx0bWFjLVxcdTAwM2Vyc3NpICAgICAgPSAtMTUgKiBiZTE2X3RvX2NwdShzdGF0dXMtXFx1MDAzZXJzc2kpIC8gMTA7XFxuIDQyMTpcXHRcXG4gNDIyOlxcdFxcdHN0YXRzLnNpZ25hbCAgID0gbWFjLVxcdTAwM2Vyc3NpO1xcbiA0MjM6XFx0XFxuIDQyNDpcXHRcXHRpZiAoc3RhdHVzLVxcdTAwM2VyYXRlX2lkeCBcXHUwMDNlIDcpXFxuIDQyNTpcXHRcXHRcXHRzdGF0cy5yYXRlX2lkeCA9IDA7XFxuIDQyNjpcXHRcXHRlbHNlXFxuIDQyNzpcXHRcXHRcXHRzdGF0cy5yYXRlX2lkeCA9IHN0YXR1cy1cXHUwMDNlcmF0ZV9pZHg7XFxuIDQyODpcXHRcXG4gNDI5OlxcdFxcdG1hYy1cXHUwMDNlY3JjX2Vycm9ycyA9IGJlNjRfdG9fY3B1KHN0YXR1cy1cXHUwMDNlY3JjX2Vycm9yX2NvdW50KTtcXG4gNDMwOlxcdFxcbiA0MzE6XFx0XFx0YnVmZmVyICs9IHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKTtcXG4gNDMyOlxcdFxcdHBheWxvYWRfbGVuZ3RoID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1ZmZlcik7XFxuIDQzMzpcXHRcXHRidWZmZXIgKz0gc2l6ZW9mKHUzMik7XFxuIDQzNDpcXHRcXG4gNDM1OlxcdFxcdGlmIChwYXlsb2FkX2xlbmd0aCBcXHUwMDNlIDE1NjAgfHxcXG4gNDM2OlxcdFxcdCAgICBwYXlsb2FkX2xlbmd0aCArIHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSArIHNpemVvZih1MzIpIFxcdTAwM2UgbGVuZ3RoKSB7XFxuIDQzNzpcXHRcXHRcXHRkZXZfZXJyKHBsZnhsY19tYWNfZGV2KG1hYyksIFxcXCIgXFx1MDAzZSBNVFUgJXVcXFxcblxcXCIsIHBheWxvYWRfbGVuZ3RoKTtcXG4gNDM4OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0Mzk6XFx0XFx0fVxcbiA0NDA6XFx0XFxuIDQ0MTpcXHRcXHRpZiAocGxmeGxjX2ZpbHRlcl9hY2soaHcsIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWJ1ZmZlciwgXFx1MDAyNnN0YXRzKSBcXHUwMDI2XFx1MDAyNlxcbiA0NDI6XFx0XFx0ICAgICFtYWMtXFx1MDAzZXBhc3NfY3RybClcXG4gNDQzOlxcdFxcdFxcdHJldHVybiAwO1xcbiA0NDQ6XFx0XFxuIDQ0NTpcXHRcXHRmYyA9IGdldF91bmFsaWduZWQoKF9fbGUxNiAqKWJ1ZmZlcik7XFxuIDQ0NjpcXHRcXHRuZWVkX3BhZGRpbmcgPSBpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpIF4gaWVlZTgwMjExX2hhc19hNChmYyk7XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdHR4ID0gXFx1MDAyNm1hYy1cXHUwMDNlY2hpcC51c2IudHg7XFxuIDQ0OTpcXHRcXG4gNDUwOlxcdFxcdGZvciAoc2lkeCA9IDA7IHNpZHggXFx1MDAzYyBNQVhfU1RBX05VTSAtIDE7IHNpZHgrKykge1xcbiA0NTE6XFx0XFx0XFx0aWYgKG1lbWNtcChcXHUwMDI2YnVmZmVyWzEwXSwgdHgtXFx1MDAzZXN0YXRpb25bc2lkeF0ubWFjLCBFVEhfQUxFTikpXFxuIDQ1MjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNDUzOlxcdFxcdFxcdGlmICh0eC1cXHUwMDNlc3RhdGlvbltzaWR4XS5mbGFnIFxcdTAwMjYgU1RBVElPTl9DT05ORUNURURfRkxBRykge1xcbiA0NTQ6XFx0XFx0XFx0XFx0dHgtXFx1MDAzZXN0YXRpb25bc2lkeF0uZmxhZyB8PSBTVEFUSU9OX0hFQVJUQkVBVF9GTEFHO1xcbiA0NTU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQ1NjpcXHRcXHRcXHR9XFxuIDQ1NzpcXHRcXHR9XFxuIDQ1ODpcXHRcXG4gNDU5OlxcdFxcdGlmIChzaWR4ID09IE1BWF9TVEFfTlVNIC0gMSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1Mzo0Ny41MTAxMzU1NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODg1OTU1MDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgUlggUGF0aCBpbiB0aGUgUHVyZUxpRmkgVVNCIERyaXZlcioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSByZWNlcHRpb24gcHJvY2VzcyB3aXRoaW4gdGhpcyBgcGxmeGxjYCBkcml2ZXIgZm9yIHRoZSBQdXJlTGlGaSBVU0IgZGV2aWNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0cmFjZSB0aGUgZmxvdyBvZiBleGVjdXRpb24gZnJvbSB0aGUgY29tcGxldGlvbiBvZiB0aGUgUmVjZWl2ZSBVUkIgKGByeF91cmJfY29tcGxldGVgKSB0byB0aGUgaGFuZGxpbmcgb2YgdGhlIHJlY2VpdmVkIHBhY2tldCAoYGhhbmRsZV9yeF9wYWNrZXRgKS4gSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdC4gV2hhdCBkYXRhIGlzIHBhc3NlZD8gV2hhdCdzIHRoZSBjb250ZXh0PyBBbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gSXMgdGhpcyBhIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cyBwYXRoPyBVbmRlcnN0YW5kaW5nIHRoaXMgc2VjdGlvbiBvZiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jYCBpcyBrZXkgdG8gZ2V0dGluZyBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBpbmNvbWluZyB3aXJlbGVzcyBkYXRhLiBJIHN1c3BlY3QgbG9va2luZyBhdCB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIGFuZCBleGFtaW5pbmcgYW55IHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgd2lsbCB5aWVsZCB0aGUga2V5IGluZm9ybWF0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE0NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTM6NTAuMzk2MDkzNTczWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0Y2FzZSAtRU5PREVWOlxcbiAxMDE6XFx0XFx0Y2FzZSAtRU5PRU5UOlxcbiAxMDI6XFx0XFx0Y2FzZSAtRUNPTk5SRVNFVDpcXG4gMTAzOlxcdFxcdGNhc2UgLUVQSVBFOlxcbiAxMDQ6XFx0XFx0XFx0ZGV2X2RiZyhwbGZ4bGNfdXJiX2Rldih1cmIpLCBcXFwidXJiICVwIGVycm9yICVkXFxcXG5cXFwiLCB1cmIsIHVyYi1cXHUwMDNlc3RhdHVzKTtcXG4gMTA1OlxcdFxcdFxcdHJldHVybjtcXG4gMTA2OlxcdFxcdGRlZmF1bHQ6XFxuIDEwNzpcXHRcXHRcXHRkZXZfZGJnKHBsZnhsY191cmJfZGV2KHVyYiksIFxcXCJ1cmIgJXAgZXJyb3IgJWRcXFxcblxcXCIsIHVyYiwgdXJiLVxcdTAwM2VzdGF0dXMpO1xcbiAxMDg6XFx0XFx0XFx0aWYgKHR4LVxcdTAwM2VzdWJtaXR0ZWRfdXJicysrIFxcdTAwM2MgUFVSRUxJRklfVVJCX1JFVFJZX01BWCkge1xcbiAxMDk6XFx0XFx0XFx0XFx0ZGV2X2RiZyhwbGZ4bGNfdXJiX2Rldih1cmIpLCBcXFwidXJiICVwIHJlc3VibWl0ICVkXFxcIiwgdXJiLFxcbiAxMTA6XFx0XFx0XFx0XFx0XFx0dHgtXFx1MDAzZXN1Ym1pdHRlZF91cmJzKyspO1xcbiAxMTE6XFx0XFx0XFx0XFx0Z290byByZXN1Ym1pdDtcXG4gMTEyOlxcdFxcdFxcdH0gZWxzZSB7XFxuIDExMzpcXHRcXHRcXHRcXHRkZXZfZGJnKHBsZnhsY191cmJfZGV2KHVyYiksIFxcXCJ1cmIgJXAgIG1heCByZXN1Ym1pdHMgcmVhY2hlZFxcXCIsIHVyYik7XFxuIDExNDpcXHRcXHRcXHRcXHR0eC1cXHUwMDNlc3VibWl0dGVkX3VyYnMgPSAwO1xcbiAxMTU6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAxMTY6XFx0XFx0XFx0fVxcbiAxMTc6XFx0XFx0fVxcbiAxMTg6XFx0XFxuIDExOTpcXHRcXHRidWZmZXIgPSB1cmItXFx1MDAzZXRyYW5zZmVyX2J1ZmZlcjtcXG4gMTIwOlxcdFxcdGxlbmd0aCA9IHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aDtcXG4gMTIxOlxcdFxcbiAxMjI6XFx0XFx0aWYgKGxlbmd0aCAhPSAoUExGX01TR19TVEFUVVNfT0ZGU0VUICsgMSkpIHtcXG4gMTIzOlxcdFxcdFxcdGlmICh1c2ItXFx1MDAzZWluaXRpYWxpemVkIFxcdTAwMjZcXHUwMDI2IHVzYi1cXHUwMDNlbGlua191cClcXG4gMTI0OlxcdFxcdFxcdFxcdGhhbmRsZV9yeF9wYWNrZXQodXNiLCBidWZmZXIsIGxlbmd0aCk7XFxuIDEyNTpcXHRcXHRcXHRnb3RvIHJlc3VibWl0O1xcbiAxMjY6XFx0XFx0fVxcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHRzdGF0dXMgPSBidWZmZXJbUExGX01TR19TVEFUVVNfT0ZGU0VUXTtcXG4gMTI5OlxcdFxcbiAxMzA6XFx0XFx0c3dpdGNoIChzdGF0dXMpIHtcXG4gMTMxOlxcdFxcdGNhc2UgU1RBVElPTl9GSUZPX0FMTU9TVF9GVUxMX05PVF9NRVNTQUdFOlxcbiAxMzI6XFx0XFx0XFx0ZGV2X2RiZyhcXHUwMDI2dXNiLVxcdTAwM2VpbnRmLVxcdTAwM2VkZXYsXFxuIDEzMzpcXHRcXHRcXHRcXHRcXFwiRklGTyBmdWxsIG5vdCBwYWNrZXQgcmVjZWlwdFxcXFxuXFxcIik7XFxuIDEzNDpcXHRcXHRcXHR0eC1cXHUwMDNlbWFjX2ZpZm9fZnVsbCA9IDE7XFxuIDEzNTpcXHRcXHRcXHRmb3IgKHNpZHggPSAwOyBzaWR4IFxcdTAwM2MgTUFYX1NUQV9OVU07IHNpZHgrKylcXG4gMTM2OlxcdFxcdFxcdFxcdHR4LVxcdTAwM2VzdGF0aW9uW3NpZHhdLmZsYWcgfD0gU1RBVElPTl9GSUZPX0ZVTExfRkxBRztcXG4gMTM3OlxcdFxcdFxcdGJyZWFrO1xcbiAxMzg6XFx0XFx0Y2FzZSBTVEFUSU9OX0ZJRk9fQUxNT1NUX0ZVTExfTUVTU0FHRTpcXG4gMTM5OlxcdFxcdFxcdGRldl9kYmcoXFx1MDAyNnVzYi1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwiRklGTyBmdWxsIHBhY2tldCByZWNlaXB0XFxcXG5cXFwiKTtcXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0XFx0Zm9yIChzaWR4ID0gMDsgc2lkeCBcXHUwMDNjIE1BWF9TVEFfTlVNOyBzaWR4KyspXFxuIDE0MjpcXHRcXHRcXHRcXHR0eC1cXHUwMDNlc3RhdGlvbltzaWR4XS5mbGFnIFxcdTAwMjY9IFNUQVRJT05fQUNUSVZFX0ZMQUc7XFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdFxcdHBsZnhsY19zZW5kX3BhY2tldF9mcm9tX2RhdGFfcXVldWUodXNiKTtcXG4gMTQ1OlxcdFxcdFxcdGJyZWFrO1xcbiAxNDY6XFx0XFx0Y2FzZSBTVEFUSU9OX0NPTk5FQ1RfTUVTU0FHRTpcXG4gMTQ3OlxcdFxcdFxcdHVzYi1cXHUwMDNlbGlua191cCA9IDE7XFxuIDE0ODpcXHRcXHRcXHRkZXZfZGJnKFxcdTAwMjZ1c2ItXFx1MDAzZWludGYtXFx1MDAzZWRldiwgXFxcIlNUX0NPTk5FQ1RfTVNHIHBhY2tldCByZWNlaXB0XFxcXG5cXFwiKTtcXG4gMTQ5OlxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1Mzo1MC4zOTYxOTMzNDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzMzI5MTMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIFBhY2tldCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIHdlJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgb3ZlcmFsbCBmbG93LCBidXQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHN5c3RlbSdzIGJlaGF2aW9yLCBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gdGhlIGBoYW5kbGVfcnhfcGFja2V0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCdzIGhhcHBlbmluZyB3aGVuIGEgcGFja2V0IGFjdHVhbGx5ICphcnJpdmVzKi4gVGhpcyBpcyB0aGUgY3JpdGljYWwgcG9pbnQgd2hlcmUgdGhlIGRhdGEgc3RyZWFtIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0ncyBpbnRlcm5hbCBsb2dpYy4gV2hhdCBhcmUgdGhlIGltbWVkaWF0ZSBhY3Rpb25zPyBBcmUgdGhlcmUgYW55IHByZWNvbmRpdGlvbnMgaXQgY2hlY2tzPyBIb3cgZG9lcyBpdCBpbnRlcnByZXQgdGhlIHBhY2tldCBoZWFkZXI/IERvZXMgaXQgY2FsbCBhbnkgb3RoZXIgZnVuY3Rpb25zPyBUaGUgYGhhbmRsZV9yeF9wYWNrZXRgIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUga2V5IHRvIHVubG9ja2luZyBob3cgdGhpcyBzeXN0ZW0gaXMgcHJvY2Vzc2luZywgZmlsdGVyaW5nLCBhbmQgYWN0aW5nIG9uIGluY29taW5nIGRhdGEuIEl0J3MgdGltZSB0byBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBwYXRoIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjgxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1Mzo1Mi4yMjk0ODc1NjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MjAzMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV9yeF9wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYz0zNj12b2lkIHBsZnhsY19zZW5kX3BhY2tldF9mcm9tX2RhdGFfcXVldWUoc3RydWN0IHBsZnhsY191c2IgKnVzYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy02Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM6NjM6c3RhdGljIHZvaWQgaGFuZGxlX3J4X3BhY2tldChzdHJ1Y3QgcGxmeGxjX3VzYiAqdXNiLCBjb25zdCB1OCAqYnVmZmVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy02NC1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM9Njk9c3RhdGljIHZvaWQgcnhfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy0xMjMtXFx0XFx0aWYgKHVzYi1cXHUwMDNlaW5pdGlhbGl6ZWQgXFx1MDAyNlxcdTAwMjYgdXNiLVxcdTAwM2VsaW5rX3VwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYzoxMjQ6XFx0XFx0XFx0aGFuZGxlX3J4X3BhY2tldCh1c2IsIGJ1ZmZlciwgbGVuZ3RoKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtMTI1LVxcdFxcdGdvdG8gcmVzdWJtaXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjUzOjUyLjI5NTY5NTAyM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjczMjkwMzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIGBoYW5kbGVfcnhfcGFja2V0YCBGdW5jdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBoYW5kbGVfcnhfcGFja2V0YCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCByZXNpZGVzIGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jYCBmaWxlLiBUaGlzIHBvaW50cyB0byBhIFB1cmVMaUZpIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZWlyIFVTQiBpbnRlcmZhY2UsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJJ20gaG9waW5nIHRvIGdldCBhIHNlbnNlIG9mIGhvdyB0aGUgZHJpdmVyIGRlYWxzIHdpdGggaW5jb21pbmcgd2lyZWxlc3MgcGFja2V0cy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBidWZmZXIgbWFuYWdlbWVudCwgZXJyb3IgaGFuZGxpbmcsIGhvdyB0aGUgZGF0YSBpcyBwYXNzZWQgdXAgdGhlIG5ldHdvcmsgc3RhY2ssIGFuZCBhbnkgc3BlY2lmaWMgUHVyZUxpRmktcmVsYXRlZCBudWFuY2VzIGluIHRoZSByZWNlcHRpb24gcHJvY2Vzcy4gS25vd2luZyB0aGUgbG9jYXRpb24sIGFuZCB0aGUgc3BlY2lmaWNzIGFyb3VuZCB3aGljaCBpbnRlcmZhY2UgdGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRvLCBhbGxvd3MgbWUgdG8gcHJlZGljdCB0aGUgY29tcGxleGl0aWVzIEkgd2lsbCBiZSBmaW5kaW5nIGFuZCB3aGF0IGtub3dsZWRnZSBJIHNob3VsZCBicmluZyB0byBiZWFyLiBJJ20gZXhwZWN0aW5nIHNvbWUgVVNCLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODA3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTM6NTQuOTY4OTg4MjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiAgNjE6XFx0fVxcbiAgNjI6XFx0XFxuICA2MzpcXHRzdGF0aWMgdm9pZCBoYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBwbGZ4bGNfdXNiICp1c2IsIGNvbnN0IHU4ICpidWZmZXIsXFxuICA2NDpcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpXFxuICA2NTpcXHR7XFxuICA2NjpcXHRcXHRwbGZ4bGNfbWFjX3J4KHBsZnhsY191c2JfdG9faHcodXNiKSwgYnVmZmVyLCBsZW5ndGgpO1xcbiAgNjc6XFx0fVxcbiAgNjg6XFx0XFxuICA2OTpcXHRzdGF0aWMgdm9pZCByeF91cmJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbiAgNzA6XFx0e1xcbiAgNzE6XFx0XFx0c3RydWN0IHBsZnhsY191c2JfdHggKnR4O1xcbiAgNzI6XFx0XFx0c3RydWN0IHBsZnhsY191c2IgKnVzYjtcXG4gIDczOlxcdFxcdHVuc2lnbmVkIGludCBsZW5ndGg7XFxuICA3NDpcXHRcXHRjb25zdCB1OCAqYnVmZmVyO1xcbiAgNzU6XFx0XFx0dTE2IHN0YXR1cztcXG4gIDc2OlxcdFxcdHU4IHNpZHg7XFxuICA3NzpcXHRcXHRpbnQgcjtcXG4gIDc4OlxcdFxcbiAgNzk6XFx0XFx0aWYgKCF1cmIpIHtcXG4gIDgwOlxcdFxcdFxcdHByX2VycihcXFwidXJiIGlzIE5VTExcXFxcblxcXCIpO1xcbiAgODE6XFx0XFx0XFx0cmV0dXJuO1xcbiAgODI6XFx0XFx0fVxcbiAgODM6XFx0XFx0aWYgKCF1cmItXFx1MDAzZWNvbnRleHQpIHtcXG4gIDg0OlxcdFxcdFxcdHByX2VycihcXFwidXJiIGN0eCBpcyBOVUxMXFxcXG5cXFwiKTtcXG4gIDg1OlxcdFxcdFxcdHJldHVybjtcXG4gIDg2OlxcdFxcdH1cXG4gIDg3OlxcdFxcdHVzYiA9IHVyYi1cXHUwMDNlY29udGV4dDtcXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0aWYgKHVzYi1cXHUwMDNlaW5pdGlhbGl6ZWQgIT0gMSkge1xcbiAgOTA6XFx0XFx0XFx0cHJfZXJyKFxcXCJ1c2IgaXMgbm90IGluaXRpYWxpemVkXFxcXG5cXFwiKTtcXG4gIDkxOlxcdFxcdFxcdHJldHVybjtcXG4gIDkyOlxcdFxcdH1cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0dHggPSBcXHUwMDI2dXNiLVxcdTAwM2V0eDtcXG4gIDk1OlxcdFxcdHN3aXRjaCAodXJiLVxcdTAwM2VzdGF0dXMpIHtcXG4gIDk2OlxcdFxcdGNhc2UgMDpcXG4gIDk3OlxcdFxcdFxcdGJyZWFrO1xcbiAgOTg6XFx0XFx0Y2FzZSAtRVNIVVRET1dOOlxcbiAgOTk6XFx0XFx0Y2FzZSAtRUlOVkFMOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1Mzo1NC45NjkxNTI2MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTM4Mzg4NDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgUHVyZUxpRmkgVVNCIERyaXZlcioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBVU0IgYnVzLiBUaGUga2V5IGFyZWFzIG9mIGludGVyZXN0IGFyZSBsaWtlbHkgZ29pbmcgdG8gYmUgdGhlIGBwcm9iZWAgcm91dGluZSwgYXMgdGhhdCdzIHdoZXJlIHRoZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gdHlwaWNhbGx5IGhhcHBlbnMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGlkZW50aWZpZXMgYW5kIGNsYWltcyB0aGUgUHVyZUxpRmkgVVNCIGRldmljZS4gQWxzbywgdGhlIGB1c2JfZGV2aWNlX2lkYCB0YWJsZSBpcyBkZWZpbml0ZWx5IG9uIG15IHJhZGFyLiBUaGlzIGlzIHdoZXJlIHRoZSB2ZW5kb3IgYW5kIHByb2R1Y3QgSURzIGFyZSBkZWNsYXJlZCwgYWxsb3dpbmcgdGhlIGRyaXZlciB0byByZWNvZ25pemUgKnNwZWNpZmljKiBQdXJlTGlGaSBoYXJkd2FyZS4gSSdsbCBjaGVjayBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgaGFyZHdhcmUgdmVyc2lvbnMgb3IgcmV2aXNpb25zLiBUaGlzIHdpbGwgYmUgdGhlIHN0YXJ0aW5nIHBvaW50LiBJJ2xsIHdhbnQgdG8gc2VlIGhvdyB0aGUgYnVzIGlzIG1hbmFnZWQuIFRoaXMgaXMgd2hlcmUgdGhlIGluaXRpYWwgYnJpbmcgdXAgaXMgbW9zdCBsaWtlbHkgaGFuZGxlZC4gSSdtIGV4cGVjdGluZyBzdGFuZGFyZCBVU0Igc2V0dXAgcm91dGluZXMsIGJ1dCBJJ2xsIHdhbnQgdG8gc2VlIGhvdyBQdXJlTGlGaSBoYXMgZXh0ZW5kZWQgb3IgY3VzdG9taXplZCB0aG9zZSB0byBhY2NvbW1vZGF0ZSB0aGVpciBvcHRpY2FsIGNvbW11bmljYXRpb24gaW50ZXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU3NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTM6NTcuMTA3NTQ0OTI2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTYzOTgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2JfZGV2aWNlX2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtMjUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jOjI2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfaWRzW10gPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jLTI3LVxcdHsgVVNCX0RFVklDRShQVVJFTElGSV9YX1ZFTkRPUl9JRF8wLCBQVVJFTElGSV9YX1BST0RVQ1RfSURfMCksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM9NTc5PXN0YXRpYyBpbnQgcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jOjU4MDpcXHRcXHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy01ODEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1Mzo1Ny4xOTMxOTI5NjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY1NjI0MDM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IG9mIHRoZSBQdXJlTGlGaSBVU0IgV2lGaSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZpeGluZyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgaW4gdGhlIGBwbGZ4bGNfbWFjX3J4YCBmdW5jdGlvbiBhbmQgc29tZSByZWxhdGVkIGlzc3VlcyBpbiBgcnhfdXJiX2NvbXBsZXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIklzIHRoaXMgZnV6emFibGU/IFNob3VsZCBJIHNwZW5kIG15IHRpbWUgZGlnZ2luZyBkZWVwZXI/XCIgTGV0J3MgYnJlYWsgaXQgZG93biBtZXRob2RpY2FsbHkuXG5cbkZpcnN0LCBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIHZpYSBmdXp6aW5nPyBDb25zaWRlcmluZyBJJ20gd29ya2luZyBpbiB0aGUgY29udGV4dCBvZiBVU0IsIGFuZCBzcGVjaWZpY2FsbHkgVVNCIFJhdyBHYWRnZXQvc3l6a2FsbGVyLCBpdCBzZWVtcyBwbGF1c2libGUuIEkgY2FuIGVtdWxhdGUgVVNCIGRldmljZXMsIGFuZCBQdXJlTGlGaSBpcyBhICpVU0IqIFdpRmkgZHJpdmVyLiBUaGUgdGV4dCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IFVTQiBwYWNrZXQgcmVjZXB0aW9uIGFuZCBoYW5kbGluZyBhcmUgcmVhY2hhYmxlIHZpYSB0aGlzIG1ldGhvZC4gRXhjZWxsZW50LCBzbyBmYXIsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWcgb3B0aW9ucy4gVGhlIGRlc2NyaXB0aW9uIG1lbnRpb25zIHRoYXQgYFBMRlhMQ2AgKHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSBkcml2ZXIpIGRlcGVuZHMgb24gYENGRzgwMjExYCwgYE1BQzgwMjExYCwgYW5kIGBVU0JgIGluIGl0cyBLY29uZmlnIGZpbGUuIENydWNpYWxseSwgaXQgYWxzbyBwb2ludHMgb3V0IGBXTEFOX1ZFTkRPUl9QVVJFTElGSWAgaXMgcmVxdWlyZWQgaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIHNldC4gRnVydGhlciBpbnNwZWN0aW9uIG9mIGBkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnYCBhbmQgYE1ha2VmaWxlYCBjb25maXJtcyB0aGUgbmVlZCBmb3IgYFdMQU5fVkVORE9SX1BVUkVMSUZJYC5cblxuU28sIGJvdHRvbSBsaW5lOiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhvc2UgY29uZmlncywgZXNwZWNpYWxseSBgV0xBTl9WRU5ET1JfUFVSRUxJRklgIGFyZSBlbmFibGVkIGluIG15IGZ1enppbmcgZW52aXJvbm1lbnQuIElmIHRoZSBjb25maWdzIGFyZSB0aGVyZSwgdGhlbiB0aGUgcGF0Y2ggaXMgcmVhY2hhYmxlLCBhbmQgdGhlIGVmZm9ydCB0byBmdXp6IGlzIHdhcnJhbnRlZC4gSXQgc2VlbXMgbGlrZSBpdCdzIHdvcnRoIGEgc2hvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTQ6MDEuODQ5NDM1OTc5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ3NDQyODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiV0xBTl9WRU5ET1JfUFVSRUxJRklcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX05YUCkgKz0gbnhwL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9QVVJFTElGSSkgKz0gcHVyZWxpZmkvXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX1FVQU5URU5OQSkgKz0gcXVhbnRlbm5hL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWc6Mjpjb25maWcgV0xBTl9WRU5ET1JfUFVSRUxJRklcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnLTMtXFx0Ym9vbCBcXFwicHVyZUxpRmkgZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWctMTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZzoxMzppZiBXTEFOX1ZFTkRPUl9QVVJFTElGSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWctMTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZz0xNT1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZzoxNzplbmRpZiAjIFdMQU5fVkVORE9SX1BVUkVMSUZJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjAyLjAzNDE4NjAzNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDA0OTE5MjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCB0aGUgTGludXgga2VybmVsIG5ldHdvcmtpbmcgc3RhY2s6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgV0xBTl9WRU5ET1JfUFVSRUxJRkkgS2NvbmZpZyBFbnRyeSoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgcG9pbnRpbmcgbWUgdG93YXJkcyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZ2AuIFJpZ2h0IGF3YXksIEknbSB0aGlua2luZyBhYm91dCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIHdpcmVsZXNzIG5ldHdvcmtpbmcgZHJpdmVyIHN1YnN5c3RlbS4gVGhlIGZhY3QgdGhhdCBpdCdzIGZvY3VzaW5nIG9uIGBXTEFOX1ZFTkRPUl9QVVJFTElGSWAgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgYWJvdXQgc3VwcG9ydCBmb3IgYSBzcGVjaWZpYyB2ZW5kb3IncyBXaS1GaSBoYXJkd2FyZSwgUHVyZUxpZmkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgb3IgY29uZGl0aW9uYWxpemVzIHRoaXMgZmVhdHVyZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgS2NvbmZpZyBmaWxlIGl0c2VsZi4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIHRoaXMgc3BlY2lmaWMgc3ltYm9sIHdpdGhpbiB0aGF0IGZpbGUuIEknbGwgYmUgbG9va2luZyB0byBzZWU6XG5cbiogICBXaGF0IGRlcGVuZGVuY2llcyBkb2VzIHRoaXMgb3B0aW9uIGhhdmU/IElzIGl0IHRpZWQgdG8gYW55IHNwZWNpZmljIGhhcmR3YXJlLCBvdGhlciBrZXJuZWwgb3B0aW9ucywgb3Igc3ViLWRyaXZlcnM/XG4qICAgV2hhdCBpcyBpdHMgZGVmYXVsdCBzZXR0aW5nPyBJcyBpdCBlbmFibGVkIGJ5IGRlZmF1bHQsIG9yIGlzIGl0IGRpc2FibGVkP1xuKiAgIEFyZSB0aGVyZSBhbnkgcmVsZXZhbnQgaGVscCBtZXNzYWdlcyBvciBkZXNjcmlwdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGl0PyBUaGVzZSBjYW4gdGVsbCBtZSB3aGF0IFB1cmVMaWZpJ3MgZHJpdmVycyBkbyBhbmQgYW55IHNwZWNpYWwgY29uc2lkZXJhdGlvbnMuXG4qICAgSXMgaXQgY29uZGl0aW9uYWxseSBlbmFibGVkIGJhc2VkIG9uIG90aGVyIHNldHRpbmdzPyBJZiBzbywgd2hhdCBhcmUgdGhvc2UgY29uZGl0aW9ucz9cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgYSBkZWVwIGRpdmUgaW50byB0aGUgYnVpbGQgc3lzdGVtIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdHMgb2YgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiBvbiB0aGUga2VybmVsJ3MgY29tcGlsYXRpb24gYW5kIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBQdXJlTGlmaS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1NDowNC40MzkxMDk3NDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgV2lyZWxlc3MgTEFOIGRldmljZSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgV0xBTlxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiV2lyZWxlc3MgTEFOXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiAhUzM5MFxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gIDEwOlxcdFxcdHNlbGVjdCBXSVJFTEVTU1xcbiAgMTE6XFx0XFx0ZGVmYXVsdCB5XFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFRoaXMgc2VjdGlvbiBjb250YWlucyBhbGwgdGhlIHByZSA4MDIuMTEgYW5kIDgwMi4xMSB3aXJlbGVzc1xcbiAgMTQ6XFx0XFx0ICBkZXZpY2UgZHJpdmVycy4gRm9yIGEgY29tcGxldGUgbGlzdCBvZiBkcml2ZXJzIGFuZCBkb2N1bWVudGF0aW9uXFxuICAxNTpcXHRcXHQgIG9uIHRoZW0gcmVmZXIgdG8gdGhlIHdpcmVsZXNzIHdpa2k6XFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVyc1xcbiAgMTg6XFx0XFxuICAxOTpcXHRpZiBXTEFOXFxuICAyMDpcXHRcXG4gIDIxOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtdGVrL0tjb25maWdcXFwiXFxuICAyMjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnXFxcIlxcbiAgMjM6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC9LY29uZmlnXFxcIlxcbiAgMjQ6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9LY29uZmlnXFxcIlxcbiAgMjU6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9LY29uZmlnXFxcIlxcbiAgMjY6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9LY29uZmlnXFxcIlxcbiAgMjc6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL0tjb25maWdcXFwiXFxuICAyODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL0tjb25maWdcXFwiXFxuICAyOTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21pY3JvY2hpcC9LY29uZmlnXFxcIlxcbiAgMzA6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWdcXFwiXFxuICAzMTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9LY29uZmlnXFxcIlxcbiAgMzI6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnXFxcIlxcbiAgMzM6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yYWxpbmsvS2NvbmZpZ1xcXCJcXG4gIDM0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9LY29uZmlnXFxcIlxcbiAgMzU6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZ1xcXCJcXG4gIDM2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL0tjb25maWdcXFwiXFxuICAzNzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L0tjb25maWdcXFwiXFxuICAzODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL0tjb25maWdcXFwiXFxuICAzOTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL0tjb25maWdcXFwiXFxuICA0MDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1NDowNC40MzkyMTU0NThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA4MTgwMTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBrZXk6IGBQTEZYTENgLCBgV0xBTl9WRU5ET1JfUFVSRUxJRklgLCBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBgVVNCYCwgYW5kIGBXTEFOYC4gVGhvc2UgYXJlIHRoZSBidWlsZGluZyBibG9ja3MsIHRoZSBmb3VuZGF0aW9uIHRoaXMgcGF0Y2ggaXMgd29ya2luZyB3aXRoLiBOb3csIHRoZSBtZWF0IG9mIGl0LlxuXG5JJ3ZlIGlkZW50aWZpZWQgdHdvIG1vZGlmaWVkIGZ1bmN0aW9uczogYHBsZnhsY19tYWNfcnhgIGluIGBtYWMuY2AsIGFuZCBgcnhfdXJiX2NvbXBsZXRlYCBpbiBgdXNiLmNgLiBNeSBuZXh0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciBzY29wZS4gSSBzZWUgdGhhdCBgcGxmeGxjX21hY19yeGAgaXMgYSBnbG9iYWwgZnVuY3Rpb24sIG1lYW5pbmcgaXQncyB2aXNpYmxlIG91dHNpZGUgb2YgaXRzIG93biBzb3VyY2UgZmlsZSwgd2hpY2ggaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IGl0J3MgY2FsbGVkIGFuZCBtb2RpZmllZC4gYHJ4X3VyYl9jb21wbGV0ZWAgaXMgc3RhdGljIHdpdGhpbiBgdXNiLmNgLCBidXQgaXQgaXMgc3RpbGwgYSBmdW5jdGlvbiBzeW1ib2wsIGFuZCBpcyB0aHVzIGNhbGxhYmxlIGZyb20gZWxzZXdoZXJlLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBmbG93LlxuXG5Ob3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBlbHNlIGlzIGdvaW5nIG9uIGluIGBtYWMuY2AgYW5kIGB1c2IuY2AgYW5kIGhvdyBgcGxmeGxjX2ZpbHRlcl9hY2tgIGNvbWVzIGludG8gcGxheS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb21wbGV0ZSBjaGFpbiBvZiBldmVudHMsIGZyb20gcGFja2V0IHJlY2VwdGlvbiB0byBwcm9jZXNzaW5nLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGluZyBgcGxmeGxjX21hY19yeGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzE3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTQ6MDcuNTIxMDIwMDU4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDc0MjQzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbGZ4bGNfbWFjX3J4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmM9MzM4PXN0YXRpYyBpbnQgcGxmeGxjX2ZpbHRlcl9hY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpyeF9oZHIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMtMzkyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYzozOTM6aW50IHBsZnhsY19tYWNfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpidWZmZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jLTM5NC1cXHRcXHQgIHVuc2lnbmVkIGludCBsZW5ndGgpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmg9MTc0PWludCBwbGZ4bGNfbWFjX2luaXRfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuaC0xNzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5oOjE3NjppbnQgcGxmeGxjX21hY19yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY29uc3QgdTggKmJ1ZmZlcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmgtMTc3LVxcdFxcdCAgdW5zaWduZWQgaW50IGxlbmd0aCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM9NjM9c3RhdGljIHZvaWQgaGFuZGxlX3J4X3BhY2tldChzdHJ1Y3QgcGxmeGxjX3VzYiAqdXNiLCBjb25zdCB1OCAqYnVmZmVyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jLTY1LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM6NjY6XFx0cGxmeGxjX21hY19yeChwbGZ4bGNfdXNiX3RvX2h3KHVzYiksIGJ1ZmZlciwgbGVuZ3RoKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtNjctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1NDowNy41OTU3Njg4MTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQxMDc3Mzc2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUHVyZUxpRmkgVVNCIERyaXZlciBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIGlzIHNxdWFyZWx5IG9uIHRoZSBgcGxmeGxjX21hY19yeGAgYW5kIGByeF91cmJfY29tcGxldGVgIGZ1bmN0aW9ucyDigJMgdGhvc2UgYXJlIHRoZSBkaXJlY3QgbW9kaWZpY2F0aW9ucyBJIG5lZWQgdG8gZXhhbWluZS4gVGhlIGltbWVkaWF0ZSBjYWxsZXIgb2YgdGhlc2UsIGFjY29yZGluZyB0byB0aGlzLCBpcyBgaGFuZGxlX3J4X3BhY2tldGAgd2l0aGluIGB1c2IuY2AuIEdvb2QsIGdvdCBteSBmb2NhbCBwb2ludHMgY2xlYXJseSBkZWZpbmVkLlxuXG5CZWZvcmUgSSBwcm9jZWVkLCBsZXQncyBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjb25maWd1cmF0aW9uLXdpc2UuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYFBMRlhMQ2AsIGBXTEFOX1ZFTkRPUl9QVVJFTElGSWAsIGBNQUM4MDIxMWAsIGBDRkc4MDIxMWAsIGBVU0JgLCBhbmQgYFdMQU5gIGFyZSBhbGwgYWNjb3VudGVkIGZvciBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi5cblxuTm93LCBsZXQncyBjcm9zcy1yZWZlcmVuY2UgYWdhaW5zdCB0aGUgS2NvbmZpZyBmaWxlcy4gSSBzZWUgaGVyZSB0aGF0IGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvS2NvbmZpZ2AsIGBQTEZYTENgIHNwZWNpZmljYWxseSBkZXBlbmRzIG9uIGBDRkc4MDIxMSBcdTAwMjZcdTAwMjYgTUFDODAyMTEgXHUwMDI2XHUwMDI2IFVTQmAuIFRoYXQgbWFrZXMgc2Vuc2UuIEFsc28gYFdMQU5fVkVORE9SX1BVUkVMSUZJYCBpcyBoYW5kbGVkIGF0IHRoZSByaWdodCBsZXZlbCBhbmQgdGhlIGBXTEFOYCBjb25maWcgaXMgcHJvcGVybHkgbWFuYWdlZC5cblxuTm93IHRoZSBjb3JlIHJhdGlvbmFsZS4gVGhpcyBwYXRjaCBpcyBhYm91dCBib3VuZHMgdmFsaWRhdGlvbiBpbiB0aGUgYHBsZnhsY19tYWNfcnhgIGFuZCBVbml2ZXJzYWwgU2VyaWFsIEJ1cyAoVVNCKSBsZW5ndGggaGFuZGxpbmcgaW4gYHJ4X3VyYl9jb21wbGV0ZWAuIEl0J3MgYWxsIGFib3V0IHRoYXQgUHVyZUxpRmkgVVNCIHdpcmVsZXNzIGFkYXB0ZXIgZHJpdmVyLiBJdCdzIGdvb2QgdG8ga25vdyB0aGF0IHRoaXMgY2FuIGJlIHRyaWdnZXJlZCBhbmQgdGVzdGVkIHVzaW5nIFVTQiByYXcgZ2FkZ2V0IGVtdWxhdGlvbiwgbGlrZSBgZHVtbXlfaGNkYCBhbmQgYHN5el91c2JfY29ubmVjdGAuIFRoZSBjaGFuZ2VzIGltcGFjdCBwYWNrZXQgcmVjZXB0aW9uIGFuZCBwYXJzaW5nLCBzbyBVU0IgZW5kcG9pbnQgdHJhZmZpYyBpcyB0aGUgY3JpdGljYWwgdmVjdG9yLlxuXG5BbHJpZ2h0LCBldmVyeXRoaW5nIGFwcGVhcnMgc291bmQgYW5kIHZlcmlmaWFibGUuIFRpbWUgdG8gcHVzaCB0aGlzIHRocm91Z2guIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MTAsIk91dHB1dFRva2VucyI6MTgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjEyLjAwNjU0NjE3NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTM0NzczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUExGWExDXCIsXG4gICAgXCJXTEFOX1ZFTkRPUl9QVVJFTElGSVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIldMQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwbGZ4bGNfbWFjX3J4XCIsXG4gICAgXCJyeF91cmJfY29tcGxldGVcIixcbiAgICBcImhhbmRsZV9yeF9wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgcmVjZXB0aW9uIGFuZCBsZW5ndGggdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgUHVyZUxpRmkgVVNCIHdpcmVsZXNzIGRyaXZlciAocGxmeGxjX21hY19yeCBhbmQgcnhfdXJiX2NvbXBsZXRlKS4gVVNCIG5ldHdvcmsgZHJpdmVycyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB1c2luZyBVU0IgcmF3LWdhZGdldCAvIGR1bW15X2hjZCBlbXVsYXRpb24uIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gdmVyaWZ5IHRoZSBuZXcgYm91bmRzIGNoZWNrcyBhbmQgZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb24gbWFsZm9ybWVkIFVTQiBmcmFtZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUExGWExDXCIsXG4gICAgXCJXTEFOX1ZFTkRPUl9QVVJFTElGSVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIldMQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwbGZ4bGNfbWFjX3J4XCIsXG4gICAgXCJyeF91cmJfY29tcGxldGVcIixcbiAgICBcImhhbmRsZV9yeF9wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgcmVjZXB0aW9uIGFuZCBsZW5ndGggdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgUHVyZUxpRmkgVVNCIHdpcmVsZXNzIGRyaXZlciAocGxmeGxjX21hY19yeCBhbmQgcnhfdXJiX2NvbXBsZXRlKS4gVVNCIG5ldHdvcmsgZHJpdmVycyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB1c2luZyBVU0IgcmF3LWdhZGdldCAvIGR1bW15X2hjZCBlbXVsYXRpb24uIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gdmVyaWZ5IHRoZSBuZXcgYm91bmRzIGNoZWNrcyBhbmQgZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb24gbWFsZm9ybWVkIFVTQiBmcmFtZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjEyLjE2NTkwNTk4NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1ODYzMzUyODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1NDoxMi4xNjY3MzYyOTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NjU4NTQ5OTMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcGFja2V0IHZhbGlkYXRpb24gaW4gdGhlIFB1cmVMaUZpIChwbGZ4bGMpIHdpcmVsZXNzIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCB1c2VzIGB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGhgIHJhdGhlciB0aGFuIGFuIHVudmFsaWRhdGVkIGZpZWxkIGZyb20gdGhlIGJ1ZmZlciwgYWRkcyBtaW5pbXVtIGxlbmd0aCBjaGVja3MgYmVmb3JlIHBhcnNpbmcgYHJ4X3N0YXR1c2AgYW5kIHBheWxvYWQgbGVuZ3RoLCB2ZXJpZmllcyB0aGF0IHRoZSBwYXlsb2FkIGxlbmd0aCBkb2VzIG5vdCBleGNlZWQgdGhlIFVSQiBidWZmZXIgbGVuZ3RoLCBhbmQgZml4ZXMgdGhlIGJ1ZmZlciBvZmZzZXQgcGFzc2VkIHRvIGBwbGZ4bGNfZmlsdGVyX2FjaygpYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3MgaW5wdXQgdmFsaWRhdGlvbiBhbmQgb3V0LW9mLWJvdW5kcyBidWZmZXIgb3ZlcnJlYWRzLCB3aGljaCBmYWxsIHNxdWFyZWx5IHVuZGVyIEtBU0FOJ3MgZG9tYWluLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGUgcmVhZHMsIGRvZXMgbm90IGFsdGVyIHN0cnVjdHVyZSBwYWRkaW5nL2luaXRpYWxpemF0aW9uIHNlbnQgdG8gdXNlcnNwYWNlLCBhbmQgYWxsIGxvY2FsIHN0cnVjdHVyZXMgKHN1Y2ggYXMgYHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHN0YXRzYCkgYXJlIGV4cGxpY2l0bHkgemVyb2VkIHdpdGggYG1lbXNldGAuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3MmY1NThiYjlhNzI1ZjIwNDAyMGJmOTMzMTNmNzYzY2JlNDNiNDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA2OjUzOjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jXG5pbmRleCBhOTAwNDIxNzUzYWM2Li5kMjY5MGNjZTc5NmE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmNcbkBAIC00MDcsNiArNDA3LDkgQEAgaW50IHBsZnhsY19tYWNfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpidWZmZXIsXG4gXHRpZiAoIW1hYy1cdTAwM2V2aWYpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0aWYgKGxlbmd0aCBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpICsgc2l6ZW9mKHUzMikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0c3RhdHVzID0gKHN0cnVjdCByeF9zdGF0dXMgKilidWZmZXI7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c3RhdHMsIDAsIHNpemVvZihzdGF0cykpO1xuQEAgLTQyNSwxOSArNDI4LDE5IEBAIGludCBwbGZ4bGNfbWFjX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqYnVmZmVyLFxuIFxuIFx0bWFjLVx1MDAzZWNyY19lcnJvcnMgPSBiZTY0X3RvX2NwdShzdGF0dXMtXHUwMDNlY3JjX2Vycm9yX2NvdW50KTtcbiBcbi1cdC8qIFRPRE8gYmFkIGZyYW1lIGNoZWNrIGZvciBDUkMgZXJyb3IqL1xuLVx0aWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsIFx1MDAyNnN0YXRzKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhbWFjLVx1MDAzZXBhc3NfY3RybClcbi1cdFx0cmV0dXJuIDA7XG4tXG4gXHRidWZmZXIgKz0gc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpO1xuIFx0cGF5bG9hZF9sZW5ndGggPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyKTtcbitcdGJ1ZmZlciArPSBzaXplb2YodTMyKTtcbiBcbi1cdGlmIChwYXlsb2FkX2xlbmd0aCBcdTAwM2UgMTU2MCkge1xuK1x0aWYgKHBheWxvYWRfbGVuZ3RoIFx1MDAzZSAxNTYwIHx8XG4rXHQgICAgcGF5bG9hZF9sZW5ndGggKyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykgKyBzaXplb2YodTMyKSBcdTAwM2UgbGVuZ3RoKSB7XG4gXHRcdGRldl9lcnIocGxmeGxjX21hY19kZXYobWFjKSwgXCIgXHUwMDNlIE1UVSAldVxcblwiLCBwYXlsb2FkX2xlbmd0aCk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuLVx0YnVmZmVyICs9IHNpemVvZih1MzIpO1xuK1xuK1x0aWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsIFx1MDAyNnN0YXRzKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhbWFjLVx1MDAzZXBhc3NfY3RybClcbitcdFx0cmV0dXJuIDA7XG4gXG4gXHRmYyA9IGdldF91bmFsaWduZWQoKF9fbGUxNiAqKWJ1ZmZlcik7XG4gXHRuZWVkX3BhZGRpbmcgPSBpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpIF4gaWVlZTgwMjExX2hhc19hNChmYyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jXG5pbmRleCA2ZDI0MDg2ZWI4YjdhLi5jMzNiOTEzMWJmZGRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNcbkBAIC0xMTcsMTAgKzExNyw5IEBAIHN0YXRpYyB2b2lkIHJ4X3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gXHR9XG4gXG4gXHRidWZmZXIgPSB1cmItXHUwMDNldHJhbnNmZXJfYnVmZmVyO1xuLVx0bGVuZ3RoID0gbGUzMl90b19jcHUoKihfX2xlMzIgKikoYnVmZmVyICsgc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpKSlcbi1cdFx0ICsgc2l6ZW9mKHUzMik7XG4rXHRsZW5ndGggPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aDtcbiBcbi1cdGlmICh1cmItXHUwMDNlYWN0dWFsX2xlbmd0aCAhPSAoUExGX01TR19TVEFUVVNfT0ZGU0VUICsgMSkpIHtcbitcdGlmIChsZW5ndGggIT0gKFBMRl9NU0dfU1RBVFVTX09GRlNFVCArIDEpKSB7XG4gXHRcdGlmICh1c2ItXHUwMDNlaW5pdGlhbGl6ZWQgXHUwMDI2XHUwMDI2IHVzYi1cdTAwM2VsaW5rX3VwKVxuIFx0XHRcdGhhbmRsZV9yeF9wYWNrZXQodXNiLCBidWZmZXIsIGxlbmd0aCk7XG4gXHRcdGdvdG8gcmVzdWJtaXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1NDoxMi4xNjY3MzgxNDRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY1OTU0Mzk2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgUGF0Y2ggU2VyaWVzIGZvciBLTVNBTiBGdXp6aW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBpdHMgb3duIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3MgcnVuIHRoaXMgdGhyb3VnaCBteSBtZW50YWwgc2FmZXR5IGNoZWNrbGlzdCBmaXJzdC4gVGhpcyBpcyBhIGJlbmlnbiwgZGVmZW5zaXZlIHRhc2sg4oCTIEknbSBqdXN0IGV2YWx1YXRpbmcgdGhlIHBhdGNoZXMgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgc2FuaXRpemVyIChLQVNBTiB2ZXJzdXMgS01TQU4pIGZvciB0aGVtLiBObyBtYWxpY2lvdXMgaW50ZW50LCBubyBleHBsb2l0IGdlbmVyYXRpb24sIG5vdGhpbmcgbGlrZSB0aGF0LiBQZXJmZWN0bHkgc2FmZS5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgY29kZS4gVGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuY2AgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNgLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzOiBJJ2xsIHVzZSBjb2Rlc2VhcmNoLCBvciBtYXliZSBldmVuIGp1c3QgcmVhZCB0aGUgZmlsZXMgZGlyZWN0bHksIG9yIGdyZXBwZXIgaWYgSSBuZWVkIHRvIGRvIHNvbWV0aGluZyBtb3JlIGNvbXBsZXgsIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24gaW4gdGhvc2UgZmlsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgY2hhbmdlcyBhcmUgKmRvaW5nKiBiZWZvcmUgSSBjYW4gbWFrZSBhIGNhbGwgb24gS01TQU4gcmVxdWlyZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODEwLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTQ6MjguNzYyMTgyMzQ3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdFxcdHN0cnVjdCBwbGZ4bGNfdXNiX3R4ICp0eDtcXG4gNDAxOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDQwMjpcXHRcXHRpbnQgbmVlZF9wYWRkaW5nO1xcbiA0MDM6XFx0XFx0X19sZTE2IGZjO1xcbiA0MDQ6XFx0XFx0aW50IHNpZHg7XFxuIDQwNTpcXHRcXG4gNDA2OlxcdFxcdC8qIFBhY2tldCBibG9ja2FkZSBkdXJpbmcgZGlzYWJsZWQgaW50ZXJmYWNlLiAqL1xcbiA0MDc6XFx0XFx0aWYgKCFtYWMtXFx1MDAzZXZpZilcXG4gNDA4OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0MDk6XFx0XFxuIDQxMDpcXHRcXHRpZiAobGVuZ3RoIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpICsgc2l6ZW9mKHUzMikpXFxuIDQxMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDEyOlxcdFxcbiA0MTM6XFx0XFx0c3RhdHVzID0gKHN0cnVjdCByeF9zdGF0dXMgKilidWZmZXI7XFxuIDQxNDpcXHRcXG4gNDE1OlxcdFxcdG1lbXNldChcXHUwMDI2c3RhdHMsIDAsIHNpemVvZihzdGF0cykpO1xcbiA0MTY6XFx0XFxuIDQxNzpcXHRcXHRzdGF0cy5mbGFnICAgICA9IDA7XFxuIDQxODpcXHRcXHRzdGF0cy5mcmVxICAgICA9IDI0MTI7XFxuIDQxOTpcXHRcXHRzdGF0cy5iYW5kICAgICA9IE5MODAyMTFfQkFORF9MQztcXG4gNDIwOlxcdFxcdG1hYy1cXHUwMDNlcnNzaSAgICAgID0gLTE1ICogYmUxNl90b19jcHUoc3RhdHVzLVxcdTAwM2Vyc3NpKSAvIDEwO1xcbiA0MjE6XFx0XFxuIDQyMjpcXHRcXHRzdGF0cy5zaWduYWwgICA9IG1hYy1cXHUwMDNlcnNzaTtcXG4gNDIzOlxcdFxcbiA0MjQ6XFx0XFx0aWYgKHN0YXR1cy1cXHUwMDNlcmF0ZV9pZHggXFx1MDAzZSA3KVxcbiA0MjU6XFx0XFx0XFx0c3RhdHMucmF0ZV9pZHggPSAwO1xcbiA0MjY6XFx0XFx0ZWxzZVxcbiA0Mjc6XFx0XFx0XFx0c3RhdHMucmF0ZV9pZHggPSBzdGF0dXMtXFx1MDAzZXJhdGVfaWR4O1xcbiA0Mjg6XFx0XFxuIDQyOTpcXHRcXHRtYWMtXFx1MDAzZWNyY19lcnJvcnMgPSBiZTY0X3RvX2NwdShzdGF0dXMtXFx1MDAzZWNyY19lcnJvcl9jb3VudCk7XFxuIDQzMDpcXHRcXG4gNDMxOlxcdFxcdGJ1ZmZlciArPSBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cyk7XFxuIDQzMjpcXHRcXHRwYXlsb2FkX2xlbmd0aCA9IGdldF91bmFsaWduZWRfYmUzMihidWZmZXIpO1xcbiA0MzM6XFx0XFx0YnVmZmVyICs9IHNpemVvZih1MzIpO1xcbiA0MzQ6XFx0XFxuIDQzNTpcXHRcXHRpZiAocGF5bG9hZF9sZW5ndGggXFx1MDAzZSAxNTYwIHx8XFxuIDQzNjpcXHRcXHQgICAgcGF5bG9hZF9sZW5ndGggKyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykgKyBzaXplb2YodTMyKSBcXHUwMDNlIGxlbmd0aCkge1xcbiA0Mzc6XFx0XFx0XFx0ZGV2X2VycihwbGZ4bGNfbWFjX2RldihtYWMpLCBcXFwiIFxcdTAwM2UgTVRVICV1XFxcXG5cXFwiLCBwYXlsb2FkX2xlbmd0aCk7XFxuIDQzODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDM5OlxcdFxcdH1cXG4gNDQwOlxcdFxcbiA0NDE6XFx0XFx0aWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsIFxcdTAwMjZzdGF0cykgXFx1MDAyNlxcdTAwMjZcXG4gNDQyOlxcdFxcdCAgICAhbWFjLVxcdTAwM2VwYXNzX2N0cmwpXFxuIDQ0MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDQ0OlxcdFxcbiA0NDU6XFx0XFx0ZmMgPSBnZXRfdW5hbGlnbmVkKChfX2xlMTYgKilidWZmZXIpO1xcbiA0NDY6XFx0XFx0bmVlZF9wYWRkaW5nID0gaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSBeIGllZWU4MDIxMV9oYXNfYTQoZmMpO1xcbiA0NDc6XFx0XFxuIDQ0ODpcXHRcXHR0eCA9IFxcdTAwMjZtYWMtXFx1MDAzZWNoaXAudXNiLnR4O1xcbiA0NDk6XFx0XFxuIDQ1MDpcXHRcXHRmb3IgKHNpZHggPSAwOyBzaWR4IFxcdTAwM2MgTUFYX1NUQV9OVU0gLSAxOyBzaWR4KyspIHtcXG4gNDUxOlxcdFxcdFxcdGlmIChtZW1jbXAoXFx1MDAyNmJ1ZmZlclsxMF0sIHR4LVxcdTAwM2VzdGF0aW9uW3NpZHhdLm1hYywgRVRIX0FMRU4pKVxcbiA0NTI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDQ1MzpcXHRcXHRcXHRpZiAodHgtXFx1MDAzZXN0YXRpb25bc2lkeF0uZmxhZyBcXHUwMDI2IFNUQVRJT05fQ09OTkVDVEVEX0ZMQUcpIHtcXG4gNDU0OlxcdFxcdFxcdFxcdHR4LVxcdTAwM2VzdGF0aW9uW3NpZHhdLmZsYWcgfD0gU1RBVElPTl9IRUFSVEJFQVRfRkxBRztcXG4gNDU1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA0NTY6XFx0XFx0XFx0fVxcbiA0NTc6XFx0XFx0fVxcbiA0NTg6XFx0XFxuIDQ1OTpcXHRcXHRpZiAoc2lkeCA9PSBNQVhfU1RBX05VTSAtIDEpIHtcXG4gNDYwOlxcdFxcdFxcdGZvciAoc2lkeCA9IDA7IHNpZHggXFx1MDAzYyBNQVhfU1RBX05VTSAtIDE7IHNpZHgrKykge1xcbiA0NjE6XFx0XFx0XFx0XFx0aWYgKHR4LVxcdTAwM2VzdGF0aW9uW3NpZHhdLmZsYWcgXFx1MDAyNiBTVEFUSU9OX0NPTk5FQ1RFRF9GTEFHKVxcbiA0NjI6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDQ2MzpcXHRcXHRcXHRcXHRtZW1jcHkodHgtXFx1MDAzZXN0YXRpb25bc2lkeF0ubWFjLCBcXHUwMDI2YnVmZmVyWzEwXSwgRVRIX0FMRU4pO1xcbiA0NjQ6XFx0XFx0XFx0XFx0dHgtXFx1MDAzZXN0YXRpb25bc2lkeF0uZmxhZyB8PSBTVEFUSU9OX0NPTk5FQ1RFRF9GTEFHO1xcbiA0NjU6XFx0XFx0XFx0XFx0dHgtXFx1MDAzZXN0YXRpb25bc2lkeF0uZmxhZyB8PSBTVEFUSU9OX0hFQVJUQkVBVF9GTEFHO1xcbiA0NjY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQ2NzpcXHRcXHRcXHR9XFxuIDQ2ODpcXHRcXHR9XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdFxcdHN3aXRjaCAoYnVmZmVyWzBdKSB7XFxuIDQ3MTpcXHRcXHRjYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6XFxuIDQ3MjpcXHRcXHRcXHRkZXZfZGJnKHBsZnhsY19tYWNfZGV2KG1hYyksIFxcXCJQcm9iZSByZXF1ZXN0XFxcXG5cXFwiKTtcXG4gNDczOlxcdFxcdFxcdGJyZWFrO1xcbiA0NzQ6XFx0XFx0Y2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVROlxcbiA0NzU6XFx0XFx0XFx0ZGV2X2RiZyhwbGZ4bGNfbWFjX2RldihtYWMpLCBcXFwiQXNzb2NpYXRpb24gcmVxdWVzdFxcXFxuXFxcIik7XFxuIDQ3NjpcXHRcXHRcXHRicmVhaztcXG4gNDc3OlxcdFxcdGNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6XFxuIDQ3ODpcXHRcXHRcXHRkZXZfZGJnKHBsZnhsY19tYWNfZGV2KG1hYyksIFxcXCJBdXRoZW50aWNhdGlvbiByZXFcXFxcblxcXCIpO1xcbiA0Nzk6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjI4Ljc2MjM0NDcxN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTIwMzkyMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGRlZXBseSBpbW1lcnNlZCBpbiB0aGlzIHByb2plY3Q6XG5cbioqRGlnZ2luZyBEZWVwZXIgaW50byB0aGUgQ29kZWJhc2UqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBhIGNvdXBsZSBvZiBjcml0aWNhbCBhcmVhcyBpbiB0aGUgY29kZS4gSSdtIHRoaW5raW5nLCBsZXQncyBjYXJ2ZSBvdXQgc29tZSBkZWRpY2F0ZWQgdGltZSB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgYG1hYy5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDQ4MCB0byA1NTAuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGVzZSBzZWN0aW9ucyBvZnRlbiBob2xkIGNydWNpYWwgbG9naWMgcmVsYXRpbmcgdG8gdGhlIE1BQyBsYXllciBvcGVyYXRpb25zLCBhbmQgSSBzdXNwZWN0IHRoZXJlJ3Mgc29tZXRoaW5nIHJlbGV2YW50IHRvIG91ciBjdXJyZW50IGludmVzdGlnYXRpb24gbHVya2luZyB0aGVyZS4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZSwgcmVhbGx5IHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgaG93IHRoYXQgc2VnbWVudCBoYW5kbGVzIGl0cyBkdXRpZXMuXG5cbkJleW9uZCB0aGF0LCB0aGUgcmVjZXB0aW9uIHBhdGggaW4gYHVzYi5jYCBkZW1hbmRzIGF0dGVudGlvbi4gSSBzaG91bGQgcmVhbGx5IHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyB0byBncmFiIHN0dWZmIG91dCBvZiB0aGUgVVNCIGludGVyZmFjZSBhbmQgYWN0dWFsbHkgcHJvY2VzcyBpdC4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBVU0IgUlggaGFuZGxpbmcsIGFzIHRoYXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBkYXRhIGZsb3cgd2UgYXJlIGxvb2tpbmcgYXQuIFVuZGVyc3RhbmRpbmcgdGhlIGRldGFpbHMgb2YgdGhpcyBzcGVjaWZpYyBhcmVhIGlzIHBhcmFtb3VudCB0byBteSB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTM2LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1NDozMC42ODI3Mzk2OTZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ4MDpcXHRcXHRjYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOlxcbiA0ODE6XFx0XFx0XFx0ZGV2X2RiZyhwbGZ4bGNfbWFjX2RldihtYWMpLCBcXFwiODAyLjExIGRhdGEgZnJhbWVcXFxcblxcXCIpO1xcbiA0ODI6XFx0XFx0XFx0YnJlYWs7XFxuIDQ4MzpcXHRcXHR9XFxuIDQ4NDpcXHRcXG4gNDg1OlxcdFxcdHNrYiA9IGRldl9hbGxvY19za2IocGF5bG9hZF9sZW5ndGggKyAobmVlZF9wYWRkaW5nID8gMiA6IDApKTtcXG4gNDg2OlxcdFxcdGlmICghc2tiKVxcbiA0ODc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDQ4ODpcXHRcXG4gNDg5OlxcdFxcdGlmIChuZWVkX3BhZGRpbmcpXFxuIDQ5MDpcXHRcXHRcXHQvKiBNYWtlIHN1cmUgdGhhdCB0aGUgcGF5bG9hZCBkYXRhIGlzIDQgYnl0ZSBhbGlnbmVkLiAqL1xcbiA0OTE6XFx0XFx0XFx0c2tiX3Jlc2VydmUoc2tiLCAyKTtcXG4gNDkyOlxcdFxcbiA0OTM6XFx0XFx0c2tiX3B1dF9kYXRhKHNrYiwgYnVmZmVyLCBwYXlsb2FkX2xlbmd0aCk7XFxuIDQ5NDpcXHRcXHRtZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksIFxcdTAwMjZzdGF0cywgc2l6ZW9mKHN0YXRzKSk7XFxuIDQ5NTpcXHRcXHRpZWVlODAyMTFfcnhfaXJxc2FmZShodywgc2tiKTtcXG4gNDk2OlxcdFxcdHJldHVybiAwO1xcbiA0OTc6XFx0fVxcbiA0OTg6XFx0XFxuIDQ5OTpcXHRzdGF0aWMgaW50IHBsZnhsY19vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiA1MDA6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4gNTAxOlxcdHtcXG4gNTAyOlxcdFxcdHN0cnVjdCBwbGZ4bGNfbWFjICptYWMgPSBwbGZ4bGNfaHdfbWFjKGh3KTtcXG4gNTAzOlxcdFxcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaWZ0eXBlODAyMTFbXSA9IHtcXG4gNTA0OlxcdFxcdFxcdFtOTDgwMjExX0lGVFlQRV9TVEFUSU9OXVxcdD0gXFxcIlN0YXRpb25cXFwiLFxcbiA1MDU6XFx0XFx0XFx0W05MODAyMTFfSUZUWVBFX0FESE9DXVxcdFxcdD0gXFxcIkFkaG9jXFxcIlxcbiA1MDY6XFx0XFx0fTtcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0aWYgKG1hYy1cXHUwMDNldHlwZSAhPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRClcXG4gNTA5OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gNTEwOlxcdFxcbiA1MTE6XFx0XFx0aWYgKHZpZi1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fFxcbiA1MTI6XFx0XFx0ICAgIHZpZi1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7XFxuIDUxMzpcXHRcXHRcXHRkZXZfZGJnKHBsZnhsY19tYWNfZGV2KG1hYyksIFxcXCIlcyAlc1xcXFxuXFxcIiwgX19mdW5jX18sXFxuIDUxNDpcXHRcXHRcXHRcXHRpZnR5cGU4MDIxMVt2aWYtXFx1MDAzZXR5cGVdKTtcXG4gNTE1OlxcdFxcdFxcdG1hYy1cXHUwMDNldHlwZSA9IHZpZi1cXHUwMDNldHlwZTtcXG4gNTE2OlxcdFxcdFxcdG1hYy1cXHUwMDNldmlmID0gdmlmO1xcbiA1MTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDUxODpcXHRcXHR9XFxuIDUxOTpcXHRcXHRkZXZfZGJnKHBsZnhsY19tYWNfZGV2KG1hYyksIFxcXCJ1bnN1cHBvcnRlZCBpZnR5cGVcXFxcblxcXCIpO1xcbiA1MjA6XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA1MjE6XFx0fVxcbiA1MjI6XFx0XFxuIDUyMzpcXHRzdGF0aWMgdm9pZCBwbGZ4bGNfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gNTI0OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKVxcbiA1MjU6XFx0e1xcbiA1MjY6XFx0XFx0c3RydWN0IHBsZnhsY19tYWMgKm1hYyA9IHBsZnhsY19od19tYWMoaHcpO1xcbiA1Mjc6XFx0XFxuIDUyODpcXHRcXHRtYWMtXFx1MDAzZXR5cGUgPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDtcXG4gNTI5OlxcdFxcdG1hYy1cXHUwMDNldmlmID0gTlVMTDtcXG4gNTMwOlxcdH1cXG4gNTMxOlxcdFxcbiA1MzI6XFx0c3RhdGljIGludCBwbGZ4bGNfb3BfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcmFkaW9faWR4LCB1MzIgY2hhbmdlZClcXG4gNTMzOlxcdHtcXG4gNTM0OlxcdFxcdHJldHVybiAwO1xcbiA1MzU6XFx0fVxcbiA1MzY6XFx0XFxuIDUzNzpcXHQjZGVmaW5lIFNVUFBPUlRFRF9GSUZfRkxBR1MgXFxcXFxcbiA1Mzg6XFx0XFx0KEZJRl9BTExNVUxUSSB8IEZJRl9GQ1NGQUlMIHwgRklGX0NPTlRST0wgfCBcXFxcXFxuIDUzOTpcXHRcXHQgRklGX09USEVSX0JTUyB8IEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1NDozMC42ODI4MzQyMTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwMTg0ODA0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipGb2N1c2luZyBvbiB0aGUgUHVyZUxpRmkgVVNCIERyaXZlcioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIHRoZSBQdXJlTGlGaSBVU0IgZHJpdmVyLlwiIFNwZWNpZmljYWxseSwgSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNgLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBVU0IgaW50ZXJmYWNlIGZvciB0aGF0IHNwZWNpZmljIFB1cmVMaUZpIHBsYXRmb3JtIChgcGxmeGxjYCkgd2lsbCBiZSBoYW5kbGVkLiBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgaG93IGl0IGluaXRpYWxpemVzLCBob3cgaXQgaGFuZGxlcyBkZXZpY2UgZW51bWVyYXRpb24gYW5kIHBvd2VyIG1hbmFnZW1lbnQsIGhvdyBpdCBtb3ZlcyBwYWNrZXRzLCBhbmQgaG93IGl0IGRlYWxzIHdpdGggYW55IHF1aXJrcyBzcGVjaWZpYyB0byB0aGUgVVNCIGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgbG93LWxldmVsIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgaG9zdCBhbmQgdGhlIFB1cmVMaUZpIGhhcmR3YXJlIGhhcHBlbnMsIHNvIEkgbmVlZCB0byBjaGVjayBmb3IgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMsIGludGVycnVwdCBoYW5kbGluZywgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB1c2VkLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NzgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjMyLjg4NDY4NDU4MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHRjYXNlIC1FTk9ERVY6XFxuIDEwMTpcXHRcXHRjYXNlIC1FTk9FTlQ6XFxuIDEwMjpcXHRcXHRjYXNlIC1FQ09OTlJFU0VUOlxcbiAxMDM6XFx0XFx0Y2FzZSAtRVBJUEU6XFxuIDEwNDpcXHRcXHRcXHRkZXZfZGJnKHBsZnhsY191cmJfZGV2KHVyYiksIFxcXCJ1cmIgJXAgZXJyb3IgJWRcXFxcblxcXCIsIHVyYiwgdXJiLVxcdTAwM2VzdGF0dXMpO1xcbiAxMDU6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMDY6XFx0XFx0ZGVmYXVsdDpcXG4gMTA3OlxcdFxcdFxcdGRldl9kYmcocGxmeGxjX3VyYl9kZXYodXJiKSwgXFxcInVyYiAlcCBlcnJvciAlZFxcXFxuXFxcIiwgdXJiLCB1cmItXFx1MDAzZXN0YXR1cyk7XFxuIDEwODpcXHRcXHRcXHRpZiAodHgtXFx1MDAzZXN1Ym1pdHRlZF91cmJzKysgXFx1MDAzYyBQVVJFTElGSV9VUkJfUkVUUllfTUFYKSB7XFxuIDEwOTpcXHRcXHRcXHRcXHRkZXZfZGJnKHBsZnhsY191cmJfZGV2KHVyYiksIFxcXCJ1cmIgJXAgcmVzdWJtaXQgJWRcXFwiLCB1cmIsXFxuIDExMDpcXHRcXHRcXHRcXHRcXHR0eC1cXHUwMDNlc3VibWl0dGVkX3VyYnMrKyk7XFxuIDExMTpcXHRcXHRcXHRcXHRnb3RvIHJlc3VibWl0O1xcbiAxMTI6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTEzOlxcdFxcdFxcdFxcdGRldl9kYmcocGxmeGxjX3VyYl9kZXYodXJiKSwgXFxcInVyYiAlcCAgbWF4IHJlc3VibWl0cyByZWFjaGVkXFxcIiwgdXJiKTtcXG4gMTE0OlxcdFxcdFxcdFxcdHR4LVxcdTAwM2VzdWJtaXR0ZWRfdXJicyA9IDA7XFxuIDExNTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDExNjpcXHRcXHRcXHR9XFxuIDExNzpcXHRcXHR9XFxuIDExODpcXHRcXG4gMTE5OlxcdFxcdGJ1ZmZlciA9IHVyYi1cXHUwMDNldHJhbnNmZXJfYnVmZmVyO1xcbiAxMjA6XFx0XFx0bGVuZ3RoID0gdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoO1xcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHRpZiAobGVuZ3RoICE9IChQTEZfTVNHX1NUQVRVU19PRkZTRVQgKyAxKSkge1xcbiAxMjM6XFx0XFx0XFx0aWYgKHVzYi1cXHUwMDNlaW5pdGlhbGl6ZWQgXFx1MDAyNlxcdTAwMjYgdXNiLVxcdTAwM2VsaW5rX3VwKVxcbiAxMjQ6XFx0XFx0XFx0XFx0aGFuZGxlX3J4X3BhY2tldCh1c2IsIGJ1ZmZlciwgbGVuZ3RoKTtcXG4gMTI1OlxcdFxcdFxcdGdvdG8gcmVzdWJtaXQ7XFxuIDEyNjpcXHRcXHR9XFxuIDEyNzpcXHRcXG4gMTI4OlxcdFxcdHN0YXR1cyA9IGJ1ZmZlcltQTEZfTVNHX1NUQVRVU19PRkZTRVRdO1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHRzd2l0Y2ggKHN0YXR1cykge1xcbiAxMzE6XFx0XFx0Y2FzZSBTVEFUSU9OX0ZJRk9fQUxNT1NUX0ZVTExfTk9UX01FU1NBR0U6XFxuIDEzMjpcXHRcXHRcXHRkZXZfZGJnKFxcdTAwMjZ1c2ItXFx1MDAzZWludGYtXFx1MDAzZWRldixcXG4gMTMzOlxcdFxcdFxcdFxcdFxcXCJGSUZPIGZ1bGwgbm90IHBhY2tldCByZWNlaXB0XFxcXG5cXFwiKTtcXG4gMTM0OlxcdFxcdFxcdHR4LVxcdTAwM2VtYWNfZmlmb19mdWxsID0gMTtcXG4gMTM1OlxcdFxcdFxcdGZvciAoc2lkeCA9IDA7IHNpZHggXFx1MDAzYyBNQVhfU1RBX05VTTsgc2lkeCsrKVxcbiAxMzY6XFx0XFx0XFx0XFx0dHgtXFx1MDAzZXN0YXRpb25bc2lkeF0uZmxhZyB8PSBTVEFUSU9OX0ZJRk9fRlVMTF9GTEFHO1xcbiAxMzc6XFx0XFx0XFx0YnJlYWs7XFxuIDEzODpcXHRcXHRjYXNlIFNUQVRJT05fRklGT19BTE1PU1RfRlVMTF9NRVNTQUdFOlxcbiAxMzk6XFx0XFx0XFx0ZGV2X2RiZyhcXHUwMDI2dXNiLVxcdTAwM2VpbnRmLVxcdTAwM2VkZXYsIFxcXCJGSUZPIGZ1bGwgcGFja2V0IHJlY2VpcHRcXFxcblxcXCIpO1xcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHRcXHRmb3IgKHNpZHggPSAwOyBzaWR4IFxcdTAwM2MgTUFYX1NUQV9OVU07IHNpZHgrKylcXG4gMTQyOlxcdFxcdFxcdFxcdHR4LVxcdTAwM2VzdGF0aW9uW3NpZHhdLmZsYWcgXFx1MDAyNj0gU1RBVElPTl9BQ1RJVkVfRkxBRztcXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0XFx0cGxmeGxjX3NlbmRfcGFja2V0X2Zyb21fZGF0YV9xdWV1ZSh1c2IpO1xcbiAxNDU6XFx0XFx0XFx0YnJlYWs7XFxuIDE0NjpcXHRcXHRjYXNlIFNUQVRJT05fQ09OTkVDVF9NRVNTQUdFOlxcbiAxNDc6XFx0XFx0XFx0dXNiLVxcdTAwM2VsaW5rX3VwID0gMTtcXG4gMTQ4OlxcdFxcdFxcdGRldl9kYmcoXFx1MDAyNnVzYi1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwiU1RfQ09OTkVDVF9NU0cgcGFja2V0IHJlY2VpcHRcXFxcblxcXCIpO1xcbiAxNDk6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjMyLjg4NDc4ODEyMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzIyOTEwOTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLiBIZXJlJ3MgaG93IEknbSB0aGlua2luZyBhYm91dCBpdDpcblxuKipBbmFseXppbmcgdGhlIGBoYW5kbGVfcnhfcGFja2V0YCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdW5kZXJzdGFuZCB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbS4gV2hhdCBpcyBgaGFuZGxlX3J4X3BhY2tldGAgc3VwcG9zZWQgdG8gYmUgZG9pbmc/IE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCdzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgcmVjZWl2aW5nIGFuZCBwcm9jZXNzaW5nIG5ldHdvcmsgcGFja2V0cy4gR2l2ZW4gdGhlIG5hbWUsIHRoYXQgZmVlbHMgbGlrZSBhIHNhZmUgYmV0LiBCdXQgSSBuZWVkIHRvIGdvIGRlZXBlciB0aGFuIGp1c3QgZ3Vlc3NpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0IGhhbmRsZXMgdGhvc2UgcGFja2V0cy4gV2hhdCBzdGVwcyBkb2VzIGl0IHRha2U/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBJIGNhbiBpbW1lZGlhdGVseSBzcG90IGJhc2VkIG9uIGl0cyBuYW1lIGFsb25lPyBJIG5lZWQgdG8gdGhpbmsgbGlrZSBhbiBhdHRhY2tlciBoZXJlLiBEb2VzIGl0IHZhbGlkYXRlIHRoZSBzaXplIG9mIHRoZSBpbmNvbWluZyBwYWNrZXQ/IERvZXMgaXQgY2hlY2sgZm9yIG1hbGZvcm1lZCBkYXRhPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcG9pbnRzIG9mIG92ZXJmbG93PyBCZWZvcmUgSSBzdGFydCB0byBhbmFseXplLCBJJ20gZ29pbmcgdG8gZm9ybXVsYXRlIGEgZmV3IHF1ZXN0aW9ucyB0aGF0IG5lZWQgYW5zd2VyaW5nLiBJJ2xsIG5lZWQgdG8ga25vdzpcbiogICBXaGF0IGlzIHRoZSBpbnB1dCB0byB0aGUgZnVuY3Rpb24/XG4qICAgV2hhdCBkb2VzIHRoZSBmdW5jdGlvbiBkbyB3aXRoIHRoZSBpbnB1dD9cbiogICBXaGF0IGFyZSB0aGUgb3V0cHV0cyBvZiB0aGUgZnVuY3Rpb24/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5ODksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjM4LjYwNzcwMTcyOVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUxNTk5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX3J4X3BhY2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYz0zNj12b2lkIHBsZnhsY19zZW5kX3BhY2tldF9mcm9tX2RhdGFfcXVldWUoc3RydWN0IHBsZnhsY191c2IgKnVzYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy02Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM6NjM6c3RhdGljIHZvaWQgaGFuZGxlX3J4X3BhY2tldChzdHJ1Y3QgcGxmeGxjX3VzYiAqdXNiLCBjb25zdCB1OCAqYnVmZmVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy02NC1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM9Njk9c3RhdGljIHZvaWQgcnhfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy0xMjMtXFx0XFx0aWYgKHVzYi1cXHUwMDNlaW5pdGlhbGl6ZWQgXFx1MDAyNlxcdTAwMjYgdXNiLVxcdTAwM2VsaW5rX3VwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYzoxMjQ6XFx0XFx0XFx0aGFuZGxlX3J4X3BhY2tldCh1c2IsIGJ1ZmZlciwgbGVuZ3RoKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtMTI1LVxcdFxcdGdvdG8gcmVzdWJtaXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjM4LjY5Mjg2OTE1OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjY1OTI4ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjpcblxuKipBbmFseXppbmcgdGhlIFJYIFBhY2tldCBIYW5kbGluZyBpbiBQdXJlTGlGaSBVU0IgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGBoYW5kbGVfcnhfcGFja2V0YCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgdGhlIGRyaXZlciByZWNlaXZlcyBhbmQgcHJvY2Vzc2VzIGRhdGEgY29taW5nIGluIG92ZXIgdGhlIFVTQiBjb25uZWN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRlYnVnIHBvdGVudGlhbCBpc3N1ZXMgb3Igb3B0aW1pemUgcGVyZm9ybWFuY2UgaW4gdGhpcyBQdXJlTGlGaSBzZXR1cC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIGNvbW1vbiB0aGluZ3MgdG8gbG9vayBmb3I6IGludGVycnVwdCBoYW5kbGluZywgYnVmZmVyIG1hbmFnZW1lbnQsIGVycm9yIGNoZWNraW5nLCBhbmQgZGF0YSB2YWxpZGF0aW9uLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIGRlYWxzIHdpdGggZnJhZ21lbnRlZCBwYWNrZXRzLCBhbnkgY2hlY2tzdW0gdmVyaWZpY2F0aW9uLCBhbmQgaG93IGl0IGhhbmRzIHRoZSBwcm9jZXNzZWQgZGF0YSBvZmYgdG8gdGhlIGhpZ2hlciBuZXR3b3JrIGxheWVycy4gSSdtIGV4cGVjdGluZyBzb21lIHN0YW5kYXJkIFVTQiBkZXZpY2UgaW50ZXJhY3Rpb24sIGxpa2UgcmVhZGluZyBmcm9tIGVuZHBvaW50cywgYW5kIHBlcmhhcHMgc29tZSBkZXZpY2Utc3BlY2lmaWMgY29tbWFuZHMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMuIExldCdzIHNlZSBob3cgd2VsbCBpdCdzIGJlZW4gaW1wbGVtZW50ZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3IgaW1wcm92ZW1lbnQgb3Igb3B0aW1pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTY5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTQ6NDIuOTU4ODAxMTU5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gIDYxOlxcdH1cXG4gIDYyOlxcdFxcbiAgNjM6XFx0c3RhdGljIHZvaWQgaGFuZGxlX3J4X3BhY2tldChzdHJ1Y3QgcGxmeGxjX3VzYiAqdXNiLCBjb25zdCB1OCAqYnVmZmVyLFxcbiAgNjQ6XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKVxcbiAgNjU6XFx0e1xcbiAgNjY6XFx0XFx0cGxmeGxjX21hY19yeChwbGZ4bGNfdXNiX3RvX2h3KHVzYiksIGJ1ZmZlciwgbGVuZ3RoKTtcXG4gIDY3OlxcdH1cXG4gIDY4OlxcdFxcbiAgNjk6XFx0c3RhdGljIHZvaWQgcnhfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4gIDcwOlxcdHtcXG4gIDcxOlxcdFxcdHN0cnVjdCBwbGZ4bGNfdXNiX3R4ICp0eDtcXG4gIDcyOlxcdFxcdHN0cnVjdCBwbGZ4bGNfdXNiICp1c2I7XFxuICA3MzpcXHRcXHR1bnNpZ25lZCBpbnQgbGVuZ3RoO1xcbiAgNzQ6XFx0XFx0Y29uc3QgdTggKmJ1ZmZlcjtcXG4gIDc1OlxcdFxcdHUxNiBzdGF0dXM7XFxuICA3NjpcXHRcXHR1OCBzaWR4O1xcbiAgNzc6XFx0XFx0aW50IHI7XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdGlmICghdXJiKSB7XFxuICA4MDpcXHRcXHRcXHRwcl9lcnIoXFxcInVyYiBpcyBOVUxMXFxcXG5cXFwiKTtcXG4gIDgxOlxcdFxcdFxcdHJldHVybjtcXG4gIDgyOlxcdFxcdH1cXG4gIDgzOlxcdFxcdGlmICghdXJiLVxcdTAwM2Vjb250ZXh0KSB7XFxuICA4NDpcXHRcXHRcXHRwcl9lcnIoXFxcInVyYiBjdHggaXMgTlVMTFxcXFxuXFxcIik7XFxuICA4NTpcXHRcXHRcXHRyZXR1cm47XFxuICA4NjpcXHRcXHR9XFxuICA4NzpcXHRcXHR1c2IgPSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuICA4ODpcXHRcXG4gIDg5OlxcdFxcdGlmICh1c2ItXFx1MDAzZWluaXRpYWxpemVkICE9IDEpIHtcXG4gIDkwOlxcdFxcdFxcdHByX2VycihcXFwidXNiIGlzIG5vdCBpbml0aWFsaXplZFxcXFxuXFxcIik7XFxuICA5MTpcXHRcXHRcXHRyZXR1cm47XFxuICA5MjpcXHRcXHR9XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdHR4ID0gXFx1MDAyNnVzYi1cXHUwMDNldHg7XFxuICA5NTpcXHRcXHRzd2l0Y2ggKHVyYi1cXHUwMDNlc3RhdHVzKSB7XFxuICA5NjpcXHRcXHRjYXNlIDA6XFxuICA5NzpcXHRcXHRcXHRicmVhaztcXG4gIDk4OlxcdFxcdGNhc2UgLUVTSFVURE9XTjpcXG4gIDk5OlxcdFxcdGNhc2UgLUVJTlZBTDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTQ6NDIuOTU4OTczMjg5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1MTE2Mzk1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSWCBQYXRoIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGhvdyB0aGUgcmVjZWl2ZSBwYXRoIGhhbmRsZXMgaW5jb21pbmcgVVNCIHRyYW5zZmVycyBhbmQgcHJvY2Vzc2VzIHRoZSBkYXRhLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGVyZSB3ZXJlIHNldmVyYWwgcmVsYXRlZCB2dWxuZXJhYmlsaXRpZXMsIG1vc3RseSBsaW5rZWQgdG8gdW5jaGVja2VkIGFzc3VtcHRpb25zIGFib3V0IHBhY2tldCBsZW5ndGhzIGFuZCBidWZmZXIgcG9pbnRlcnMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gdmFyaW91cyBpc3N1ZXMgZnJvbSBvdXQtb2YtYm91bmRzIHJlYWRzIHRvIGluY29ycmVjdCBmcmFtZSBwcm9jZXNzaW5nLlxuXG5GaXJzdCwgaW4gYHJ4X3VyYl9jb21wbGV0ZWAsIHRoZSBcImJlZm9yZVwiIGNvZGUgaGFkIGEgbGVuZ3RoIGNhbGN1bGF0aW9uIHRoYXQgd2FzIGZ1bmRhbWVudGFsbHkgZmxhd2VkLiBJdCBhc3N1bWVkIGBsZW5ndGhgIGNvdWxkIGJlIHJlYWQgb3V0IGZyb20gYGJ1ZmZlciArIHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKWAsIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gd2FzIGluY29ycmVjdDogaXQgcmVhZCB1c2luZyBgbGUzMl90b19jcHVgIHdoZW4gYGJlMzJgIHdhcyB1c2VkLiBUaGUgYWN0dWFsIHBhY2tldCBsZW5ndGggd2FzIHN1cHBvc2VkIHRvIGJlIGluIGB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aGAuIFRoYXQncyBhIG1ham9yIHZ1bG5lcmFiaWxpdHkuIFRoZSBwYXRjaCBjb3JyZWN0bHkgY29ycmVjdHMgdGhpcyBhbmQgdXNlcyBgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGhgIGZvciBsZW5ndGguIFRoaXMgZW5zdXJlcyB3ZSdyZSBub3QgcmVhZGluZyBnYXJiYWdlIG9yIGJ5cGFzc2luZyBwb3RlbnRpYWwgc2l6ZSBjaGVja3MsIHdoaWNoIHRoZSBlYXJsaWVyIHZlcnNpb24gZGlkLlxuXG5TZWNvbmQsIHdpdGhpbiBgcGxmeGxjX21hY19yeGAsIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBtaXNzaW5nIGEgY3J1Y2lhbCBjaGVjazogY29uZmlybWluZyB0aGF0IHRoZSByZWNlaXZlZCBgbGVuZ3RoYCB3YXMgc3VmZmljaWVudCB0byBjb250YWluIHRoZSBiYXNpYyBoZWFkZXIgYW5kIHBheWxvYWQgbGVuZ3RoLiBXaXRob3V0IHRoYXQgaW5pdGlhbCBjaGVjaywgaXQgd2FzIHBvc3NpYmxlIGZvciB0aGUgY29kZSB0byBhdHRlbXB0IHRvIGRlcmVmZXJlbmNlIGEgYHN0cnVjdCByeF9zdGF0dXNgIHBvaW50ZXIgb3IgcmVhZCBhIHBheWxvYWQgbGVuZ3RoIGZyb20gYW4gaW52YWxpZCBtZW1vcnkgYWRkcmVzcywgb3BlbmluZyBpdCB1cCB0byBjcmFzaGluZyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIHVucHJlZGljdGFibGUgYmVoYXZpb3IuIFRoZSBmaXggYWRkcyB0aGUgY2hlY2sgYGxlbmd0aCBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpICsgc2l6ZW9mKHUzMilgLCB3aGljaCBpcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlcmUgaXMgZW5vdWdoIG9mIHRoZSBidWZmZXIgdG8gZXZlbiBwYXJzZSBiYXNpYyBkYXRhLlxuXG5UaGlyZCwgYW5kIHBlcmhhcHMgbW9zdCBhbGFybWluZ2x5LCB0aGUgYHBsZnhsY19maWx0ZXJfYWNrYCBjYWxsIHdhcyBoYXBwZW5pbmcgKmJlZm9yZSogdGhlIGBidWZmZXJgIHBvaW50ZXIgaGFkIGJlZW4gYWR2YW5jZWQgdG8gcG9pbnQgdG8gdGhlIGFjdHVhbCA4MDIuMTEgZnJhbWUuIEVzc2VudGlhbGx5LCB0aGUgY29kZSB3YXMgdHJlYXRpbmcgYHJ4X3N0YXR1c2Agc3RydWN0dXJlIGFzIElFRUUgODAyLjExIGhlYWRlci4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGJ5IG1vdmluZyB0aGUgYGJ1ZmZlcmAgcG9pbnRlciAqYWZ0ZXIqIHJlYWRpbmcgYHJ4X3N0YXR1c2AgYW5kIGBwYXlsb2FkX2xlbmd0aGAuIFRoZSBwYXRjaCB0aGVuIG1ha2VzIE1UVSBjaGVja3MgYW5kIGNoZWNrcyB0aGF0IHRoZSBwYXlsb2FkIGxlbmd0aCBwbHVzIGhlYWRlcnMgaXMgbGVzcyB0aGFuIHRoZSB0b3RhbCBsZW5ndGgsIHRvIHByZXZlbnQgb3V0IG9mIGJvdW5kcyByZWFkcy4gVGhpcyBpcyBhbiBhYnNvbHV0ZWx5IGNyaXRpY2FsIGNvcnJlY3Rpb24gdG8gZW5zdXJlIHRoYXQgdGhlIHByb3BlciBmcmFtZSBpcyBiZWluZyBwcm9jZXNzZWQgYnkgdGhlIGZpbHRlcmluZyBmdW5jdGlvbi5cblxuSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyB0aWdodGVuaW5nIHVwIGEgc2VyaWVzIG9mIGxvb3NlIGVuZHMgaW4gdGhlIHJlY2VpdmUgcGF0aC4gQnkgbWFraW5nIGl0IHNhZmVyLCB3ZSBhcmUgbm90IGFsbG93aW5nIGRhdGEgdG8gYmUgbWlzcmVhZCwgYW5kIHJlZHVjaW5nIHRoZSBsaWtlbGlob29kIG9mIGNyYXNoZXMgb3IgaW5jb3JyZWN0IGZyYW1lIHByb2Nlc3NpbmcuIEkgd2lsbCBleGFtaW5lIGBwbGZ4bGNfZmlsdGVyX2Fja2AgZnVydGhlciB0byBzZWUgd2hhdCBpdCdzIGRvaW5nIHdpdGggdGhlIDgwMi4xMSBoZWFkZXIsIGJ1dCB0aGlzIHNldCBvZiBmaXhlcyBpcyBkZWZpbml0ZWx5IGEgbW92ZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzUxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjQ5LjQ3MDYyNDMxNVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MTM4Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBsZnhsY19maWx0ZXJfYWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jPTI3OD1zdGF0aWMgdm9pZCBwbGZ4bGNfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMtMzM3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYzozMzg6c3RhdGljIGludCBwbGZ4bGNfZmlsdGVyX2FjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9oZHIgKnJ4X2hkcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMtMzM5LVxcdFxcdFxcdCAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jPTM5Mz1pbnQgcGxmeGxjX21hY19yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY29uc3QgdTggKmJ1ZmZlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYy00NDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jOjQ0MTpcXHRpZiAocGxmeGxjX2ZpbHRlcl9hY2soaHcsIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWJ1ZmZlciwgXFx1MDAyNnN0YXRzKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYy00NDItXFx0ICAgICFtYWMtXFx1MDAzZXBhc3NfY3RybClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTQ6NDkuNTg3NzcwODIzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NjI1NDQ1MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBwbGZ4bGNfZmlsdGVyX2Fja2AgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcGxmeGxjX2ZpbHRlcl9hY2tgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBKdXN0IHRoZSBuYW1lIGFsb25lLCBgZmlsdGVyX2Fja2AsIHN1Z2dlc3RzIGEgcm9sZSBpbiBhY2tub3dsZWRnaW5nIG9yIHByb2Nlc3NpbmcgZmlsdGVyZWQgZGF0YS4gVGhlIFwicGxmeGxjXCIgcHJlZml44oCmIHRoYXQgaGludHMgYXQgdGhlIHNwZWNpZmljIGZpbHRlcmluZyBtZWNoYW5pc20gb3IgbW9kdWxlIGl0J3MgcGFydCBvZjsgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIHRoZSBuYW1pbmcgY29udmVudGlvbnMgYW5kIGNvbnRleHQgd2l0aGluIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSBzdXNwZWN0IGl0J3MgZGVhbGluZyB3aXRoIHNvbWUgZm9ybSBvZiBwYWNrZXQgbGV2ZWwgZmlsdGVyaW5nLCBwb3NzaWJseSByZWxhdGVkIHRvIGZsb3cgY29udHJvbCBvciBjb25uZWN0aW9uIG1hbmFnZW1lbnQuIEtub3dpbmcgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYXJlYXMgd2hlcmUgaXQgbWlnaHQgYmUgZXhwb3NlZCB0byBtYWxpY2lvdXMgb3IgdW5leHBlY3RlZCBpbnB1dHMsIHBhcnRpY3VsYXJseSBpZiBpdCBkZWFscyB3aXRoIGFueSBzb3J0IG9mIHN0YXRlIG1hbmFnZW1lbnQuIExldCdzIHNlZSBob3cgaXQgaGFuZGxlcyB2YXJpb3VzIEFDSyB2YWx1ZXMgYW5kIGZsYWdzLiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgcGFzc2VkIGludG8gaXQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBsb29raW5nIGZvcj8gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBpZiB0aGlzIHRoaW5nIGlzIGFzIHJvYnVzdCBhcyBpdCBuZWVkcyB0byBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzQsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1NDo1Mi4wNTAzMTg2MzNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzgsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzg6XFx0c3RhdGljIGludCBwbGZ4bGNfZmlsdGVyX2FjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9oZHIgKnJ4X2hkcixcXG4gMzM5OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzKVxcbiAzNDA6XFx0e1xcbiAzNDE6XFx0XFx0c3RydWN0IHBsZnhsY19tYWMgKm1hYyA9IHBsZnhsY19od19tYWMoaHcpO1xcbiAzNDI6XFx0XFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqcTtcXG4gMzQzOlxcdFxcdGludCBpLCBwb3NpdGlvbiA9IDA7XFxuIDM0NDpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAzNDU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gMzQ2OlxcdFxcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0aWYgKCFpZWVlODAyMTFfaXNfYWNrKHJ4X2hkci1cXHUwMDNlZnJhbWVfY29udHJvbCkpXFxuIDM0OTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMzUwOlxcdFxcbiAzNTE6XFx0XFx0ZGV2X2RiZyhwbGZ4bGNfbWFjX2RldihtYWMpLCBcXFwiQUNLIFJlY2VpdmVkXFxcXG5cXFwiKTtcXG4gMzUyOlxcdFxcbiAzNTM6XFx0XFx0LyogY29kZSBiYXNlZCBvbiB6eSBkcml2ZXIsIHRoaXMgbG9naWMgbWF5IG5lZWQgZml4ICovXFxuIDM1NDpcXHRcXHRxID0gXFx1MDAyNm1hYy1cXHUwMDNlYWNrX3dhaXRfcXVldWU7XFxuIDM1NTpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRcXHRza2JfcXVldWVfd2FsayhxLCBza2IpIHtcXG4gMzU4OlxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICp0eF9oZHI7XFxuIDM1OTpcXHRcXG4gMzYwOlxcdFxcdFxcdHBvc2l0aW9uKys7XFxuIDM2MTpcXHRcXG4gMzYyOlxcdFxcdFxcdGlmIChtYWMtXFx1MDAzZWFja19wZW5kaW5nIFxcdTAwMjZcXHUwMDI2IHNrYl9xdWV1ZV9pc19maXJzdChxLCBza2IpKVxcbiAzNjM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDM2NDpcXHRcXHRcXHRpZiAobWFjLVxcdTAwM2VhY2tfcGVuZGluZyA9PSAwKVxcbiAzNjU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDM2NjpcXHRcXG4gMzY3OlxcdFxcdFxcdHR4X2hkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cXHUwMDNlZGF0YTtcXG4gMzY4OlxcdFxcdFxcdGlmIChsaWtlbHkoZXRoZXJfYWRkcl9lcXVhbCh0eF9oZHItXFx1MDAzZWFkZHIyLCByeF9oZHItXFx1MDAzZWFkZHIxKSkpIHtcXG4gMzY5OlxcdFxcdFxcdFxcdGZvdW5kID0gMTtcXG4gMzcwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzNzE6XFx0XFx0XFx0fVxcbiAzNzI6XFx0XFx0fVxcbiAzNzM6XFx0XFxuIDM3NDpcXHRcXHRpZiAoZm91bmQpIHtcXG4gMzc1OlxcdFxcdFxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBwb3NpdGlvbjsgaSsrKVxcbiAzNzY6XFx0XFx0XFx0XFx0c2tiID0gX19za2JfZGVxdWV1ZShxKTtcXG4gMzc3OlxcdFxcdFxcdGlmIChpID09IHBvc2l0aW9uKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjUyLjA1MDQ1OTg1M1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzAxNzQ1NzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSBhIEtNU0FOIGFuZCBLQVNBTiBwZXJzcGVjdGl2ZSwgSSd2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IGl0J3MgZGVhbGluZyB3aXRoIHRoZSBgcHVyZWxpZmkvcGxmeGxjYCBkcml2ZXIgYW5kIGZvY3VzZXMgb24gaW1wcm92aW5nIHRoZSByb2J1c3RuZXNzIG9mIFVTQiBSWCBidWZmZXIgaGFuZGxpbmcuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgYWRkaW5nIG1pc3NpbmcgYm91bmRzIGFuZCBsZW5ndGggY2hlY2tzLCAqZml4aW5nKiBidWZmZXIgb2Zmc2V0cywgYW5kIGdlbmVyYWxseSBzaG9yaW5nIHVwIHRoZSBjb2RlJ3MgcmVzaWxpZW5jZSB0byBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcy5cblxuRmlyc3QsIEkgZXhhbWluZWQgaXQgZm9yIHBvdGVudGlhbCBLTVNBTiByZWQgZmxhZ3MuIEkgbG9va2VkIGZvciBpbnN0YW5jZXMgd2hlcmUga2VybmVsIHN0cnVjdHVyZXMgd2VyZSBiZWluZyBwYXNzZWQgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIGJ1dCBJIHNlZSBub25lLiBUaGUgZHJpdmVyIGRlYWxzIHdpdGggVVNCIGRhdGEgKGB1cmItXHUwMDNldHJhbnNmZXJfYnVmZmVyYCksIGFuZCBpdCdzIGJlaW5nIGZvcndhcmRlZCB0byBgbWFjODAyMTFgIHZpYSBgaWVlZTgwMjExX3J4X2lycXNhZmUoKWAuIEltcG9ydGFudGx5LCBhbnl0aGluZyByZWxhdGVkIHRvIGBzdGF0c2AgaXMgZXhwbGljaXRseSB6ZXJvZWQgb3V0IHdpdGggYG1lbXNldGAuIE5vIGRpY2Ugb24gdGhlIHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyBzZW50IHRvIHVzZXJzcGFjZS5cblxuTmV4dCwgSSBsb29rZWQgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBZ2Fpbiwgbm90aGluZy4gVGhlIGxlbmd0aHMgYXJlIGNvbWluZyBmcm9tIHRoZSBVU0IgY29yZSAoYHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoYCksIGFuZCBgYnVmZmVyYCBpcyB0aGUgYHVyYi1cdTAwM2V0cmFuc2Zlcl9idWZmZXJgLiBBbGwgbG9jYWxzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBJdCdzIGNsZWFuLlxuXG5UaGlyZGx5LCBJIGNoZWNrZWQgZm9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIGJ1dCB0aGlzIGlzbid0IHRoZSBjYXNlIGhlcmUuXG5cbkZvdXJ0aCwgSSBjaGVja2VkIGZvciBjaGFuZ2VzIGludm9sdmluZyBidWZmZXIgbWFuaXB1bGF0aW9ucywgbGVuZ3RocywgYW5kIGFueSBsb2dpYyB0aGF0IG1pZ2h0IHBlcm1pdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLiBJbiBmYWN0LCB0aGlzIHBhdGNoIGlzICphZGRpbmcqIGJvdW5kcyBjaGVja3M7IHByZXZlbnRpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycyEgU3BlY2lmaWNhbGx5LCBuZXcgY2hlY2tzIG9uIGBsZW5ndGhgIGFyZSBhZGRlZCB0byBwcmV2ZW50IHRoZSBvdXQtb2YtYm91bmRzIHJlYWRzLlxuXG5Ob3csIGxldCdzIGRvdWJsZS1jaGVjayBhbGwgYXNwZWN0cy4gSSBjb25maXJtZWQgdGhhdCBgcnhfdXJiX2NvbXBsZXRlYCB1c2VzIGB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aGAgY29ycmVjdGx5LCBub3QgYXR0ZW1wdGluZyB0byBpbnRlcnByZXQgYnl0ZXMgYXMgYSBsZW5ndGguIGBwbGZ4bGNfbWFjX3J4YCBjYXJlZnVsbHkgY2hlY2tzIGJ1ZmZlciBsZW5ndGggYWdhaW5zdCBoZWFkZXIgc2l6ZXMsIE1UVSwgYW5kIHRvdGFsIHBhY2tldCBsZW5ndGggYmVmb3JlIGNhbGxpbmcgYHBsZnhsY19maWx0ZXJfYWNrYC4gVGhpcyBmaXhlcyBidWdzLlxuXG5NeSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBpcyAqbm90KiBhIEtNU0FOIGlzc3VlLiBUaGUgYnVncyB0aGF0IGFyZSBiZWluZyBmaXhlZCBhcmUgYm91bmRzIGNoZWNrIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvbiBVU0IgVVJCIGJ1ZmZlcnMsIHByZWNpc2VseSB0aGUga2luZHMgb2YgbWVtb3J5IHNhZmV0eSBjb25jZXJucyB0aGF0IEtBU0FOIGV4Y2VscyBhdCBkZXRlY3RpbmcuIEtNU0FOLCBpbiB0aGlzIGNvbnRleHQsIGlzIHVubmVjZXNzYXJ5LiBUaGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgc3RhY2svaGVhcCByZWFkcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBUaGUgYHN0YXRzYCBzdHJ1Y3R1cmUgaXMgYmVpbmcgemVyb2VkLlxuXG5TbywgZnJvbSBteSBwZXJzcGVjdGl2ZSwgTmVlZHNLTVNBTiBzaG91bGQgYWJzb2x1dGVseSBiZSBgZmFsc2VgLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMjksIk91dHB1dFRva2VucyI6MjE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTQ6NTguNzUyMjA4NjY2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwYWNrZXQgdmFsaWRhdGlvbiBpbiB0aGUgUHVyZUxpRmkgKHBsZnhsYykgd2lyZWxlc3MgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0IHVzZXMgYHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aGAgcmF0aGVyIHRoYW4gYW4gdW52YWxpZGF0ZWQgZmllbGQgZnJvbSB0aGUgYnVmZmVyLCBhZGRzIG1pbmltdW0gbGVuZ3RoIGNoZWNrcyBiZWZvcmUgcGFyc2luZyBgcnhfc3RhdHVzYCBhbmQgcGF5bG9hZCBsZW5ndGgsIHZlcmlmaWVzIHRoYXQgdGhlIHBheWxvYWQgbGVuZ3RoIGRvZXMgbm90IGV4Y2VlZCB0aGUgVVJCIGJ1ZmZlciBsZW5ndGgsIGFuZCBmaXhlcyB0aGUgYnVmZmVyIG9mZnNldCBwYXNzZWQgdG8gYHBsZnhsY19maWx0ZXJfYWNrKClgLlxcblxcblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBvdXQtb2YtYm91bmRzIGJ1ZmZlciBvdmVycmVhZHMsIHdoaWNoIGZhbGwgc3F1YXJlbHkgdW5kZXIgS0FTQU4ncyBkb21haW4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZSByZWFkcywgZG9lcyBub3QgYWx0ZXIgc3RydWN0dXJlIHBhZGRpbmcvaW5pdGlhbGl6YXRpb24gc2VudCB0byB1c2Vyc3BhY2UsIGFuZCBhbGwgbG9jYWwgc3RydWN0dXJlcyAoc3VjaCBhcyBgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHNgKSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBgbWVtc2V0YC4gVGh1cywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcGFja2V0IHZhbGlkYXRpb24gaW4gdGhlIFB1cmVMaUZpIChwbGZ4bGMpIHdpcmVsZXNzIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCB1c2VzIGB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGhgIHJhdGhlciB0aGFuIGFuIHVudmFsaWRhdGVkIGZpZWxkIGZyb20gdGhlIGJ1ZmZlciwgYWRkcyBtaW5pbXVtIGxlbmd0aCBjaGVja3MgYmVmb3JlIHBhcnNpbmcgYHJ4X3N0YXR1c2AgYW5kIHBheWxvYWQgbGVuZ3RoLCB2ZXJpZmllcyB0aGF0IHRoZSBwYXlsb2FkIGxlbmd0aCBkb2VzIG5vdCBleGNlZWQgdGhlIFVSQiBidWZmZXIgbGVuZ3RoLCBhbmQgZml4ZXMgdGhlIGJ1ZmZlciBvZmZzZXQgcGFzc2VkIHRvIGBwbGZ4bGNfZmlsdGVyX2FjaygpYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3MgaW5wdXQgdmFsaWRhdGlvbiBhbmQgb3V0LW9mLWJvdW5kcyBidWZmZXIgb3ZlcnJlYWRzLCB3aGljaCBmYWxsIHNxdWFyZWx5IHVuZGVyIEtBU0FOJ3MgZG9tYWluLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGUgcmVhZHMsIGRvZXMgbm90IGFsdGVyIHN0cnVjdHVyZSBwYWRkaW5nL2luaXRpYWxpemF0aW9uIHNlbnQgdG8gdXNlcnNwYWNlLCBhbmQgYWxsIGxvY2FsIHN0cnVjdHVyZXMgKHN1Y2ggYXMgYHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHN0YXRzYCkgYXJlIGV4cGxpY2l0bHkgemVyb2VkIHdpdGggYG1lbXNldGAuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowjhccr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 06:23:45 +0000 UTC FinishedAt: 2026-09-07 06:55:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PLFXLC", "WLAN_VENDOR_PURELIFI", "MAC80211", "CFG80211", "USB", "WLAN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "1b60ed34f712e9f606d80951f1586f4274ebadf1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PLFXLC", "WLAN_VENDOR_PURELIFI", "MAC80211", "CFG80211", "USB", "WLAN" ], "series_id": "028a71d4-0324-4c51-8e2b-ed934f2fec5a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "plfxlc_mac_rx", "rx_urb_complete", "handle_rx_packet" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BMRlhMQyYjMzQ7LAogICAgJiMzNDtXTEFOX1ZFTkRPUl9QVVJFTElGSSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7V0xBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BsZnhsY19tYWNfcngmIzM0OywKICAgICYjMzQ7cnhfdXJiX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O2hhbmRsZV9yeF9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwYWNrZXQgdmFsaWRhdGlvbiBpbiB0aGUgUHVyZUxpRmkgKHBsZnhsYykgd2lyZWxlc3MgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0IHVzZXMgYHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoYCByYXRoZXIgdGhhbiBhbiB1bnZhbGlkYXRlZCBmaWVsZCBmcm9tIHRoZSBidWZmZXIsIGFkZHMgbWluaW11bSBsZW5ndGggY2hlY2tzIGJlZm9yZSBwYXJzaW5nIGByeF9zdGF0dXNgIGFuZCBwYXlsb2FkIGxlbmd0aCwgdmVyaWZpZXMgdGhhdCB0aGUgcGF5bG9hZCBsZW5ndGggZG9lcyBub3QgZXhjZWVkIHRoZSBVUkIgYnVmZmVyIGxlbmd0aCwgYW5kIGZpeGVzIHRoZSBidWZmZXIgb2Zmc2V0IHBhc3NlZCB0byBgcGxmeGxjX2ZpbHRlcl9hY2soKWAuXG5cblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBvdXQtb2YtYm91bmRzIGJ1ZmZlciBvdmVycmVhZHMsIHdoaWNoIGZhbGwgc3F1YXJlbHkgdW5kZXIgS0FTQU4mIzM5O3MgZG9tYWluLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGUgcmVhZHMsIGRvZXMgbm90IGFsdGVyIHN0cnVjdHVyZSBwYWRkaW5nL2luaXRpYWxpemF0aW9uIHNlbnQgdG8gdXNlcnNwYWNlLCBhbmQgYWxsIGxvY2FsIHN0cnVjdHVyZXMgKHN1Y2ggYXMgYHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHN0YXRzYCkgYXJlIGV4cGxpY2l0bHkgemVyb2VkIHdpdGggYG1lbXNldGAuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgcmVjZXB0aW9uIGFuZCBsZW5ndGggdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgUHVyZUxpRmkgVVNCIHdpcmVsZXNzIGRyaXZlciAocGxmeGxjX21hY19yeCBhbmQgcnhfdXJiX2NvbXBsZXRlKS4gVVNCIG5ldHdvcmsgZHJpdmVycyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB1c2luZyBVU0IgcmF3LWdhZGdldCAvIGR1bW15X2hjZCBlbXVsYXRpb24uIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gdmVyaWZ5IHRoZSBuZXcgYm91bmRzIGNoZWNrcyBhbmQgZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb24gbWFsZm9ybWVkIFVTQiBmcmFtZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNzJmNTU4YmI5YTcyNWYyMDQwMjBiZjkzMzEzZjc2M2NiZTQzYjQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNjo1MzoyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmNcbmluZGV4IGE5MDA0MjE3NTNhYzYuLmQyNjkwY2NlNzk2YTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuY1xuQEAgLTQwNyw2ICYjNDM7NDA3LDkgQEAgaW50IHBsZnhsY19tYWNfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpidWZmZXIsXG4gXHRpZiAoIW1hYy1cdTAwM2V2aWYpXG4gXHRcdHJldHVybiAwO1xuIFxuJiM0MztcdGlmIChsZW5ndGggXHUwMDNjIHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSAmIzQzOyBzaXplb2YodTMyKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdHN0YXR1cyA9IChzdHJ1Y3Qgcnhfc3RhdHVzICopYnVmZmVyO1xuIFxuIFx0bWVtc2V0KFx1MDAyNnN0YXRzLCAwLCBzaXplb2Yoc3RhdHMpKTtcbkBAIC00MjUsMTkgJiM0Mzs0MjgsMTkgQEAgaW50IHBsZnhsY19tYWNfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpidWZmZXIsXG4gXG4gXHRtYWMtXHUwMDNlY3JjX2Vycm9ycyA9IGJlNjRfdG9fY3B1KHN0YXR1cy1cdTAwM2VjcmNfZXJyb3JfY291bnQpO1xuIFxuLVx0LyogVE9ETyBiYWQgZnJhbWUgY2hlY2sgZm9yIENSQyBlcnJvciovXG4tXHRpZiAocGxmeGxjX2ZpbHRlcl9hY2soaHcsIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWJ1ZmZlciwgXHUwMDI2c3RhdHMpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFtYWMtXHUwMDNlcGFzc19jdHJsKVxuLVx0XHRyZXR1cm4gMDtcbi1cbiBcdGJ1ZmZlciAmIzQzOz0gc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpO1xuIFx0cGF5bG9hZF9sZW5ndGggPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyKTtcbiYjNDM7XHRidWZmZXIgJiM0Mzs9IHNpemVvZih1MzIpO1xuIFxuLVx0aWYgKHBheWxvYWRfbGVuZ3RoIFx1MDAzZSAxNTYwKSB7XG4mIzQzO1x0aWYgKHBheWxvYWRfbGVuZ3RoIFx1MDAzZSAxNTYwIHx8XG4mIzQzO1x0ICAgIHBheWxvYWRfbGVuZ3RoICYjNDM7IHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSAmIzQzOyBzaXplb2YodTMyKSBcdTAwM2UgbGVuZ3RoKSB7XG4gXHRcdGRldl9lcnIocGxmeGxjX21hY19kZXYobWFjKSwgXCYjMzQ7IFx1MDAzZSBNVFUgJXVcXG5cJiMzNDssIHBheWxvYWRfbGVuZ3RoKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4tXHRidWZmZXIgJiM0Mzs9IHNpemVvZih1MzIpO1xuJiM0MztcbiYjNDM7XHRpZiAocGxmeGxjX2ZpbHRlcl9hY2soaHcsIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWJ1ZmZlciwgXHUwMDI2c3RhdHMpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhbWFjLVx1MDAzZXBhc3NfY3RybClcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuIFx0ZmMgPSBnZXRfdW5hbGlnbmVkKChfX2xlMTYgKilidWZmZXIpO1xuIFx0bmVlZF9wYWRkaW5nID0gaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSBeIGllZWU4MDIxMV9oYXNfYTQoZmMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuY1xuaW5kZXggNmQyNDA4NmViOGI3YS4uYzMzYjkxMzFiZmRkZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jXG5AQCAtMTE3LDEwICYjNDM7MTE3LDkgQEAgc3RhdGljIHZvaWQgcnhfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbiBcdH1cbiBcbiBcdGJ1ZmZlciA9IHVyYi1cdTAwM2V0cmFuc2Zlcl9idWZmZXI7XG4tXHRsZW5ndGggPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKShidWZmZXIgJiM0Mzsgc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpKSlcbi1cdFx0ICYjNDM7IHNpemVvZih1MzIpO1xuJiM0MztcdGxlbmd0aCA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoO1xuIFxuLVx0aWYgKHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoICE9IChQTEZfTVNHX1NUQVRVU19PRkZTRVQgJiM0MzsgMSkpIHtcbiYjNDM7XHRpZiAobGVuZ3RoICE9IChQTEZfTVNHX1NUQVRVU19PRkZTRVQgJiM0MzsgMSkpIHtcbiBcdFx0aWYgKHVzYi1cdTAwM2Vpbml0aWFsaXplZCBcdTAwMjZcdTAwMjYgdXNiLVx1MDAzZWxpbmtfdXApXG4gXHRcdFx0aGFuZGxlX3J4X3BhY2tldCh1c2IsIGJ1ZmZlciwgbGVuZ3RoKTtcbiBcdFx0Z290byByZXN1Ym1pdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQTEZYTEMmIzM0OywKICAgICYjMzQ7V0xBTl9WRU5ET1JfUFVSRUxJRkkmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O1dMQU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwbGZ4bGNfbWFjX3J4JiMzNDssCiAgICAmIzM0O3J4X3VyYl9jb21wbGV0ZSYjMzQ7LAogICAgJiMzNDtoYW5kbGVfcnhfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCByZWNlcHRpb24gYW5kIGxlbmd0aCB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBQdXJlTGlGaSBVU0Igd2lyZWxlc3MgZHJpdmVyIChwbGZ4bGNfbWFjX3J4IGFuZCByeF91cmJfY29tcGxldGUpLiBVU0IgbmV0d29yayBkcml2ZXJzIGFyZSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHVzaW5nIFVTQiByYXctZ2FkZ2V0IC8gZHVtbXlfaGNkIGVtdWxhdGlvbi4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byB2ZXJpZnkgdGhlIG5ldyBib3VuZHMgY2hlY2tzIGFuZCBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBvbiBtYWxmb3JtZWQgVVNCIGZyYW1lcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI3MmY1NThiYjlhNzI1ZjIwNDAyMGJmOTMzMTNmNzYzY2JlNDNiNDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA2OjUzOjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jCmluZGV4IGE5MDA0MjE3NTNhYzYuLmQyNjkwY2NlNzk2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMKQEAgLTQwNyw2ICYjNDM7NDA3LDkgQEAgaW50IHBsZnhsY19tYWNfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpidWZmZXIsCiAJaWYgKCFtYWMtJmd0O3ZpZikKIAkJcmV0dXJuIDA7CiAKJiM0MzsJaWYgKGxlbmd0aCAmbHQ7IHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSAmIzQzOyBzaXplb2YodTMyKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCXN0YXR1cyA9IChzdHJ1Y3Qgcnhfc3RhdHVzICopYnVmZmVyOwogCiAJbWVtc2V0KCZhbXA7c3RhdHMsIDAsIHNpemVvZihzdGF0cykpOwpAQCAtNDI1LDE5ICYjNDM7NDI4LDE5IEBAIGludCBwbGZ4bGNfbWFjX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqYnVmZmVyLAogCiAJbWFjLSZndDtjcmNfZXJyb3JzID0gYmU2NF90b19jcHUoc3RhdHVzLSZndDtjcmNfZXJyb3JfY291bnQpOwogCi0JLyogVE9ETyBiYWQgZnJhbWUgY2hlY2sgZm9yIENSQyBlcnJvciovCi0JaWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsICZhbXA7c3RhdHMpICZhbXA7JmFtcDsKLQkgICAgIW1hYy0mZ3Q7cGFzc19jdHJsKQotCQlyZXR1cm4gMDsKLQogCWJ1ZmZlciAmIzQzOz0gc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpOwogCXBheWxvYWRfbGVuZ3RoID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1ZmZlcik7CiYjNDM7CWJ1ZmZlciAmIzQzOz0gc2l6ZW9mKHUzMik7CiAKLQlpZiAocGF5bG9hZF9sZW5ndGggJmd0OyAxNTYwKSB7CiYjNDM7CWlmIChwYXlsb2FkX2xlbmd0aCAmZ3Q7IDE1NjAgfHwKJiM0MzsJICAgIHBheWxvYWRfbGVuZ3RoICYjNDM7IHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSAmIzQzOyBzaXplb2YodTMyKSAmZ3Q7IGxlbmd0aCkgewogCQlkZXZfZXJyKHBsZnhsY19tYWNfZGV2KG1hYyksICYjMzQ7ICZndDsgTVRVICV1XG4mIzM0OywgcGF5bG9hZF9sZW5ndGgpOwogCQlyZXR1cm4gMDsKIAl9Ci0JYnVmZmVyICYjNDM7PSBzaXplb2YodTMyKTsKJiM0MzsKJiM0MzsJaWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsICZhbXA7c3RhdHMpICZhbXA7JmFtcDsKJiM0MzsJICAgICFtYWMtJmd0O3Bhc3NfY3RybCkKJiM0MzsJCXJldHVybiAwOwogCiAJZmMgPSBnZXRfdW5hbGlnbmVkKChfX2xlMTYgKilidWZmZXIpOwogCW5lZWRfcGFkZGluZyA9IGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykgXiBpZWVlODAyMTFfaGFzX2E0KGZjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYwppbmRleCA2ZDI0MDg2ZWI4YjdhLi5jMzNiOTEzMWJmZGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jCkBAIC0xMTcsMTAgJiM0MzsxMTcsOSBAQCBzdGF0aWMgdm9pZCByeF91cmJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQogCX0KIAogCWJ1ZmZlciA9IHVyYi0mZ3Q7dHJhbnNmZXJfYnVmZmVyOwotCWxlbmd0aCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopKGJ1ZmZlciAmIzQzOyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykpKQotCQkgJiM0Mzsgc2l6ZW9mKHUzMik7CiYjNDM7CWxlbmd0aCA9IHVyYi0mZ3Q7YWN0dWFsX2xlbmd0aDsKIAotCWlmICh1cmItJmd0O2FjdHVhbF9sZW5ndGggIT0gKFBMRl9NU0dfU1RBVFVTX09GRlNFVCAmIzQzOyAxKSkgewomIzQzOwlpZiAobGVuZ3RoICE9IChQTEZfTVNHX1NUQVRVU19PRkZTRVQgJiM0MzsgMSkpIHsKIAkJaWYgKHVzYi0mZ3Q7aW5pdGlhbGl6ZWQgJmFtcDsmYW1wOyB1c2ItJmd0O2xpbmtfdXApCiAJCQloYW5kbGVfcnhfcGFja2V0KHVzYiwgYnVmZmVyLCBsZW5ndGgpOwogCQlnb3RvIHJlc3VibWl0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTk4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHVyZUxpRmkgVVNCIERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgcmVhY2hhYmlsaXR5IGFuZCBmdXp6YWJpbGl0eS4gRmlyc3QsIHRoZSB0b3VjaGVkIGZpbGVzIGFyZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jYCBhbmQgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuY2AuIEdvb2QsIHRoYXQmIzM5O3MgYSBzdGFydGluZyBwb2ludC4gTm93IEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZHJpdmVyIGl0c2VsZiDigJMgaG93IGl0IHdvcmtzLCBpdHMgY29uZmlndXJhdGlvbiwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBVU0IuIFRpbWUgdG8gcHVsbCB1cCBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgYW5kIGluc3BlY3QuCgpBaGEsIGl0JiMzOTtzIHRoZSBgcGxmeGxjYCBkcml2ZXIsIGEgUHVyZUxpRmkgVVNCIHdpcmVsZXNzIGRyaXZlciwgYXMgZXhwZWN0ZWQuIFRoaXMgbWFrZXMgbWUgY29uc2lkZXIgU3l6a2FsbGVyJiMzOTtzIFVTQiByYXcgZ2FkZ2V0IGVtdWxhdGlvbi4gU2luY2UgaXTigJlzIGEgVVNCIGRyaXZlciwgaXQgKm1pZ2h0KiBiZSBmdXp6YWJsZSB0aHJvdWdoIGBzeXpfdXNiX2Nvbm5lY3RgLCBgdmhjaV9oY2RgLCBgZHVtbXlfaGNkYCwgb3IgYHJhdy1nYWRnZXRgLiBCdXQgY2FuIFN5emthbGxlciByZWFsaXN0aWNhbGx5IGZ1enogUHVyZUxpRmkgVVNCIGRldmljZXMgdXNpbmcgdGhpcyBwYXJ0aWN1bGFyIHJhdyBnYWRnZXQgZW11bGF0aW9uPyBUaGF04oCZcyB0aGUgY3JpdGljYWwgcXVlc3Rpb24uCgpOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGNgIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGNvbmZpZ3VyYXRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIFRoYXQgd2lsbCBnaXZlIG1lIGEgbW9yZSBjb25jcmV0ZSBpZGVhIG9mIGl0cyBhdHRhY2sgc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQTEZYTEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfUExGWExDKVx0XHQ6PSBwbGZ4bGMvXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9LY29uZmlnOjI6Y29uZmlnIFBMRlhMQ1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O3B1cmVMaUZpIFgsIFhMLCBYQyBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1BMRlhMQylcdDo9IHBsZnhsYy5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvTWFrZWZpbGUtMy1wbGZ4bGMtb2JqcyBcdFx0JiM0Mzs9IGNoaXAubyBmaXJtd2FyZS5vIHVzYi5vIG1hYy5vXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaC01LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaDo2OiNpZm5kZWYgUExGWExDX0NISVBfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaDo3OiNkZWZpbmUgUExGWExDX0NISVBfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaC04LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9jaGlwLmg9MTg9ZW51bSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvY2hpcC5oOjE5Olx0UExGWExDX1JBRElPX09GRiA9IDAsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvY2hpcC5oOjIwOlx0UExGWExDX1JBRElPX09OID0gMSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9jaGlwLmgtMjEtfTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvY2hpcC5oPTY0PXN0YXRpYyBpbmxpbmUgdm9pZCBwbGZ4bGNfbWNfYWRkX2FsbChzdHJ1Y3QgcGxmeGxjX21jX2hhc2ggKmhhc2gpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaC02OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9jaGlwLmg6NzA6I2VuZGlmIC8qIFBMRlhMQ19DSElQX0ggKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmgtNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuaDo2OiNpZm5kZWYgUExGWExDX01BQ19IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmg6NzojZGVmaW5lIFBMRlhMQ19NQUNfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5oLTgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5oPTE4Mj1pbnQgcGxmeGxjX3Jlc3RvcmVfc2V0dGluZ3Moc3RydWN0IHBsZnhsY19tYWMgKm1hYyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmgtMTgzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5oOjE4NDojZW5kaWYgLyogUExGWExDX01BQ19IICovXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jPTU3OT1zdGF0aWMgaW50IHByb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy02NDctXHRtc2xlZXAoUExGX01TTEVFUF9USU1FKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYzo2NDg6XHRyID0gcGxmeGxjX2NoaXBfc3dpdGNoX3JhZGlvKGNoaXAsIFBMRlhMQ19SQURJT19PTik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtNjQ5LVx0aWYgKHIgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmgtNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuaDo2OiNpZm5kZWYgUExGWExDX1VTQl9IXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmg6NzojZGVmaW5lIFBMRlhMQ19VU0JfSFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5oLTgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5oPTE5ND1pbnQgcGxmeGxjX3VwbG9hZF9tYWNfYW5kX3NlcmlhbChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmgtMTk3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5oOjE5ODojZW5kaWYgLyogUExGWExDX1VTQl9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI4NAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBQdXJlTGlGaSBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzOiBvcHRpb25zIHJlbGF0ZWQgdG8gZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBQdXJlTGlGaSBQTEZYTEMgZHJpdmVyIGl0c2VsZiwgcGVyaGFwcyBncmFudWxhcml0eSBhdCBhIGZlYXR1cmUgbGV2ZWwgKGUuZy4sIHNwZWNpZmljIFBIWSBsYXllciBmdW5jdGlvbnMsIGRlYnVnZ2luZyBhaWRzLCBvciBwb3dlciBtYW5hZ2VtZW50IGNvbnRyb2xzKS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFuZCBob3cgdGhlIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIgbmV0d29ya2luZyBzdGFjay4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBidWlsZCBzeXN0ZW0gaGFuZGxlcyBpbmNsdXNpb24vZXhjbHVzaW9uIGJhc2VkIG9uIHRhcmdldCBhcmNoaXRlY3R1cmUsIGtlcm5lbCB2ZXJzaW9uLCBvciBvdGhlciBkZXBlbmRlbmNpZXMuIEFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGNvbXBvbmVudHMgYXJlIG9mIHBhcnRpY3VsYXIgaW50ZXJlc3QuIEkmIzM5O20gYWxzbyBrZWVuIHRvIHNwb3QgYW55IHVudXN1YWwgb3Igbm9uLXN0YW5kYXJkIEtjb25maWcgdHJpY2tzIHRoYXQgdGhlIFB1cmVMaUZpIGZvbGtzIG1pZ2h0IGhhdmUgZW1wbG95ZWQuIFVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYWJpbGl0eSBvZiB0aGlzIGRyaXZlciBhbmQgaG93IGVhc3kgaXQgaXMgdG8gY3VzdG9taXplIGZvciBzcGVjaWZpYyBkZXBsb3ltZW50IHNjZW5hcmlvcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBQTEZYTENcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O3B1cmVMaUZpIFgsIFhMLCBYQyBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMSBcdTAwMjZcdTAwMjYgTUFDODAyMTEgXHUwMDI2XHUwMDI2IFVTQlxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBwdXJlTGlGaSBMaUZpIFVTQiB3aXJlbGVzc1xuICAgNzpcdFx0ICAgYWRhcHRlcnMuIFRoZSBwdXJlTGlGaSBYLCBYTCwgWEMgVVNCIGRldmljZXMgYXJlIGJhc2VkIG9uXG4gICA4Olx0XHQgICA4MDIuMTEgT0ZETSBQSFkgYnV0IHVzZXMgbGlnaHQgYXMgdGhlIHRyYW5zbWlzc2lvbiBtZWRpdW0uXG4gICA5Olx0XHQgICBUaGUgZHJpdmVyIHN1cHBvcnRzIGNvbW1vbiA4MDIuMTEgZW5jcnlwdGlvbi9hdXRoZW50aWNhdGlvblxuICAxMDpcdFx0ICAgbWV0aG9kcyBpbmNsdWRpbmcgT3BlbiwgV1BBLCBXUEEyLVBlcnNvbmFsIGFuZFxuICAxMTpcdFx0ICAgV1BBMi1FbnRlcnByaXNlICg4MDIuMVgpLlxuICAxMjpcdFxuICAxMzpcdFx0ICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIG0gaGVyZS4gVGhlIG1vZHVsZSB3aWxsXG4gIDE0Olx0XHQgICBiZSBjYWxsZWQgcGxmeGxjLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NDUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLY29uZmlnIERpdmUgZm9yIFB1cmVMaUZpKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7UmlnaHQsIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBQdXJlTGlGaSBkcml2ZXIgY29uZmlndXJhdGlvbi4mIzM0OyBUaGUgaW1tZWRpYXRlIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBnb2luZyBzdHJhaWdodCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlLiBUaGlzIGZpbGUgaXMsIG9mIGNvdXJzZSwgdGhlIGhlYXJ0IG9mIGRlZmluaW5nIHdoYXQgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSwgd2hpY2ggZGVwZW5kZW5jaWVzIG5lZWQgdG8gYmUgbWV0LCBhbmQgaG93IHRoZSB1c2VyIHdpbGwgaW50ZXJhY3Qgd2l0aCB0aGUgZHJpdmVyIGF0IGJ1aWxkIHRpbWUuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCB2YXJpYWJsZXMsIHdoaWNoIGZlYXR1cmVzIGFyZSBjb25kaXRpb25hbCwgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGludGVncmF0ZXMgaW50byB0aGUgd2lkZXIgbmV0d29yayBzdGFjay4gVGltZSB0byBwYXJzZSB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXM7IEFyZSB0aGVyZSBhbnkgdW51c3VhbCBsaWJyYXJ5IHJlcXVpcmVtZW50cyBJIHNob3VsZCBrbm93IGFib3V0PyBBcmUgdGhlIGRldmljZSYjMzk7cyBkZWZhdWx0IHNldHRpbmdzIHByb3Blcmx5IGRlZmluZWQgaGVyZT8gSG93IGNhbiBJIGVuc3VyZSBwcm9wZXIgYnVpbGQgY29tcGF0aWJpbGl0eSBmb3IgYWxsIHJlbGV2YW50IGFyY2hpdGVjdHVyZXM/IE5vIG5lZWQgZm9yIGEgZGVlcC1kaXZlIHlldCwgYnV0IGEgcXVpY2sgc2NhbiB3aWxsIHRlbGwgbWUgaWYgdGhlcmUgYXJlIGFueSBpbW1lZGlhdGUgcmVkIGZsYWdzLCBvciBhbnkgb3B0aW9ucyB0aGF0IHNlZW0gcGFydGljdWxhcmx5IGltcG9ydGFudCBmb3IgbXkgY3VycmVudCB0YXNrLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlOiBJcyBpdCB1c2luZyBzdGFuZGFyZCBuZXR3b3JrIGludGVyZmFjZXM/IEhvdyYjMzk7cyB0aGUgZmlybXdhcmUgaGFuZGxpbmcgY29uZmlndXJlZD8gQXJlIHRoZXJlIGFueSBleHBlcmltZW50YWwgb3IgZGVidWcgb3B0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQW5kIG1vc3QgaW1wb3J0YW50bHksIGNhbiBJIGdldCB0aGlzIGRyaXZlciB0byBkbyB3aGF0IEkgbmVlZCBpdCB0byBkbz8gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSBteSByb2FkbWFwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B1cmVsaWZpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZz0zMT1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWc6MzI6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWctMzMtc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JhbGluay9LY29uZmlnXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX05YUCkgJiM0Mzs9IG54cC9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9QVVJFTElGSSkgJiM0Mzs9IHB1cmVsaWZpL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX1FVQU5URU5OQSkgJiM0Mzs9IHF1YW50ZW5uYS9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnPTEzPWlmIFdMQU5fVkVORE9SX1BVUkVMSUZJXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnLTE0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZzoxNTpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWctMTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ2MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIGNoZWNrOgoKKipFeGFtaW5pbmcgdGhlIFdMQU5fVkVORE9SX1BVUkVMSUZJIERlcGVuZGVuY3kqKgoKUmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBXTEFOX1ZFTkRPUl9QVVJFTElGSWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHN0ZXAgZm9yIG1lLCBzbyBJJiMzOTttIGhlYWRpbmcgZGlyZWN0bHkgdG8gdGhlIGxpa2VseSBzb3VyY2Ug4oCTIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBmb3IgdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZyBzeW1ib2wgd2lsbCBsaXZlLCBhbG9uZ3NpZGUgaXRzIGRlcGVuZGVuY2llcy4gS25vd2luZyB3aGF0IGNvbmRpdGlvbnMgbmVlZCB0byBiZSBtZXQgdG8gZW5hYmxlIHRoaXMgZHJpdmVyIGlzIGNydWNpYWwsIHdoZXRoZXIgSSYjMzk7bSBkaWFnbm9zaW5nIGEgYnVpbGQgaXNzdWUsIGxvb2tpbmcgZm9yIGZlYXR1cmUgYXZhaWxhYmlsaXR5LCBvciBqdXN0IHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGtlcm5lbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBzcGVsbCBvdXQgZXhhY3RseSB3aGF0IGVsc2UgbmVlZHMgdG8gYmUgaW4gcGxhY2UgZm9yIFB1cmVMaUZpIHN1cHBvcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXTEFOX1ZFTkRPUl9QVVJFTElGSVxuICAgMzpcdFx0Ym9vbCBcJiMzNDtwdXJlTGlGaSBkZXZpY2VzXCYjMzQ7XG4gICA0Olx0XHRkZWZhdWx0IHlcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgSWYgeW91IGhhdmUgYSBwdXJlTGlGaSBkZXZpY2UsIHNheSBZLlxuICAgNzpcdFxuICAgODpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiAgIDk6XHRcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcbiAgMTA6XHRcdCAgcXVlc3Rpb25zIGFib3V0IHRoZXNlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxuICAxMTpcdFx0ICB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDEyOlx0XG4gIDEzOlx0aWYgV0xBTl9WRU5ET1JfUFVSRUxJRklcbiAgMTQ6XHRcbiAgMTU6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL0tjb25maWdcJiMzNDtcbiAgMTY6XHRcbiAgMTc6XHRlbmRpZiAjIFdMQU5fVkVORE9SX1BVUkVMSUZJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW4uCgoqKkluaXRpYWwgQ29kZSBJbnZlc3RpZ2F0aW9uKioKClJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmNgIGFuZCBgdXNiLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgb3ZlcnZpZXcgb2YgdGhlIGNvcmUgTUFDIGZ1bmN0aW9uYWxpdHkgYW5kIGhvdyBpdCYjMzk7cyBpbnRlcmZhY2luZyB3aXRoIHRoZSBVU0IgbGF5ZXIsIHJlc3BlY3RpdmVseS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGZyYW1ld29yayB0byB0aGVuIGRyaWxsIGRvd24gaW50byB0aGUgc3BlY2lmaWNzLiBVbmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmUgZmlyc3QgaXMga2V5LiBLbm93aW5nICpob3cqIHRoZSBjb2RlIHdvcmtzLCBhbmQgdGhlbiAqd2hhdCogd2FzIGNoYW5nZWQsIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyBxdWlja2x5IGFuZCBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFx0c3RydWN0IHBsZnhsY191c2JfdHggKnR4O1xuIDQwMTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA0MDI6XHRcdGludCBuZWVkX3BhZGRpbmc7XG4gNDAzOlx0XHRfX2xlMTYgZmM7XG4gNDA0Olx0XHRpbnQgc2lkeDtcbiA0MDU6XHRcbiA0MDY6XHRcdC8qIFBhY2tldCBibG9ja2FkZSBkdXJpbmcgZGlzYWJsZWQgaW50ZXJmYWNlLiAqL1xuIDQwNzpcdFx0aWYgKCFtYWMtXHUwMDNldmlmKVxuIDQwODpcdFx0XHRyZXR1cm4gMDtcbiA0MDk6XHRcbiA0MTA6XHRcdGlmIChsZW5ndGggXHUwMDNjIHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSAmIzQzOyBzaXplb2YodTMyKSlcbiA0MTE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDEyOlx0XG4gNDEzOlx0XHRzdGF0dXMgPSAoc3RydWN0IHJ4X3N0YXR1cyAqKWJ1ZmZlcjtcbiA0MTQ6XHRcbiA0MTU6XHRcdG1lbXNldChcdTAwMjZzdGF0cywgMCwgc2l6ZW9mKHN0YXRzKSk7XG4gNDE2Olx0XG4gNDE3Olx0XHRzdGF0cy5mbGFnICAgICA9IDA7XG4gNDE4Olx0XHRzdGF0cy5mcmVxICAgICA9IDI0MTI7XG4gNDE5Olx0XHRzdGF0cy5iYW5kICAgICA9IE5MODAyMTFfQkFORF9MQztcbiA0MjA6XHRcdG1hYy1cdTAwM2Vyc3NpICAgICAgPSAtMTUgKiBiZTE2X3RvX2NwdShzdGF0dXMtXHUwMDNlcnNzaSkgLyAxMDtcbiA0MjE6XHRcbiA0MjI6XHRcdHN0YXRzLnNpZ25hbCAgID0gbWFjLVx1MDAzZXJzc2k7XG4gNDIzOlx0XG4gNDI0Olx0XHRpZiAoc3RhdHVzLVx1MDAzZXJhdGVfaWR4IFx1MDAzZSA3KVxuIDQyNTpcdFx0XHRzdGF0cy5yYXRlX2lkeCA9IDA7XG4gNDI2Olx0XHRlbHNlXG4gNDI3Olx0XHRcdHN0YXRzLnJhdGVfaWR4ID0gc3RhdHVzLVx1MDAzZXJhdGVfaWR4O1xuIDQyODpcdFxuIDQyOTpcdFx0bWFjLVx1MDAzZWNyY19lcnJvcnMgPSBiZTY0X3RvX2NwdShzdGF0dXMtXHUwMDNlY3JjX2Vycm9yX2NvdW50KTtcbiA0MzA6XHRcbiA0MzE6XHRcdGJ1ZmZlciAmIzQzOz0gc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpO1xuIDQzMjpcdFx0cGF5bG9hZF9sZW5ndGggPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyKTtcbiA0MzM6XHRcdGJ1ZmZlciAmIzQzOz0gc2l6ZW9mKHUzMik7XG4gNDM0Olx0XG4gNDM1Olx0XHRpZiAocGF5bG9hZF9sZW5ndGggXHUwMDNlIDE1NjAgfHxcbiA0MzY6XHRcdCAgICBwYXlsb2FkX2xlbmd0aCAmIzQzOyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykgJiM0Mzsgc2l6ZW9mKHUzMikgXHUwMDNlIGxlbmd0aCkge1xuIDQzNzpcdFx0XHRkZXZfZXJyKHBsZnhsY19tYWNfZGV2KG1hYyksIFwmIzM0OyBcdTAwM2UgTVRVICV1XFxuXCYjMzQ7LCBwYXlsb2FkX2xlbmd0aCk7XG4gNDM4Olx0XHRcdHJldHVybiAwO1xuIDQzOTpcdFx0fVxuIDQ0MDpcdFxuIDQ0MTpcdFx0aWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsIFx1MDAyNnN0YXRzKSBcdTAwMjZcdTAwMjZcbiA0NDI6XHRcdCAgICAhbWFjLVx1MDAzZXBhc3NfY3RybClcbiA0NDM6XHRcdFx0cmV0dXJuIDA7XG4gNDQ0Olx0XG4gNDQ1Olx0XHRmYyA9IGdldF91bmFsaWduZWQoKF9fbGUxNiAqKWJ1ZmZlcik7XG4gNDQ2Olx0XHRuZWVkX3BhZGRpbmcgPSBpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpIF4gaWVlZTgwMjExX2hhc19hNChmYyk7XG4gNDQ3Olx0XG4gNDQ4Olx0XHR0eCA9IFx1MDAyNm1hYy1cdTAwM2VjaGlwLnVzYi50eDtcbiA0NDk6XHRcbiA0NTA6XHRcdGZvciAoc2lkeCA9IDA7IHNpZHggXHUwMDNjIE1BWF9TVEFfTlVNIC0gMTsgc2lkeCYjNDM7JiM0MzspIHtcbiA0NTE6XHRcdFx0aWYgKG1lbWNtcChcdTAwMjZidWZmZXJbMTBdLCB0eC1cdTAwM2VzdGF0aW9uW3NpZHhdLm1hYywgRVRIX0FMRU4pKVxuIDQ1MjpcdFx0XHRcdGNvbnRpbnVlO1xuIDQ1MzpcdFx0XHRpZiAodHgtXHUwMDNlc3RhdGlvbltzaWR4XS5mbGFnIFx1MDAyNiBTVEFUSU9OX0NPTk5FQ1RFRF9GTEFHKSB7XG4gNDU0Olx0XHRcdFx0dHgtXHUwMDNlc3RhdGlvbltzaWR4XS5mbGFnIHw9IFNUQVRJT05fSEVBUlRCRUFUX0ZMQUc7XG4gNDU1Olx0XHRcdFx0YnJlYWs7XG4gNDU2Olx0XHRcdH1cbiA0NTc6XHRcdH1cbiA0NTg6XHRcbiA0NTk6XHRcdGlmIChzaWR4ID09IE1BWF9TVEFfTlVNIC0gMSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTQ3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgUlggUGF0aCBpbiB0aGUgUHVyZUxpRmkgVVNCIERyaXZlcioqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgcmVjZXB0aW9uIHByb2Nlc3Mgd2l0aGluIHRoaXMgYHBsZnhsY2AgZHJpdmVyIGZvciB0aGUgUHVyZUxpRmkgVVNCIGRldmljZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIGZyb20gdGhlIGNvbXBsZXRpb24gb2YgdGhlIFJlY2VpdmUgVVJCIChgcnhfdXJiX2NvbXBsZXRlYCkgdG8gdGhlIGhhbmRsaW5nIG9mIHRoZSByZWNlaXZlZCBwYWNrZXQgKGBoYW5kbGVfcnhfcGFja2V0YCkuIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QuIFdoYXQgZGF0YSBpcyBwYXNzZWQ/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IEFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zPyBJcyB0aGlzIGEgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzIHBhdGg/IFVuZGVyc3RhbmRpbmcgdGhpcyBzZWN0aW9uIG9mIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNgIGlzIGtleSB0byBnZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGluY29taW5nIHdpcmVsZXNzIGRhdGEuIEkgc3VzcGVjdCBsb29raW5nIGF0IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gYW5kIGV4YW1pbmluZyBhbnkgc2hhcmVkIGRhdGEgc3RydWN0dXJlcyB3aWxsIHlpZWxkIHRoZSBrZXkgaW5mb3JtYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0Y2FzZSAtRU5PREVWOlxuIDEwMTpcdFx0Y2FzZSAtRU5PRU5UOlxuIDEwMjpcdFx0Y2FzZSAtRUNPTk5SRVNFVDpcbiAxMDM6XHRcdGNhc2UgLUVQSVBFOlxuIDEwNDpcdFx0XHRkZXZfZGJnKHBsZnhsY191cmJfZGV2KHVyYiksIFwmIzM0O3VyYiAlcCBlcnJvciAlZFxcblwmIzM0OywgdXJiLCB1cmItXHUwMDNlc3RhdHVzKTtcbiAxMDU6XHRcdFx0cmV0dXJuO1xuIDEwNjpcdFx0ZGVmYXVsdDpcbiAxMDc6XHRcdFx0ZGV2X2RiZyhwbGZ4bGNfdXJiX2Rldih1cmIpLCBcJiMzNDt1cmIgJXAgZXJyb3IgJWRcXG5cJiMzNDssIHVyYiwgdXJiLVx1MDAzZXN0YXR1cyk7XG4gMTA4Olx0XHRcdGlmICh0eC1cdTAwM2VzdWJtaXR0ZWRfdXJicyYjNDM7JiM0MzsgXHUwMDNjIFBVUkVMSUZJX1VSQl9SRVRSWV9NQVgpIHtcbiAxMDk6XHRcdFx0XHRkZXZfZGJnKHBsZnhsY191cmJfZGV2KHVyYiksIFwmIzM0O3VyYiAlcCByZXN1Ym1pdCAlZFwmIzM0OywgdXJiLFxuIDExMDpcdFx0XHRcdFx0dHgtXHUwMDNlc3VibWl0dGVkX3VyYnMmIzQzOyYjNDM7KTtcbiAxMTE6XHRcdFx0XHRnb3RvIHJlc3VibWl0O1xuIDExMjpcdFx0XHR9IGVsc2Uge1xuIDExMzpcdFx0XHRcdGRldl9kYmcocGxmeGxjX3VyYl9kZXYodXJiKSwgXCYjMzQ7dXJiICVwICBtYXggcmVzdWJtaXRzIHJlYWNoZWRcJiMzNDssIHVyYik7XG4gMTE0Olx0XHRcdFx0dHgtXHUwMDNlc3VibWl0dGVkX3VyYnMgPSAwO1xuIDExNTpcdFx0XHRcdHJldHVybjtcbiAxMTY6XHRcdFx0fVxuIDExNzpcdFx0fVxuIDExODpcdFxuIDExOTpcdFx0YnVmZmVyID0gdXJiLVx1MDAzZXRyYW5zZmVyX2J1ZmZlcjtcbiAxMjA6XHRcdGxlbmd0aCA9IHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoO1xuIDEyMTpcdFxuIDEyMjpcdFx0aWYgKGxlbmd0aCAhPSAoUExGX01TR19TVEFUVVNfT0ZGU0VUICYjNDM7IDEpKSB7XG4gMTIzOlx0XHRcdGlmICh1c2ItXHUwMDNlaW5pdGlhbGl6ZWQgXHUwMDI2XHUwMDI2IHVzYi1cdTAwM2VsaW5rX3VwKVxuIDEyNDpcdFx0XHRcdGhhbmRsZV9yeF9wYWNrZXQodXNiLCBidWZmZXIsIGxlbmd0aCk7XG4gMTI1Olx0XHRcdGdvdG8gcmVzdWJtaXQ7XG4gMTI2Olx0XHR9XG4gMTI3Olx0XG4gMTI4Olx0XHRzdGF0dXMgPSBidWZmZXJbUExGX01TR19TVEFUVVNfT0ZGU0VUXTtcbiAxMjk6XHRcbiAxMzA6XHRcdHN3aXRjaCAoc3RhdHVzKSB7XG4gMTMxOlx0XHRjYXNlIFNUQVRJT05fRklGT19BTE1PU1RfRlVMTF9OT1RfTUVTU0FHRTpcbiAxMzI6XHRcdFx0ZGV2X2RiZyhcdTAwMjZ1c2ItXHUwMDNlaW50Zi1cdTAwM2VkZXYsXG4gMTMzOlx0XHRcdFx0XCYjMzQ7RklGTyBmdWxsIG5vdCBwYWNrZXQgcmVjZWlwdFxcblwmIzM0Oyk7XG4gMTM0Olx0XHRcdHR4LVx1MDAzZW1hY19maWZvX2Z1bGwgPSAxO1xuIDEzNTpcdFx0XHRmb3IgKHNpZHggPSAwOyBzaWR4IFx1MDAzYyBNQVhfU1RBX05VTTsgc2lkeCYjNDM7JiM0MzspXG4gMTM2Olx0XHRcdFx0dHgtXHUwMDNlc3RhdGlvbltzaWR4XS5mbGFnIHw9IFNUQVRJT05fRklGT19GVUxMX0ZMQUc7XG4gMTM3Olx0XHRcdGJyZWFrO1xuIDEzODpcdFx0Y2FzZSBTVEFUSU9OX0ZJRk9fQUxNT1NUX0ZVTExfTUVTU0FHRTpcbiAxMzk6XHRcdFx0ZGV2X2RiZyhcdTAwMjZ1c2ItXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwmIzM0O0ZJRk8gZnVsbCBwYWNrZXQgcmVjZWlwdFxcblwmIzM0Oyk7XG4gMTQwOlx0XG4gMTQxOlx0XHRcdGZvciAoc2lkeCA9IDA7IHNpZHggXHUwMDNjIE1BWF9TVEFfTlVNOyBzaWR4JiM0MzsmIzQzOylcbiAxNDI6XHRcdFx0XHR0eC1cdTAwM2VzdGF0aW9uW3NpZHhdLmZsYWcgXHUwMDI2PSBTVEFUSU9OX0FDVElWRV9GTEFHO1xuIDE0MzpcdFxuIDE0NDpcdFx0XHRwbGZ4bGNfc2VuZF9wYWNrZXRfZnJvbV9kYXRhX3F1ZXVlKHVzYik7XG4gMTQ1Olx0XHRcdGJyZWFrO1xuIDE0NjpcdFx0Y2FzZSBTVEFUSU9OX0NPTk5FQ1RfTUVTU0FHRTpcbiAxNDc6XHRcdFx0dXNiLVx1MDAzZWxpbmtfdXAgPSAxO1xuIDE0ODpcdFx0XHRkZXZfZGJnKFx1MDAyNnVzYi1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7U1RfQ09OTkVDVF9NU0cgcGFja2V0IHJlY2VpcHRcXG5cJiMzNDspO1xuIDE0OTpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI4MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBEZWVwZXIgaW50byBQYWNrZXQgSGFuZGxpbmcqKgoKT2theSwgc28gd2UmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgb3ZlcmFsbCBmbG93LCBidXQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvciwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIE5vdywgbGV0JiMzOTtzIHR1cm4gb3VyIGF0dGVudGlvbiB0byB0aGUgYGhhbmRsZV9yeF9wYWNrZXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gc2VlIHByZWNpc2VseSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aGVuIGEgcGFja2V0IGFjdHVhbGx5ICphcnJpdmVzKi4gVGhpcyBpcyB0aGUgY3JpdGljYWwgcG9pbnQgd2hlcmUgdGhlIGRhdGEgc3RyZWFtIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0mIzM5O3MgaW50ZXJuYWwgbG9naWMuIFdoYXQgYXJlIHRoZSBpbW1lZGlhdGUgYWN0aW9ucz8gQXJlIHRoZXJlIGFueSBwcmVjb25kaXRpb25zIGl0IGNoZWNrcz8gSG93IGRvZXMgaXQgaW50ZXJwcmV0IHRoZSBwYWNrZXQgaGVhZGVyPyBEb2VzIGl0IGNhbGwgYW55IG90aGVyIGZ1bmN0aW9ucz8gVGhlIGBoYW5kbGVfcnhfcGFja2V0YCBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGtleSB0byB1bmxvY2tpbmcgaG93IHRoaXMgc3lzdGVtIGlzIHByb2Nlc3NpbmcsIGZpbHRlcmluZywgYW5kIGFjdGluZyBvbiBpbmNvbWluZyBkYXRhLiBJdCYjMzk7cyB0aW1lIHRvIGZvbGxvdyB0aGUgZXhlY3V0aW9uIHBhdGggdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhbmRsZV9yeF9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jPTM2PXZvaWQgcGxmeGxjX3NlbmRfcGFja2V0X2Zyb21fZGF0YV9xdWV1ZShzdHJ1Y3QgcGxmeGxjX3VzYiAqdXNiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy02Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYzo2MzpzdGF0aWMgdm9pZCBoYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBwbGZ4bGNfdXNiICp1c2IsIGNvbnN0IHU4ICpidWZmZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtNjQtXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYz02OT1zdGF0aWMgdm9pZCByeF91cmJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy0xMjMtXHRcdGlmICh1c2ItXHUwMDNlaW5pdGlhbGl6ZWQgXHUwMDI2XHUwMDI2IHVzYi1cdTAwM2VsaW5rX3VwKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jOjEyNDpcdFx0XHRoYW5kbGVfcnhfcGFja2V0KHVzYiwgYnVmZmVyLCBsZW5ndGgpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jLTEyNS1cdFx0Z290byByZXN1Ym1pdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgwNwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgYGhhbmRsZV9yeF9wYWNrZXRgIEZ1bmN0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgaGFuZGxlX3J4X3BhY2tldGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQgcmVzaWRlcyBpbiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuY2AgZmlsZS4gVGhpcyBwb2ludHMgdG8gYSBQdXJlTGlGaSBpbXBsZW1lbnRhdGlvbiB1c2luZyB0aGVpciBVU0IgaW50ZXJmYWNlLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IHRoZSBkcml2ZXIgZGVhbHMgd2l0aCBpbmNvbWluZyB3aXJlbGVzcyBwYWNrZXRzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBidWZmZXIgbWFuYWdlbWVudCwgZXJyb3IgaGFuZGxpbmcsIGhvdyB0aGUgZGF0YSBpcyBwYXNzZWQgdXAgdGhlIG5ldHdvcmsgc3RhY2ssIGFuZCBhbnkgc3BlY2lmaWMgUHVyZUxpRmktcmVsYXRlZCBudWFuY2VzIGluIHRoZSByZWNlcHRpb24gcHJvY2Vzcy4gS25vd2luZyB0aGUgbG9jYXRpb24sIGFuZCB0aGUgc3BlY2lmaWNzIGFyb3VuZCB3aGljaCBpbnRlcmZhY2UgdGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRvLCBhbGxvd3MgbWUgdG8gcHJlZGljdCB0aGUgY29tcGxleGl0aWVzIEkgd2lsbCBiZSBmaW5kaW5nIGFuZCB3aGF0IGtub3dsZWRnZSBJIHNob3VsZCBicmluZyB0byBiZWFyLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIFVTQi1zcGVjaWZpYyBjb25zaWRlcmF0aW9ucyBpbiB0aGUgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuICA2MTpcdH1cbiAgNjI6XHRcbiAgNjM6XHRzdGF0aWMgdm9pZCBoYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBwbGZ4bGNfdXNiICp1c2IsIGNvbnN0IHU4ICpidWZmZXIsXG4gIDY0Olx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKVxuICA2NTpcdHtcbiAgNjY6XHRcdHBsZnhsY19tYWNfcngocGxmeGxjX3VzYl90b19odyh1c2IpLCBidWZmZXIsIGxlbmd0aCk7XG4gIDY3Olx0fVxuICA2ODpcdFxuICA2OTpcdHN0YXRpYyB2b2lkIHJ4X3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gIDcwOlx0e1xuICA3MTpcdFx0c3RydWN0IHBsZnhsY191c2JfdHggKnR4O1xuICA3MjpcdFx0c3RydWN0IHBsZnhsY191c2IgKnVzYjtcbiAgNzM6XHRcdHVuc2lnbmVkIGludCBsZW5ndGg7XG4gIDc0Olx0XHRjb25zdCB1OCAqYnVmZmVyO1xuICA3NTpcdFx0dTE2IHN0YXR1cztcbiAgNzY6XHRcdHU4IHNpZHg7XG4gIDc3Olx0XHRpbnQgcjtcbiAgNzg6XHRcbiAgNzk6XHRcdGlmICghdXJiKSB7XG4gIDgwOlx0XHRcdHByX2VycihcJiMzNDt1cmIgaXMgTlVMTFxcblwmIzM0Oyk7XG4gIDgxOlx0XHRcdHJldHVybjtcbiAgODI6XHRcdH1cbiAgODM6XHRcdGlmICghdXJiLVx1MDAzZWNvbnRleHQpIHtcbiAgODQ6XHRcdFx0cHJfZXJyKFwmIzM0O3VyYiBjdHggaXMgTlVMTFxcblwmIzM0Oyk7XG4gIDg1Olx0XHRcdHJldHVybjtcbiAgODY6XHRcdH1cbiAgODc6XHRcdHVzYiA9IHVyYi1cdTAwM2Vjb250ZXh0O1xuICA4ODpcdFxuICA4OTpcdFx0aWYgKHVzYi1cdTAwM2Vpbml0aWFsaXplZCAhPSAxKSB7XG4gIDkwOlx0XHRcdHByX2VycihcJiMzNDt1c2IgaXMgbm90IGluaXRpYWxpemVkXFxuXCYjMzQ7KTtcbiAgOTE6XHRcdFx0cmV0dXJuO1xuICA5MjpcdFx0fVxuICA5MzpcdFxuICA5NDpcdFx0dHggPSBcdTAwMjZ1c2ItXHUwMDNldHg7XG4gIDk1Olx0XHRzd2l0Y2ggKHVyYi1cdTAwM2VzdGF0dXMpIHtcbiAgOTY6XHRcdGNhc2UgMDpcbiAgOTc6XHRcdFx0YnJlYWs7XG4gIDk4Olx0XHRjYXNlIC1FU0hVVERPV046XG4gIDk5Olx0XHRjYXNlIC1FSU5WQUw6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTc2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFB1cmVMaUZpIFVTQiBEcml2ZXIqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBVU0IgYnVzLiBUaGUga2V5IGFyZWFzIG9mIGludGVyZXN0IGFyZSBsaWtlbHkgZ29pbmcgdG8gYmUgdGhlIGBwcm9iZWAgcm91dGluZSwgYXMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIHR5cGljYWxseSBoYXBwZW5zLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaWRlbnRpZmllcyBhbmQgY2xhaW1zIHRoZSBQdXJlTGlGaSBVU0IgZGV2aWNlLiBBbHNvLCB0aGUgYHVzYl9kZXZpY2VfaWRgIHRhYmxlIGlzIGRlZmluaXRlbHkgb24gbXkgcmFkYXIuIFRoaXMgaXMgd2hlcmUgdGhlIHZlbmRvciBhbmQgcHJvZHVjdCBJRHMgYXJlIGRlY2xhcmVkLCBhbGxvd2luZyB0aGUgZHJpdmVyIHRvIHJlY29nbml6ZSAqc3BlY2lmaWMqIFB1cmVMaUZpIGhhcmR3YXJlLiBJJiMzOTtsbCBjaGVjayBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgaGFyZHdhcmUgdmVyc2lvbnMgb3IgcmV2aXNpb25zLiBUaGlzIHdpbGwgYmUgdGhlIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgdGhlIGJ1cyBpcyBtYW5hZ2VkLiBUaGlzIGlzIHdoZXJlIHRoZSBpbml0aWFsIGJyaW5nIHVwIGlzIG1vc3QgbGlrZWx5IGhhbmRsZWQuIEkmIzM5O20gZXhwZWN0aW5nIHN0YW5kYXJkIFVTQiBzZXR1cCByb3V0aW5lcywgYnV0IEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyBQdXJlTGlGaSBoYXMgZXh0ZW5kZWQgb3IgY3VzdG9taXplZCB0aG9zZSB0byBhY2NvbW1vZGF0ZSB0aGVpciBvcHRpY2FsIGNvbW11bmljYXRpb24gaW50ZXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2JfZGV2aWNlX2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy0yNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYzoyNjpzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2lkc1tdID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jLTI3LVx0eyBVU0JfREVWSUNFKFBVUkVMSUZJX1hfVkVORE9SX0lEXzAsIFBVUkVMSUZJX1hfUFJPRFVDVF9JRF8wKSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM9NTc5PXN0YXRpYyBpbnQgcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM6NTgwOlx0XHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jLTU4MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTEyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgb2YgdGhlIFB1cmVMaUZpIFVTQiBXaUZpIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmaXhpbmcgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIGluIHRoZSBgcGxmeGxjX21hY19yeGAgZnVuY3Rpb24gYW5kIHNvbWUgcmVsYXRlZCBpc3N1ZXMgaW4gYHJ4X3VyYl9jb21wbGV0ZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIGZ1enphYmxlPyBTaG91bGQgSSBzcGVuZCBteSB0aW1lIGRpZ2dpbmcgZGVlcGVyPyYjMzQ7IExldCYjMzk7cyBicmVhayBpdCBkb3duIG1ldGhvZGljYWxseS4KCkZpcnN0LCBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIHZpYSBmdXp6aW5nPyBDb25zaWRlcmluZyBJJiMzOTttIHdvcmtpbmcgaW4gdGhlIGNvbnRleHQgb2YgVVNCLCBhbmQgc3BlY2lmaWNhbGx5IFVTQiBSYXcgR2FkZ2V0L3N5emthbGxlciwgaXQgc2VlbXMgcGxhdXNpYmxlLiBJIGNhbiBlbXVsYXRlIFVTQiBkZXZpY2VzLCBhbmQgUHVyZUxpRmkgaXMgYSAqVVNCKiBXaUZpIGRyaXZlci4gVGhlIHRleHQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBVU0IgcGFja2V0IHJlY2VwdGlvbiBhbmQgaGFuZGxpbmcgYXJlIHJlYWNoYWJsZSB2aWEgdGhpcyBtZXRob2QuIEV4Y2VsbGVudCwgc28gZmFyLCBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWcgb3B0aW9ucy4gVGhlIGRlc2NyaXB0aW9uIG1lbnRpb25zIHRoYXQgYFBMRlhMQ2AgKHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSBkcml2ZXIpIGRlcGVuZHMgb24gYENGRzgwMjExYCwgYE1BQzgwMjExYCwgYW5kIGBVU0JgIGluIGl0cyBLY29uZmlnIGZpbGUuIENydWNpYWxseSwgaXQgYWxzbyBwb2ludHMgb3V0IGBXTEFOX1ZFTkRPUl9QVVJFTElGSWAgaXMgcmVxdWlyZWQgaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIHNldC4gRnVydGhlciBpbnNwZWN0aW9uIG9mIGBkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnYCBhbmQgYE1ha2VmaWxlYCBjb25maXJtcyB0aGUgbmVlZCBmb3IgYFdMQU5fVkVORE9SX1BVUkVMSUZJYC4KClNvLCBib3R0b20gbGluZTogSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIGNvbmZpZ3MsIGVzcGVjaWFsbHkgYFdMQU5fVkVORE9SX1BVUkVMSUZJYCBhcmUgZW5hYmxlZCBpbiBteSBmdXp6aW5nIGVudmlyb25tZW50LiBJZiB0aGUgY29uZmlncyBhcmUgdGhlcmUsIHRoZW4gdGhlIHBhdGNoIGlzIHJlYWNoYWJsZSwgYW5kIHRoZSBlZmZvcnQgdG8gZnV6eiBpcyB3YXJyYW50ZWQuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3Mgd29ydGggYSBzaG90LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtXTEFOX1ZFTkRPUl9QVVJFTElGSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9OWFApICYjNDM7PSBueHAvXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfV0xBTl9WRU5ET1JfUFVSRUxJRkkpICYjNDM7PSBwdXJlbGlmaS9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9RVUFOVEVOTkEpICYjNDM7PSBxdWFudGVubmEvXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZzoyOmNvbmZpZyBXTEFOX1ZFTkRPUl9QVVJFTElGSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtwdXJlTGlGaSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZy0xMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWc6MTM6aWYgV0xBTl9WRU5ET1JfUFVSRUxJRklcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWctMTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnPTE1PXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZy0xNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWc6MTc6ZW5kaWYgIyBXTEFOX1ZFTkRPUl9QVVJFTElGSVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMyMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGZhbWlsaWFyIHdpdGggdGhlIExpbnV4IGtlcm5lbCBuZXR3b3JraW5nIHN0YWNrOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBXTEFOX1ZFTkRPUl9QVVJFTElGSSBLY29uZmlnIEVudHJ5KioKCk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgcG9pbnRpbmcgbWUgdG93YXJkcyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZ2AuIFJpZ2h0IGF3YXksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSB3aXJlbGVzcyBuZXR3b3JraW5nIGRyaXZlciBzdWJzeXN0ZW0uIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZm9jdXNpbmcgb24gYFdMQU5fVkVORE9SX1BVUkVMSUZJYCB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBhYm91dCBzdXBwb3J0IGZvciBhIHNwZWNpZmljIHZlbmRvciYjMzk7cyBXaS1GaSBoYXJkd2FyZSwgUHVyZUxpZmkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgb3IgY29uZGl0aW9uYWxpemVzIHRoaXMgZmVhdHVyZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIEtjb25maWcgZmlsZSBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgdGhpcyBzcGVjaWZpYyBzeW1ib2wgd2l0aGluIHRoYXQgZmlsZS4gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWU6CgoqICAgV2hhdCBkZXBlbmRlbmNpZXMgZG9lcyB0aGlzIG9wdGlvbiBoYXZlPyBJcyBpdCB0aWVkIHRvIGFueSBzcGVjaWZpYyBoYXJkd2FyZSwgb3RoZXIga2VybmVsIG9wdGlvbnMsIG9yIHN1Yi1kcml2ZXJzPwoqICAgV2hhdCBpcyBpdHMgZGVmYXVsdCBzZXR0aW5nPyBJcyBpdCBlbmFibGVkIGJ5IGRlZmF1bHQsIG9yIGlzIGl0IGRpc2FibGVkPwoqICAgQXJlIHRoZXJlIGFueSByZWxldmFudCBoZWxwIG1lc3NhZ2VzIG9yIGRlc2NyaXB0aW9ucyBhc3NvY2lhdGVkIHdpdGggaXQ/IFRoZXNlIGNhbiB0ZWxsIG1lIHdoYXQgUHVyZUxpZmkmIzM5O3MgZHJpdmVycyBkbyBhbmQgYW55IHNwZWNpYWwgY29uc2lkZXJhdGlvbnMuCiogICBJcyBpdCBjb25kaXRpb25hbGx5IGVuYWJsZWQgYmFzZWQgb24gb3RoZXIgc2V0dGluZ3M/IElmIHNvLCB3aGF0IGFyZSB0aG9zZSBjb25kaXRpb25zPwoKSSYjMzk7bSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZGVlcCBkaXZlIGludG8gdGhlIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3RzIG9mIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gb24gdGhlIGtlcm5lbCYjMzk7cyBjb21waWxhdGlvbiBhbmQgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIFB1cmVMaWZpLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBXaXJlbGVzcyBMQU4gZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBXTEFOXG4gICA3Olx0XHRib29sIFwmIzM0O1dpcmVsZXNzIExBTlwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiAhUzM5MFxuICAgOTpcdFx0ZGVwZW5kcyBvbiBORVRcbiAgMTA6XHRcdHNlbGVjdCBXSVJFTEVTU1xuICAxMTpcdFx0ZGVmYXVsdCB5XG4gIDEyOlx0XHRoZWxwXG4gIDEzOlx0XHQgIFRoaXMgc2VjdGlvbiBjb250YWlucyBhbGwgdGhlIHByZSA4MDIuMTEgYW5kIDgwMi4xMSB3aXJlbGVzc1xuICAxNDpcdFx0ICBkZXZpY2UgZHJpdmVycy4gRm9yIGEgY29tcGxldGUgbGlzdCBvZiBkcml2ZXJzIGFuZCBkb2N1bWVudGF0aW9uXG4gIDE1Olx0XHQgIG9uIHRoZW0gcmVmZXIgdG8gdGhlIHdpcmVsZXNzIHdpa2k6XG4gIDE2Olx0XG4gIDE3Olx0XHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnNcbiAgMTg6XHRcbiAgMTk6XHRpZiBXTEFOXG4gIDIwOlx0XG4gIDIxOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbXRlay9LY29uZmlnXCYjMzQ7XG4gIDIyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnXCYjMzQ7XG4gIDIzOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsL0tjb25maWdcJiMzNDtcbiAgMjQ6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vS2NvbmZpZ1wmIzM0O1xuICAyNTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9LY29uZmlnXCYjMzQ7XG4gIDI2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL0tjb25maWdcJiMzNDtcbiAgMjc6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9LY29uZmlnXCYjMzQ7XG4gIDI4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL0tjb25maWdcJiMzNDtcbiAgMjk6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWljcm9jaGlwL0tjb25maWdcJiMzNDtcbiAgMzA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbW9yc2VtaWNyby9LY29uZmlnXCYjMzQ7XG4gIDMxOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9LY29uZmlnXCYjMzQ7XG4gIDMyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWdcJiMzNDtcbiAgMzM6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcmFsaW5rL0tjb25maWdcJiMzNDtcbiAgMzQ6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9LY29uZmlnXCYjMzQ7XG4gIDM1Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnXCYjMzQ7XG4gIDM2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy9LY29uZmlnXCYjMzQ7XG4gIDM3Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L0tjb25maWdcJiMzNDtcbiAgMzg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvS2NvbmZpZ1wmIzM0O1xuICAzOTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy9LY29uZmlnXCYjMzQ7XG4gIDQwOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzE3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUga2V5OiBgUExGWExDYCwgYFdMQU5fVkVORE9SX1BVUkVMSUZJYCwgYENGRzgwMjExYCwgYE1BQzgwMjExYCwgYFVTQmAsIGFuZCBgV0xBTmAuIFRob3NlIGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzLCB0aGUgZm91bmRhdGlvbiB0aGlzIHBhdGNoIGlzIHdvcmtpbmcgd2l0aC4gTm93LCB0aGUgbWVhdCBvZiBpdC4KCkkmIzM5O3ZlIGlkZW50aWZpZWQgdHdvIG1vZGlmaWVkIGZ1bmN0aW9uczogYHBsZnhsY19tYWNfcnhgIGluIGBtYWMuY2AsIGFuZCBgcnhfdXJiX2NvbXBsZXRlYCBpbiBgdXNiLmNgLiBNeSBuZXh0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciBzY29wZS4gSSBzZWUgdGhhdCBgcGxmeGxjX21hY19yeGAgaXMgYSBnbG9iYWwgZnVuY3Rpb24sIG1lYW5pbmcgaXQmIzM5O3MgdmlzaWJsZSBvdXRzaWRlIG9mIGl0cyBvd24gc291cmNlIGZpbGUsIHdoaWNoIGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyBpdCYjMzk7cyBjYWxsZWQgYW5kIG1vZGlmaWVkLiBgcnhfdXJiX2NvbXBsZXRlYCBpcyBzdGF0aWMgd2l0aGluIGB1c2IuY2AsIGJ1dCBpdCBpcyBzdGlsbCBhIGZ1bmN0aW9uIHN5bWJvbCwgYW5kIGlzIHRodXMgY2FsbGFibGUgZnJvbSBlbHNld2hlcmUuIFRoaXMgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cuCgpOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBlbHNlIGlzIGdvaW5nIG9uIGluIGBtYWMuY2AgYW5kIGB1c2IuY2AgYW5kIGhvdyBgcGxmeGxjX2ZpbHRlcl9hY2tgIGNvbWVzIGludG8gcGxheS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb21wbGV0ZSBjaGFpbiBvZiBldmVudHMsIGZyb20gcGFja2V0IHJlY2VwdGlvbiB0byBwcm9jZXNzaW5nLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGluZyBgcGxmeGxjX21hY19yeGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BsZnhsY19tYWNfcngmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jPTMzOD1zdGF0aWMgaW50IHBsZnhsY19maWx0ZXJfYWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcnhfaGRyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYy0zOTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmM6MzkzOmludCBwbGZ4bGNfbWFjX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqYnVmZmVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jLTM5NC1cdFx0ICB1bnNpZ25lZCBpbnQgbGVuZ3RoKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuaD0xNzQ9aW50IHBsZnhsY19tYWNfaW5pdF9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmgtMTc1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5oOjE3NjppbnQgcGxmeGxjX21hY19yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY29uc3QgdTggKmJ1ZmZlcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuaC0xNzctXHRcdCAgdW5zaWduZWQgaW50IGxlbmd0aCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jPTYzPXN0YXRpYyB2b2lkIGhhbmRsZV9yeF9wYWNrZXQoc3RydWN0IHBsZnhsY191c2IgKnVzYiwgY29uc3QgdTggKmJ1ZmZlcixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtNjUte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jOjY2Olx0cGxmeGxjX21hY19yeChwbGZ4bGNfdXNiX3RvX2h3KHVzYiksIGJ1ZmZlciwgbGVuZ3RoKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy02Ny19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDEwCgkJCQkJCQlvdXRwdXQ6IDE4MwoJCQkJCQkJdGhvdWdodHM6IDM2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUHVyZUxpRmkgVVNCIERyaXZlciBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgaXMgc3F1YXJlbHkgb24gdGhlIGBwbGZ4bGNfbWFjX3J4YCBhbmQgYHJ4X3VyYl9jb21wbGV0ZWAgZnVuY3Rpb25zIOKAkyB0aG9zZSBhcmUgdGhlIGRpcmVjdCBtb2RpZmljYXRpb25zIEkgbmVlZCB0byBleGFtaW5lLiBUaGUgaW1tZWRpYXRlIGNhbGxlciBvZiB0aGVzZSwgYWNjb3JkaW5nIHRvIHRoaXMsIGlzIGBoYW5kbGVfcnhfcGFja2V0YCB3aXRoaW4gYHVzYi5jYC4gR29vZCwgZ290IG15IGZvY2FsIHBvaW50cyBjbGVhcmx5IGRlZmluZWQuCgpCZWZvcmUgSSBwcm9jZWVkLCBsZXQmIzM5O3MgZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNvbmZpZ3VyYXRpb24td2lzZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgUExGWExDYCwgYFdMQU5fVkVORE9SX1BVUkVMSUZJYCwgYE1BQzgwMjExYCwgYENGRzgwMjExYCwgYFVTQmAsIGFuZCBgV0xBTmAgYXJlIGFsbCBhY2NvdW50ZWQgZm9yIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLgoKTm93LCBsZXQmIzM5O3MgY3Jvc3MtcmVmZXJlbmNlIGFnYWluc3QgdGhlIEtjb25maWcgZmlsZXMuIEkgc2VlIGhlcmUgdGhhdCBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL0tjb25maWdgLCBgUExGWExDYCBzcGVjaWZpY2FsbHkgZGVwZW5kcyBvbiBgQ0ZHODAyMTEgJmFtcDsmYW1wOyBNQUM4MDIxMSAmYW1wOyZhbXA7IFVTQmAuIFRoYXQgbWFrZXMgc2Vuc2UuIEFsc28gYFdMQU5fVkVORE9SX1BVUkVMSUZJYCBpcyBoYW5kbGVkIGF0IHRoZSByaWdodCBsZXZlbCBhbmQgdGhlIGBXTEFOYCBjb25maWcgaXMgcHJvcGVybHkgbWFuYWdlZC4KCk5vdyB0aGUgY29yZSByYXRpb25hbGUuIFRoaXMgcGF0Y2ggaXMgYWJvdXQgYm91bmRzIHZhbGlkYXRpb24gaW4gdGhlIGBwbGZ4bGNfbWFjX3J4YCBhbmQgVW5pdmVyc2FsIFNlcmlhbCBCdXMgKFVTQikgbGVuZ3RoIGhhbmRsaW5nIGluIGByeF91cmJfY29tcGxldGVgLiBJdCYjMzk7cyBhbGwgYWJvdXQgdGhhdCBQdXJlTGlGaSBVU0Igd2lyZWxlc3MgYWRhcHRlciBkcml2ZXIuIEl0JiMzOTtzIGdvb2QgdG8ga25vdyB0aGF0IHRoaXMgY2FuIGJlIHRyaWdnZXJlZCBhbmQgdGVzdGVkIHVzaW5nIFVTQiByYXcgZ2FkZ2V0IGVtdWxhdGlvbiwgbGlrZSBgZHVtbXlfaGNkYCBhbmQgYHN5el91c2JfY29ubmVjdGAuIFRoZSBjaGFuZ2VzIGltcGFjdCBwYWNrZXQgcmVjZXB0aW9uIGFuZCBwYXJzaW5nLCBzbyBVU0IgZW5kcG9pbnQgdHJhZmZpYyBpcyB0aGUgY3JpdGljYWwgdmVjdG9yLgoKQWxyaWdodCwgZXZlcnl0aGluZyBhcHBlYXJzIHNvdW5kIGFuZCB2ZXJpZmlhYmxlLiBUaW1lIHRvIHB1c2ggdGhpcyB0aHJvdWdoLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UExGWExDJiMzNDssCiAgICAmIzM0O1dMQU5fVkVORE9SX1BVUkVMSUZJJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtXTEFOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGxmeGxjX21hY19yeCYjMzQ7LAogICAgJiMzNDtyeF91cmJfY29tcGxldGUmIzM0OywKICAgICYjMzQ7aGFuZGxlX3J4X3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgcmVjZXB0aW9uIGFuZCBsZW5ndGggdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgUHVyZUxpRmkgVVNCIHdpcmVsZXNzIGRyaXZlciAocGxmeGxjX21hY19yeCBhbmQgcnhfdXJiX2NvbXBsZXRlKS4gVVNCIG5ldHdvcmsgZHJpdmVycyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB1c2luZyBVU0IgcmF3LWdhZGdldCAvIGR1bW15X2hjZCBlbXVsYXRpb24uIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gdmVyaWZ5IHRoZSBuZXcgYm91bmRzIGNoZWNrcyBhbmQgZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb24gbWFsZm9ybWVkIFVTQiBmcmFtZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BMRlhMQyYjMzQ7LAogICAgJiMzNDtXTEFOX1ZFTkRPUl9QVVJFTElGSSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7V0xBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BsZnhsY19tYWNfcngmIzM0OywKICAgICYjMzQ7cnhfdXJiX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O2hhbmRsZV9yeF9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHJlY2VwdGlvbiBhbmQgbGVuZ3RoIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIFB1cmVMaUZpIFVTQiB3aXJlbGVzcyBkcml2ZXIgKHBsZnhsY19tYWNfcnggYW5kIHJ4X3VyYl9jb21wbGV0ZSkuIFVTQiBuZXR3b3JrIGRyaXZlcnMgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgdXNpbmcgVVNCIHJhdy1nYWRnZXQgLyBkdW1teV9oY2QgZW11bGF0aW9uLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIHZlcmlmeSB0aGUgbmV3IGJvdW5kcyBjaGVja3MgYW5kIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIG9uIG1hbGZvcm1lZCBVU0IgZnJhbWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcGFja2V0IHZhbGlkYXRpb24gaW4gdGhlIFB1cmVMaUZpIChwbGZ4bGMpIHdpcmVsZXNzIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCB1c2VzIGB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aGAgcmF0aGVyIHRoYW4gYW4gdW52YWxpZGF0ZWQgZmllbGQgZnJvbSB0aGUgYnVmZmVyLCBhZGRzIG1pbmltdW0gbGVuZ3RoIGNoZWNrcyBiZWZvcmUgcGFyc2luZyBgcnhfc3RhdHVzYCBhbmQgcGF5bG9hZCBsZW5ndGgsIHZlcmlmaWVzIHRoYXQgdGhlIHBheWxvYWQgbGVuZ3RoIGRvZXMgbm90IGV4Y2VlZCB0aGUgVVJCIGJ1ZmZlciBsZW5ndGgsIGFuZCBmaXhlcyB0aGUgYnVmZmVyIG9mZnNldCBwYXNzZWQgdG8gYHBsZnhsY19maWx0ZXJfYWNrKClgLlxuXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3MgaW5wdXQgdmFsaWRhdGlvbiBhbmQgb3V0LW9mLWJvdW5kcyBidWZmZXIgb3ZlcnJlYWRzLCB3aGljaCBmYWxsIHNxdWFyZWx5IHVuZGVyIEtBU0FOJiMzOTtzIGRvbWFpbi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlIHJlYWRzLCBkb2VzIG5vdCBhbHRlciBzdHJ1Y3R1cmUgcGFkZGluZy9pbml0aWFsaXphdGlvbiBzZW50IHRvIHVzZXJzcGFjZSwgYW5kIGFsbCBsb2NhbCBzdHJ1Y3R1cmVzIChzdWNoIGFzIGBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0c2ApIGFyZSBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXRgLiBUaHVzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI3MmY1NThiYjlhNzI1ZjIwNDAyMGJmOTMzMTNmNzYzY2JlNDNiNDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA2OjUzOjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jCmluZGV4IGE5MDA0MjE3NTNhYzYuLmQyNjkwY2NlNzk2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMKQEAgLTQwNyw2ICYjNDM7NDA3LDkgQEAgaW50IHBsZnhsY19tYWNfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpidWZmZXIsCiAJaWYgKCFtYWMtJmd0O3ZpZikKIAkJcmV0dXJuIDA7CiAKJiM0MzsJaWYgKGxlbmd0aCAmbHQ7IHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSAmIzQzOyBzaXplb2YodTMyKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCXN0YXR1cyA9IChzdHJ1Y3Qgcnhfc3RhdHVzICopYnVmZmVyOwogCiAJbWVtc2V0KCZhbXA7c3RhdHMsIDAsIHNpemVvZihzdGF0cykpOwpAQCAtNDI1LDE5ICYjNDM7NDI4LDE5IEBAIGludCBwbGZ4bGNfbWFjX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqYnVmZmVyLAogCiAJbWFjLSZndDtjcmNfZXJyb3JzID0gYmU2NF90b19jcHUoc3RhdHVzLSZndDtjcmNfZXJyb3JfY291bnQpOwogCi0JLyogVE9ETyBiYWQgZnJhbWUgY2hlY2sgZm9yIENSQyBlcnJvciovCi0JaWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsICZhbXA7c3RhdHMpICZhbXA7JmFtcDsKLQkgICAgIW1hYy0mZ3Q7cGFzc19jdHJsKQotCQlyZXR1cm4gMDsKLQogCWJ1ZmZlciAmIzQzOz0gc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpOwogCXBheWxvYWRfbGVuZ3RoID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1ZmZlcik7CiYjNDM7CWJ1ZmZlciAmIzQzOz0gc2l6ZW9mKHUzMik7CiAKLQlpZiAocGF5bG9hZF9sZW5ndGggJmd0OyAxNTYwKSB7CiYjNDM7CWlmIChwYXlsb2FkX2xlbmd0aCAmZ3Q7IDE1NjAgfHwKJiM0MzsJICAgIHBheWxvYWRfbGVuZ3RoICYjNDM7IHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSAmIzQzOyBzaXplb2YodTMyKSAmZ3Q7IGxlbmd0aCkgewogCQlkZXZfZXJyKHBsZnhsY19tYWNfZGV2KG1hYyksICYjMzQ7ICZndDsgTVRVICV1XG4mIzM0OywgcGF5bG9hZF9sZW5ndGgpOwogCQlyZXR1cm4gMDsKIAl9Ci0JYnVmZmVyICYjNDM7PSBzaXplb2YodTMyKTsKJiM0MzsKJiM0MzsJaWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsICZhbXA7c3RhdHMpICZhbXA7JmFtcDsKJiM0MzsJICAgICFtYWMtJmd0O3Bhc3NfY3RybCkKJiM0MzsJCXJldHVybiAwOwogCiAJZmMgPSBnZXRfdW5hbGlnbmVkKChfX2xlMTYgKilidWZmZXIpOwogCW5lZWRfcGFkZGluZyA9IGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykgXiBpZWVlODAyMTFfaGFzX2E0KGZjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYwppbmRleCA2ZDI0MDg2ZWI4YjdhLi5jMzNiOTEzMWJmZGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jCkBAIC0xMTcsMTAgJiM0MzsxMTcsOSBAQCBzdGF0aWMgdm9pZCByeF91cmJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQogCX0KIAogCWJ1ZmZlciA9IHVyYi0mZ3Q7dHJhbnNmZXJfYnVmZmVyOwotCWxlbmd0aCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopKGJ1ZmZlciAmIzQzOyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykpKQotCQkgJiM0Mzsgc2l6ZW9mKHUzMik7CiYjNDM7CWxlbmd0aCA9IHVyYi0mZ3Q7YWN0dWFsX2xlbmd0aDsKIAotCWlmICh1cmItJmd0O2FjdHVhbF9sZW5ndGggIT0gKFBMRl9NU0dfU1RBVFVTX09GRlNFVCAmIzQzOyAxKSkgewomIzQzOwlpZiAobGVuZ3RoICE9IChQTEZfTVNHX1NUQVRVU19PRkZTRVQgJiM0MzsgMSkpIHsKIAkJaWYgKHVzYi0mZ3Q7aW5pdGlhbGl6ZWQgJmFtcDsmYW1wOyB1c2ItJmd0O2xpbmtfdXApCiAJCQloYW5kbGVfcnhfcGFja2V0KHVzYiwgYnVmZmVyLCBsZW5ndGgpOwogCQlnb3RvIHJlc3VibWl0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxMAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIHRoZSBQYXRjaCBTZXJpZXMgZm9yIEtNU0FOIEZ1enppbmcqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBpdHMgb3duIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0JiMzOTtzIHJ1biB0aGlzIHRocm91Z2ggbXkgbWVudGFsIHNhZmV0eSBjaGVja2xpc3QgZmlyc3QuIFRoaXMgaXMgYSBiZW5pZ24sIGRlZmVuc2l2ZSB0YXNrIOKAkyBJJiMzOTttIGp1c3QgZXZhbHVhdGluZyB0aGUgcGF0Y2hlcyB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBzYW5pdGl6ZXIgKEtBU0FOIHZlcnN1cyBLTVNBTikgZm9yIHRoZW0uIE5vIG1hbGljaW91cyBpbnRlbnQsIG5vIGV4cGxvaXQgZ2VuZXJhdGlvbiwgbm90aGluZyBsaWtlIHRoYXQuIFBlcmZlY3RseSBzYWZlLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGNvZGUuIFRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmNgIGFuZCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jYC4gVGltZSB0byBmaXJlIHVwIHRoZSB0b29sczogSSYjMzk7bGwgdXNlIGNvZGVzZWFyY2gsIG9yIG1heWJlIGV2ZW4ganVzdCByZWFkIHRoZSBmaWxlcyBkaXJlY3RseSwgb3IgZ3JlcHBlciBpZiBJIG5lZWQgdG8gZG8gc29tZXRoaW5nIG1vcmUgY29tcGxleCwgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhvc2UgZmlsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgY2hhbmdlcyBhcmUgKmRvaW5nKiBiZWZvcmUgSSBjYW4gbWFrZSBhIGNhbGwgb24gS01TQU4gcmVxdWlyZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0XHRzdHJ1Y3QgcGxmeGxjX3VzYl90eCAqdHg7XG4gNDAxOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDQwMjpcdFx0aW50IG5lZWRfcGFkZGluZztcbiA0MDM6XHRcdF9fbGUxNiBmYztcbiA0MDQ6XHRcdGludCBzaWR4O1xuIDQwNTpcdFxuIDQwNjpcdFx0LyogUGFja2V0IGJsb2NrYWRlIGR1cmluZyBkaXNhYmxlZCBpbnRlcmZhY2UuICovXG4gNDA3Olx0XHRpZiAoIW1hYy1cdTAwM2V2aWYpXG4gNDA4Olx0XHRcdHJldHVybiAwO1xuIDQwOTpcdFxuIDQxMDpcdFx0aWYgKGxlbmd0aCBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpICYjNDM7IHNpemVvZih1MzIpKVxuIDQxMTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0MTI6XHRcbiA0MTM6XHRcdHN0YXR1cyA9IChzdHJ1Y3Qgcnhfc3RhdHVzICopYnVmZmVyO1xuIDQxNDpcdFxuIDQxNTpcdFx0bWVtc2V0KFx1MDAyNnN0YXRzLCAwLCBzaXplb2Yoc3RhdHMpKTtcbiA0MTY6XHRcbiA0MTc6XHRcdHN0YXRzLmZsYWcgICAgID0gMDtcbiA0MTg6XHRcdHN0YXRzLmZyZXEgICAgID0gMjQxMjtcbiA0MTk6XHRcdHN0YXRzLmJhbmQgICAgID0gTkw4MDIxMV9CQU5EX0xDO1xuIDQyMDpcdFx0bWFjLVx1MDAzZXJzc2kgICAgICA9IC0xNSAqIGJlMTZfdG9fY3B1KHN0YXR1cy1cdTAwM2Vyc3NpKSAvIDEwO1xuIDQyMTpcdFxuIDQyMjpcdFx0c3RhdHMuc2lnbmFsICAgPSBtYWMtXHUwMDNlcnNzaTtcbiA0MjM6XHRcbiA0MjQ6XHRcdGlmIChzdGF0dXMtXHUwMDNlcmF0ZV9pZHggXHUwMDNlIDcpXG4gNDI1Olx0XHRcdHN0YXRzLnJhdGVfaWR4ID0gMDtcbiA0MjY6XHRcdGVsc2VcbiA0Mjc6XHRcdFx0c3RhdHMucmF0ZV9pZHggPSBzdGF0dXMtXHUwMDNlcmF0ZV9pZHg7XG4gNDI4Olx0XG4gNDI5Olx0XHRtYWMtXHUwMDNlY3JjX2Vycm9ycyA9IGJlNjRfdG9fY3B1KHN0YXR1cy1cdTAwM2VjcmNfZXJyb3JfY291bnQpO1xuIDQzMDpcdFxuIDQzMTpcdFx0YnVmZmVyICYjNDM7PSBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cyk7XG4gNDMyOlx0XHRwYXlsb2FkX2xlbmd0aCA9IGdldF91bmFsaWduZWRfYmUzMihidWZmZXIpO1xuIDQzMzpcdFx0YnVmZmVyICYjNDM7PSBzaXplb2YodTMyKTtcbiA0MzQ6XHRcbiA0MzU6XHRcdGlmIChwYXlsb2FkX2xlbmd0aCBcdTAwM2UgMTU2MCB8fFxuIDQzNjpcdFx0ICAgIHBheWxvYWRfbGVuZ3RoICYjNDM7IHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSAmIzQzOyBzaXplb2YodTMyKSBcdTAwM2UgbGVuZ3RoKSB7XG4gNDM3Olx0XHRcdGRldl9lcnIocGxmeGxjX21hY19kZXYobWFjKSwgXCYjMzQ7IFx1MDAzZSBNVFUgJXVcXG5cJiMzNDssIHBheWxvYWRfbGVuZ3RoKTtcbiA0Mzg6XHRcdFx0cmV0dXJuIDA7XG4gNDM5Olx0XHR9XG4gNDQwOlx0XG4gNDQxOlx0XHRpZiAocGxmeGxjX2ZpbHRlcl9hY2soaHcsIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWJ1ZmZlciwgXHUwMDI2c3RhdHMpIFx1MDAyNlx1MDAyNlxuIDQ0MjpcdFx0ICAgICFtYWMtXHUwMDNlcGFzc19jdHJsKVxuIDQ0MzpcdFx0XHRyZXR1cm4gMDtcbiA0NDQ6XHRcbiA0NDU6XHRcdGZjID0gZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopYnVmZmVyKTtcbiA0NDY6XHRcdG5lZWRfcGFkZGluZyA9IGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykgXiBpZWVlODAyMTFfaGFzX2E0KGZjKTtcbiA0NDc6XHRcbiA0NDg6XHRcdHR4ID0gXHUwMDI2bWFjLVx1MDAzZWNoaXAudXNiLnR4O1xuIDQ0OTpcdFxuIDQ1MDpcdFx0Zm9yIChzaWR4ID0gMDsgc2lkeCBcdTAwM2MgTUFYX1NUQV9OVU0gLSAxOyBzaWR4JiM0MzsmIzQzOykge1xuIDQ1MTpcdFx0XHRpZiAobWVtY21wKFx1MDAyNmJ1ZmZlclsxMF0sIHR4LVx1MDAzZXN0YXRpb25bc2lkeF0ubWFjLCBFVEhfQUxFTikpXG4gNDUyOlx0XHRcdFx0Y29udGludWU7XG4gNDUzOlx0XHRcdGlmICh0eC1cdTAwM2VzdGF0aW9uW3NpZHhdLmZsYWcgXHUwMDI2IFNUQVRJT05fQ09OTkVDVEVEX0ZMQUcpIHtcbiA0NTQ6XHRcdFx0XHR0eC1cdTAwM2VzdGF0aW9uW3NpZHhdLmZsYWcgfD0gU1RBVElPTl9IRUFSVEJFQVRfRkxBRztcbiA0NTU6XHRcdFx0XHRicmVhaztcbiA0NTY6XHRcdFx0fVxuIDQ1NzpcdFx0fVxuIDQ1ODpcdFxuIDQ1OTpcdFx0aWYgKHNpZHggPT0gTUFYX1NUQV9OVU0gLSAxKSB7XG4gNDYwOlx0XHRcdGZvciAoc2lkeCA9IDA7IHNpZHggXHUwMDNjIE1BWF9TVEFfTlVNIC0gMTsgc2lkeCYjNDM7JiM0MzspIHtcbiA0NjE6XHRcdFx0XHRpZiAodHgtXHUwMDNlc3RhdGlvbltzaWR4XS5mbGFnIFx1MDAyNiBTVEFUSU9OX0NPTk5FQ1RFRF9GTEFHKVxuIDQ2MjpcdFx0XHRcdFx0Y29udGludWU7XG4gNDYzOlx0XHRcdFx0bWVtY3B5KHR4LVx1MDAzZXN0YXRpb25bc2lkeF0ubWFjLCBcdTAwMjZidWZmZXJbMTBdLCBFVEhfQUxFTik7XG4gNDY0Olx0XHRcdFx0dHgtXHUwMDNlc3RhdGlvbltzaWR4XS5mbGFnIHw9IFNUQVRJT05fQ09OTkVDVEVEX0ZMQUc7XG4gNDY1Olx0XHRcdFx0dHgtXHUwMDNlc3RhdGlvbltzaWR4XS5mbGFnIHw9IFNUQVRJT05fSEVBUlRCRUFUX0ZMQUc7XG4gNDY2Olx0XHRcdFx0YnJlYWs7XG4gNDY3Olx0XHRcdH1cbiA0Njg6XHRcdH1cbiA0Njk6XHRcbiA0NzA6XHRcdHN3aXRjaCAoYnVmZmVyWzBdKSB7XG4gNDcxOlx0XHRjYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6XG4gNDcyOlx0XHRcdGRldl9kYmcocGxmeGxjX21hY19kZXYobWFjKSwgXCYjMzQ7UHJvYmUgcmVxdWVzdFxcblwmIzM0Oyk7XG4gNDczOlx0XHRcdGJyZWFrO1xuIDQ3NDpcdFx0Y2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVROlxuIDQ3NTpcdFx0XHRkZXZfZGJnKHBsZnhsY19tYWNfZGV2KG1hYyksIFwmIzM0O0Fzc29jaWF0aW9uIHJlcXVlc3RcXG5cJiMzNDspO1xuIDQ3NjpcdFx0XHRicmVhaztcbiA0Nzc6XHRcdGNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6XG4gNDc4Olx0XHRcdGRldl9kYmcocGxmeGxjX21hY19kZXYobWFjKSwgXCYjMzQ7QXV0aGVudGljYXRpb24gcmVxXFxuXCYjMzQ7KTtcbiA0Nzk6XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MzYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZGVlcGx5IGltbWVyc2VkIGluIHRoaXMgcHJvamVjdDoKCioqRGlnZ2luZyBEZWVwZXIgaW50byB0aGUgQ29kZWJhc2UqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHpvb20gaW4gb24gYSBjb3VwbGUgb2YgY3JpdGljYWwgYXJlYXMgaW4gdGhlIGNvZGUuIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBjYXJ2ZSBvdXQgc29tZSBkZWRpY2F0ZWQgdGltZSB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgYG1hYy5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDQ4MCB0byA1NTAuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGVzZSBzZWN0aW9ucyBvZnRlbiBob2xkIGNydWNpYWwgbG9naWMgcmVsYXRpbmcgdG8gdGhlIE1BQyBsYXllciBvcGVyYXRpb25zLCBhbmQgSSBzdXNwZWN0IHRoZXJlJiMzOTtzIHNvbWV0aGluZyByZWxldmFudCB0byBvdXIgY3VycmVudCBpbnZlc3RpZ2F0aW9uIGx1cmtpbmcgdGhlcmUuIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsIGhlcmUsIHJlYWxseSB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIGhvdyB0aGF0IHNlZ21lbnQgaGFuZGxlcyBpdHMgZHV0aWVzLgoKQmV5b25kIHRoYXQsIHRoZSByZWNlcHRpb24gcGF0aCBpbiBgdXNiLmNgIGRlbWFuZHMgYXR0ZW50aW9uLiBJIHNob3VsZCByZWFsbHkgdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIHRvIGdyYWIgc3R1ZmYgb3V0IG9mIHRoZSBVU0IgaW50ZXJmYWNlIGFuZCBhY3R1YWxseSBwcm9jZXNzIGl0LiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBVU0IgUlggaGFuZGxpbmcsIGFzIHRoYXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgZGF0YSBmbG93IHdlIGFyZSBsb29raW5nIGF0LiBVbmRlcnN0YW5kaW5nIHRoZSBkZXRhaWxzIG9mIHRoaXMgc3BlY2lmaWMgYXJlYSBpcyBwYXJhbW91bnQgdG8gbXkgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ4MDpcdFx0Y2FzZSBJRUVFODAyMTFfRlRZUEVfREFUQTpcbiA0ODE6XHRcdFx0ZGV2X2RiZyhwbGZ4bGNfbWFjX2RldihtYWMpLCBcJiMzNDs4MDIuMTEgZGF0YSBmcmFtZVxcblwmIzM0Oyk7XG4gNDgyOlx0XHRcdGJyZWFrO1xuIDQ4MzpcdFx0fVxuIDQ4NDpcdFxuIDQ4NTpcdFx0c2tiID0gZGV2X2FsbG9jX3NrYihwYXlsb2FkX2xlbmd0aCAmIzQzOyAobmVlZF9wYWRkaW5nID8gMiA6IDApKTtcbiA0ODY6XHRcdGlmICghc2tiKVxuIDQ4NzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA0ODg6XHRcbiA0ODk6XHRcdGlmIChuZWVkX3BhZGRpbmcpXG4gNDkwOlx0XHRcdC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBwYXlsb2FkIGRhdGEgaXMgNCBieXRlIGFsaWduZWQuICovXG4gNDkxOlx0XHRcdHNrYl9yZXNlcnZlKHNrYiwgMik7XG4gNDkyOlx0XG4gNDkzOlx0XHRza2JfcHV0X2RhdGEoc2tiLCBidWZmZXIsIHBheWxvYWRfbGVuZ3RoKTtcbiA0OTQ6XHRcdG1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKSwgXHUwMDI2c3RhdHMsIHNpemVvZihzdGF0cykpO1xuIDQ5NTpcdFx0aWVlZTgwMjExX3J4X2lycXNhZmUoaHcsIHNrYik7XG4gNDk2Olx0XHRyZXR1cm4gMDtcbiA0OTc6XHR9XG4gNDk4Olx0XG4gNDk5Olx0c3RhdGljIGludCBwbGZ4bGNfb3BfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiA1MDA6XHRcdFx0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpXG4gNTAxOlx0e1xuIDUwMjpcdFx0c3RydWN0IHBsZnhsY19tYWMgKm1hYyA9IHBsZnhsY19od19tYWMoaHcpO1xuIDUwMzpcdFx0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpZnR5cGU4MDIxMVtdID0ge1xuIDUwNDpcdFx0XHRbTkw4MDIxMV9JRlRZUEVfU1RBVElPTl1cdD0gXCYjMzQ7U3RhdGlvblwmIzM0OyxcbiA1MDU6XHRcdFx0W05MODAyMTFfSUZUWVBFX0FESE9DXVx0XHQ9IFwmIzM0O0FkaG9jXCYjMzQ7XG4gNTA2Olx0XHR9O1xuIDUwNzpcdFxuIDUwODpcdFx0aWYgKG1hYy1cdTAwM2V0eXBlICE9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKVxuIDUwOTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gNTEwOlx0XG4gNTExOlx0XHRpZiAodmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHxcbiA1MTI6XHRcdCAgICB2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7XG4gNTEzOlx0XHRcdGRldl9kYmcocGxmeGxjX21hY19kZXYobWFjKSwgXCYjMzQ7JXMgJXNcXG5cJiMzNDssIF9fZnVuY19fLFxuIDUxNDpcdFx0XHRcdGlmdHlwZTgwMjExW3ZpZi1cdTAwM2V0eXBlXSk7XG4gNTE1Olx0XHRcdG1hYy1cdTAwM2V0eXBlID0gdmlmLVx1MDAzZXR5cGU7XG4gNTE2Olx0XHRcdG1hYy1cdTAwM2V2aWYgPSB2aWY7XG4gNTE3Olx0XHRcdHJldHVybiAwO1xuIDUxODpcdFx0fVxuIDUxOTpcdFx0ZGV2X2RiZyhwbGZ4bGNfbWFjX2RldihtYWMpLCBcJiMzNDt1bnN1cHBvcnRlZCBpZnR5cGVcXG5cJiMzNDspO1xuIDUyMDpcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDUyMTpcdH1cbiA1MjI6XHRcbiA1MjM6XHRzdGF0aWMgdm9pZCBwbGZ4bGNfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiA1MjQ6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKVxuIDUyNTpcdHtcbiA1MjY6XHRcdHN0cnVjdCBwbGZ4bGNfbWFjICptYWMgPSBwbGZ4bGNfaHdfbWFjKGh3KTtcbiA1Mjc6XHRcbiA1Mjg6XHRcdG1hYy1cdTAwM2V0eXBlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7XG4gNTI5Olx0XHRtYWMtXHUwMDNldmlmID0gTlVMTDtcbiA1MzA6XHR9XG4gNTMxOlx0XG4gNTMyOlx0c3RhdGljIGludCBwbGZ4bGNfb3BfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcmFkaW9faWR4LCB1MzIgY2hhbmdlZClcbiA1MzM6XHR7XG4gNTM0Olx0XHRyZXR1cm4gMDtcbiA1MzU6XHR9XG4gNTM2Olx0XG4gNTM3Olx0I2RlZmluZSBTVVBQT1JURURfRklGX0ZMQUdTIFxcXG4gNTM4Olx0XHQoRklGX0FMTE1VTFRJIHwgRklGX0ZDU0ZBSUwgfCBGSUZfQ09OVFJPTCB8IFxcXG4gNTM5Olx0XHQgRklGX09USEVSX0JTUyB8IEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODc4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipGb2N1c2luZyBvbiB0aGUgUHVyZUxpRmkgVVNCIERyaXZlcioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBmb3IgdGhlIFB1cmVMaUZpIFVTQiBkcml2ZXIuJiMzNDsgU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNgLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBVU0IgaW50ZXJmYWNlIGZvciB0aGF0IHNwZWNpZmljIFB1cmVMaUZpIHBsYXRmb3JtIChgcGxmeGxjYCkgd2lsbCBiZSBoYW5kbGVkLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIGhvdyBpdCBpbml0aWFsaXplcywgaG93IGl0IGhhbmRsZXMgZGV2aWNlIGVudW1lcmF0aW9uIGFuZCBwb3dlciBtYW5hZ2VtZW50LCBob3cgaXQgbW92ZXMgcGFja2V0cywgYW5kIGhvdyBpdCBkZWFscyB3aXRoIGFueSBxdWlya3Mgc3BlY2lmaWMgdG8gdGhlIFVTQiBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGxvdy1sZXZlbCBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIGhvc3QgYW5kIHRoZSBQdXJlTGlGaSBoYXJkd2FyZSBoYXBwZW5zLCBzbyBJIG5lZWQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCBhbnkgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdXNlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdGNhc2UgLUVOT0RFVjpcbiAxMDE6XHRcdGNhc2UgLUVOT0VOVDpcbiAxMDI6XHRcdGNhc2UgLUVDT05OUkVTRVQ6XG4gMTAzOlx0XHRjYXNlIC1FUElQRTpcbiAxMDQ6XHRcdFx0ZGV2X2RiZyhwbGZ4bGNfdXJiX2Rldih1cmIpLCBcJiMzNDt1cmIgJXAgZXJyb3IgJWRcXG5cJiMzNDssIHVyYiwgdXJiLVx1MDAzZXN0YXR1cyk7XG4gMTA1Olx0XHRcdHJldHVybjtcbiAxMDY6XHRcdGRlZmF1bHQ6XG4gMTA3Olx0XHRcdGRldl9kYmcocGxmeGxjX3VyYl9kZXYodXJiKSwgXCYjMzQ7dXJiICVwIGVycm9yICVkXFxuXCYjMzQ7LCB1cmIsIHVyYi1cdTAwM2VzdGF0dXMpO1xuIDEwODpcdFx0XHRpZiAodHgtXHUwMDNlc3VibWl0dGVkX3VyYnMmIzQzOyYjNDM7IFx1MDAzYyBQVVJFTElGSV9VUkJfUkVUUllfTUFYKSB7XG4gMTA5Olx0XHRcdFx0ZGV2X2RiZyhwbGZ4bGNfdXJiX2Rldih1cmIpLCBcJiMzNDt1cmIgJXAgcmVzdWJtaXQgJWRcJiMzNDssIHVyYixcbiAxMTA6XHRcdFx0XHRcdHR4LVx1MDAzZXN1Ym1pdHRlZF91cmJzJiM0MzsmIzQzOyk7XG4gMTExOlx0XHRcdFx0Z290byByZXN1Ym1pdDtcbiAxMTI6XHRcdFx0fSBlbHNlIHtcbiAxMTM6XHRcdFx0XHRkZXZfZGJnKHBsZnhsY191cmJfZGV2KHVyYiksIFwmIzM0O3VyYiAlcCAgbWF4IHJlc3VibWl0cyByZWFjaGVkXCYjMzQ7LCB1cmIpO1xuIDExNDpcdFx0XHRcdHR4LVx1MDAzZXN1Ym1pdHRlZF91cmJzID0gMDtcbiAxMTU6XHRcdFx0XHRyZXR1cm47XG4gMTE2Olx0XHRcdH1cbiAxMTc6XHRcdH1cbiAxMTg6XHRcbiAxMTk6XHRcdGJ1ZmZlciA9IHVyYi1cdTAwM2V0cmFuc2Zlcl9idWZmZXI7XG4gMTIwOlx0XHRsZW5ndGggPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aDtcbiAxMjE6XHRcbiAxMjI6XHRcdGlmIChsZW5ndGggIT0gKFBMRl9NU0dfU1RBVFVTX09GRlNFVCAmIzQzOyAxKSkge1xuIDEyMzpcdFx0XHRpZiAodXNiLVx1MDAzZWluaXRpYWxpemVkIFx1MDAyNlx1MDAyNiB1c2ItXHUwMDNlbGlua191cClcbiAxMjQ6XHRcdFx0XHRoYW5kbGVfcnhfcGFja2V0KHVzYiwgYnVmZmVyLCBsZW5ndGgpO1xuIDEyNTpcdFx0XHRnb3RvIHJlc3VibWl0O1xuIDEyNjpcdFx0fVxuIDEyNzpcdFxuIDEyODpcdFx0c3RhdHVzID0gYnVmZmVyW1BMRl9NU0dfU1RBVFVTX09GRlNFVF07XG4gMTI5Olx0XG4gMTMwOlx0XHRzd2l0Y2ggKHN0YXR1cykge1xuIDEzMTpcdFx0Y2FzZSBTVEFUSU9OX0ZJRk9fQUxNT1NUX0ZVTExfTk9UX01FU1NBR0U6XG4gMTMyOlx0XHRcdGRldl9kYmcoXHUwMDI2dXNiLVx1MDAzZWludGYtXHUwMDNlZGV2LFxuIDEzMzpcdFx0XHRcdFwmIzM0O0ZJRk8gZnVsbCBub3QgcGFja2V0IHJlY2VpcHRcXG5cJiMzNDspO1xuIDEzNDpcdFx0XHR0eC1cdTAwM2VtYWNfZmlmb19mdWxsID0gMTtcbiAxMzU6XHRcdFx0Zm9yIChzaWR4ID0gMDsgc2lkeCBcdTAwM2MgTUFYX1NUQV9OVU07IHNpZHgmIzQzOyYjNDM7KVxuIDEzNjpcdFx0XHRcdHR4LVx1MDAzZXN0YXRpb25bc2lkeF0uZmxhZyB8PSBTVEFUSU9OX0ZJRk9fRlVMTF9GTEFHO1xuIDEzNzpcdFx0XHRicmVhaztcbiAxMzg6XHRcdGNhc2UgU1RBVElPTl9GSUZPX0FMTU9TVF9GVUxMX01FU1NBR0U6XG4gMTM5Olx0XHRcdGRldl9kYmcoXHUwMDI2dXNiLVx1MDAzZWludGYtXHUwMDNlZGV2LCBcJiMzNDtGSUZPIGZ1bGwgcGFja2V0IHJlY2VpcHRcXG5cJiMzNDspO1xuIDE0MDpcdFxuIDE0MTpcdFx0XHRmb3IgKHNpZHggPSAwOyBzaWR4IFx1MDAzYyBNQVhfU1RBX05VTTsgc2lkeCYjNDM7JiM0MzspXG4gMTQyOlx0XHRcdFx0dHgtXHUwMDNlc3RhdGlvbltzaWR4XS5mbGFnIFx1MDAyNj0gU1RBVElPTl9BQ1RJVkVfRkxBRztcbiAxNDM6XHRcbiAxNDQ6XHRcdFx0cGxmeGxjX3NlbmRfcGFja2V0X2Zyb21fZGF0YV9xdWV1ZSh1c2IpO1xuIDE0NTpcdFx0XHRicmVhaztcbiAxNDY6XHRcdGNhc2UgU1RBVElPTl9DT05ORUNUX01FU1NBR0U6XG4gMTQ3Olx0XHRcdHVzYi1cdTAwM2VsaW5rX3VwID0gMTtcbiAxNDg6XHRcdFx0ZGV2X2RiZyhcdTAwMjZ1c2ItXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwmIzM0O1NUX0NPTk5FQ1RfTVNHIHBhY2tldCByZWNlaXB0XFxuXCYjMzQ7KTtcbiAxNDk6XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5ODkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuIEhlcmUmIzM5O3MgaG93IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXQ6CgoqKkFuYWx5emluZyB0aGUgYGhhbmRsZV9yeF9wYWNrZXRgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdW5kZXJzdGFuZCB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbS4gV2hhdCBpcyBgaGFuZGxlX3J4X3BhY2tldGAgc3VwcG9zZWQgdG8gYmUgZG9pbmc/IE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHJlY2VpdmluZyBhbmQgcHJvY2Vzc2luZyBuZXR3b3JrIHBhY2tldHMuIEdpdmVuIHRoZSBuYW1lLCB0aGF0IGZlZWxzIGxpa2UgYSBzYWZlIGJldC4gQnV0IEkgbmVlZCB0byBnbyBkZWVwZXIgdGhhbiBqdXN0IGd1ZXNzaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCBoYW5kbGVzIHRob3NlIHBhY2tldHMuIFdoYXQgc3RlcHMgZG9lcyBpdCB0YWtlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgSSBjYW4gaW1tZWRpYXRlbHkgc3BvdCBiYXNlZCBvbiBpdHMgbmFtZSBhbG9uZT8gSSBuZWVkIHRvIHRoaW5rIGxpa2UgYW4gYXR0YWNrZXIgaGVyZS4gRG9lcyBpdCB2YWxpZGF0ZSB0aGUgc2l6ZSBvZiB0aGUgaW5jb21pbmcgcGFja2V0PyBEb2VzIGl0IGNoZWNrIGZvciBtYWxmb3JtZWQgZGF0YT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHBvaW50cyBvZiBvdmVyZmxvdz8gQmVmb3JlIEkgc3RhcnQgdG8gYW5hbHl6ZSwgSSYjMzk7bSBnb2luZyB0byBmb3JtdWxhdGUgYSBmZXcgcXVlc3Rpb25zIHRoYXQgbmVlZCBhbnN3ZXJpbmcuIEkmIzM5O2xsIG5lZWQgdG8ga25vdzoKKiAgIFdoYXQgaXMgdGhlIGlucHV0IHRvIHRoZSBmdW5jdGlvbj8KKiAgIFdoYXQgZG9lcyB0aGUgZnVuY3Rpb24gZG8gd2l0aCB0aGUgaW5wdXQ/CiogICBXaGF0IGFyZSB0aGUgb3V0cHV0cyBvZiB0aGUgZnVuY3Rpb24/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhbmRsZV9yeF9wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYz0zNj12b2lkIHBsZnhsY19zZW5kX3BhY2tldF9mcm9tX2RhdGFfcXVldWUoc3RydWN0IHBsZnhsY191c2IgKnVzYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtNjItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM6NjM6c3RhdGljIHZvaWQgaGFuZGxlX3J4X3BhY2tldChzdHJ1Y3QgcGxmeGxjX3VzYiAqdXNiLCBjb25zdCB1OCAqYnVmZmVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jLTY0LVx0XHRcdCAgICAgdW5zaWduZWQgaW50IGxlbmd0aClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM9Njk9c3RhdGljIHZvaWQgcnhfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtMTIzLVx0XHRpZiAodXNiLVx1MDAzZWluaXRpYWxpemVkIFx1MDAyNlx1MDAyNiB1c2ItXHUwMDNlbGlua191cClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYzoxMjQ6XHRcdFx0aGFuZGxlX3J4X3BhY2tldCh1c2IsIGJ1ZmZlciwgbGVuZ3RoKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy0xMjUtXHRcdGdvdG8gcmVzdWJtaXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NjkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjoKCioqQW5hbHl6aW5nIHRoZSBSWCBQYWNrZXQgSGFuZGxpbmcgaW4gUHVyZUxpRmkgVVNCIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGBoYW5kbGVfcnhfcGFja2V0YCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgdGhlIGRyaXZlciByZWNlaXZlcyBhbmQgcHJvY2Vzc2VzIGRhdGEgY29taW5nIGluIG92ZXIgdGhlIFVTQiBjb25uZWN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRlYnVnIHBvdGVudGlhbCBpc3N1ZXMgb3Igb3B0aW1pemUgcGVyZm9ybWFuY2UgaW4gdGhpcyBQdXJlTGlGaSBzZXR1cC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBjb21tb24gdGhpbmdzIHRvIGxvb2sgZm9yOiBpbnRlcnJ1cHQgaGFuZGxpbmcsIGJ1ZmZlciBtYW5hZ2VtZW50LCBlcnJvciBjaGVja2luZywgYW5kIGRhdGEgdmFsaWRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBkcml2ZXIgZGVhbHMgd2l0aCBmcmFnbWVudGVkIHBhY2tldHMsIGFueSBjaGVja3N1bSB2ZXJpZmljYXRpb24sIGFuZCBob3cgaXQgaGFuZHMgdGhlIHByb2Nlc3NlZCBkYXRhIG9mZiB0byB0aGUgaGlnaGVyIG5ldHdvcmsgbGF5ZXJzLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIHN0YW5kYXJkIFVTQiBkZXZpY2UgaW50ZXJhY3Rpb24sIGxpa2UgcmVhZGluZyBmcm9tIGVuZHBvaW50cywgYW5kIHBlcmhhcHMgc29tZSBkZXZpY2Utc3BlY2lmaWMgY29tbWFuZHMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMuIExldCYjMzk7cyBzZWUgaG93IHdlbGwgaXQmIzM5O3MgYmVlbiBpbXBsZW1lbnRlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBpbXByb3ZlbWVudCBvciBvcHRpbWl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gIDYxOlx0fVxuICA2MjpcdFxuICA2MzpcdHN0YXRpYyB2b2lkIGhhbmRsZV9yeF9wYWNrZXQoc3RydWN0IHBsZnhsY191c2IgKnVzYiwgY29uc3QgdTggKmJ1ZmZlcixcbiAgNjQ6XHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpXG4gIDY1Olx0e1xuICA2NjpcdFx0cGxmeGxjX21hY19yeChwbGZ4bGNfdXNiX3RvX2h3KHVzYiksIGJ1ZmZlciwgbGVuZ3RoKTtcbiAgNjc6XHR9XG4gIDY4Olx0XG4gIDY5Olx0c3RhdGljIHZvaWQgcnhfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbiAgNzA6XHR7XG4gIDcxOlx0XHRzdHJ1Y3QgcGxmeGxjX3VzYl90eCAqdHg7XG4gIDcyOlx0XHRzdHJ1Y3QgcGxmeGxjX3VzYiAqdXNiO1xuICA3MzpcdFx0dW5zaWduZWQgaW50IGxlbmd0aDtcbiAgNzQ6XHRcdGNvbnN0IHU4ICpidWZmZXI7XG4gIDc1Olx0XHR1MTYgc3RhdHVzO1xuICA3NjpcdFx0dTggc2lkeDtcbiAgNzc6XHRcdGludCByO1xuICA3ODpcdFxuICA3OTpcdFx0aWYgKCF1cmIpIHtcbiAgODA6XHRcdFx0cHJfZXJyKFwmIzM0O3VyYiBpcyBOVUxMXFxuXCYjMzQ7KTtcbiAgODE6XHRcdFx0cmV0dXJuO1xuICA4MjpcdFx0fVxuICA4MzpcdFx0aWYgKCF1cmItXHUwMDNlY29udGV4dCkge1xuICA4NDpcdFx0XHRwcl9lcnIoXCYjMzQ7dXJiIGN0eCBpcyBOVUxMXFxuXCYjMzQ7KTtcbiAgODU6XHRcdFx0cmV0dXJuO1xuICA4NjpcdFx0fVxuICA4NzpcdFx0dXNiID0gdXJiLVx1MDAzZWNvbnRleHQ7XG4gIDg4Olx0XG4gIDg5Olx0XHRpZiAodXNiLVx1MDAzZWluaXRpYWxpemVkICE9IDEpIHtcbiAgOTA6XHRcdFx0cHJfZXJyKFwmIzM0O3VzYiBpcyBub3QgaW5pdGlhbGl6ZWRcXG5cJiMzNDspO1xuICA5MTpcdFx0XHRyZXR1cm47XG4gIDkyOlx0XHR9XG4gIDkzOlx0XG4gIDk0Olx0XHR0eCA9IFx1MDAyNnVzYi1cdTAwM2V0eDtcbiAgOTU6XHRcdHN3aXRjaCAodXJiLVx1MDAzZXN0YXR1cykge1xuICA5NjpcdFx0Y2FzZSAwOlxuICA5NzpcdFx0XHRicmVhaztcbiAgOTg6XHRcdGNhc2UgLUVTSFVURE9XTjpcbiAgOTk6XHRcdGNhc2UgLUVJTlZBTDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM1MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEwNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSWCBQYXRoIEJ1ZyBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgaG93IHRoZSByZWNlaXZlIHBhdGggaGFuZGxlcyBpbmNvbWluZyBVU0IgdHJhbnNmZXJzIGFuZCBwcm9jZXNzZXMgdGhlIGRhdGEuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXJlIHdlcmUgc2V2ZXJhbCByZWxhdGVkIHZ1bG5lcmFiaWxpdGllcywgbW9zdGx5IGxpbmtlZCB0byB1bmNoZWNrZWQgYXNzdW1wdGlvbnMgYWJvdXQgcGFja2V0IGxlbmd0aHMgYW5kIGJ1ZmZlciBwb2ludGVycywgd2hpY2ggY291bGQgbGVhZCB0byB2YXJpb3VzIGlzc3VlcyBmcm9tIG91dC1vZi1ib3VuZHMgcmVhZHMgdG8gaW5jb3JyZWN0IGZyYW1lIHByb2Nlc3NpbmcuCgpGaXJzdCwgaW4gYHJ4X3VyYl9jb21wbGV0ZWAsIHRoZSAmIzM0O2JlZm9yZSYjMzQ7IGNvZGUgaGFkIGEgbGVuZ3RoIGNhbGN1bGF0aW9uIHRoYXQgd2FzIGZ1bmRhbWVudGFsbHkgZmxhd2VkLiBJdCBhc3N1bWVkIGBsZW5ndGhgIGNvdWxkIGJlIHJlYWQgb3V0IGZyb20gYGJ1ZmZlciAmIzQzOyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cylgLCBidXQgdGhlIGltcGxlbWVudGF0aW9uIHdhcyBpbmNvcnJlY3Q6IGl0IHJlYWQgdXNpbmcgYGxlMzJfdG9fY3B1YCB3aGVuIGBiZTMyYCB3YXMgdXNlZC4gVGhlIGFjdHVhbCBwYWNrZXQgbGVuZ3RoIHdhcyBzdXBwb3NlZCB0byBiZSBpbiBgdXJiLSZndDthY3R1YWxfbGVuZ3RoYC4gVGhhdCYjMzk7cyBhIG1ham9yIHZ1bG5lcmFiaWxpdHkuIFRoZSBwYXRjaCBjb3JyZWN0bHkgY29ycmVjdHMgdGhpcyBhbmQgdXNlcyBgdXJiLSZndDthY3R1YWxfbGVuZ3RoYCBmb3IgbGVuZ3RoLiBUaGlzIGVuc3VyZXMgd2UmIzM5O3JlIG5vdCByZWFkaW5nIGdhcmJhZ2Ugb3IgYnlwYXNzaW5nIHBvdGVudGlhbCBzaXplIGNoZWNrcywgd2hpY2ggdGhlIGVhcmxpZXIgdmVyc2lvbiBkaWQuCgpTZWNvbmQsIHdpdGhpbiBgcGxmeGxjX21hY19yeGAsIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBtaXNzaW5nIGEgY3J1Y2lhbCBjaGVjazogY29uZmlybWluZyB0aGF0IHRoZSByZWNlaXZlZCBgbGVuZ3RoYCB3YXMgc3VmZmljaWVudCB0byBjb250YWluIHRoZSBiYXNpYyBoZWFkZXIgYW5kIHBheWxvYWQgbGVuZ3RoLiBXaXRob3V0IHRoYXQgaW5pdGlhbCBjaGVjaywgaXQgd2FzIHBvc3NpYmxlIGZvciB0aGUgY29kZSB0byBhdHRlbXB0IHRvIGRlcmVmZXJlbmNlIGEgYHN0cnVjdCByeF9zdGF0dXNgIHBvaW50ZXIgb3IgcmVhZCBhIHBheWxvYWQgbGVuZ3RoIGZyb20gYW4gaW52YWxpZCBtZW1vcnkgYWRkcmVzcywgb3BlbmluZyBpdCB1cCB0byBjcmFzaGluZyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIHVucHJlZGljdGFibGUgYmVoYXZpb3IuIFRoZSBmaXggYWRkcyB0aGUgY2hlY2sgYGxlbmd0aCAmbHQ7IHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSAmIzQzOyBzaXplb2YodTMyKWAsIHdoaWNoIGlzIGFic29sdXRlbHkgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGVyZSBpcyBlbm91Z2ggb2YgdGhlIGJ1ZmZlciB0byBldmVuIHBhcnNlIGJhc2ljIGRhdGEuCgpUaGlyZCwgYW5kIHBlcmhhcHMgbW9zdCBhbGFybWluZ2x5LCB0aGUgYHBsZnhsY19maWx0ZXJfYWNrYCBjYWxsIHdhcyBoYXBwZW5pbmcgKmJlZm9yZSogdGhlIGBidWZmZXJgIHBvaW50ZXIgaGFkIGJlZW4gYWR2YW5jZWQgdG8gcG9pbnQgdG8gdGhlIGFjdHVhbCA4MDIuMTEgZnJhbWUuIEVzc2VudGlhbGx5LCB0aGUgY29kZSB3YXMgdHJlYXRpbmcgYHJ4X3N0YXR1c2Agc3RydWN0dXJlIGFzIElFRUUgODAyLjExIGhlYWRlci4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGJ5IG1vdmluZyB0aGUgYGJ1ZmZlcmAgcG9pbnRlciAqYWZ0ZXIqIHJlYWRpbmcgYHJ4X3N0YXR1c2AgYW5kIGBwYXlsb2FkX2xlbmd0aGAuIFRoZSBwYXRjaCB0aGVuIG1ha2VzIE1UVSBjaGVja3MgYW5kIGNoZWNrcyB0aGF0IHRoZSBwYXlsb2FkIGxlbmd0aCBwbHVzIGhlYWRlcnMgaXMgbGVzcyB0aGFuIHRoZSB0b3RhbCBsZW5ndGgsIHRvIHByZXZlbnQgb3V0IG9mIGJvdW5kcyByZWFkcy4gVGhpcyBpcyBhbiBhYnNvbHV0ZWx5IGNyaXRpY2FsIGNvcnJlY3Rpb24gdG8gZW5zdXJlIHRoYXQgdGhlIHByb3BlciBmcmFtZSBpcyBiZWluZyBwcm9jZXNzZWQgYnkgdGhlIGZpbHRlcmluZyBmdW5jdGlvbi4KCkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgdGlnaHRlbmluZyB1cCBhIHNlcmllcyBvZiBsb29zZSBlbmRzIGluIHRoZSByZWNlaXZlIHBhdGguIEJ5IG1ha2luZyBpdCBzYWZlciwgd2UgYXJlIG5vdCBhbGxvd2luZyBkYXRhIHRvIGJlIG1pc3JlYWQsIGFuZCByZWR1Y2luZyB0aGUgbGlrZWxpaG9vZCBvZiBjcmFzaGVzIG9yIGluY29ycmVjdCBmcmFtZSBwcm9jZXNzaW5nLiBJIHdpbGwgZXhhbWluZSBgcGxmeGxjX2ZpbHRlcl9hY2tgIGZ1cnRoZXIgdG8gc2VlIHdoYXQgaXQmIzM5O3MgZG9pbmcgd2l0aCB0aGUgODAyLjExIGhlYWRlciwgYnV0IHRoaXMgc2V0IG9mIGZpeGVzIGlzIGRlZmluaXRlbHkgYSBtb3ZlIGluIHRoZSByaWdodCBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BsZnhsY19maWx0ZXJfYWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmM9Mjc4PXN0YXRpYyB2b2lkIHBsZnhsY19vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMtMzM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jOjMzODpzdGF0aWMgaW50IHBsZnhsY19maWx0ZXJfYWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcnhfaGRyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jLTMzOS1cdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmM9MzkzPWludCBwbGZ4bGNfbWFjX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqYnVmZmVyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYy00NDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmM6NDQxOlx0aWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsIFx1MDAyNnN0YXRzKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYy00NDItXHQgICAgIW1hYy1cdTAwM2VwYXNzX2N0cmwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzc0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYHBsZnhsY19maWx0ZXJfYWNrYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHBsZnhsY19maWx0ZXJfYWNrYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSnVzdCB0aGUgbmFtZSBhbG9uZSwgYGZpbHRlcl9hY2tgLCBzdWdnZXN0cyBhIHJvbGUgaW4gYWNrbm93bGVkZ2luZyBvciBwcm9jZXNzaW5nIGZpbHRlcmVkIGRhdGEuIFRoZSAmIzM0O3BsZnhsYyYjMzQ7IHByZWZpeOKApiB0aGF0IGhpbnRzIGF0IHRoZSBzcGVjaWZpYyBmaWx0ZXJpbmcgbWVjaGFuaXNtIG9yIG1vZHVsZSBpdCYjMzk7cyBwYXJ0IG9mOyBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIHRoZSBuYW1pbmcgY29udmVudGlvbnMgYW5kIGNvbnRleHQgd2l0aGluIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSBzdXNwZWN0IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBzb21lIGZvcm0gb2YgcGFja2V0IGxldmVsIGZpbHRlcmluZywgcG9zc2libHkgcmVsYXRlZCB0byBmbG93IGNvbnRyb2wgb3IgY29ubmVjdGlvbiBtYW5hZ2VtZW50LiBLbm93aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhcmVhcyB3aGVyZSBpdCBtaWdodCBiZSBleHBvc2VkIHRvIG1hbGljaW91cyBvciB1bmV4cGVjdGVkIGlucHV0cywgcGFydGljdWxhcmx5IGlmIGl0IGRlYWxzIHdpdGggYW55IHNvcnQgb2Ygc3RhdGUgbWFuYWdlbWVudC4gTGV0JiMzOTtzIHNlZSBob3cgaXQgaGFuZGxlcyB2YXJpb3VzIEFDSyB2YWx1ZXMgYW5kIGZsYWdzLiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgcGFzc2VkIGludG8gaXQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBsb29raW5nIGZvcj8gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBpZiB0aGlzIHRoaW5nIGlzIGFzIHJvYnVzdCBhcyBpdCBuZWVkcyB0byBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzODpcdHN0YXRpYyBpbnQgcGxmeGxjX2ZpbHRlcl9hY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpyeF9oZHIsXG4gMzM5Olx0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMpXG4gMzQwOlx0e1xuIDM0MTpcdFx0c3RydWN0IHBsZnhsY19tYWMgKm1hYyA9IHBsZnhsY19od19tYWMoaHcpO1xuIDM0MjpcdFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqcTtcbiAzNDM6XHRcdGludCBpLCBwb3NpdGlvbiA9IDA7XG4gMzQ0Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDM0NTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAzNDY6XHRcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiAzNDc6XHRcbiAzNDg6XHRcdGlmICghaWVlZTgwMjExX2lzX2FjayhyeF9oZHItXHUwMDNlZnJhbWVfY29udHJvbCkpXG4gMzQ5Olx0XHRcdHJldHVybiAwO1xuIDM1MDpcdFxuIDM1MTpcdFx0ZGV2X2RiZyhwbGZ4bGNfbWFjX2RldihtYWMpLCBcJiMzNDtBQ0sgUmVjZWl2ZWRcXG5cJiMzNDspO1xuIDM1MjpcdFxuIDM1MzpcdFx0LyogY29kZSBiYXNlZCBvbiB6eSBkcml2ZXIsIHRoaXMgbG9naWMgbWF5IG5lZWQgZml4ICovXG4gMzU0Olx0XHRxID0gXHUwMDI2bWFjLVx1MDAzZWFja193YWl0X3F1ZXVlO1xuIDM1NTpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gMzU2Olx0XG4gMzU3Olx0XHRza2JfcXVldWVfd2FsayhxLCBza2IpIHtcbiAzNTg6XHRcdFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKnR4X2hkcjtcbiAzNTk6XHRcbiAzNjA6XHRcdFx0cG9zaXRpb24mIzQzOyYjNDM7O1xuIDM2MTpcdFxuIDM2MjpcdFx0XHRpZiAobWFjLVx1MDAzZWFja19wZW5kaW5nIFx1MDAyNlx1MDAyNiBza2JfcXVldWVfaXNfZmlyc3QocSwgc2tiKSlcbiAzNjM6XHRcdFx0XHRjb250aW51ZTtcbiAzNjQ6XHRcdFx0aWYgKG1hYy1cdTAwM2VhY2tfcGVuZGluZyA9PSAwKVxuIDM2NTpcdFx0XHRcdGJyZWFrO1xuIDM2NjpcdFxuIDM2NzpcdFx0XHR0eF9oZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YTtcbiAzNjg6XHRcdFx0aWYgKGxpa2VseShldGhlcl9hZGRyX2VxdWFsKHR4X2hkci1cdTAwM2VhZGRyMiwgcnhfaGRyLVx1MDAzZWFkZHIxKSkpIHtcbiAzNjk6XHRcdFx0XHRmb3VuZCA9IDE7XG4gMzcwOlx0XHRcdFx0YnJlYWs7XG4gMzcxOlx0XHRcdH1cbiAzNzI6XHRcdH1cbiAzNzM6XHRcbiAzNzQ6XHRcdGlmIChmb3VuZCkge1xuIDM3NTpcdFx0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBwb3NpdGlvbjsgaSYjNDM7JiM0MzspXG4gMzc2Olx0XHRcdFx0c2tiID0gX19za2JfZGVxdWV1ZShxKTtcbiAzNzc6XHRcdFx0aWYgKGkgPT0gcG9zaXRpb24pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMjkKCQkJCQkJCW91dHB1dDogMjE0CgkJCQkJCQl0aG91Z2h0czogNjk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQgb2YgdGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgS01TQU4gYW5kIEtBU0FOIHBlcnNwZWN0aXZlLCBJJiMzOTt2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCB0aGUgYHB1cmVsaWZpL3BsZnhsY2AgZHJpdmVyIGFuZCBmb2N1c2VzIG9uIGltcHJvdmluZyB0aGUgcm9idXN0bmVzcyBvZiBVU0IgUlggYnVmZmVyIGhhbmRsaW5nLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFib3V0IGFkZGluZyBtaXNzaW5nIGJvdW5kcyBhbmQgbGVuZ3RoIGNoZWNrcywgKmZpeGluZyogYnVmZmVyIG9mZnNldHMsIGFuZCBnZW5lcmFsbHkgc2hvcmluZyB1cCB0aGUgY29kZSYjMzk7cyByZXNpbGllbmNlIHRvIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzLgoKRmlyc3QsIEkgZXhhbWluZWQgaXQgZm9yIHBvdGVudGlhbCBLTVNBTiByZWQgZmxhZ3MuIEkgbG9va2VkIGZvciBpbnN0YW5jZXMgd2hlcmUga2VybmVsIHN0cnVjdHVyZXMgd2VyZSBiZWluZyBwYXNzZWQgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIGJ1dCBJIHNlZSBub25lLiBUaGUgZHJpdmVyIGRlYWxzIHdpdGggVVNCIGRhdGEgKGB1cmItJmd0O3RyYW5zZmVyX2J1ZmZlcmApLCBhbmQgaXQmIzM5O3MgYmVpbmcgZm9yd2FyZGVkIHRvIGBtYWM4MDIxMWAgdmlhIGBpZWVlODAyMTFfcnhfaXJxc2FmZSgpYC4gSW1wb3J0YW50bHksIGFueXRoaW5nIHJlbGF0ZWQgdG8gYHN0YXRzYCBpcyBleHBsaWNpdGx5IHplcm9lZCBvdXQgd2l0aCBgbWVtc2V0YC4gTm8gZGljZSBvbiB0aGUgdW5pbml0aWFsaXplZCBkYXRhIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlLgoKTmV4dCwgSSBsb29rZWQgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBZ2Fpbiwgbm90aGluZy4gVGhlIGxlbmd0aHMgYXJlIGNvbWluZyBmcm9tIHRoZSBVU0IgY29yZSAoYHVyYi0mZ3Q7YWN0dWFsX2xlbmd0aGApLCBhbmQgYGJ1ZmZlcmAgaXMgdGhlIGB1cmItJmd0O3RyYW5zZmVyX2J1ZmZlcmAuIEFsbCBsb2NhbHMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEl0JiMzOTtzIGNsZWFuLgoKVGhpcmRseSwgSSBjaGVja2VkIGZvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBidXQgdGhpcyBpc24mIzM5O3QgdGhlIGNhc2UgaGVyZS4KCkZvdXJ0aCwgSSBjaGVja2VkIGZvciBjaGFuZ2VzIGludm9sdmluZyBidWZmZXIgbWFuaXB1bGF0aW9ucywgbGVuZ3RocywgYW5kIGFueSBsb2dpYyB0aGF0IG1pZ2h0IHBlcm1pdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLiBJbiBmYWN0LCB0aGlzIHBhdGNoIGlzICphZGRpbmcqIGJvdW5kcyBjaGVja3M7IHByZXZlbnRpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycyEgU3BlY2lmaWNhbGx5LCBuZXcgY2hlY2tzIG9uIGBsZW5ndGhgIGFyZSBhZGRlZCB0byBwcmV2ZW50IHRoZSBvdXQtb2YtYm91bmRzIHJlYWRzLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGFsbCBhc3BlY3RzLiBJIGNvbmZpcm1lZCB0aGF0IGByeF91cmJfY29tcGxldGVgIHVzZXMgYHVyYi0mZ3Q7YWN0dWFsX2xlbmd0aGAgY29ycmVjdGx5LCBub3QgYXR0ZW1wdGluZyB0byBpbnRlcnByZXQgYnl0ZXMgYXMgYSBsZW5ndGguIGBwbGZ4bGNfbWFjX3J4YCBjYXJlZnVsbHkgY2hlY2tzIGJ1ZmZlciBsZW5ndGggYWdhaW5zdCBoZWFkZXIgc2l6ZXMsIE1UVSwgYW5kIHRvdGFsIHBhY2tldCBsZW5ndGggYmVmb3JlIGNhbGxpbmcgYHBsZnhsY19maWx0ZXJfYWNrYC4gVGhpcyBmaXhlcyBidWdzLgoKTXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgaXMgKm5vdCogYSBLTVNBTiBpc3N1ZS4gVGhlIGJ1Z3MgdGhhdCBhcmUgYmVpbmcgZml4ZWQgYXJlIGJvdW5kcyBjaGVjayBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb24gVVNCIFVSQiBidWZmZXJzLCBwcmVjaXNlbHkgdGhlIGtpbmRzIG9mIG1lbW9yeSBzYWZldHkgY29uY2VybnMgdGhhdCBLQVNBTiBleGNlbHMgYXQgZGV0ZWN0aW5nLiBLTVNBTiwgaW4gdGhpcyBjb250ZXh0LCBpcyB1bm5lY2Vzc2FyeS4gVGhlcmUmIzM5O3Mgbm8gaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBzdGFjay9oZWFwIHJlYWRzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFRoZSBgc3RhdHNgIHN0cnVjdHVyZSBpcyBiZWluZyB6ZXJvZWQuCgpTbywgZnJvbSBteSBwZXJzcGVjdGl2ZSwgTmVlZHNLTVNBTiBzaG91bGQgYWJzb2x1dGVseSBiZSBgZmFsc2VgLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDY6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcGFja2V0IHZhbGlkYXRpb24gaW4gdGhlIFB1cmVMaUZpIChwbGZ4bGMpIHdpcmVsZXNzIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCB1c2VzIGB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aGAgcmF0aGVyIHRoYW4gYW4gdW52YWxpZGF0ZWQgZmllbGQgZnJvbSB0aGUgYnVmZmVyLCBhZGRzIG1pbmltdW0gbGVuZ3RoIGNoZWNrcyBiZWZvcmUgcGFyc2luZyBgcnhfc3RhdHVzYCBhbmQgcGF5bG9hZCBsZW5ndGgsIHZlcmlmaWVzIHRoYXQgdGhlIHBheWxvYWQgbGVuZ3RoIGRvZXMgbm90IGV4Y2VlZCB0aGUgVVJCIGJ1ZmZlciBsZW5ndGgsIGFuZCBmaXhlcyB0aGUgYnVmZmVyIG9mZnNldCBwYXNzZWQgdG8gYHBsZnhsY19maWx0ZXJfYWNrKClgLlxuXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3MgaW5wdXQgdmFsaWRhdGlvbiBhbmQgb3V0LW9mLWJvdW5kcyBidWZmZXIgb3ZlcnJlYWRzLCB3aGljaCBmYWxsIHNxdWFyZWx5IHVuZGVyIEtBU0FOJiMzOTtzIGRvbWFpbi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlIHJlYWRzLCBkb2VzIG5vdCBhbHRlciBzdHJ1Y3R1cmUgcGFkZGluZy9pbml0aWFsaXphdGlvbiBzZW50IHRvIHVzZXJzcGFjZSwgYW5kIGFsbCBsb2NhbCBzdHJ1Y3R1cmVzIChzdWNoIGFzIGBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0c2ApIGFyZSBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXRgLiBUaHVzLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBhY2tldCB2YWxpZGF0aW9uIGluIHRoZSBQdXJlTGlGaSAocGxmeGxjKSB3aXJlbGVzcyBkcml2ZXIuIFNwZWNpZmljYWxseSwgaXQgdXNlcyBgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGhgIHJhdGhlciB0aGFuIGFuIHVudmFsaWRhdGVkIGZpZWxkIGZyb20gdGhlIGJ1ZmZlciwgYWRkcyBtaW5pbXVtIGxlbmd0aCBjaGVja3MgYmVmb3JlIHBhcnNpbmcgYHJ4X3N0YXR1c2AgYW5kIHBheWxvYWQgbGVuZ3RoLCB2ZXJpZmllcyB0aGF0IHRoZSBwYXlsb2FkIGxlbmd0aCBkb2VzIG5vdCBleGNlZWQgdGhlIFVSQiBidWZmZXIgbGVuZ3RoLCBhbmQgZml4ZXMgdGhlIGJ1ZmZlciBvZmZzZXQgcGFzc2VkIHRvIGBwbGZ4bGNfZmlsdGVyX2FjaygpYC5cblxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGlucHV0IHZhbGlkYXRpb24gYW5kIG91dC1vZi1ib3VuZHMgYnVmZmVyIG92ZXJyZWFkcywgd2hpY2ggZmFsbCBzcXVhcmVseSB1bmRlciBLQVNBTiYjMzk7cyBkb21haW4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZSByZWFkcywgZG9lcyBub3QgYWx0ZXIgc3RydWN0dXJlIHBhZGRpbmcvaW5pdGlhbGl6YXRpb24gc2VudCB0byB1c2Vyc3BhY2UsIGFuZCBhbGwgbG9jYWwgc3RydWN0dXJlcyAoc3VjaCBhcyBgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHNgKSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBgbWVtc2V0YC4gVGh1cywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjUzOjI3LjI3MDAwNjY0NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNDgyMjQ3NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBMRlhMQ1wiLFxuICAgIFwiV0xBTl9WRU5ET1JfUFVSRUxJRklcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJXTEFOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGxmeGxjX21hY19yeFwiLFxuICAgIFwicnhfdXJiX2NvbXBsZXRlXCIsXG4gICAgXCJoYW5kbGVfcnhfcGFja2V0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwYWNrZXQgdmFsaWRhdGlvbiBpbiB0aGUgUHVyZUxpRmkgKHBsZnhsYykgd2lyZWxlc3MgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0IHVzZXMgYHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aGAgcmF0aGVyIHRoYW4gYW4gdW52YWxpZGF0ZWQgZmllbGQgZnJvbSB0aGUgYnVmZmVyLCBhZGRzIG1pbmltdW0gbGVuZ3RoIGNoZWNrcyBiZWZvcmUgcGFyc2luZyBgcnhfc3RhdHVzYCBhbmQgcGF5bG9hZCBsZW5ndGgsIHZlcmlmaWVzIHRoYXQgdGhlIHBheWxvYWQgbGVuZ3RoIGRvZXMgbm90IGV4Y2VlZCB0aGUgVVJCIGJ1ZmZlciBsZW5ndGgsIGFuZCBmaXhlcyB0aGUgYnVmZmVyIG9mZnNldCBwYXNzZWQgdG8gYHBsZnhsY19maWx0ZXJfYWNrKClgLlxcblxcblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBvdXQtb2YtYm91bmRzIGJ1ZmZlciBvdmVycmVhZHMsIHdoaWNoIGZhbGwgc3F1YXJlbHkgdW5kZXIgS0FTQU4ncyBkb21haW4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZSByZWFkcywgZG9lcyBub3QgYWx0ZXIgc3RydWN0dXJlIHBhZGRpbmcvaW5pdGlhbGl6YXRpb24gc2VudCB0byB1c2Vyc3BhY2UsIGFuZCBhbGwgbG9jYWwgc3RydWN0dXJlcyAoc3VjaCBhcyBgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHNgKSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBgbWVtc2V0YC4gVGh1cywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHJlY2VwdGlvbiBhbmQgbGVuZ3RoIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIFB1cmVMaUZpIFVTQiB3aXJlbGVzcyBkcml2ZXIgKHBsZnhsY19tYWNfcnggYW5kIHJ4X3VyYl9jb21wbGV0ZSkuIFVTQiBuZXR3b3JrIGRyaXZlcnMgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgdXNpbmcgVVNCIHJhdy1nYWRnZXQgLyBkdW1teV9oY2QgZW11bGF0aW9uLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIHZlcmlmeSB0aGUgbmV3IGJvdW5kcyBjaGVja3MgYW5kIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIG9uIG1hbGZvcm1lZCBVU0IgZnJhbWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1MzoyNy4yNzAwMTcyMzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNzI0OTQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI3MmY1NThiYjlhNzI1ZjIwNDAyMGJmOTMzMTNmNzYzY2JlNDNiNDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAwNjo1MzoyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmNcXG5pbmRleCBhOTAwNDIxNzUzYWM2Li5kMjY5MGNjZTc5NmE4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuY1xcbkBAIC00MDcsNiArNDA3LDkgQEAgaW50IHBsZnhsY19tYWNfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpidWZmZXIsXFxuIFxcdGlmICghbWFjLVxcdTAwM2V2aWYpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0aWYgKGxlbmd0aCBcXHUwMDNjIHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSArIHNpemVvZih1MzIpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdHN0YXR1cyA9IChzdHJ1Y3Qgcnhfc3RhdHVzICopYnVmZmVyO1xcbiBcXG4gXFx0bWVtc2V0KFxcdTAwMjZzdGF0cywgMCwgc2l6ZW9mKHN0YXRzKSk7XFxuQEAgLTQyNSwxOSArNDI4LDE5IEBAIGludCBwbGZ4bGNfbWFjX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqYnVmZmVyLFxcbiBcXG4gXFx0bWFjLVxcdTAwM2VjcmNfZXJyb3JzID0gYmU2NF90b19jcHUoc3RhdHVzLVxcdTAwM2VjcmNfZXJyb3JfY291bnQpO1xcbiBcXG4tXFx0LyogVE9ETyBiYWQgZnJhbWUgY2hlY2sgZm9yIENSQyBlcnJvciovXFxuLVxcdGlmIChwbGZ4bGNfZmlsdGVyX2FjayhodywgKHN0cnVjdCBpZWVlODAyMTFfaGRyICopYnVmZmVyLCBcXHUwMDI2c3RhdHMpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhbWFjLVxcdTAwM2VwYXNzX2N0cmwpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4gXFx0YnVmZmVyICs9IHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKTtcXG4gXFx0cGF5bG9hZF9sZW5ndGggPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyKTtcXG4rXFx0YnVmZmVyICs9IHNpemVvZih1MzIpO1xcbiBcXG4tXFx0aWYgKHBheWxvYWRfbGVuZ3RoIFxcdTAwM2UgMTU2MCkge1xcbitcXHRpZiAocGF5bG9hZF9sZW5ndGggXFx1MDAzZSAxNTYwIHx8XFxuK1xcdCAgICBwYXlsb2FkX2xlbmd0aCArIHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSArIHNpemVvZih1MzIpIFxcdTAwM2UgbGVuZ3RoKSB7XFxuIFxcdFxcdGRldl9lcnIocGxmeGxjX21hY19kZXYobWFjKSwgXFxcIiBcXHUwMDNlIE1UVSAldVxcXFxuXFxcIiwgcGF5bG9hZF9sZW5ndGgpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbi1cXHRidWZmZXIgKz0gc2l6ZW9mKHUzMik7XFxuK1xcbitcXHRpZiAocGxmeGxjX2ZpbHRlcl9hY2soaHcsIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWJ1ZmZlciwgXFx1MDAyNnN0YXRzKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW1hYy1cXHUwMDNlcGFzc19jdHJsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGZjID0gZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopYnVmZmVyKTtcXG4gXFx0bmVlZF9wYWRkaW5nID0gaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSBeIGllZWU4MDIxMV9oYXNfYTQoZmMpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNcXG5pbmRleCA2ZDI0MDg2ZWI4YjdhLi5jMzNiOTEzMWJmZGRlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuY1xcbkBAIC0xMTcsMTAgKzExNyw5IEBAIHN0YXRpYyB2b2lkIHJ4X3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXFxuIFxcdH1cXG4gXFxuIFxcdGJ1ZmZlciA9IHVyYi1cXHUwMDNldHJhbnNmZXJfYnVmZmVyO1xcbi1cXHRsZW5ndGggPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKShidWZmZXIgKyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykpKVxcbi1cXHRcXHQgKyBzaXplb2YodTMyKTtcXG4rXFx0bGVuZ3RoID0gdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoO1xcbiBcXG4tXFx0aWYgKHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aCAhPSAoUExGX01TR19TVEFUVVNfT0ZGU0VUICsgMSkpIHtcXG4rXFx0aWYgKGxlbmd0aCAhPSAoUExGX01TR19TVEFUVVNfT0ZGU0VUICsgMSkpIHtcXG4gXFx0XFx0aWYgKHVzYi1cXHUwMDNlaW5pdGlhbGl6ZWQgXFx1MDAyNlxcdTAwMjYgdXNiLVxcdTAwM2VsaW5rX3VwKVxcbiBcXHRcXHRcXHRoYW5kbGVfcnhfcGFja2V0KHVzYiwgYnVmZmVyLCBsZW5ndGgpO1xcbiBcXHRcXHRnb3RvIHJlc3VibWl0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1MzoyNy45Nzc4ODY0NjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ0MTg4MDEzMDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBMRlhMQ1wiLFxuICAgIFwiV0xBTl9WRU5ET1JfUFVSRUxJRklcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJXTEFOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGxmeGxjX21hY19yeFwiLFxuICAgIFwicnhfdXJiX2NvbXBsZXRlXCIsXG4gICAgXCJoYW5kbGVfcnhfcGFja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHJlY2VwdGlvbiBhbmQgbGVuZ3RoIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIFB1cmVMaUZpIFVTQiB3aXJlbGVzcyBkcml2ZXIgKHBsZnhsY19tYWNfcnggYW5kIHJ4X3VyYl9jb21wbGV0ZSkuIFVTQiBuZXR3b3JrIGRyaXZlcnMgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgdXNpbmcgVVNCIHJhdy1nYWRnZXQgLyBkdW1teV9oY2QgZW11bGF0aW9uLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIHZlcmlmeSB0aGUgbmV3IGJvdW5kcyBjaGVja3MgYW5kIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIG9uIG1hbGZvcm1lZCBVU0IgZnJhbWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3MmY1NThiYjlhNzI1ZjIwNDAyMGJmOTMzMTNmNzYzY2JlNDNiNDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA2OjUzOjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jXG5pbmRleCBhOTAwNDIxNzUzYWM2Li5kMjY5MGNjZTc5NmE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmNcbkBAIC00MDcsNiArNDA3LDkgQEAgaW50IHBsZnhsY19tYWNfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpidWZmZXIsXG4gXHRpZiAoIW1hYy1cdTAwM2V2aWYpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0aWYgKGxlbmd0aCBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpICsgc2l6ZW9mKHUzMikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0c3RhdHVzID0gKHN0cnVjdCByeF9zdGF0dXMgKilidWZmZXI7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c3RhdHMsIDAsIHNpemVvZihzdGF0cykpO1xuQEAgLTQyNSwxOSArNDI4LDE5IEBAIGludCBwbGZ4bGNfbWFjX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqYnVmZmVyLFxuIFxuIFx0bWFjLVx1MDAzZWNyY19lcnJvcnMgPSBiZTY0X3RvX2NwdShzdGF0dXMtXHUwMDNlY3JjX2Vycm9yX2NvdW50KTtcbiBcbi1cdC8qIFRPRE8gYmFkIGZyYW1lIGNoZWNrIGZvciBDUkMgZXJyb3IqL1xuLVx0aWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsIFx1MDAyNnN0YXRzKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhbWFjLVx1MDAzZXBhc3NfY3RybClcbi1cdFx0cmV0dXJuIDA7XG4tXG4gXHRidWZmZXIgKz0gc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpO1xuIFx0cGF5bG9hZF9sZW5ndGggPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyKTtcbitcdGJ1ZmZlciArPSBzaXplb2YodTMyKTtcbiBcbi1cdGlmIChwYXlsb2FkX2xlbmd0aCBcdTAwM2UgMTU2MCkge1xuK1x0aWYgKHBheWxvYWRfbGVuZ3RoIFx1MDAzZSAxNTYwIHx8XG4rXHQgICAgcGF5bG9hZF9sZW5ndGggKyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykgKyBzaXplb2YodTMyKSBcdTAwM2UgbGVuZ3RoKSB7XG4gXHRcdGRldl9lcnIocGxmeGxjX21hY19kZXYobWFjKSwgXCIgXHUwMDNlIE1UVSAldVxcblwiLCBwYXlsb2FkX2xlbmd0aCk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuLVx0YnVmZmVyICs9IHNpemVvZih1MzIpO1xuK1xuK1x0aWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsIFx1MDAyNnN0YXRzKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhbWFjLVx1MDAzZXBhc3NfY3RybClcbitcdFx0cmV0dXJuIDA7XG4gXG4gXHRmYyA9IGdldF91bmFsaWduZWQoKF9fbGUxNiAqKWJ1ZmZlcik7XG4gXHRuZWVkX3BhZGRpbmcgPSBpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpIF4gaWVlZTgwMjExX2hhc19hNChmYyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jXG5pbmRleCA2ZDI0MDg2ZWI4YjdhLi5jMzNiOTEzMWJmZGRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNcbkBAIC0xMTcsMTAgKzExNyw5IEBAIHN0YXRpYyB2b2lkIHJ4X3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gXHR9XG4gXG4gXHRidWZmZXIgPSB1cmItXHUwMDNldHJhbnNmZXJfYnVmZmVyO1xuLVx0bGVuZ3RoID0gbGUzMl90b19jcHUoKihfX2xlMzIgKikoYnVmZmVyICsgc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpKSlcbi1cdFx0ICsgc2l6ZW9mKHUzMik7XG4rXHRsZW5ndGggPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aDtcbiBcbi1cdGlmICh1cmItXHUwMDNlYWN0dWFsX2xlbmd0aCAhPSAoUExGX01TR19TVEFUVVNfT0ZGU0VUICsgMSkpIHtcbitcdGlmIChsZW5ndGggIT0gKFBMRl9NU0dfU1RBVFVTX09GRlNFVCArIDEpKSB7XG4gXHRcdGlmICh1c2ItXHUwMDNlaW5pdGlhbGl6ZWQgXHUwMDI2XHUwMDI2IHVzYi1cdTAwM2VsaW5rX3VwKVxuIFx0XHRcdGhhbmRsZV9yeF9wYWNrZXQodXNiLCBidWZmZXIsIGxlbmd0aCk7XG4gXHRcdGdvdG8gcmVzdWJtaXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1MzoyNy45Nzc4ODgxODNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjUyODEwNzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHVyZUxpRmkgVVNCIERyaXZlciBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgZm9yIHJlYWNoYWJpbGl0eSBhbmQgZnV6emFiaWxpdHkuIEZpcnN0LCB0aGUgdG91Y2hlZCBmaWxlcyBhcmUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuY2AgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNgLiBHb29kLCB0aGF0J3MgYSBzdGFydGluZyBwb2ludC4gTm93IEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkcml2ZXIgaXRzZWxmIOKAkyBob3cgaXQgd29ya3MsIGl0cyBjb25maWd1cmF0aW9uLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIFVTQi4gVGltZSB0byBwdWxsIHVwIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCBhbmQgaW5zcGVjdC5cblxuQWhhLCBpdCdzIHRoZSBgcGxmeGxjYCBkcml2ZXIsIGEgUHVyZUxpRmkgVVNCIHdpcmVsZXNzIGRyaXZlciwgYXMgZXhwZWN0ZWQuIFRoaXMgbWFrZXMgbWUgY29uc2lkZXIgU3l6a2FsbGVyJ3MgVVNCIHJhdyBnYWRnZXQgZW11bGF0aW9uLiBTaW5jZSBpdOKAmXMgYSBVU0IgZHJpdmVyLCBpdCAqbWlnaHQqIGJlIGZ1enphYmxlIHRocm91Z2ggYHN5el91c2JfY29ubmVjdGAsIGB2aGNpX2hjZGAsIGBkdW1teV9oY2RgLCBvciBgcmF3LWdhZGdldGAuIEJ1dCBjYW4gU3l6a2FsbGVyIHJlYWxpc3RpY2FsbHkgZnV6eiBQdXJlTGlGaSBVU0IgZGV2aWNlcyB1c2luZyB0aGlzIHBhcnRpY3VsYXIgcmF3IGdhZGdldCBlbXVsYXRpb24/IFRoYXTigJlzIHRoZSBjcml0aWNhbCBxdWVzdGlvbi5cblxuTm93IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjYCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIG1vcmUgY29uY3JldGUgaWRlYSBvZiBpdHMgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1MzozNS42MzA3MDIyN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDgwNDg1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQTEZYTENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19QTEZYTEMpXFx0XFx0Oj0gcGxmeGxjL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvS2NvbmZpZzoyOmNvbmZpZyBQTEZYTENcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJwdXJlTGlGaSBYLCBYTCwgWEMgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfUExGWExDKVxcdDo9IHBsZnhsYy5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL01ha2VmaWxlLTMtcGxmeGxjLW9ianMgXFx0XFx0Kz0gY2hpcC5vIGZpcm13YXJlLm8gdXNiLm8gbWFjLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9jaGlwLmgtNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvY2hpcC5oOjY6I2lmbmRlZiBQTEZYTENfQ0hJUF9IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaDo3OiNkZWZpbmUgUExGWExDX0NISVBfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9jaGlwLmgtOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9jaGlwLmg9MTg9ZW51bSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaDoxOTpcXHRQTEZYTENfUkFESU9fT0ZGID0gMCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvY2hpcC5oOjIwOlxcdFBMRlhMQ19SQURJT19PTiA9IDEsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaC0yMS19O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaD02ND1zdGF0aWMgaW5saW5lIHZvaWQgcGxmeGxjX21jX2FkZF9hbGwoc3RydWN0IHBsZnhsY19tY19oYXNoICpoYXNoKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL2NoaXAuaC02OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvY2hpcC5oOjcwOiNlbmRpZiAvKiBQTEZYTENfQ0hJUF9IICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmgtNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmg6NjojaWZuZGVmIFBMRlhMQ19NQUNfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuaDo3OiNkZWZpbmUgUExGWExDX01BQ19IXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5oLTgtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmg9MTgyPWludCBwbGZ4bGNfcmVzdG9yZV9zZXR0aW5ncyhzdHJ1Y3QgcGxmeGxjX21hYyAqbWFjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmgtMTgzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuaDoxODQ6I2VuZGlmIC8qIFBMRlhMQ19NQUNfSCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jPTU3OT1zdGF0aWMgaW50IHByb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jLTY0Ny1cXHRtc2xlZXAoUExGX01TTEVFUF9USU1FKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM6NjQ4OlxcdHIgPSBwbGZ4bGNfY2hpcF9zd2l0Y2hfcmFkaW8oY2hpcCwgUExGWExDX1JBRElPX09OKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtNjQ5LVxcdGlmIChyIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5oLTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5oOjY6I2lmbmRlZiBQTEZYTENfVVNCX0hcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmg6NzojZGVmaW5lIFBMRlhMQ19VU0JfSFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuaC04LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5oPTE5ND1pbnQgcGxmeGxjX3VwbG9hZF9tYWNfYW5kX3NlcmlhbChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuaC0xOTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5oOjE5ODojZW5kaWYgLyogUExGWExDX1VTQl9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjUzOjM1LjY5NTUxMjY5OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MDkzODk1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQdXJlTGlGaSBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9LY29uZmlnYCBmaWxlLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgdXN1YWwgc3VzcGVjdHM6IG9wdGlvbnMgcmVsYXRlZCB0byBlbmFibGluZy9kaXNhYmxpbmcgdGhlIFB1cmVMaUZpIFBMRlhMQyBkcml2ZXIgaXRzZWxmLCBwZXJoYXBzIGdyYW51bGFyaXR5IGF0IGEgZmVhdHVyZSBsZXZlbCAoZS5nLiwgc3BlY2lmaWMgUEhZIGxheWVyIGZ1bmN0aW9ucywgZGVidWdnaW5nIGFpZHMsIG9yIHBvd2VyIG1hbmFnZW1lbnQgY29udHJvbHMpLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBidWlsZCBjb25maWd1cmF0aW9ucyBhbmQgaG93IHRoZSBkcml2ZXIgaW50ZWdyYXRlcyB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgc3RhY2suIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZSBidWlsZCBzeXN0ZW0gaGFuZGxlcyBpbmNsdXNpb24vZXhjbHVzaW9uIGJhc2VkIG9uIHRhcmdldCBhcmNoaXRlY3R1cmUsIGtlcm5lbCB2ZXJzaW9uLCBvciBvdGhlciBkZXBlbmRlbmNpZXMuIEFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGNvbXBvbmVudHMgYXJlIG9mIHBhcnRpY3VsYXIgaW50ZXJlc3QuIEknbSBhbHNvIGtlZW4gdG8gc3BvdCBhbnkgdW51c3VhbCBvciBub24tc3RhbmRhcmQgS2NvbmZpZyB0cmlja3MgdGhhdCB0aGUgUHVyZUxpRmkgZm9sa3MgbWlnaHQgaGF2ZSBlbXBsb3llZC4gVWx0aW1hdGVseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhYmlsaXR5IG9mIHRoaXMgZHJpdmVyIGFuZCBob3cgZWFzeSBpdCBpcyB0byBjdXN0b21pemUgZm9yIHNwZWNpZmljIGRlcGxveW1lbnQgc2NlbmFyaW9zLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyODQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1MzozOC4xMDQ5MDYyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBQTEZYTENcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJwdXJlTGlGaSBYLCBYTCwgWEMgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjExIFxcdTAwMjZcXHUwMDI2IFVTQlxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBwdXJlTGlGaSBMaUZpIFVTQiB3aXJlbGVzc1xcbiAgIDc6XFx0XFx0ICAgYWRhcHRlcnMuIFRoZSBwdXJlTGlGaSBYLCBYTCwgWEMgVVNCIGRldmljZXMgYXJlIGJhc2VkIG9uXFxuICAgODpcXHRcXHQgICA4MDIuMTEgT0ZETSBQSFkgYnV0IHVzZXMgbGlnaHQgYXMgdGhlIHRyYW5zbWlzc2lvbiBtZWRpdW0uXFxuICAgOTpcXHRcXHQgICBUaGUgZHJpdmVyIHN1cHBvcnRzIGNvbW1vbiA4MDIuMTEgZW5jcnlwdGlvbi9hdXRoZW50aWNhdGlvblxcbiAgMTA6XFx0XFx0ICAgbWV0aG9kcyBpbmNsdWRpbmcgT3BlbiwgV1BBLCBXUEEyLVBlcnNvbmFsIGFuZFxcbiAgMTE6XFx0XFx0ICAgV1BBMi1FbnRlcnByaXNlICg4MDIuMVgpLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgbSBoZXJlLiBUaGUgbW9kdWxlIHdpbGxcXG4gIDE0OlxcdFxcdCAgIGJlIGNhbGxlZCBwbGZ4bGMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjUzOjM4LjEwNTAwNjQyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU3MzU4MDczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2NvbmZpZyBEaXZlIGZvciBQdXJlTGlGaSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJSaWdodCwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFB1cmVMaUZpIGRyaXZlciBjb25maWd1cmF0aW9uLlwiIFRoZSBpbW1lZGlhdGUgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgc3RyYWlnaHQgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZS4gVGhpcyBmaWxlIGlzLCBvZiBjb3Vyc2UsIHRoZSBoZWFydCBvZiBkZWZpbmluZyB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIHdoaWNoIGRlcGVuZGVuY2llcyBuZWVkIHRvIGJlIG1ldCwgYW5kIGhvdyB0aGUgdXNlciB3aWxsIGludGVyYWN0IHdpdGggdGhlIGRyaXZlciBhdCBidWlsZCB0aW1lLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCB2YXJpYWJsZXMsIHdoaWNoIGZlYXR1cmVzIGFyZSBjb25kaXRpb25hbCwgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGludGVncmF0ZXMgaW50byB0aGUgd2lkZXIgbmV0d29yayBzdGFjay4gVGltZSB0byBwYXJzZSB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXM7IEFyZSB0aGVyZSBhbnkgdW51c3VhbCBsaWJyYXJ5IHJlcXVpcmVtZW50cyBJIHNob3VsZCBrbm93IGFib3V0PyBBcmUgdGhlIGRldmljZSdzIGRlZmF1bHQgc2V0dGluZ3MgcHJvcGVybHkgZGVmaW5lZCBoZXJlPyBIb3cgY2FuIEkgZW5zdXJlIHByb3BlciBidWlsZCBjb21wYXRpYmlsaXR5IGZvciBhbGwgcmVsZXZhbnQgYXJjaGl0ZWN0dXJlcz8gTm8gbmVlZCBmb3IgYSBkZWVwLWRpdmUgeWV0LCBidXQgYSBxdWljayBzY2FuIHdpbGwgdGVsbCBtZSBpZiB0aGVyZSBhcmUgYW55IGltbWVkaWF0ZSByZWQgZmxhZ3MsIG9yIGFueSBvcHRpb25zIHRoYXQgc2VlbSBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBteSBjdXJyZW50IHRhc2suIEknbSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZTogSXMgaXQgdXNpbmcgc3RhbmRhcmQgbmV0d29yayBpbnRlcmZhY2VzPyBIb3cncyB0aGUgZmlybXdhcmUgaGFuZGxpbmcgY29uZmlndXJlZD8gQXJlIHRoZXJlIGFueSBleHBlcmltZW50YWwgb3IgZGVidWcgb3B0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQW5kIG1vc3QgaW1wb3J0YW50bHksIGNhbiBJIGdldCB0aGlzIGRyaXZlciB0byBkbyB3aGF0IEkgbmVlZCBpdCB0byBkbz8gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSBteSByb2FkbWFwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODQ1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1Mzo0Mi42Nzg1OTAwOTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyMDQyODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB1cmVsaWZpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWc9MzE9c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnOjMyOnNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTMzLXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmFsaW5rL0tjb25maWdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfV0xBTl9WRU5ET1JfTlhQKSArPSBueHAvXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX1BVUkVMSUZJKSArPSBwdXJlbGlmaS9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfV0xBTl9WRU5ET1JfUVVBTlRFTk5BKSArPSBxdWFudGVubmEvXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnPTEzPWlmIFdMQU5fVkVORE9SX1BVUkVMSUZJXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZy0xNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnOjE1OnNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZy0xNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTM6NDIuODgwNjY2NzI0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgxMTgzNDIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSBjaGVjazpcblxuKipFeGFtaW5pbmcgdGhlIFdMQU5fVkVORE9SX1BVUkVMSUZJIERlcGVuZGVuY3kqKlxuXG5SaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFdMQU5fVkVORE9SX1BVUkVMSUZJYC4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgc3RlcCBmb3IgbWUsIHNvIEknbSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBsaWtlbHkgc291cmNlIOKAkyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBmb3IgdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZyBzeW1ib2wgd2lsbCBsaXZlLCBhbG9uZ3NpZGUgaXRzIGRlcGVuZGVuY2llcy4gS25vd2luZyB3aGF0IGNvbmRpdGlvbnMgbmVlZCB0byBiZSBtZXQgdG8gZW5hYmxlIHRoaXMgZHJpdmVyIGlzIGNydWNpYWwsIHdoZXRoZXIgSSdtIGRpYWdub3NpbmcgYSBidWlsZCBpc3N1ZSwgbG9va2luZyBmb3IgZmVhdHVyZSBhdmFpbGFiaWxpdHksIG9yIGp1c3QgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwga2VybmVsIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIHNwZWxsIG91dCBleGFjdGx5IHdoYXQgZWxzZSBuZWVkcyB0byBiZSBpbiBwbGFjZSBmb3IgUHVyZUxpRmkgc3VwcG9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ2MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjUzOjQ1LjY5MjUwMzgzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgV0xBTl9WRU5ET1JfUFVSRUxJRklcXG4gICAzOlxcdFxcdGJvb2wgXFxcInB1cmVMaUZpIGRldmljZXNcXFwiXFxuICAgNDpcXHRcXHRkZWZhdWx0IHlcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBwdXJlTGlGaSBkZXZpY2UsIHNheSBZLlxcbiAgIDc6XFx0XFxuICAgODpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAgOTpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAxMDpcXHRcXHQgIHF1ZXN0aW9ucyBhYm91dCB0aGVzZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcXG4gIDExOlxcdFxcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBXTEFOX1ZFTkRPUl9QVVJFTElGSVxcbiAgMTQ6XFx0XFxuICAxNTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9LY29uZmlnXFxcIlxcbiAgMTY6XFx0XFxuICAxNzpcXHRlbmRpZiAjIFdMQU5fVkVORE9SX1BVUkVMSUZJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjUzOjQ1LjY5MjU2MjQ5OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODE3MzYzMjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGluLlxuXG4qKkluaXRpYWwgQ29kZSBJbnZlc3RpZ2F0aW9uKipcblxuUmlnaHQsIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMuIEknbGwgc3RhcnQgd2l0aCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jYCBhbmQgYHVzYi5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIHRoZSBjb3JlIE1BQyBmdW5jdGlvbmFsaXR5IGFuZCBob3cgaXQncyBpbnRlcmZhY2luZyB3aXRoIHRoZSBVU0IgbGF5ZXIsIHJlc3BlY3RpdmVseS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIGZyYW1ld29yayB0byB0aGVuIGRyaWxsIGRvd24gaW50byB0aGUgc3BlY2lmaWNzLiBVbmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmUgZmlyc3QgaXMga2V5LiBLbm93aW5nICpob3cqIHRoZSBjb2RlIHdvcmtzLCBhbmQgdGhlbiAqd2hhdCogd2FzIGNoYW5nZWQsIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyBxdWlja2x5IGFuZCBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk1NCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTM6NDcuNTA5OTMwMTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDA6XFx0XFx0c3RydWN0IHBsZnhsY191c2JfdHggKnR4O1xcbiA0MDE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gNDAyOlxcdFxcdGludCBuZWVkX3BhZGRpbmc7XFxuIDQwMzpcXHRcXHRfX2xlMTYgZmM7XFxuIDQwNDpcXHRcXHRpbnQgc2lkeDtcXG4gNDA1OlxcdFxcbiA0MDY6XFx0XFx0LyogUGFja2V0IGJsb2NrYWRlIGR1cmluZyBkaXNhYmxlZCBpbnRlcmZhY2UuICovXFxuIDQwNzpcXHRcXHRpZiAoIW1hYy1cXHUwMDNldmlmKVxcbiA0MDg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQwOTpcXHRcXG4gNDEwOlxcdFxcdGlmIChsZW5ndGggXFx1MDAzYyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykgKyBzaXplb2YodTMyKSlcXG4gNDExOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MTI6XFx0XFxuIDQxMzpcXHRcXHRzdGF0dXMgPSAoc3RydWN0IHJ4X3N0YXR1cyAqKWJ1ZmZlcjtcXG4gNDE0OlxcdFxcbiA0MTU6XFx0XFx0bWVtc2V0KFxcdTAwMjZzdGF0cywgMCwgc2l6ZW9mKHN0YXRzKSk7XFxuIDQxNjpcXHRcXG4gNDE3OlxcdFxcdHN0YXRzLmZsYWcgICAgID0gMDtcXG4gNDE4OlxcdFxcdHN0YXRzLmZyZXEgICAgID0gMjQxMjtcXG4gNDE5OlxcdFxcdHN0YXRzLmJhbmQgICAgID0gTkw4MDIxMV9CQU5EX0xDO1xcbiA0MjA6XFx0XFx0bWFjLVxcdTAwM2Vyc3NpICAgICAgPSAtMTUgKiBiZTE2X3RvX2NwdShzdGF0dXMtXFx1MDAzZXJzc2kpIC8gMTA7XFxuIDQyMTpcXHRcXG4gNDIyOlxcdFxcdHN0YXRzLnNpZ25hbCAgID0gbWFjLVxcdTAwM2Vyc3NpO1xcbiA0MjM6XFx0XFxuIDQyNDpcXHRcXHRpZiAoc3RhdHVzLVxcdTAwM2VyYXRlX2lkeCBcXHUwMDNlIDcpXFxuIDQyNTpcXHRcXHRcXHRzdGF0cy5yYXRlX2lkeCA9IDA7XFxuIDQyNjpcXHRcXHRlbHNlXFxuIDQyNzpcXHRcXHRcXHRzdGF0cy5yYXRlX2lkeCA9IHN0YXR1cy1cXHUwMDNlcmF0ZV9pZHg7XFxuIDQyODpcXHRcXG4gNDI5OlxcdFxcdG1hYy1cXHUwMDNlY3JjX2Vycm9ycyA9IGJlNjRfdG9fY3B1KHN0YXR1cy1cXHUwMDNlY3JjX2Vycm9yX2NvdW50KTtcXG4gNDMwOlxcdFxcbiA0MzE6XFx0XFx0YnVmZmVyICs9IHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKTtcXG4gNDMyOlxcdFxcdHBheWxvYWRfbGVuZ3RoID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1ZmZlcik7XFxuIDQzMzpcXHRcXHRidWZmZXIgKz0gc2l6ZW9mKHUzMik7XFxuIDQzNDpcXHRcXG4gNDM1OlxcdFxcdGlmIChwYXlsb2FkX2xlbmd0aCBcXHUwMDNlIDE1NjAgfHxcXG4gNDM2OlxcdFxcdCAgICBwYXlsb2FkX2xlbmd0aCArIHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKSArIHNpemVvZih1MzIpIFxcdTAwM2UgbGVuZ3RoKSB7XFxuIDQzNzpcXHRcXHRcXHRkZXZfZXJyKHBsZnhsY19tYWNfZGV2KG1hYyksIFxcXCIgXFx1MDAzZSBNVFUgJXVcXFxcblxcXCIsIHBheWxvYWRfbGVuZ3RoKTtcXG4gNDM4OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0Mzk6XFx0XFx0fVxcbiA0NDA6XFx0XFxuIDQ0MTpcXHRcXHRpZiAocGxmeGxjX2ZpbHRlcl9hY2soaHcsIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWJ1ZmZlciwgXFx1MDAyNnN0YXRzKSBcXHUwMDI2XFx1MDAyNlxcbiA0NDI6XFx0XFx0ICAgICFtYWMtXFx1MDAzZXBhc3NfY3RybClcXG4gNDQzOlxcdFxcdFxcdHJldHVybiAwO1xcbiA0NDQ6XFx0XFxuIDQ0NTpcXHRcXHRmYyA9IGdldF91bmFsaWduZWQoKF9fbGUxNiAqKWJ1ZmZlcik7XFxuIDQ0NjpcXHRcXHRuZWVkX3BhZGRpbmcgPSBpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpIF4gaWVlZTgwMjExX2hhc19hNChmYyk7XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdHR4ID0gXFx1MDAyNm1hYy1cXHUwMDNlY2hpcC51c2IudHg7XFxuIDQ0OTpcXHRcXG4gNDUwOlxcdFxcdGZvciAoc2lkeCA9IDA7IHNpZHggXFx1MDAzYyBNQVhfU1RBX05VTSAtIDE7IHNpZHgrKykge1xcbiA0NTE6XFx0XFx0XFx0aWYgKG1lbWNtcChcXHUwMDI2YnVmZmVyWzEwXSwgdHgtXFx1MDAzZXN0YXRpb25bc2lkeF0ubWFjLCBFVEhfQUxFTikpXFxuIDQ1MjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNDUzOlxcdFxcdFxcdGlmICh0eC1cXHUwMDNlc3RhdGlvbltzaWR4XS5mbGFnIFxcdTAwMjYgU1RBVElPTl9DT05ORUNURURfRkxBRykge1xcbiA0NTQ6XFx0XFx0XFx0XFx0dHgtXFx1MDAzZXN0YXRpb25bc2lkeF0uZmxhZyB8PSBTVEFUSU9OX0hFQVJUQkVBVF9GTEFHO1xcbiA0NTU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQ1NjpcXHRcXHRcXHR9XFxuIDQ1NzpcXHRcXHR9XFxuIDQ1ODpcXHRcXG4gNDU5OlxcdFxcdGlmIChzaWR4ID09IE1BWF9TVEFfTlVNIC0gMSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1Mzo0Ny41MTAxMzU1NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODg1OTU1MDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgUlggUGF0aCBpbiB0aGUgUHVyZUxpRmkgVVNCIERyaXZlcioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSByZWNlcHRpb24gcHJvY2VzcyB3aXRoaW4gdGhpcyBgcGxmeGxjYCBkcml2ZXIgZm9yIHRoZSBQdXJlTGlGaSBVU0IgZGV2aWNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0cmFjZSB0aGUgZmxvdyBvZiBleGVjdXRpb24gZnJvbSB0aGUgY29tcGxldGlvbiBvZiB0aGUgUmVjZWl2ZSBVUkIgKGByeF91cmJfY29tcGxldGVgKSB0byB0aGUgaGFuZGxpbmcgb2YgdGhlIHJlY2VpdmVkIHBhY2tldCAoYGhhbmRsZV9yeF9wYWNrZXRgKS4gSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdC4gV2hhdCBkYXRhIGlzIHBhc3NlZD8gV2hhdCdzIHRoZSBjb250ZXh0PyBBbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gSXMgdGhpcyBhIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cyBwYXRoPyBVbmRlcnN0YW5kaW5nIHRoaXMgc2VjdGlvbiBvZiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jYCBpcyBrZXkgdG8gZ2V0dGluZyBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBpbmNvbWluZyB3aXJlbGVzcyBkYXRhLiBJIHN1c3BlY3QgbG9va2luZyBhdCB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIGFuZCBleGFtaW5pbmcgYW55IHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgd2lsbCB5aWVsZCB0aGUga2V5IGluZm9ybWF0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE0NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTM6NTAuMzk2MDkzNTczWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0Y2FzZSAtRU5PREVWOlxcbiAxMDE6XFx0XFx0Y2FzZSAtRU5PRU5UOlxcbiAxMDI6XFx0XFx0Y2FzZSAtRUNPTk5SRVNFVDpcXG4gMTAzOlxcdFxcdGNhc2UgLUVQSVBFOlxcbiAxMDQ6XFx0XFx0XFx0ZGV2X2RiZyhwbGZ4bGNfdXJiX2Rldih1cmIpLCBcXFwidXJiICVwIGVycm9yICVkXFxcXG5cXFwiLCB1cmIsIHVyYi1cXHUwMDNlc3RhdHVzKTtcXG4gMTA1OlxcdFxcdFxcdHJldHVybjtcXG4gMTA2OlxcdFxcdGRlZmF1bHQ6XFxuIDEwNzpcXHRcXHRcXHRkZXZfZGJnKHBsZnhsY191cmJfZGV2KHVyYiksIFxcXCJ1cmIgJXAgZXJyb3IgJWRcXFxcblxcXCIsIHVyYiwgdXJiLVxcdTAwM2VzdGF0dXMpO1xcbiAxMDg6XFx0XFx0XFx0aWYgKHR4LVxcdTAwM2VzdWJtaXR0ZWRfdXJicysrIFxcdTAwM2MgUFVSRUxJRklfVVJCX1JFVFJZX01BWCkge1xcbiAxMDk6XFx0XFx0XFx0XFx0ZGV2X2RiZyhwbGZ4bGNfdXJiX2Rldih1cmIpLCBcXFwidXJiICVwIHJlc3VibWl0ICVkXFxcIiwgdXJiLFxcbiAxMTA6XFx0XFx0XFx0XFx0XFx0dHgtXFx1MDAzZXN1Ym1pdHRlZF91cmJzKyspO1xcbiAxMTE6XFx0XFx0XFx0XFx0Z290byByZXN1Ym1pdDtcXG4gMTEyOlxcdFxcdFxcdH0gZWxzZSB7XFxuIDExMzpcXHRcXHRcXHRcXHRkZXZfZGJnKHBsZnhsY191cmJfZGV2KHVyYiksIFxcXCJ1cmIgJXAgIG1heCByZXN1Ym1pdHMgcmVhY2hlZFxcXCIsIHVyYik7XFxuIDExNDpcXHRcXHRcXHRcXHR0eC1cXHUwMDNlc3VibWl0dGVkX3VyYnMgPSAwO1xcbiAxMTU6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAxMTY6XFx0XFx0XFx0fVxcbiAxMTc6XFx0XFx0fVxcbiAxMTg6XFx0XFxuIDExOTpcXHRcXHRidWZmZXIgPSB1cmItXFx1MDAzZXRyYW5zZmVyX2J1ZmZlcjtcXG4gMTIwOlxcdFxcdGxlbmd0aCA9IHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aDtcXG4gMTIxOlxcdFxcbiAxMjI6XFx0XFx0aWYgKGxlbmd0aCAhPSAoUExGX01TR19TVEFUVVNfT0ZGU0VUICsgMSkpIHtcXG4gMTIzOlxcdFxcdFxcdGlmICh1c2ItXFx1MDAzZWluaXRpYWxpemVkIFxcdTAwMjZcXHUwMDI2IHVzYi1cXHUwMDNlbGlua191cClcXG4gMTI0OlxcdFxcdFxcdFxcdGhhbmRsZV9yeF9wYWNrZXQodXNiLCBidWZmZXIsIGxlbmd0aCk7XFxuIDEyNTpcXHRcXHRcXHRnb3RvIHJlc3VibWl0O1xcbiAxMjY6XFx0XFx0fVxcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHRzdGF0dXMgPSBidWZmZXJbUExGX01TR19TVEFUVVNfT0ZGU0VUXTtcXG4gMTI5OlxcdFxcbiAxMzA6XFx0XFx0c3dpdGNoIChzdGF0dXMpIHtcXG4gMTMxOlxcdFxcdGNhc2UgU1RBVElPTl9GSUZPX0FMTU9TVF9GVUxMX05PVF9NRVNTQUdFOlxcbiAxMzI6XFx0XFx0XFx0ZGV2X2RiZyhcXHUwMDI2dXNiLVxcdTAwM2VpbnRmLVxcdTAwM2VkZXYsXFxuIDEzMzpcXHRcXHRcXHRcXHRcXFwiRklGTyBmdWxsIG5vdCBwYWNrZXQgcmVjZWlwdFxcXFxuXFxcIik7XFxuIDEzNDpcXHRcXHRcXHR0eC1cXHUwMDNlbWFjX2ZpZm9fZnVsbCA9IDE7XFxuIDEzNTpcXHRcXHRcXHRmb3IgKHNpZHggPSAwOyBzaWR4IFxcdTAwM2MgTUFYX1NUQV9OVU07IHNpZHgrKylcXG4gMTM2OlxcdFxcdFxcdFxcdHR4LVxcdTAwM2VzdGF0aW9uW3NpZHhdLmZsYWcgfD0gU1RBVElPTl9GSUZPX0ZVTExfRkxBRztcXG4gMTM3OlxcdFxcdFxcdGJyZWFrO1xcbiAxMzg6XFx0XFx0Y2FzZSBTVEFUSU9OX0ZJRk9fQUxNT1NUX0ZVTExfTUVTU0FHRTpcXG4gMTM5OlxcdFxcdFxcdGRldl9kYmcoXFx1MDAyNnVzYi1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwiRklGTyBmdWxsIHBhY2tldCByZWNlaXB0XFxcXG5cXFwiKTtcXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0XFx0Zm9yIChzaWR4ID0gMDsgc2lkeCBcXHUwMDNjIE1BWF9TVEFfTlVNOyBzaWR4KyspXFxuIDE0MjpcXHRcXHRcXHRcXHR0eC1cXHUwMDNlc3RhdGlvbltzaWR4XS5mbGFnIFxcdTAwMjY9IFNUQVRJT05fQUNUSVZFX0ZMQUc7XFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdFxcdHBsZnhsY19zZW5kX3BhY2tldF9mcm9tX2RhdGFfcXVldWUodXNiKTtcXG4gMTQ1OlxcdFxcdFxcdGJyZWFrO1xcbiAxNDY6XFx0XFx0Y2FzZSBTVEFUSU9OX0NPTk5FQ1RfTUVTU0FHRTpcXG4gMTQ3OlxcdFxcdFxcdHVzYi1cXHUwMDNlbGlua191cCA9IDE7XFxuIDE0ODpcXHRcXHRcXHRkZXZfZGJnKFxcdTAwMjZ1c2ItXFx1MDAzZWludGYtXFx1MDAzZWRldiwgXFxcIlNUX0NPTk5FQ1RfTVNHIHBhY2tldCByZWNlaXB0XFxcXG5cXFwiKTtcXG4gMTQ5OlxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1Mzo1MC4zOTYxOTMzNDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzMzI5MTMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIFBhY2tldCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIHdlJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgb3ZlcmFsbCBmbG93LCBidXQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHN5c3RlbSdzIGJlaGF2aW9yLCBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gdGhlIGBoYW5kbGVfcnhfcGFja2V0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCdzIGhhcHBlbmluZyB3aGVuIGEgcGFja2V0IGFjdHVhbGx5ICphcnJpdmVzKi4gVGhpcyBpcyB0aGUgY3JpdGljYWwgcG9pbnQgd2hlcmUgdGhlIGRhdGEgc3RyZWFtIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0ncyBpbnRlcm5hbCBsb2dpYy4gV2hhdCBhcmUgdGhlIGltbWVkaWF0ZSBhY3Rpb25zPyBBcmUgdGhlcmUgYW55IHByZWNvbmRpdGlvbnMgaXQgY2hlY2tzPyBIb3cgZG9lcyBpdCBpbnRlcnByZXQgdGhlIHBhY2tldCBoZWFkZXI/IERvZXMgaXQgY2FsbCBhbnkgb3RoZXIgZnVuY3Rpb25zPyBUaGUgYGhhbmRsZV9yeF9wYWNrZXRgIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUga2V5IHRvIHVubG9ja2luZyBob3cgdGhpcyBzeXN0ZW0gaXMgcHJvY2Vzc2luZywgZmlsdGVyaW5nLCBhbmQgYWN0aW5nIG9uIGluY29taW5nIGRhdGEuIEl0J3MgdGltZSB0byBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBwYXRoIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjgxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1Mzo1Mi4yMjk0ODc1NjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MjAzMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhbmRsZV9yeF9wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYz0zNj12b2lkIHBsZnhsY19zZW5kX3BhY2tldF9mcm9tX2RhdGFfcXVldWUoc3RydWN0IHBsZnhsY191c2IgKnVzYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy02Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM6NjM6c3RhdGljIHZvaWQgaGFuZGxlX3J4X3BhY2tldChzdHJ1Y3QgcGxmeGxjX3VzYiAqdXNiLCBjb25zdCB1OCAqYnVmZmVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy02NC1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM9Njk9c3RhdGljIHZvaWQgcnhfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy0xMjMtXFx0XFx0aWYgKHVzYi1cXHUwMDNlaW5pdGlhbGl6ZWQgXFx1MDAyNlxcdTAwMjYgdXNiLVxcdTAwM2VsaW5rX3VwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYzoxMjQ6XFx0XFx0XFx0aGFuZGxlX3J4X3BhY2tldCh1c2IsIGJ1ZmZlciwgbGVuZ3RoKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtMTI1LVxcdFxcdGdvdG8gcmVzdWJtaXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjUzOjUyLjI5NTY5NTAyM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjczMjkwMzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIGBoYW5kbGVfcnhfcGFja2V0YCBGdW5jdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBoYW5kbGVfcnhfcGFja2V0YCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCByZXNpZGVzIGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jYCBmaWxlLiBUaGlzIHBvaW50cyB0byBhIFB1cmVMaUZpIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZWlyIFVTQiBpbnRlcmZhY2UsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJJ20gaG9waW5nIHRvIGdldCBhIHNlbnNlIG9mIGhvdyB0aGUgZHJpdmVyIGRlYWxzIHdpdGggaW5jb21pbmcgd2lyZWxlc3MgcGFja2V0cy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBidWZmZXIgbWFuYWdlbWVudCwgZXJyb3IgaGFuZGxpbmcsIGhvdyB0aGUgZGF0YSBpcyBwYXNzZWQgdXAgdGhlIG5ldHdvcmsgc3RhY2ssIGFuZCBhbnkgc3BlY2lmaWMgUHVyZUxpRmktcmVsYXRlZCBudWFuY2VzIGluIHRoZSByZWNlcHRpb24gcHJvY2Vzcy4gS25vd2luZyB0aGUgbG9jYXRpb24sIGFuZCB0aGUgc3BlY2lmaWNzIGFyb3VuZCB3aGljaCBpbnRlcmZhY2UgdGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRvLCBhbGxvd3MgbWUgdG8gcHJlZGljdCB0aGUgY29tcGxleGl0aWVzIEkgd2lsbCBiZSBmaW5kaW5nIGFuZCB3aGF0IGtub3dsZWRnZSBJIHNob3VsZCBicmluZyB0byBiZWFyLiBJJ20gZXhwZWN0aW5nIHNvbWUgVVNCLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODA3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTM6NTQuOTY4OTg4MjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiAgNjE6XFx0fVxcbiAgNjI6XFx0XFxuICA2MzpcXHRzdGF0aWMgdm9pZCBoYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBwbGZ4bGNfdXNiICp1c2IsIGNvbnN0IHU4ICpidWZmZXIsXFxuICA2NDpcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpXFxuICA2NTpcXHR7XFxuICA2NjpcXHRcXHRwbGZ4bGNfbWFjX3J4KHBsZnhsY191c2JfdG9faHcodXNiKSwgYnVmZmVyLCBsZW5ndGgpO1xcbiAgNjc6XFx0fVxcbiAgNjg6XFx0XFxuICA2OTpcXHRzdGF0aWMgdm9pZCByeF91cmJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbiAgNzA6XFx0e1xcbiAgNzE6XFx0XFx0c3RydWN0IHBsZnhsY191c2JfdHggKnR4O1xcbiAgNzI6XFx0XFx0c3RydWN0IHBsZnhsY191c2IgKnVzYjtcXG4gIDczOlxcdFxcdHVuc2lnbmVkIGludCBsZW5ndGg7XFxuICA3NDpcXHRcXHRjb25zdCB1OCAqYnVmZmVyO1xcbiAgNzU6XFx0XFx0dTE2IHN0YXR1cztcXG4gIDc2OlxcdFxcdHU4IHNpZHg7XFxuICA3NzpcXHRcXHRpbnQgcjtcXG4gIDc4OlxcdFxcbiAgNzk6XFx0XFx0aWYgKCF1cmIpIHtcXG4gIDgwOlxcdFxcdFxcdHByX2VycihcXFwidXJiIGlzIE5VTExcXFxcblxcXCIpO1xcbiAgODE6XFx0XFx0XFx0cmV0dXJuO1xcbiAgODI6XFx0XFx0fVxcbiAgODM6XFx0XFx0aWYgKCF1cmItXFx1MDAzZWNvbnRleHQpIHtcXG4gIDg0OlxcdFxcdFxcdHByX2VycihcXFwidXJiIGN0eCBpcyBOVUxMXFxcXG5cXFwiKTtcXG4gIDg1OlxcdFxcdFxcdHJldHVybjtcXG4gIDg2OlxcdFxcdH1cXG4gIDg3OlxcdFxcdHVzYiA9IHVyYi1cXHUwMDNlY29udGV4dDtcXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0aWYgKHVzYi1cXHUwMDNlaW5pdGlhbGl6ZWQgIT0gMSkge1xcbiAgOTA6XFx0XFx0XFx0cHJfZXJyKFxcXCJ1c2IgaXMgbm90IGluaXRpYWxpemVkXFxcXG5cXFwiKTtcXG4gIDkxOlxcdFxcdFxcdHJldHVybjtcXG4gIDkyOlxcdFxcdH1cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0dHggPSBcXHUwMDI2dXNiLVxcdTAwM2V0eDtcXG4gIDk1OlxcdFxcdHN3aXRjaCAodXJiLVxcdTAwM2VzdGF0dXMpIHtcXG4gIDk2OlxcdFxcdGNhc2UgMDpcXG4gIDk3OlxcdFxcdFxcdGJyZWFrO1xcbiAgOTg6XFx0XFx0Y2FzZSAtRVNIVVRET1dOOlxcbiAgOTk6XFx0XFx0Y2FzZSAtRUlOVkFMOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1Mzo1NC45NjkxNTI2MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTM4Mzg4NDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgUHVyZUxpRmkgVVNCIERyaXZlcioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBVU0IgYnVzLiBUaGUga2V5IGFyZWFzIG9mIGludGVyZXN0IGFyZSBsaWtlbHkgZ29pbmcgdG8gYmUgdGhlIGBwcm9iZWAgcm91dGluZSwgYXMgdGhhdCdzIHdoZXJlIHRoZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gdHlwaWNhbGx5IGhhcHBlbnMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGlkZW50aWZpZXMgYW5kIGNsYWltcyB0aGUgUHVyZUxpRmkgVVNCIGRldmljZS4gQWxzbywgdGhlIGB1c2JfZGV2aWNlX2lkYCB0YWJsZSBpcyBkZWZpbml0ZWx5IG9uIG15IHJhZGFyLiBUaGlzIGlzIHdoZXJlIHRoZSB2ZW5kb3IgYW5kIHByb2R1Y3QgSURzIGFyZSBkZWNsYXJlZCwgYWxsb3dpbmcgdGhlIGRyaXZlciB0byByZWNvZ25pemUgKnNwZWNpZmljKiBQdXJlTGlGaSBoYXJkd2FyZS4gSSdsbCBjaGVjayBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgaGFyZHdhcmUgdmVyc2lvbnMgb3IgcmV2aXNpb25zLiBUaGlzIHdpbGwgYmUgdGhlIHN0YXJ0aW5nIHBvaW50LiBJJ2xsIHdhbnQgdG8gc2VlIGhvdyB0aGUgYnVzIGlzIG1hbmFnZWQuIFRoaXMgaXMgd2hlcmUgdGhlIGluaXRpYWwgYnJpbmcgdXAgaXMgbW9zdCBsaWtlbHkgaGFuZGxlZC4gSSdtIGV4cGVjdGluZyBzdGFuZGFyZCBVU0Igc2V0dXAgcm91dGluZXMsIGJ1dCBJJ2xsIHdhbnQgdG8gc2VlIGhvdyBQdXJlTGlGaSBoYXMgZXh0ZW5kZWQgb3IgY3VzdG9taXplZCB0aG9zZSB0byBhY2NvbW1vZGF0ZSB0aGVpciBvcHRpY2FsIGNvbW11bmljYXRpb24gaW50ZXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU3NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTM6NTcuMTA3NTQ0OTI2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTYzOTgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2JfZGV2aWNlX2lkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtMjUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jOjI2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfaWRzW10gPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jLTI3LVxcdHsgVVNCX0RFVklDRShQVVJFTElGSV9YX1ZFTkRPUl9JRF8wLCBQVVJFTElGSV9YX1BST0RVQ1RfSURfMCksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM9NTc5PXN0YXRpYyBpbnQgcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jOjU4MDpcXHRcXHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy01ODEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1Mzo1Ny4xOTMxOTI5NjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY1NjI0MDM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IG9mIHRoZSBQdXJlTGlGaSBVU0IgV2lGaSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZpeGluZyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgaW4gdGhlIGBwbGZ4bGNfbWFjX3J4YCBmdW5jdGlvbiBhbmQgc29tZSByZWxhdGVkIGlzc3VlcyBpbiBgcnhfdXJiX2NvbXBsZXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIklzIHRoaXMgZnV6emFibGU/IFNob3VsZCBJIHNwZW5kIG15IHRpbWUgZGlnZ2luZyBkZWVwZXI/XCIgTGV0J3MgYnJlYWsgaXQgZG93biBtZXRob2RpY2FsbHkuXG5cbkZpcnN0LCBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIHZpYSBmdXp6aW5nPyBDb25zaWRlcmluZyBJJ20gd29ya2luZyBpbiB0aGUgY29udGV4dCBvZiBVU0IsIGFuZCBzcGVjaWZpY2FsbHkgVVNCIFJhdyBHYWRnZXQvc3l6a2FsbGVyLCBpdCBzZWVtcyBwbGF1c2libGUuIEkgY2FuIGVtdWxhdGUgVVNCIGRldmljZXMsIGFuZCBQdXJlTGlGaSBpcyBhICpVU0IqIFdpRmkgZHJpdmVyLiBUaGUgdGV4dCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IFVTQiBwYWNrZXQgcmVjZXB0aW9uIGFuZCBoYW5kbGluZyBhcmUgcmVhY2hhYmxlIHZpYSB0aGlzIG1ldGhvZC4gRXhjZWxsZW50LCBzbyBmYXIsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWcgb3B0aW9ucy4gVGhlIGRlc2NyaXB0aW9uIG1lbnRpb25zIHRoYXQgYFBMRlhMQ2AgKHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSBkcml2ZXIpIGRlcGVuZHMgb24gYENGRzgwMjExYCwgYE1BQzgwMjExYCwgYW5kIGBVU0JgIGluIGl0cyBLY29uZmlnIGZpbGUuIENydWNpYWxseSwgaXQgYWxzbyBwb2ludHMgb3V0IGBXTEFOX1ZFTkRPUl9QVVJFTElGSWAgaXMgcmVxdWlyZWQgaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIHNldC4gRnVydGhlciBpbnNwZWN0aW9uIG9mIGBkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnYCBhbmQgYE1ha2VmaWxlYCBjb25maXJtcyB0aGUgbmVlZCBmb3IgYFdMQU5fVkVORE9SX1BVUkVMSUZJYC5cblxuU28sIGJvdHRvbSBsaW5lOiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhvc2UgY29uZmlncywgZXNwZWNpYWxseSBgV0xBTl9WRU5ET1JfUFVSRUxJRklgIGFyZSBlbmFibGVkIGluIG15IGZ1enppbmcgZW52aXJvbm1lbnQuIElmIHRoZSBjb25maWdzIGFyZSB0aGVyZSwgdGhlbiB0aGUgcGF0Y2ggaXMgcmVhY2hhYmxlLCBhbmQgdGhlIGVmZm9ydCB0byBmdXp6IGlzIHdhcnJhbnRlZC4gSXQgc2VlbXMgbGlrZSBpdCdzIHdvcnRoIGEgc2hvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTQ6MDEuODQ5NDM1OTc5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ3NDQyODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiV0xBTl9WRU5ET1JfUFVSRUxJRklcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX05YUCkgKz0gbnhwL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9QVVJFTElGSSkgKz0gcHVyZWxpZmkvXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX1FVQU5URU5OQSkgKz0gcXVhbnRlbm5hL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWc6Mjpjb25maWcgV0xBTl9WRU5ET1JfUFVSRUxJRklcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnLTMtXFx0Ym9vbCBcXFwicHVyZUxpRmkgZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWctMTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZzoxMzppZiBXTEFOX1ZFTkRPUl9QVVJFTElGSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWctMTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZz0xNT1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvS2NvbmZpZzoxNzplbmRpZiAjIFdMQU5fVkVORE9SX1BVUkVMSUZJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjAyLjAzNDE4NjAzNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDA0OTE5MjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCB0aGUgTGludXgga2VybmVsIG5ldHdvcmtpbmcgc3RhY2s6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgV0xBTl9WRU5ET1JfUFVSRUxJRkkgS2NvbmZpZyBFbnRyeSoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgcG9pbnRpbmcgbWUgdG93YXJkcyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZ2AuIFJpZ2h0IGF3YXksIEknbSB0aGlua2luZyBhYm91dCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIHdpcmVsZXNzIG5ldHdvcmtpbmcgZHJpdmVyIHN1YnN5c3RlbS4gVGhlIGZhY3QgdGhhdCBpdCdzIGZvY3VzaW5nIG9uIGBXTEFOX1ZFTkRPUl9QVVJFTElGSWAgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgYWJvdXQgc3VwcG9ydCBmb3IgYSBzcGVjaWZpYyB2ZW5kb3IncyBXaS1GaSBoYXJkd2FyZSwgUHVyZUxpZmkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgb3IgY29uZGl0aW9uYWxpemVzIHRoaXMgZmVhdHVyZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgS2NvbmZpZyBmaWxlIGl0c2VsZi4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIHRoaXMgc3BlY2lmaWMgc3ltYm9sIHdpdGhpbiB0aGF0IGZpbGUuIEknbGwgYmUgbG9va2luZyB0byBzZWU6XG5cbiogICBXaGF0IGRlcGVuZGVuY2llcyBkb2VzIHRoaXMgb3B0aW9uIGhhdmU/IElzIGl0IHRpZWQgdG8gYW55IHNwZWNpZmljIGhhcmR3YXJlLCBvdGhlciBrZXJuZWwgb3B0aW9ucywgb3Igc3ViLWRyaXZlcnM/XG4qICAgV2hhdCBpcyBpdHMgZGVmYXVsdCBzZXR0aW5nPyBJcyBpdCBlbmFibGVkIGJ5IGRlZmF1bHQsIG9yIGlzIGl0IGRpc2FibGVkP1xuKiAgIEFyZSB0aGVyZSBhbnkgcmVsZXZhbnQgaGVscCBtZXNzYWdlcyBvciBkZXNjcmlwdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGl0PyBUaGVzZSBjYW4gdGVsbCBtZSB3aGF0IFB1cmVMaWZpJ3MgZHJpdmVycyBkbyBhbmQgYW55IHNwZWNpYWwgY29uc2lkZXJhdGlvbnMuXG4qICAgSXMgaXQgY29uZGl0aW9uYWxseSBlbmFibGVkIGJhc2VkIG9uIG90aGVyIHNldHRpbmdzPyBJZiBzbywgd2hhdCBhcmUgdGhvc2UgY29uZGl0aW9ucz9cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgYSBkZWVwIGRpdmUgaW50byB0aGUgYnVpbGQgc3lzdGVtIGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdHMgb2YgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiBvbiB0aGUga2VybmVsJ3MgY29tcGlsYXRpb24gYW5kIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBQdXJlTGlmaS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1NDowNC40MzkxMDk3NDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgV2lyZWxlc3MgTEFOIGRldmljZSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgV0xBTlxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiV2lyZWxlc3MgTEFOXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiAhUzM5MFxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gIDEwOlxcdFxcdHNlbGVjdCBXSVJFTEVTU1xcbiAgMTE6XFx0XFx0ZGVmYXVsdCB5XFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFRoaXMgc2VjdGlvbiBjb250YWlucyBhbGwgdGhlIHByZSA4MDIuMTEgYW5kIDgwMi4xMSB3aXJlbGVzc1xcbiAgMTQ6XFx0XFx0ICBkZXZpY2UgZHJpdmVycy4gRm9yIGEgY29tcGxldGUgbGlzdCBvZiBkcml2ZXJzIGFuZCBkb2N1bWVudGF0aW9uXFxuICAxNTpcXHRcXHQgIG9uIHRoZW0gcmVmZXIgdG8gdGhlIHdpcmVsZXNzIHdpa2k6XFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgaHR0cHM6Ly93aXJlbGVzcy53aWtpLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVyc1xcbiAgMTg6XFx0XFxuICAxOTpcXHRpZiBXTEFOXFxuICAyMDpcXHRcXG4gIDIxOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtdGVrL0tjb25maWdcXFwiXFxuICAyMjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnXFxcIlxcbiAgMjM6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC9LY29uZmlnXFxcIlxcbiAgMjQ6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9LY29uZmlnXFxcIlxcbiAgMjU6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9LY29uZmlnXFxcIlxcbiAgMjY6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9LY29uZmlnXFxcIlxcbiAgMjc6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL0tjb25maWdcXFwiXFxuICAyODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL0tjb25maWdcXFwiXFxuICAyOTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21pY3JvY2hpcC9LY29uZmlnXFxcIlxcbiAgMzA6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tb3JzZW1pY3JvL0tjb25maWdcXFwiXFxuICAzMTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9LY29uZmlnXFxcIlxcbiAgMzI6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9LY29uZmlnXFxcIlxcbiAgMzM6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yYWxpbmsvS2NvbmZpZ1xcXCJcXG4gIDM0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9LY29uZmlnXFxcIlxcbiAgMzU6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZ1xcXCJcXG4gIDM2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL0tjb25maWdcXFwiXFxuICAzNzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L0tjb25maWdcXFwiXFxuICAzODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL0tjb25maWdcXFwiXFxuICAzOTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3p5ZGFzL0tjb25maWdcXFwiXFxuICA0MDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1NDowNC40MzkyMTU0NThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA4MTgwMTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBrZXk6IGBQTEZYTENgLCBgV0xBTl9WRU5ET1JfUFVSRUxJRklgLCBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBgVVNCYCwgYW5kIGBXTEFOYC4gVGhvc2UgYXJlIHRoZSBidWlsZGluZyBibG9ja3MsIHRoZSBmb3VuZGF0aW9uIHRoaXMgcGF0Y2ggaXMgd29ya2luZyB3aXRoLiBOb3csIHRoZSBtZWF0IG9mIGl0LlxuXG5JJ3ZlIGlkZW50aWZpZWQgdHdvIG1vZGlmaWVkIGZ1bmN0aW9uczogYHBsZnhsY19tYWNfcnhgIGluIGBtYWMuY2AsIGFuZCBgcnhfdXJiX2NvbXBsZXRlYCBpbiBgdXNiLmNgLiBNeSBuZXh0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciBzY29wZS4gSSBzZWUgdGhhdCBgcGxmeGxjX21hY19yeGAgaXMgYSBnbG9iYWwgZnVuY3Rpb24sIG1lYW5pbmcgaXQncyB2aXNpYmxlIG91dHNpZGUgb2YgaXRzIG93biBzb3VyY2UgZmlsZSwgd2hpY2ggaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IGl0J3MgY2FsbGVkIGFuZCBtb2RpZmllZC4gYHJ4X3VyYl9jb21wbGV0ZWAgaXMgc3RhdGljIHdpdGhpbiBgdXNiLmNgLCBidXQgaXQgaXMgc3RpbGwgYSBmdW5jdGlvbiBzeW1ib2wsIGFuZCBpcyB0aHVzIGNhbGxhYmxlIGZyb20gZWxzZXdoZXJlLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBmbG93LlxuXG5Ob3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBlbHNlIGlzIGdvaW5nIG9uIGluIGBtYWMuY2AgYW5kIGB1c2IuY2AgYW5kIGhvdyBgcGxmeGxjX2ZpbHRlcl9hY2tgIGNvbWVzIGludG8gcGxheS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb21wbGV0ZSBjaGFpbiBvZiBldmVudHMsIGZyb20gcGFja2V0IHJlY2VwdGlvbiB0byBwcm9jZXNzaW5nLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGluZyBgcGxmeGxjX21hY19yeGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzE3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTQ6MDcuNTIxMDIwMDU4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDc0MjQzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbGZ4bGNfbWFjX3J4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmM9MzM4PXN0YXRpYyBpbnQgcGxmeGxjX2ZpbHRlcl9hY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpyeF9oZHIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMtMzkyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYzozOTM6aW50IHBsZnhsY19tYWNfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpidWZmZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jLTM5NC1cXHRcXHQgIHVuc2lnbmVkIGludCBsZW5ndGgpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmg9MTc0PWludCBwbGZ4bGNfbWFjX2luaXRfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuaC0xNzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5oOjE3NjppbnQgcGxmeGxjX21hY19yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY29uc3QgdTggKmJ1ZmZlcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmgtMTc3LVxcdFxcdCAgdW5zaWduZWQgaW50IGxlbmd0aCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM9NjM9c3RhdGljIHZvaWQgaGFuZGxlX3J4X3BhY2tldChzdHJ1Y3QgcGxmeGxjX3VzYiAqdXNiLCBjb25zdCB1OCAqYnVmZmVyLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jLTY1LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM6NjY6XFx0cGxmeGxjX21hY19yeChwbGZ4bGNfdXNiX3RvX2h3KHVzYiksIGJ1ZmZlciwgbGVuZ3RoKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtNjctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1NDowNy41OTU3Njg4MTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQxMDc3Mzc2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUHVyZUxpRmkgVVNCIERyaXZlciBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIGlzIHNxdWFyZWx5IG9uIHRoZSBgcGxmeGxjX21hY19yeGAgYW5kIGByeF91cmJfY29tcGxldGVgIGZ1bmN0aW9ucyDigJMgdGhvc2UgYXJlIHRoZSBkaXJlY3QgbW9kaWZpY2F0aW9ucyBJIG5lZWQgdG8gZXhhbWluZS4gVGhlIGltbWVkaWF0ZSBjYWxsZXIgb2YgdGhlc2UsIGFjY29yZGluZyB0byB0aGlzLCBpcyBgaGFuZGxlX3J4X3BhY2tldGAgd2l0aGluIGB1c2IuY2AuIEdvb2QsIGdvdCBteSBmb2NhbCBwb2ludHMgY2xlYXJseSBkZWZpbmVkLlxuXG5CZWZvcmUgSSBwcm9jZWVkLCBsZXQncyBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjb25maWd1cmF0aW9uLXdpc2UuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYFBMRlhMQ2AsIGBXTEFOX1ZFTkRPUl9QVVJFTElGSWAsIGBNQUM4MDIxMWAsIGBDRkc4MDIxMWAsIGBVU0JgLCBhbmQgYFdMQU5gIGFyZSBhbGwgYWNjb3VudGVkIGZvciBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi5cblxuTm93LCBsZXQncyBjcm9zcy1yZWZlcmVuY2UgYWdhaW5zdCB0aGUgS2NvbmZpZyBmaWxlcy4gSSBzZWUgaGVyZSB0aGF0IGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvS2NvbmZpZ2AsIGBQTEZYTENgIHNwZWNpZmljYWxseSBkZXBlbmRzIG9uIGBDRkc4MDIxMSBcdTAwMjZcdTAwMjYgTUFDODAyMTEgXHUwMDI2XHUwMDI2IFVTQmAuIFRoYXQgbWFrZXMgc2Vuc2UuIEFsc28gYFdMQU5fVkVORE9SX1BVUkVMSUZJYCBpcyBoYW5kbGVkIGF0IHRoZSByaWdodCBsZXZlbCBhbmQgdGhlIGBXTEFOYCBjb25maWcgaXMgcHJvcGVybHkgbWFuYWdlZC5cblxuTm93IHRoZSBjb3JlIHJhdGlvbmFsZS4gVGhpcyBwYXRjaCBpcyBhYm91dCBib3VuZHMgdmFsaWRhdGlvbiBpbiB0aGUgYHBsZnhsY19tYWNfcnhgIGFuZCBVbml2ZXJzYWwgU2VyaWFsIEJ1cyAoVVNCKSBsZW5ndGggaGFuZGxpbmcgaW4gYHJ4X3VyYl9jb21wbGV0ZWAuIEl0J3MgYWxsIGFib3V0IHRoYXQgUHVyZUxpRmkgVVNCIHdpcmVsZXNzIGFkYXB0ZXIgZHJpdmVyLiBJdCdzIGdvb2QgdG8ga25vdyB0aGF0IHRoaXMgY2FuIGJlIHRyaWdnZXJlZCBhbmQgdGVzdGVkIHVzaW5nIFVTQiByYXcgZ2FkZ2V0IGVtdWxhdGlvbiwgbGlrZSBgZHVtbXlfaGNkYCBhbmQgYHN5el91c2JfY29ubmVjdGAuIFRoZSBjaGFuZ2VzIGltcGFjdCBwYWNrZXQgcmVjZXB0aW9uIGFuZCBwYXJzaW5nLCBzbyBVU0IgZW5kcG9pbnQgdHJhZmZpYyBpcyB0aGUgY3JpdGljYWwgdmVjdG9yLlxuXG5BbHJpZ2h0LCBldmVyeXRoaW5nIGFwcGVhcnMgc291bmQgYW5kIHZlcmlmaWFibGUuIFRpbWUgdG8gcHVzaCB0aGlzIHRocm91Z2guIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MTAsIk91dHB1dFRva2VucyI6MTgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjEyLjAwNjU0NjE3NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTM0NzczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUExGWExDXCIsXG4gICAgXCJXTEFOX1ZFTkRPUl9QVVJFTElGSVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIldMQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwbGZ4bGNfbWFjX3J4XCIsXG4gICAgXCJyeF91cmJfY29tcGxldGVcIixcbiAgICBcImhhbmRsZV9yeF9wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgcmVjZXB0aW9uIGFuZCBsZW5ndGggdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgUHVyZUxpRmkgVVNCIHdpcmVsZXNzIGRyaXZlciAocGxmeGxjX21hY19yeCBhbmQgcnhfdXJiX2NvbXBsZXRlKS4gVVNCIG5ldHdvcmsgZHJpdmVycyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB1c2luZyBVU0IgcmF3LWdhZGdldCAvIGR1bW15X2hjZCBlbXVsYXRpb24uIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gdmVyaWZ5IHRoZSBuZXcgYm91bmRzIGNoZWNrcyBhbmQgZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb24gbWFsZm9ybWVkIFVTQiBmcmFtZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUExGWExDXCIsXG4gICAgXCJXTEFOX1ZFTkRPUl9QVVJFTElGSVwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIldMQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwbGZ4bGNfbWFjX3J4XCIsXG4gICAgXCJyeF91cmJfY29tcGxldGVcIixcbiAgICBcImhhbmRsZV9yeF9wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgcmVjZXB0aW9uIGFuZCBsZW5ndGggdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgUHVyZUxpRmkgVVNCIHdpcmVsZXNzIGRyaXZlciAocGxmeGxjX21hY19yeCBhbmQgcnhfdXJiX2NvbXBsZXRlKS4gVVNCIG5ldHdvcmsgZHJpdmVycyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB1c2luZyBVU0IgcmF3LWdhZGdldCAvIGR1bW15X2hjZCBlbXVsYXRpb24uIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gdmVyaWZ5IHRoZSBuZXcgYm91bmRzIGNoZWNrcyBhbmQgZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb24gbWFsZm9ybWVkIFVTQiBmcmFtZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjEyLjE2NTkwNTk4NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1ODYzMzUyODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1NDoxMi4xNjY3MzYyOTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NjU4NTQ5OTMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcGFja2V0IHZhbGlkYXRpb24gaW4gdGhlIFB1cmVMaUZpIChwbGZ4bGMpIHdpcmVsZXNzIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCB1c2VzIGB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGhgIHJhdGhlciB0aGFuIGFuIHVudmFsaWRhdGVkIGZpZWxkIGZyb20gdGhlIGJ1ZmZlciwgYWRkcyBtaW5pbXVtIGxlbmd0aCBjaGVja3MgYmVmb3JlIHBhcnNpbmcgYHJ4X3N0YXR1c2AgYW5kIHBheWxvYWQgbGVuZ3RoLCB2ZXJpZmllcyB0aGF0IHRoZSBwYXlsb2FkIGxlbmd0aCBkb2VzIG5vdCBleGNlZWQgdGhlIFVSQiBidWZmZXIgbGVuZ3RoLCBhbmQgZml4ZXMgdGhlIGJ1ZmZlciBvZmZzZXQgcGFzc2VkIHRvIGBwbGZ4bGNfZmlsdGVyX2FjaygpYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3MgaW5wdXQgdmFsaWRhdGlvbiBhbmQgb3V0LW9mLWJvdW5kcyBidWZmZXIgb3ZlcnJlYWRzLCB3aGljaCBmYWxsIHNxdWFyZWx5IHVuZGVyIEtBU0FOJ3MgZG9tYWluLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGUgcmVhZHMsIGRvZXMgbm90IGFsdGVyIHN0cnVjdHVyZSBwYWRkaW5nL2luaXRpYWxpemF0aW9uIHNlbnQgdG8gdXNlcnNwYWNlLCBhbmQgYWxsIGxvY2FsIHN0cnVjdHVyZXMgKHN1Y2ggYXMgYHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHN0YXRzYCkgYXJlIGV4cGxpY2l0bHkgemVyb2VkIHdpdGggYG1lbXNldGAuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3MmY1NThiYjlhNzI1ZjIwNDAyMGJmOTMzMTNmNzYzY2JlNDNiNDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA2OjUzOjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jXG5pbmRleCBhOTAwNDIxNzUzYWM2Li5kMjY5MGNjZTc5NmE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmNcbkBAIC00MDcsNiArNDA3LDkgQEAgaW50IHBsZnhsY19tYWNfcngoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICpidWZmZXIsXG4gXHRpZiAoIW1hYy1cdTAwM2V2aWYpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0aWYgKGxlbmd0aCBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpICsgc2l6ZW9mKHUzMikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0c3RhdHVzID0gKHN0cnVjdCByeF9zdGF0dXMgKilidWZmZXI7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c3RhdHMsIDAsIHNpemVvZihzdGF0cykpO1xuQEAgLTQyNSwxOSArNDI4LDE5IEBAIGludCBwbGZ4bGNfbWFjX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqYnVmZmVyLFxuIFxuIFx0bWFjLVx1MDAzZWNyY19lcnJvcnMgPSBiZTY0X3RvX2NwdShzdGF0dXMtXHUwMDNlY3JjX2Vycm9yX2NvdW50KTtcbiBcbi1cdC8qIFRPRE8gYmFkIGZyYW1lIGNoZWNrIGZvciBDUkMgZXJyb3IqL1xuLVx0aWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsIFx1MDAyNnN0YXRzKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhbWFjLVx1MDAzZXBhc3NfY3RybClcbi1cdFx0cmV0dXJuIDA7XG4tXG4gXHRidWZmZXIgKz0gc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpO1xuIFx0cGF5bG9hZF9sZW5ndGggPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmZmVyKTtcbitcdGJ1ZmZlciArPSBzaXplb2YodTMyKTtcbiBcbi1cdGlmIChwYXlsb2FkX2xlbmd0aCBcdTAwM2UgMTU2MCkge1xuK1x0aWYgKHBheWxvYWRfbGVuZ3RoIFx1MDAzZSAxNTYwIHx8XG4rXHQgICAgcGF5bG9hZF9sZW5ndGggKyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykgKyBzaXplb2YodTMyKSBcdTAwM2UgbGVuZ3RoKSB7XG4gXHRcdGRldl9lcnIocGxmeGxjX21hY19kZXYobWFjKSwgXCIgXHUwMDNlIE1UVSAldVxcblwiLCBwYXlsb2FkX2xlbmd0aCk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuLVx0YnVmZmVyICs9IHNpemVvZih1MzIpO1xuK1xuK1x0aWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsIFx1MDAyNnN0YXRzKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhbWFjLVx1MDAzZXBhc3NfY3RybClcbitcdFx0cmV0dXJuIDA7XG4gXG4gXHRmYyA9IGdldF91bmFsaWduZWQoKF9fbGUxNiAqKWJ1ZmZlcik7XG4gXHRuZWVkX3BhZGRpbmcgPSBpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpIF4gaWVlZTgwMjExX2hhc19hNChmYyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jXG5pbmRleCA2ZDI0MDg2ZWI4YjdhLi5jMzNiOTEzMWJmZGRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNcbkBAIC0xMTcsMTAgKzExNyw5IEBAIHN0YXRpYyB2b2lkIHJ4X3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gXHR9XG4gXG4gXHRidWZmZXIgPSB1cmItXHUwMDNldHJhbnNmZXJfYnVmZmVyO1xuLVx0bGVuZ3RoID0gbGUzMl90b19jcHUoKihfX2xlMzIgKikoYnVmZmVyICsgc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpKSlcbi1cdFx0ICsgc2l6ZW9mKHUzMik7XG4rXHRsZW5ndGggPSB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aDtcbiBcbi1cdGlmICh1cmItXHUwMDNlYWN0dWFsX2xlbmd0aCAhPSAoUExGX01TR19TVEFUVVNfT0ZGU0VUICsgMSkpIHtcbitcdGlmIChsZW5ndGggIT0gKFBMRl9NU0dfU1RBVFVTX09GRlNFVCArIDEpKSB7XG4gXHRcdGlmICh1c2ItXHUwMDNlaW5pdGlhbGl6ZWQgXHUwMDI2XHUwMDI2IHVzYi1cdTAwM2VsaW5rX3VwKVxuIFx0XHRcdGhhbmRsZV9yeF9wYWNrZXQodXNiLCBidWZmZXIsIGxlbmd0aCk7XG4gXHRcdGdvdG8gcmVzdWJtaXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1NDoxMi4xNjY3MzgxNDRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY1OTU0Mzk2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgUGF0Y2ggU2VyaWVzIGZvciBLTVNBTiBGdXp6aW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBpdHMgb3duIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3MgcnVuIHRoaXMgdGhyb3VnaCBteSBtZW50YWwgc2FmZXR5IGNoZWNrbGlzdCBmaXJzdC4gVGhpcyBpcyBhIGJlbmlnbiwgZGVmZW5zaXZlIHRhc2sg4oCTIEknbSBqdXN0IGV2YWx1YXRpbmcgdGhlIHBhdGNoZXMgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgc2FuaXRpemVyIChLQVNBTiB2ZXJzdXMgS01TQU4pIGZvciB0aGVtLiBObyBtYWxpY2lvdXMgaW50ZW50LCBubyBleHBsb2l0IGdlbmVyYXRpb24sIG5vdGhpbmcgbGlrZSB0aGF0LiBQZXJmZWN0bHkgc2FmZS5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgY29kZS4gVGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuY2AgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNgLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzOiBJJ2xsIHVzZSBjb2Rlc2VhcmNoLCBvciBtYXliZSBldmVuIGp1c3QgcmVhZCB0aGUgZmlsZXMgZGlyZWN0bHksIG9yIGdyZXBwZXIgaWYgSSBuZWVkIHRvIGRvIHNvbWV0aGluZyBtb3JlIGNvbXBsZXgsIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24gaW4gdGhvc2UgZmlsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgY2hhbmdlcyBhcmUgKmRvaW5nKiBiZWZvcmUgSSBjYW4gbWFrZSBhIGNhbGwgb24gS01TQU4gcmVxdWlyZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODEwLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTQ6MjguNzYyMTgyMzQ3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdFxcdHN0cnVjdCBwbGZ4bGNfdXNiX3R4ICp0eDtcXG4gNDAxOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDQwMjpcXHRcXHRpbnQgbmVlZF9wYWRkaW5nO1xcbiA0MDM6XFx0XFx0X19sZTE2IGZjO1xcbiA0MDQ6XFx0XFx0aW50IHNpZHg7XFxuIDQwNTpcXHRcXG4gNDA2OlxcdFxcdC8qIFBhY2tldCBibG9ja2FkZSBkdXJpbmcgZGlzYWJsZWQgaW50ZXJmYWNlLiAqL1xcbiA0MDc6XFx0XFx0aWYgKCFtYWMtXFx1MDAzZXZpZilcXG4gNDA4OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0MDk6XFx0XFxuIDQxMDpcXHRcXHRpZiAobGVuZ3RoIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpICsgc2l6ZW9mKHUzMikpXFxuIDQxMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDEyOlxcdFxcbiA0MTM6XFx0XFx0c3RhdHVzID0gKHN0cnVjdCByeF9zdGF0dXMgKilidWZmZXI7XFxuIDQxNDpcXHRcXG4gNDE1OlxcdFxcdG1lbXNldChcXHUwMDI2c3RhdHMsIDAsIHNpemVvZihzdGF0cykpO1xcbiA0MTY6XFx0XFxuIDQxNzpcXHRcXHRzdGF0cy5mbGFnICAgICA9IDA7XFxuIDQxODpcXHRcXHRzdGF0cy5mcmVxICAgICA9IDI0MTI7XFxuIDQxOTpcXHRcXHRzdGF0cy5iYW5kICAgICA9IE5MODAyMTFfQkFORF9MQztcXG4gNDIwOlxcdFxcdG1hYy1cXHUwMDNlcnNzaSAgICAgID0gLTE1ICogYmUxNl90b19jcHUoc3RhdHVzLVxcdTAwM2Vyc3NpKSAvIDEwO1xcbiA0MjE6XFx0XFxuIDQyMjpcXHRcXHRzdGF0cy5zaWduYWwgICA9IG1hYy1cXHUwMDNlcnNzaTtcXG4gNDIzOlxcdFxcbiA0MjQ6XFx0XFx0aWYgKHN0YXR1cy1cXHUwMDNlcmF0ZV9pZHggXFx1MDAzZSA3KVxcbiA0MjU6XFx0XFx0XFx0c3RhdHMucmF0ZV9pZHggPSAwO1xcbiA0MjY6XFx0XFx0ZWxzZVxcbiA0Mjc6XFx0XFx0XFx0c3RhdHMucmF0ZV9pZHggPSBzdGF0dXMtXFx1MDAzZXJhdGVfaWR4O1xcbiA0Mjg6XFx0XFxuIDQyOTpcXHRcXHRtYWMtXFx1MDAzZWNyY19lcnJvcnMgPSBiZTY0X3RvX2NwdShzdGF0dXMtXFx1MDAzZWNyY19lcnJvcl9jb3VudCk7XFxuIDQzMDpcXHRcXG4gNDMxOlxcdFxcdGJ1ZmZlciArPSBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cyk7XFxuIDQzMjpcXHRcXHRwYXlsb2FkX2xlbmd0aCA9IGdldF91bmFsaWduZWRfYmUzMihidWZmZXIpO1xcbiA0MzM6XFx0XFx0YnVmZmVyICs9IHNpemVvZih1MzIpO1xcbiA0MzQ6XFx0XFxuIDQzNTpcXHRcXHRpZiAocGF5bG9hZF9sZW5ndGggXFx1MDAzZSAxNTYwIHx8XFxuIDQzNjpcXHRcXHQgICAgcGF5bG9hZF9sZW5ndGggKyBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cykgKyBzaXplb2YodTMyKSBcXHUwMDNlIGxlbmd0aCkge1xcbiA0Mzc6XFx0XFx0XFx0ZGV2X2VycihwbGZ4bGNfbWFjX2RldihtYWMpLCBcXFwiIFxcdTAwM2UgTVRVICV1XFxcXG5cXFwiLCBwYXlsb2FkX2xlbmd0aCk7XFxuIDQzODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDM5OlxcdFxcdH1cXG4gNDQwOlxcdFxcbiA0NDE6XFx0XFx0aWYgKHBsZnhsY19maWx0ZXJfYWNrKGh3LCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWZmZXIsIFxcdTAwMjZzdGF0cykgXFx1MDAyNlxcdTAwMjZcXG4gNDQyOlxcdFxcdCAgICAhbWFjLVxcdTAwM2VwYXNzX2N0cmwpXFxuIDQ0MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDQ0OlxcdFxcbiA0NDU6XFx0XFx0ZmMgPSBnZXRfdW5hbGlnbmVkKChfX2xlMTYgKilidWZmZXIpO1xcbiA0NDY6XFx0XFx0bmVlZF9wYWRkaW5nID0gaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSBeIGllZWU4MDIxMV9oYXNfYTQoZmMpO1xcbiA0NDc6XFx0XFxuIDQ0ODpcXHRcXHR0eCA9IFxcdTAwMjZtYWMtXFx1MDAzZWNoaXAudXNiLnR4O1xcbiA0NDk6XFx0XFxuIDQ1MDpcXHRcXHRmb3IgKHNpZHggPSAwOyBzaWR4IFxcdTAwM2MgTUFYX1NUQV9OVU0gLSAxOyBzaWR4KyspIHtcXG4gNDUxOlxcdFxcdFxcdGlmIChtZW1jbXAoXFx1MDAyNmJ1ZmZlclsxMF0sIHR4LVxcdTAwM2VzdGF0aW9uW3NpZHhdLm1hYywgRVRIX0FMRU4pKVxcbiA0NTI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDQ1MzpcXHRcXHRcXHRpZiAodHgtXFx1MDAzZXN0YXRpb25bc2lkeF0uZmxhZyBcXHUwMDI2IFNUQVRJT05fQ09OTkVDVEVEX0ZMQUcpIHtcXG4gNDU0OlxcdFxcdFxcdFxcdHR4LVxcdTAwM2VzdGF0aW9uW3NpZHhdLmZsYWcgfD0gU1RBVElPTl9IRUFSVEJFQVRfRkxBRztcXG4gNDU1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA0NTY6XFx0XFx0XFx0fVxcbiA0NTc6XFx0XFx0fVxcbiA0NTg6XFx0XFxuIDQ1OTpcXHRcXHRpZiAoc2lkeCA9PSBNQVhfU1RBX05VTSAtIDEpIHtcXG4gNDYwOlxcdFxcdFxcdGZvciAoc2lkeCA9IDA7IHNpZHggXFx1MDAzYyBNQVhfU1RBX05VTSAtIDE7IHNpZHgrKykge1xcbiA0NjE6XFx0XFx0XFx0XFx0aWYgKHR4LVxcdTAwM2VzdGF0aW9uW3NpZHhdLmZsYWcgXFx1MDAyNiBTVEFUSU9OX0NPTk5FQ1RFRF9GTEFHKVxcbiA0NjI6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDQ2MzpcXHRcXHRcXHRcXHRtZW1jcHkodHgtXFx1MDAzZXN0YXRpb25bc2lkeF0ubWFjLCBcXHUwMDI2YnVmZmVyWzEwXSwgRVRIX0FMRU4pO1xcbiA0NjQ6XFx0XFx0XFx0XFx0dHgtXFx1MDAzZXN0YXRpb25bc2lkeF0uZmxhZyB8PSBTVEFUSU9OX0NPTk5FQ1RFRF9GTEFHO1xcbiA0NjU6XFx0XFx0XFx0XFx0dHgtXFx1MDAzZXN0YXRpb25bc2lkeF0uZmxhZyB8PSBTVEFUSU9OX0hFQVJUQkVBVF9GTEFHO1xcbiA0NjY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQ2NzpcXHRcXHRcXHR9XFxuIDQ2ODpcXHRcXHR9XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdFxcdHN3aXRjaCAoYnVmZmVyWzBdKSB7XFxuIDQ3MTpcXHRcXHRjYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6XFxuIDQ3MjpcXHRcXHRcXHRkZXZfZGJnKHBsZnhsY19tYWNfZGV2KG1hYyksIFxcXCJQcm9iZSByZXF1ZXN0XFxcXG5cXFwiKTtcXG4gNDczOlxcdFxcdFxcdGJyZWFrO1xcbiA0NzQ6XFx0XFx0Y2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVROlxcbiA0NzU6XFx0XFx0XFx0ZGV2X2RiZyhwbGZ4bGNfbWFjX2RldihtYWMpLCBcXFwiQXNzb2NpYXRpb24gcmVxdWVzdFxcXFxuXFxcIik7XFxuIDQ3NjpcXHRcXHRcXHRicmVhaztcXG4gNDc3OlxcdFxcdGNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6XFxuIDQ3ODpcXHRcXHRcXHRkZXZfZGJnKHBsZnhsY19tYWNfZGV2KG1hYyksIFxcXCJBdXRoZW50aWNhdGlvbiByZXFcXFxcblxcXCIpO1xcbiA0Nzk6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjI4Ljc2MjM0NDcxN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTIwMzkyMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGRlZXBseSBpbW1lcnNlZCBpbiB0aGlzIHByb2plY3Q6XG5cbioqRGlnZ2luZyBEZWVwZXIgaW50byB0aGUgQ29kZWJhc2UqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBhIGNvdXBsZSBvZiBjcml0aWNhbCBhcmVhcyBpbiB0aGUgY29kZS4gSSdtIHRoaW5raW5nLCBsZXQncyBjYXJ2ZSBvdXQgc29tZSBkZWRpY2F0ZWQgdGltZSB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgYG1hYy5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDQ4MCB0byA1NTAuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGVzZSBzZWN0aW9ucyBvZnRlbiBob2xkIGNydWNpYWwgbG9naWMgcmVsYXRpbmcgdG8gdGhlIE1BQyBsYXllciBvcGVyYXRpb25zLCBhbmQgSSBzdXNwZWN0IHRoZXJlJ3Mgc29tZXRoaW5nIHJlbGV2YW50IHRvIG91ciBjdXJyZW50IGludmVzdGlnYXRpb24gbHVya2luZyB0aGVyZS4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZSwgcmVhbGx5IHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgaG93IHRoYXQgc2VnbWVudCBoYW5kbGVzIGl0cyBkdXRpZXMuXG5cbkJleW9uZCB0aGF0LCB0aGUgcmVjZXB0aW9uIHBhdGggaW4gYHVzYi5jYCBkZW1hbmRzIGF0dGVudGlvbi4gSSBzaG91bGQgcmVhbGx5IHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyB0byBncmFiIHN0dWZmIG91dCBvZiB0aGUgVVNCIGludGVyZmFjZSBhbmQgYWN0dWFsbHkgcHJvY2VzcyBpdC4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBVU0IgUlggaGFuZGxpbmcsIGFzIHRoYXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBkYXRhIGZsb3cgd2UgYXJlIGxvb2tpbmcgYXQuIFVuZGVyc3RhbmRpbmcgdGhlIGRldGFpbHMgb2YgdGhpcyBzcGVjaWZpYyBhcmVhIGlzIHBhcmFtb3VudCB0byBteSB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTM2LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1NDozMC42ODI3Mzk2OTZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ4MDpcXHRcXHRjYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOlxcbiA0ODE6XFx0XFx0XFx0ZGV2X2RiZyhwbGZ4bGNfbWFjX2RldihtYWMpLCBcXFwiODAyLjExIGRhdGEgZnJhbWVcXFxcblxcXCIpO1xcbiA0ODI6XFx0XFx0XFx0YnJlYWs7XFxuIDQ4MzpcXHRcXHR9XFxuIDQ4NDpcXHRcXG4gNDg1OlxcdFxcdHNrYiA9IGRldl9hbGxvY19za2IocGF5bG9hZF9sZW5ndGggKyAobmVlZF9wYWRkaW5nID8gMiA6IDApKTtcXG4gNDg2OlxcdFxcdGlmICghc2tiKVxcbiA0ODc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDQ4ODpcXHRcXG4gNDg5OlxcdFxcdGlmIChuZWVkX3BhZGRpbmcpXFxuIDQ5MDpcXHRcXHRcXHQvKiBNYWtlIHN1cmUgdGhhdCB0aGUgcGF5bG9hZCBkYXRhIGlzIDQgYnl0ZSBhbGlnbmVkLiAqL1xcbiA0OTE6XFx0XFx0XFx0c2tiX3Jlc2VydmUoc2tiLCAyKTtcXG4gNDkyOlxcdFxcbiA0OTM6XFx0XFx0c2tiX3B1dF9kYXRhKHNrYiwgYnVmZmVyLCBwYXlsb2FkX2xlbmd0aCk7XFxuIDQ5NDpcXHRcXHRtZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksIFxcdTAwMjZzdGF0cywgc2l6ZW9mKHN0YXRzKSk7XFxuIDQ5NTpcXHRcXHRpZWVlODAyMTFfcnhfaXJxc2FmZShodywgc2tiKTtcXG4gNDk2OlxcdFxcdHJldHVybiAwO1xcbiA0OTc6XFx0fVxcbiA0OTg6XFx0XFxuIDQ5OTpcXHRzdGF0aWMgaW50IHBsZnhsY19vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiA1MDA6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4gNTAxOlxcdHtcXG4gNTAyOlxcdFxcdHN0cnVjdCBwbGZ4bGNfbWFjICptYWMgPSBwbGZ4bGNfaHdfbWFjKGh3KTtcXG4gNTAzOlxcdFxcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaWZ0eXBlODAyMTFbXSA9IHtcXG4gNTA0OlxcdFxcdFxcdFtOTDgwMjExX0lGVFlQRV9TVEFUSU9OXVxcdD0gXFxcIlN0YXRpb25cXFwiLFxcbiA1MDU6XFx0XFx0XFx0W05MODAyMTFfSUZUWVBFX0FESE9DXVxcdFxcdD0gXFxcIkFkaG9jXFxcIlxcbiA1MDY6XFx0XFx0fTtcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0aWYgKG1hYy1cXHUwMDNldHlwZSAhPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRClcXG4gNTA5OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gNTEwOlxcdFxcbiA1MTE6XFx0XFx0aWYgKHZpZi1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fFxcbiA1MTI6XFx0XFx0ICAgIHZpZi1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7XFxuIDUxMzpcXHRcXHRcXHRkZXZfZGJnKHBsZnhsY19tYWNfZGV2KG1hYyksIFxcXCIlcyAlc1xcXFxuXFxcIiwgX19mdW5jX18sXFxuIDUxNDpcXHRcXHRcXHRcXHRpZnR5cGU4MDIxMVt2aWYtXFx1MDAzZXR5cGVdKTtcXG4gNTE1OlxcdFxcdFxcdG1hYy1cXHUwMDNldHlwZSA9IHZpZi1cXHUwMDNldHlwZTtcXG4gNTE2OlxcdFxcdFxcdG1hYy1cXHUwMDNldmlmID0gdmlmO1xcbiA1MTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDUxODpcXHRcXHR9XFxuIDUxOTpcXHRcXHRkZXZfZGJnKHBsZnhsY19tYWNfZGV2KG1hYyksIFxcXCJ1bnN1cHBvcnRlZCBpZnR5cGVcXFxcblxcXCIpO1xcbiA1MjA6XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA1MjE6XFx0fVxcbiA1MjI6XFx0XFxuIDUyMzpcXHRzdGF0aWMgdm9pZCBwbGZ4bGNfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gNTI0OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKVxcbiA1MjU6XFx0e1xcbiA1MjY6XFx0XFx0c3RydWN0IHBsZnhsY19tYWMgKm1hYyA9IHBsZnhsY19od19tYWMoaHcpO1xcbiA1Mjc6XFx0XFxuIDUyODpcXHRcXHRtYWMtXFx1MDAzZXR5cGUgPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDtcXG4gNTI5OlxcdFxcdG1hYy1cXHUwMDNldmlmID0gTlVMTDtcXG4gNTMwOlxcdH1cXG4gNTMxOlxcdFxcbiA1MzI6XFx0c3RhdGljIGludCBwbGZ4bGNfb3BfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcmFkaW9faWR4LCB1MzIgY2hhbmdlZClcXG4gNTMzOlxcdHtcXG4gNTM0OlxcdFxcdHJldHVybiAwO1xcbiA1MzU6XFx0fVxcbiA1MzY6XFx0XFxuIDUzNzpcXHQjZGVmaW5lIFNVUFBPUlRFRF9GSUZfRkxBR1MgXFxcXFxcbiA1Mzg6XFx0XFx0KEZJRl9BTExNVUxUSSB8IEZJRl9GQ1NGQUlMIHwgRklGX0NPTlRST0wgfCBcXFxcXFxuIDUzOTpcXHRcXHQgRklGX09USEVSX0JTUyB8IEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1NDozMC42ODI4MzQyMTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIwMTg0ODA0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipGb2N1c2luZyBvbiB0aGUgUHVyZUxpRmkgVVNCIERyaXZlcioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIHRoZSBQdXJlTGlGaSBVU0IgZHJpdmVyLlwiIFNwZWNpZmljYWxseSwgSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNgLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBVU0IgaW50ZXJmYWNlIGZvciB0aGF0IHNwZWNpZmljIFB1cmVMaUZpIHBsYXRmb3JtIChgcGxmeGxjYCkgd2lsbCBiZSBoYW5kbGVkLiBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgaG93IGl0IGluaXRpYWxpemVzLCBob3cgaXQgaGFuZGxlcyBkZXZpY2UgZW51bWVyYXRpb24gYW5kIHBvd2VyIG1hbmFnZW1lbnQsIGhvdyBpdCBtb3ZlcyBwYWNrZXRzLCBhbmQgaG93IGl0IGRlYWxzIHdpdGggYW55IHF1aXJrcyBzcGVjaWZpYyB0byB0aGUgVVNCIGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgbG93LWxldmVsIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgaG9zdCBhbmQgdGhlIFB1cmVMaUZpIGhhcmR3YXJlIGhhcHBlbnMsIHNvIEkgbmVlZCB0byBjaGVjayBmb3IgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMsIGludGVycnVwdCBoYW5kbGluZywgYW5kIGFueSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyB1c2VkLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NzgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjMyLjg4NDY4NDU4MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXHRjYXNlIC1FTk9ERVY6XFxuIDEwMTpcXHRcXHRjYXNlIC1FTk9FTlQ6XFxuIDEwMjpcXHRcXHRjYXNlIC1FQ09OTlJFU0VUOlxcbiAxMDM6XFx0XFx0Y2FzZSAtRVBJUEU6XFxuIDEwNDpcXHRcXHRcXHRkZXZfZGJnKHBsZnhsY191cmJfZGV2KHVyYiksIFxcXCJ1cmIgJXAgZXJyb3IgJWRcXFxcblxcXCIsIHVyYiwgdXJiLVxcdTAwM2VzdGF0dXMpO1xcbiAxMDU6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMDY6XFx0XFx0ZGVmYXVsdDpcXG4gMTA3OlxcdFxcdFxcdGRldl9kYmcocGxmeGxjX3VyYl9kZXYodXJiKSwgXFxcInVyYiAlcCBlcnJvciAlZFxcXFxuXFxcIiwgdXJiLCB1cmItXFx1MDAzZXN0YXR1cyk7XFxuIDEwODpcXHRcXHRcXHRpZiAodHgtXFx1MDAzZXN1Ym1pdHRlZF91cmJzKysgXFx1MDAzYyBQVVJFTElGSV9VUkJfUkVUUllfTUFYKSB7XFxuIDEwOTpcXHRcXHRcXHRcXHRkZXZfZGJnKHBsZnhsY191cmJfZGV2KHVyYiksIFxcXCJ1cmIgJXAgcmVzdWJtaXQgJWRcXFwiLCB1cmIsXFxuIDExMDpcXHRcXHRcXHRcXHRcXHR0eC1cXHUwMDNlc3VibWl0dGVkX3VyYnMrKyk7XFxuIDExMTpcXHRcXHRcXHRcXHRnb3RvIHJlc3VibWl0O1xcbiAxMTI6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTEzOlxcdFxcdFxcdFxcdGRldl9kYmcocGxmeGxjX3VyYl9kZXYodXJiKSwgXFxcInVyYiAlcCAgbWF4IHJlc3VibWl0cyByZWFjaGVkXFxcIiwgdXJiKTtcXG4gMTE0OlxcdFxcdFxcdFxcdHR4LVxcdTAwM2VzdWJtaXR0ZWRfdXJicyA9IDA7XFxuIDExNTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDExNjpcXHRcXHRcXHR9XFxuIDExNzpcXHRcXHR9XFxuIDExODpcXHRcXG4gMTE5OlxcdFxcdGJ1ZmZlciA9IHVyYi1cXHUwMDNldHJhbnNmZXJfYnVmZmVyO1xcbiAxMjA6XFx0XFx0bGVuZ3RoID0gdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoO1xcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHRpZiAobGVuZ3RoICE9IChQTEZfTVNHX1NUQVRVU19PRkZTRVQgKyAxKSkge1xcbiAxMjM6XFx0XFx0XFx0aWYgKHVzYi1cXHUwMDNlaW5pdGlhbGl6ZWQgXFx1MDAyNlxcdTAwMjYgdXNiLVxcdTAwM2VsaW5rX3VwKVxcbiAxMjQ6XFx0XFx0XFx0XFx0aGFuZGxlX3J4X3BhY2tldCh1c2IsIGJ1ZmZlciwgbGVuZ3RoKTtcXG4gMTI1OlxcdFxcdFxcdGdvdG8gcmVzdWJtaXQ7XFxuIDEyNjpcXHRcXHR9XFxuIDEyNzpcXHRcXG4gMTI4OlxcdFxcdHN0YXR1cyA9IGJ1ZmZlcltQTEZfTVNHX1NUQVRVU19PRkZTRVRdO1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHRzd2l0Y2ggKHN0YXR1cykge1xcbiAxMzE6XFx0XFx0Y2FzZSBTVEFUSU9OX0ZJRk9fQUxNT1NUX0ZVTExfTk9UX01FU1NBR0U6XFxuIDEzMjpcXHRcXHRcXHRkZXZfZGJnKFxcdTAwMjZ1c2ItXFx1MDAzZWludGYtXFx1MDAzZWRldixcXG4gMTMzOlxcdFxcdFxcdFxcdFxcXCJGSUZPIGZ1bGwgbm90IHBhY2tldCByZWNlaXB0XFxcXG5cXFwiKTtcXG4gMTM0OlxcdFxcdFxcdHR4LVxcdTAwM2VtYWNfZmlmb19mdWxsID0gMTtcXG4gMTM1OlxcdFxcdFxcdGZvciAoc2lkeCA9IDA7IHNpZHggXFx1MDAzYyBNQVhfU1RBX05VTTsgc2lkeCsrKVxcbiAxMzY6XFx0XFx0XFx0XFx0dHgtXFx1MDAzZXN0YXRpb25bc2lkeF0uZmxhZyB8PSBTVEFUSU9OX0ZJRk9fRlVMTF9GTEFHO1xcbiAxMzc6XFx0XFx0XFx0YnJlYWs7XFxuIDEzODpcXHRcXHRjYXNlIFNUQVRJT05fRklGT19BTE1PU1RfRlVMTF9NRVNTQUdFOlxcbiAxMzk6XFx0XFx0XFx0ZGV2X2RiZyhcXHUwMDI2dXNiLVxcdTAwM2VpbnRmLVxcdTAwM2VkZXYsIFxcXCJGSUZPIGZ1bGwgcGFja2V0IHJlY2VpcHRcXFxcblxcXCIpO1xcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHRcXHRmb3IgKHNpZHggPSAwOyBzaWR4IFxcdTAwM2MgTUFYX1NUQV9OVU07IHNpZHgrKylcXG4gMTQyOlxcdFxcdFxcdFxcdHR4LVxcdTAwM2VzdGF0aW9uW3NpZHhdLmZsYWcgXFx1MDAyNj0gU1RBVElPTl9BQ1RJVkVfRkxBRztcXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0XFx0cGxmeGxjX3NlbmRfcGFja2V0X2Zyb21fZGF0YV9xdWV1ZSh1c2IpO1xcbiAxNDU6XFx0XFx0XFx0YnJlYWs7XFxuIDE0NjpcXHRcXHRjYXNlIFNUQVRJT05fQ09OTkVDVF9NRVNTQUdFOlxcbiAxNDc6XFx0XFx0XFx0dXNiLVxcdTAwM2VsaW5rX3VwID0gMTtcXG4gMTQ4OlxcdFxcdFxcdGRldl9kYmcoXFx1MDAyNnVzYi1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwiU1RfQ09OTkVDVF9NU0cgcGFja2V0IHJlY2VpcHRcXFxcblxcXCIpO1xcbiAxNDk6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjMyLjg4NDc4ODEyMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzIyOTEwOTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLiBIZXJlJ3MgaG93IEknbSB0aGlua2luZyBhYm91dCBpdDpcblxuKipBbmFseXppbmcgdGhlIGBoYW5kbGVfcnhfcGFja2V0YCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdW5kZXJzdGFuZCB0aGUgY29yZSBvZiB0aGUgcHJvYmxlbS4gV2hhdCBpcyBgaGFuZGxlX3J4X3BhY2tldGAgc3VwcG9zZWQgdG8gYmUgZG9pbmc/IE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCdzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgcmVjZWl2aW5nIGFuZCBwcm9jZXNzaW5nIG5ldHdvcmsgcGFja2V0cy4gR2l2ZW4gdGhlIG5hbWUsIHRoYXQgZmVlbHMgbGlrZSBhIHNhZmUgYmV0LiBCdXQgSSBuZWVkIHRvIGdvIGRlZXBlciB0aGFuIGp1c3QgZ3Vlc3NpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0IGhhbmRsZXMgdGhvc2UgcGFja2V0cy4gV2hhdCBzdGVwcyBkb2VzIGl0IHRha2U/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBJIGNhbiBpbW1lZGlhdGVseSBzcG90IGJhc2VkIG9uIGl0cyBuYW1lIGFsb25lPyBJIG5lZWQgdG8gdGhpbmsgbGlrZSBhbiBhdHRhY2tlciBoZXJlLiBEb2VzIGl0IHZhbGlkYXRlIHRoZSBzaXplIG9mIHRoZSBpbmNvbWluZyBwYWNrZXQ/IERvZXMgaXQgY2hlY2sgZm9yIG1hbGZvcm1lZCBkYXRhPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcG9pbnRzIG9mIG92ZXJmbG93PyBCZWZvcmUgSSBzdGFydCB0byBhbmFseXplLCBJJ20gZ29pbmcgdG8gZm9ybXVsYXRlIGEgZmV3IHF1ZXN0aW9ucyB0aGF0IG5lZWQgYW5zd2VyaW5nLiBJJ2xsIG5lZWQgdG8ga25vdzpcbiogICBXaGF0IGlzIHRoZSBpbnB1dCB0byB0aGUgZnVuY3Rpb24/XG4qICAgV2hhdCBkb2VzIHRoZSBmdW5jdGlvbiBkbyB3aXRoIHRoZSBpbnB1dD9cbiogICBXaGF0IGFyZSB0aGUgb3V0cHV0cyBvZiB0aGUgZnVuY3Rpb24/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5ODksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjM4LjYwNzcwMTcyOVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUxNTk5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX3J4X3BhY2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYz0zNj12b2lkIHBsZnhsY19zZW5kX3BhY2tldF9mcm9tX2RhdGFfcXVldWUoc3RydWN0IHBsZnhsY191c2IgKnVzYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy02Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM6NjM6c3RhdGljIHZvaWQgaGFuZGxlX3J4X3BhY2tldChzdHJ1Y3QgcGxmeGxjX3VzYiAqdXNiLCBjb25zdCB1OCAqYnVmZmVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy02NC1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmM9Njk9c3RhdGljIHZvaWQgcnhfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYy0xMjMtXFx0XFx0aWYgKHVzYi1cXHUwMDNlaW5pdGlhbGl6ZWQgXFx1MDAyNlxcdTAwMjYgdXNiLVxcdTAwM2VsaW5rX3VwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy91c2IuYzoxMjQ6XFx0XFx0XFx0aGFuZGxlX3J4X3BhY2tldCh1c2IsIGJ1ZmZlciwgbGVuZ3RoKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmMtMTI1LVxcdFxcdGdvdG8gcmVzdWJtaXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjM4LjY5Mjg2OTE1OFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjY1OTI4ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjpcblxuKipBbmFseXppbmcgdGhlIFJYIFBhY2tldCBIYW5kbGluZyBpbiBQdXJlTGlGaSBVU0IgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL3VzYi5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGBoYW5kbGVfcnhfcGFja2V0YCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgdGhlIGRyaXZlciByZWNlaXZlcyBhbmQgcHJvY2Vzc2VzIGRhdGEgY29taW5nIGluIG92ZXIgdGhlIFVTQiBjb25uZWN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRlYnVnIHBvdGVudGlhbCBpc3N1ZXMgb3Igb3B0aW1pemUgcGVyZm9ybWFuY2UgaW4gdGhpcyBQdXJlTGlGaSBzZXR1cC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIGNvbW1vbiB0aGluZ3MgdG8gbG9vayBmb3I6IGludGVycnVwdCBoYW5kbGluZywgYnVmZmVyIG1hbmFnZW1lbnQsIGVycm9yIGNoZWNraW5nLCBhbmQgZGF0YSB2YWxpZGF0aW9uLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIGRlYWxzIHdpdGggZnJhZ21lbnRlZCBwYWNrZXRzLCBhbnkgY2hlY2tzdW0gdmVyaWZpY2F0aW9uLCBhbmQgaG93IGl0IGhhbmRzIHRoZSBwcm9jZXNzZWQgZGF0YSBvZmYgdG8gdGhlIGhpZ2hlciBuZXR3b3JrIGxheWVycy4gSSdtIGV4cGVjdGluZyBzb21lIHN0YW5kYXJkIFVTQiBkZXZpY2UgaW50ZXJhY3Rpb24sIGxpa2UgcmVhZGluZyBmcm9tIGVuZHBvaW50cywgYW5kIHBlcmhhcHMgc29tZSBkZXZpY2Utc3BlY2lmaWMgY29tbWFuZHMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMuIExldCdzIHNlZSBob3cgd2VsbCBpdCdzIGJlZW4gaW1wbGVtZW50ZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3IgaW1wcm92ZW1lbnQgb3Igb3B0aW1pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTY5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTQ6NDIuOTU4ODAxMTU5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gIDYxOlxcdH1cXG4gIDYyOlxcdFxcbiAgNjM6XFx0c3RhdGljIHZvaWQgaGFuZGxlX3J4X3BhY2tldChzdHJ1Y3QgcGxmeGxjX3VzYiAqdXNiLCBjb25zdCB1OCAqYnVmZmVyLFxcbiAgNjQ6XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKVxcbiAgNjU6XFx0e1xcbiAgNjY6XFx0XFx0cGxmeGxjX21hY19yeChwbGZ4bGNfdXNiX3RvX2h3KHVzYiksIGJ1ZmZlciwgbGVuZ3RoKTtcXG4gIDY3OlxcdH1cXG4gIDY4OlxcdFxcbiAgNjk6XFx0c3RhdGljIHZvaWQgcnhfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4gIDcwOlxcdHtcXG4gIDcxOlxcdFxcdHN0cnVjdCBwbGZ4bGNfdXNiX3R4ICp0eDtcXG4gIDcyOlxcdFxcdHN0cnVjdCBwbGZ4bGNfdXNiICp1c2I7XFxuICA3MzpcXHRcXHR1bnNpZ25lZCBpbnQgbGVuZ3RoO1xcbiAgNzQ6XFx0XFx0Y29uc3QgdTggKmJ1ZmZlcjtcXG4gIDc1OlxcdFxcdHUxNiBzdGF0dXM7XFxuICA3NjpcXHRcXHR1OCBzaWR4O1xcbiAgNzc6XFx0XFx0aW50IHI7XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdGlmICghdXJiKSB7XFxuICA4MDpcXHRcXHRcXHRwcl9lcnIoXFxcInVyYiBpcyBOVUxMXFxcXG5cXFwiKTtcXG4gIDgxOlxcdFxcdFxcdHJldHVybjtcXG4gIDgyOlxcdFxcdH1cXG4gIDgzOlxcdFxcdGlmICghdXJiLVxcdTAwM2Vjb250ZXh0KSB7XFxuICA4NDpcXHRcXHRcXHRwcl9lcnIoXFxcInVyYiBjdHggaXMgTlVMTFxcXFxuXFxcIik7XFxuICA4NTpcXHRcXHRcXHRyZXR1cm47XFxuICA4NjpcXHRcXHR9XFxuICA4NzpcXHRcXHR1c2IgPSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuICA4ODpcXHRcXG4gIDg5OlxcdFxcdGlmICh1c2ItXFx1MDAzZWluaXRpYWxpemVkICE9IDEpIHtcXG4gIDkwOlxcdFxcdFxcdHByX2VycihcXFwidXNiIGlzIG5vdCBpbml0aWFsaXplZFxcXFxuXFxcIik7XFxuICA5MTpcXHRcXHRcXHRyZXR1cm47XFxuICA5MjpcXHRcXHR9XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdHR4ID0gXFx1MDAyNnVzYi1cXHUwMDNldHg7XFxuICA5NTpcXHRcXHRzd2l0Y2ggKHVyYi1cXHUwMDNlc3RhdHVzKSB7XFxuICA5NjpcXHRcXHRjYXNlIDA6XFxuICA5NzpcXHRcXHRcXHRicmVhaztcXG4gIDk4OlxcdFxcdGNhc2UgLUVTSFVURE9XTjpcXG4gIDk5OlxcdFxcdGNhc2UgLUVJTlZBTDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTQ6NDIuOTU4OTczMjg5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1MTE2Mzk1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSWCBQYXRoIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGhvdyB0aGUgcmVjZWl2ZSBwYXRoIGhhbmRsZXMgaW5jb21pbmcgVVNCIHRyYW5zZmVycyBhbmQgcHJvY2Vzc2VzIHRoZSBkYXRhLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGVyZSB3ZXJlIHNldmVyYWwgcmVsYXRlZCB2dWxuZXJhYmlsaXRpZXMsIG1vc3RseSBsaW5rZWQgdG8gdW5jaGVja2VkIGFzc3VtcHRpb25zIGFib3V0IHBhY2tldCBsZW5ndGhzIGFuZCBidWZmZXIgcG9pbnRlcnMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gdmFyaW91cyBpc3N1ZXMgZnJvbSBvdXQtb2YtYm91bmRzIHJlYWRzIHRvIGluY29ycmVjdCBmcmFtZSBwcm9jZXNzaW5nLlxuXG5GaXJzdCwgaW4gYHJ4X3VyYl9jb21wbGV0ZWAsIHRoZSBcImJlZm9yZVwiIGNvZGUgaGFkIGEgbGVuZ3RoIGNhbGN1bGF0aW9uIHRoYXQgd2FzIGZ1bmRhbWVudGFsbHkgZmxhd2VkLiBJdCBhc3N1bWVkIGBsZW5ndGhgIGNvdWxkIGJlIHJlYWQgb3V0IGZyb20gYGJ1ZmZlciArIHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzKWAsIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gd2FzIGluY29ycmVjdDogaXQgcmVhZCB1c2luZyBgbGUzMl90b19jcHVgIHdoZW4gYGJlMzJgIHdhcyB1c2VkLiBUaGUgYWN0dWFsIHBhY2tldCBsZW5ndGggd2FzIHN1cHBvc2VkIHRvIGJlIGluIGB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aGAuIFRoYXQncyBhIG1ham9yIHZ1bG5lcmFiaWxpdHkuIFRoZSBwYXRjaCBjb3JyZWN0bHkgY29ycmVjdHMgdGhpcyBhbmQgdXNlcyBgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGhgIGZvciBsZW5ndGguIFRoaXMgZW5zdXJlcyB3ZSdyZSBub3QgcmVhZGluZyBnYXJiYWdlIG9yIGJ5cGFzc2luZyBwb3RlbnRpYWwgc2l6ZSBjaGVja3MsIHdoaWNoIHRoZSBlYXJsaWVyIHZlcnNpb24gZGlkLlxuXG5TZWNvbmQsIHdpdGhpbiBgcGxmeGxjX21hY19yeGAsIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBtaXNzaW5nIGEgY3J1Y2lhbCBjaGVjazogY29uZmlybWluZyB0aGF0IHRoZSByZWNlaXZlZCBgbGVuZ3RoYCB3YXMgc3VmZmljaWVudCB0byBjb250YWluIHRoZSBiYXNpYyBoZWFkZXIgYW5kIHBheWxvYWQgbGVuZ3RoLiBXaXRob3V0IHRoYXQgaW5pdGlhbCBjaGVjaywgaXQgd2FzIHBvc3NpYmxlIGZvciB0aGUgY29kZSB0byBhdHRlbXB0IHRvIGRlcmVmZXJlbmNlIGEgYHN0cnVjdCByeF9zdGF0dXNgIHBvaW50ZXIgb3IgcmVhZCBhIHBheWxvYWQgbGVuZ3RoIGZyb20gYW4gaW52YWxpZCBtZW1vcnkgYWRkcmVzcywgb3BlbmluZyBpdCB1cCB0byBjcmFzaGluZyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIHVucHJlZGljdGFibGUgYmVoYXZpb3IuIFRoZSBmaXggYWRkcyB0aGUgY2hlY2sgYGxlbmd0aCBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXMpICsgc2l6ZW9mKHUzMilgLCB3aGljaCBpcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlcmUgaXMgZW5vdWdoIG9mIHRoZSBidWZmZXIgdG8gZXZlbiBwYXJzZSBiYXNpYyBkYXRhLlxuXG5UaGlyZCwgYW5kIHBlcmhhcHMgbW9zdCBhbGFybWluZ2x5LCB0aGUgYHBsZnhsY19maWx0ZXJfYWNrYCBjYWxsIHdhcyBoYXBwZW5pbmcgKmJlZm9yZSogdGhlIGBidWZmZXJgIHBvaW50ZXIgaGFkIGJlZW4gYWR2YW5jZWQgdG8gcG9pbnQgdG8gdGhlIGFjdHVhbCA4MDIuMTEgZnJhbWUuIEVzc2VudGlhbGx5LCB0aGUgY29kZSB3YXMgdHJlYXRpbmcgYHJ4X3N0YXR1c2Agc3RydWN0dXJlIGFzIElFRUUgODAyLjExIGhlYWRlci4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGJ5IG1vdmluZyB0aGUgYGJ1ZmZlcmAgcG9pbnRlciAqYWZ0ZXIqIHJlYWRpbmcgYHJ4X3N0YXR1c2AgYW5kIGBwYXlsb2FkX2xlbmd0aGAuIFRoZSBwYXRjaCB0aGVuIG1ha2VzIE1UVSBjaGVja3MgYW5kIGNoZWNrcyB0aGF0IHRoZSBwYXlsb2FkIGxlbmd0aCBwbHVzIGhlYWRlcnMgaXMgbGVzcyB0aGFuIHRoZSB0b3RhbCBsZW5ndGgsIHRvIHByZXZlbnQgb3V0IG9mIGJvdW5kcyByZWFkcy4gVGhpcyBpcyBhbiBhYnNvbHV0ZWx5IGNyaXRpY2FsIGNvcnJlY3Rpb24gdG8gZW5zdXJlIHRoYXQgdGhlIHByb3BlciBmcmFtZSBpcyBiZWluZyBwcm9jZXNzZWQgYnkgdGhlIGZpbHRlcmluZyBmdW5jdGlvbi5cblxuSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyB0aWdodGVuaW5nIHVwIGEgc2VyaWVzIG9mIGxvb3NlIGVuZHMgaW4gdGhlIHJlY2VpdmUgcGF0aC4gQnkgbWFraW5nIGl0IHNhZmVyLCB3ZSBhcmUgbm90IGFsbG93aW5nIGRhdGEgdG8gYmUgbWlzcmVhZCwgYW5kIHJlZHVjaW5nIHRoZSBsaWtlbGlob29kIG9mIGNyYXNoZXMgb3IgaW5jb3JyZWN0IGZyYW1lIHByb2Nlc3NpbmcuIEkgd2lsbCBleGFtaW5lIGBwbGZ4bGNfZmlsdGVyX2Fja2AgZnVydGhlciB0byBzZWUgd2hhdCBpdCdzIGRvaW5nIHdpdGggdGhlIDgwMi4xMSBoZWFkZXIsIGJ1dCB0aGlzIHNldCBvZiBmaXhlcyBpcyBkZWZpbml0ZWx5IGEgbW92ZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzUxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjQ5LjQ3MDYyNDMxNVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MTM4Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBsZnhsY19maWx0ZXJfYWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jPTI3OD1zdGF0aWMgdm9pZCBwbGZ4bGNfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMtMzM3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYzozMzg6c3RhdGljIGludCBwbGZ4bGNfZmlsdGVyX2FjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9oZHIgKnJ4X2hkcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9wdXJlbGlmaS9wbGZ4bGMvbWFjLmMtMzM5LVxcdFxcdFxcdCAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jPTM5Mz1pbnQgcGxmeGxjX21hY19yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY29uc3QgdTggKmJ1ZmZlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYy00NDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcHVyZWxpZmkvcGxmeGxjL21hYy5jOjQ0MTpcXHRpZiAocGxmeGxjX2ZpbHRlcl9hY2soaHcsIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWJ1ZmZlciwgXFx1MDAyNnN0YXRzKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuYy00NDItXFx0ICAgICFtYWMtXFx1MDAzZXBhc3NfY3RybClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTQ6NDkuNTg3NzcwODIzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NjI1NDQ1MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBwbGZ4bGNfZmlsdGVyX2Fja2AgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcGxmeGxjX2ZpbHRlcl9hY2tgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBKdXN0IHRoZSBuYW1lIGFsb25lLCBgZmlsdGVyX2Fja2AsIHN1Z2dlc3RzIGEgcm9sZSBpbiBhY2tub3dsZWRnaW5nIG9yIHByb2Nlc3NpbmcgZmlsdGVyZWQgZGF0YS4gVGhlIFwicGxmeGxjXCIgcHJlZml44oCmIHRoYXQgaGludHMgYXQgdGhlIHNwZWNpZmljIGZpbHRlcmluZyBtZWNoYW5pc20gb3IgbW9kdWxlIGl0J3MgcGFydCBvZjsgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIHRoZSBuYW1pbmcgY29udmVudGlvbnMgYW5kIGNvbnRleHQgd2l0aGluIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSBzdXNwZWN0IGl0J3MgZGVhbGluZyB3aXRoIHNvbWUgZm9ybSBvZiBwYWNrZXQgbGV2ZWwgZmlsdGVyaW5nLCBwb3NzaWJseSByZWxhdGVkIHRvIGZsb3cgY29udHJvbCBvciBjb25uZWN0aW9uIG1hbmFnZW1lbnQuIEtub3dpbmcgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYXJlYXMgd2hlcmUgaXQgbWlnaHQgYmUgZXhwb3NlZCB0byBtYWxpY2lvdXMgb3IgdW5leHBlY3RlZCBpbnB1dHMsIHBhcnRpY3VsYXJseSBpZiBpdCBkZWFscyB3aXRoIGFueSBzb3J0IG9mIHN0YXRlIG1hbmFnZW1lbnQuIExldCdzIHNlZSBob3cgaXQgaGFuZGxlcyB2YXJpb3VzIEFDSyB2YWx1ZXMgYW5kIGZsYWdzLiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgcGFzc2VkIGludG8gaXQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBsb29raW5nIGZvcj8gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBpZiB0aGlzIHRoaW5nIGlzIGFzIHJvYnVzdCBhcyBpdCBuZWVkcyB0byBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzQsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNjo1NDo1Mi4wNTAzMTg2MzNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL3BsZnhsYy9tYWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzgsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzg6XFx0c3RhdGljIGludCBwbGZ4bGNfZmlsdGVyX2FjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9oZHIgKnJ4X2hkcixcXG4gMzM5OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzKVxcbiAzNDA6XFx0e1xcbiAzNDE6XFx0XFx0c3RydWN0IHBsZnhsY19tYWMgKm1hYyA9IHBsZnhsY19od19tYWMoaHcpO1xcbiAzNDI6XFx0XFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqcTtcXG4gMzQzOlxcdFxcdGludCBpLCBwb3NpdGlvbiA9IDA7XFxuIDM0NDpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAzNDU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gMzQ2OlxcdFxcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0aWYgKCFpZWVlODAyMTFfaXNfYWNrKHJ4X2hkci1cXHUwMDNlZnJhbWVfY29udHJvbCkpXFxuIDM0OTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMzUwOlxcdFxcbiAzNTE6XFx0XFx0ZGV2X2RiZyhwbGZ4bGNfbWFjX2RldihtYWMpLCBcXFwiQUNLIFJlY2VpdmVkXFxcXG5cXFwiKTtcXG4gMzUyOlxcdFxcbiAzNTM6XFx0XFx0LyogY29kZSBiYXNlZCBvbiB6eSBkcml2ZXIsIHRoaXMgbG9naWMgbWF5IG5lZWQgZml4ICovXFxuIDM1NDpcXHRcXHRxID0gXFx1MDAyNm1hYy1cXHUwMDNlYWNrX3dhaXRfcXVldWU7XFxuIDM1NTpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRcXHRza2JfcXVldWVfd2FsayhxLCBza2IpIHtcXG4gMzU4OlxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICp0eF9oZHI7XFxuIDM1OTpcXHRcXG4gMzYwOlxcdFxcdFxcdHBvc2l0aW9uKys7XFxuIDM2MTpcXHRcXG4gMzYyOlxcdFxcdFxcdGlmIChtYWMtXFx1MDAzZWFja19wZW5kaW5nIFxcdTAwMjZcXHUwMDI2IHNrYl9xdWV1ZV9pc19maXJzdChxLCBza2IpKVxcbiAzNjM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDM2NDpcXHRcXHRcXHRpZiAobWFjLVxcdTAwM2VhY2tfcGVuZGluZyA9PSAwKVxcbiAzNjU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDM2NjpcXHRcXG4gMzY3OlxcdFxcdFxcdHR4X2hkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cXHUwMDNlZGF0YTtcXG4gMzY4OlxcdFxcdFxcdGlmIChsaWtlbHkoZXRoZXJfYWRkcl9lcXVhbCh0eF9oZHItXFx1MDAzZWFkZHIyLCByeF9oZHItXFx1MDAzZWFkZHIxKSkpIHtcXG4gMzY5OlxcdFxcdFxcdFxcdGZvdW5kID0gMTtcXG4gMzcwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzNzE6XFx0XFx0XFx0fVxcbiAzNzI6XFx0XFx0fVxcbiAzNzM6XFx0XFxuIDM3NDpcXHRcXHRpZiAoZm91bmQpIHtcXG4gMzc1OlxcdFxcdFxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBwb3NpdGlvbjsgaSsrKVxcbiAzNzY6XFx0XFx0XFx0XFx0c2tiID0gX19za2JfZGVxdWV1ZShxKTtcXG4gMzc3OlxcdFxcdFxcdGlmIChpID09IHBvc2l0aW9uKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA2OjU0OjUyLjA1MDQ1OTg1M1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzAxNzQ1NzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSBhIEtNU0FOIGFuZCBLQVNBTiBwZXJzcGVjdGl2ZSwgSSd2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IGl0J3MgZGVhbGluZyB3aXRoIHRoZSBgcHVyZWxpZmkvcGxmeGxjYCBkcml2ZXIgYW5kIGZvY3VzZXMgb24gaW1wcm92aW5nIHRoZSByb2J1c3RuZXNzIG9mIFVTQiBSWCBidWZmZXIgaGFuZGxpbmcuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgYWRkaW5nIG1pc3NpbmcgYm91bmRzIGFuZCBsZW5ndGggY2hlY2tzLCAqZml4aW5nKiBidWZmZXIgb2Zmc2V0cywgYW5kIGdlbmVyYWxseSBzaG9yaW5nIHVwIHRoZSBjb2RlJ3MgcmVzaWxpZW5jZSB0byBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcy5cblxuRmlyc3QsIEkgZXhhbWluZWQgaXQgZm9yIHBvdGVudGlhbCBLTVNBTiByZWQgZmxhZ3MuIEkgbG9va2VkIGZvciBpbnN0YW5jZXMgd2hlcmUga2VybmVsIHN0cnVjdHVyZXMgd2VyZSBiZWluZyBwYXNzZWQgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIGJ1dCBJIHNlZSBub25lLiBUaGUgZHJpdmVyIGRlYWxzIHdpdGggVVNCIGRhdGEgKGB1cmItXHUwMDNldHJhbnNmZXJfYnVmZmVyYCksIGFuZCBpdCdzIGJlaW5nIGZvcndhcmRlZCB0byBgbWFjODAyMTFgIHZpYSBgaWVlZTgwMjExX3J4X2lycXNhZmUoKWAuIEltcG9ydGFudGx5LCBhbnl0aGluZyByZWxhdGVkIHRvIGBzdGF0c2AgaXMgZXhwbGljaXRseSB6ZXJvZWQgb3V0IHdpdGggYG1lbXNldGAuIE5vIGRpY2Ugb24gdGhlIHVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyBzZW50IHRvIHVzZXJzcGFjZS5cblxuTmV4dCwgSSBsb29rZWQgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBZ2Fpbiwgbm90aGluZy4gVGhlIGxlbmd0aHMgYXJlIGNvbWluZyBmcm9tIHRoZSBVU0IgY29yZSAoYHVyYi1cdTAwM2VhY3R1YWxfbGVuZ3RoYCksIGFuZCBgYnVmZmVyYCBpcyB0aGUgYHVyYi1cdTAwM2V0cmFuc2Zlcl9idWZmZXJgLiBBbGwgbG9jYWxzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBJdCdzIGNsZWFuLlxuXG5UaGlyZGx5LCBJIGNoZWNrZWQgZm9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIGJ1dCB0aGlzIGlzbid0IHRoZSBjYXNlIGhlcmUuXG5cbkZvdXJ0aCwgSSBjaGVja2VkIGZvciBjaGFuZ2VzIGludm9sdmluZyBidWZmZXIgbWFuaXB1bGF0aW9ucywgbGVuZ3RocywgYW5kIGFueSBsb2dpYyB0aGF0IG1pZ2h0IHBlcm1pdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLiBJbiBmYWN0LCB0aGlzIHBhdGNoIGlzICphZGRpbmcqIGJvdW5kcyBjaGVja3M7IHByZXZlbnRpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycyEgU3BlY2lmaWNhbGx5LCBuZXcgY2hlY2tzIG9uIGBsZW5ndGhgIGFyZSBhZGRlZCB0byBwcmV2ZW50IHRoZSBvdXQtb2YtYm91bmRzIHJlYWRzLlxuXG5Ob3csIGxldCdzIGRvdWJsZS1jaGVjayBhbGwgYXNwZWN0cy4gSSBjb25maXJtZWQgdGhhdCBgcnhfdXJiX2NvbXBsZXRlYCB1c2VzIGB1cmItXHUwMDNlYWN0dWFsX2xlbmd0aGAgY29ycmVjdGx5LCBub3QgYXR0ZW1wdGluZyB0byBpbnRlcnByZXQgYnl0ZXMgYXMgYSBsZW5ndGguIGBwbGZ4bGNfbWFjX3J4YCBjYXJlZnVsbHkgY2hlY2tzIGJ1ZmZlciBsZW5ndGggYWdhaW5zdCBoZWFkZXIgc2l6ZXMsIE1UVSwgYW5kIHRvdGFsIHBhY2tldCBsZW5ndGggYmVmb3JlIGNhbGxpbmcgYHBsZnhsY19maWx0ZXJfYWNrYC4gVGhpcyBmaXhlcyBidWdzLlxuXG5NeSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBpcyAqbm90KiBhIEtNU0FOIGlzc3VlLiBUaGUgYnVncyB0aGF0IGFyZSBiZWluZyBmaXhlZCBhcmUgYm91bmRzIGNoZWNrIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvbiBVU0IgVVJCIGJ1ZmZlcnMsIHByZWNpc2VseSB0aGUga2luZHMgb2YgbWVtb3J5IHNhZmV0eSBjb25jZXJucyB0aGF0IEtBU0FOIGV4Y2VscyBhdCBkZXRlY3RpbmcuIEtNU0FOLCBpbiB0aGlzIGNvbnRleHQsIGlzIHVubmVjZXNzYXJ5LiBUaGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgc3RhY2svaGVhcCByZWFkcywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBUaGUgYHN0YXRzYCBzdHJ1Y3R1cmUgaXMgYmVpbmcgemVyb2VkLlxuXG5TbywgZnJvbSBteSBwZXJzcGVjdGl2ZSwgTmVlZHNLTVNBTiBzaG91bGQgYWJzb2x1dGVseSBiZSBgZmFsc2VgLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMjksIk91dHB1dFRva2VucyI6MjE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDY6NTQ6NTguNzUyMjA4NjY2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwYWNrZXQgdmFsaWRhdGlvbiBpbiB0aGUgUHVyZUxpRmkgKHBsZnhsYykgd2lyZWxlc3MgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0IHVzZXMgYHVyYi1cXHUwMDNlYWN0dWFsX2xlbmd0aGAgcmF0aGVyIHRoYW4gYW4gdW52YWxpZGF0ZWQgZmllbGQgZnJvbSB0aGUgYnVmZmVyLCBhZGRzIG1pbmltdW0gbGVuZ3RoIGNoZWNrcyBiZWZvcmUgcGFyc2luZyBgcnhfc3RhdHVzYCBhbmQgcGF5bG9hZCBsZW5ndGgsIHZlcmlmaWVzIHRoYXQgdGhlIHBheWxvYWQgbGVuZ3RoIGRvZXMgbm90IGV4Y2VlZCB0aGUgVVJCIGJ1ZmZlciBsZW5ndGgsIGFuZCBmaXhlcyB0aGUgYnVmZmVyIG9mZnNldCBwYXNzZWQgdG8gYHBsZnhsY19maWx0ZXJfYWNrKClgLlxcblxcblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBpbnB1dCB2YWxpZGF0aW9uIGFuZCBvdXQtb2YtYm91bmRzIGJ1ZmZlciBvdmVycmVhZHMsIHdoaWNoIGZhbGwgc3F1YXJlbHkgdW5kZXIgS0FTQU4ncyBkb21haW4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZSByZWFkcywgZG9lcyBub3QgYWx0ZXIgc3RydWN0dXJlIHBhZGRpbmcvaW5pdGlhbGl6YXRpb24gc2VudCB0byB1c2Vyc3BhY2UsIGFuZCBhbGwgbG9jYWwgc3RydWN0dXJlcyAoc3VjaCBhcyBgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgc3RhdHNgKSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgd2l0aCBgbWVtc2V0YC4gVGh1cywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcGFja2V0IHZhbGlkYXRpb24gaW4gdGhlIFB1cmVMaUZpIChwbGZ4bGMpIHdpcmVsZXNzIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCB1c2VzIGB1cmItXFx1MDAzZWFjdHVhbF9sZW5ndGhgIHJhdGhlciB0aGFuIGFuIHVudmFsaWRhdGVkIGZpZWxkIGZyb20gdGhlIGJ1ZmZlciwgYWRkcyBtaW5pbXVtIGxlbmd0aCBjaGVja3MgYmVmb3JlIHBhcnNpbmcgYHJ4X3N0YXR1c2AgYW5kIHBheWxvYWQgbGVuZ3RoLCB2ZXJpZmllcyB0aGF0IHRoZSBwYXlsb2FkIGxlbmd0aCBkb2VzIG5vdCBleGNlZWQgdGhlIFVSQiBidWZmZXIgbGVuZ3RoLCBhbmQgZml4ZXMgdGhlIGJ1ZmZlciBvZmZzZXQgcGFzc2VkIHRvIGBwbGZ4bGNfZmlsdGVyX2FjaygpYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3MgaW5wdXQgdmFsaWRhdGlvbiBhbmQgb3V0LW9mLWJvdW5kcyBidWZmZXIgb3ZlcnJlYWRzLCB3aGljaCBmYWxsIHNxdWFyZWx5IHVuZGVyIEtBU0FOJ3MgZG9tYWluLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGUgcmVhZHMsIGRvZXMgbm90IGFsdGVyIHN0cnVjdHVyZSBwYWRkaW5nL2luaXRpYWxpemF0aW9uIHNlbnQgdG8gdXNlcnNwYWNlLCBhbmQgYWxsIGxvY2FsIHN0cnVjdHVyZXMgKHN1Y2ggYXMgYHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHN0YXRzYCkgYXJlIGV4cGxpY2l0bHkgemVyb2VkIHdpdGggYG1lbXNldGAuIFRodXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowjhccr[1] Phase: Succeeded StartedAt: 2026-09-07 06:55:10 +0000 UTC FinishedAt: 2026-09-07 06:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 06:55:10 +0000 UTC FinishedAt: 2026-09-07 06:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2] Phase: Succeeded StartedAt: 2026-09-07 06:55:10 +0000 UTC FinishedAt: 2026-09-07 08:29:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 06:55:10 +0000 UTC FinishedAt: 2026-09-07 08:29:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 06:55:10 +0000 UTC FinishedAt: 2026-09-07 06:55:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 06:55:10 +0000 UTC FinishedAt: 2026-09-07 06:55:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhccr/series-workflowjhccr-convert-artifact-3080348324/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 06:55:20 +0000 UTC FinishedAt: 2026-09-07 07:11:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 06:55:20 +0000 UTC FinishedAt: 2026-09-07 07:11:31 +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:*846841be-040b-4b3e-b987-64f072270dbc,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-workflowjhccr/series-workflowjhccr-convert-artifact-3080348324/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": "531232ca-c5b1-4f06-b09c-d326666bf921", "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-workflowjhccr/series-workflowjhccr-build-action-807007458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 06:55:20 +0000 UTC FinishedAt: 2026-09-07 07:11:21 +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:*846841be-040b-4b3e-b987-64f072270dbc,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-workflowjhccr/series-workflowjhccr-convert-artifact-3080348324/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": "531232ca-c5b1-4f06-b09c-d326666bf921", "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-workflowjhccr/series-workflowjhccr-build-action-807007458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 07:11:31 +0000 UTC FinishedAt: 2026-09-07 07:11:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 07:11:31 +0000 UTC FinishedAt: 2026-09-07 07:11:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 07:11:31 +0000 UTC FinishedAt: 2026-09-07 07:11:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 07:11:31 +0000 UTC FinishedAt: 2026-09-07 07:11:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjhccr/series-workflowjhccr-convert-artifact-3326449315/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 07:11:41 +0000 UTC FinishedAt: 2026-09-07 07:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 07:11:41 +0000 UTC FinishedAt: 2026-09-07 07:13:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*531232ca-c5b1-4f06-b09c-d326666bf921,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-workflowjhccr/series-workflowjhccr-build-action-807007458/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-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 07:13:37 +0000 UTC FinishedAt: 2026-09-07 07:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 07:13:37 +0000 UTC FinishedAt: 2026-09-07 07:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 07:13:37 +0000 UTC FinishedAt: 2026-09-07 07:30:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 07:13:37 +0000 UTC FinishedAt: 2026-09-07 07:30:29 +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:*846841be-040b-4b3e-b987-64f072270dbc,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-workflowjhccr/series-workflowjhccr-convert-artifact-3326449315/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": "811ef1b6-82af-4386-b8be-0e0ccd9279a8", "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-workflowjhccr/series-workflowjhccr-build-action-3997211479/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 07:13:37 +0000 UTC FinishedAt: 2026-09-07 07:30:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*846841be-040b-4b3e-b987-64f072270dbc,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-workflowjhccr/series-workflowjhccr-convert-artifact-3326449315/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": "811ef1b6-82af-4386-b8be-0e0ccd9279a8", "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-workflowjhccr/series-workflowjhccr-build-action-3997211479/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 07:30:29 +0000 UTC FinishedAt: 2026-09-07 07:30:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 07:30:29 +0000 UTC FinishedAt: 2026-09-07 07:30:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 07:30:29 +0000 UTC FinishedAt: 2026-09-07 07:33:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 07:30:29 +0000 UTC FinishedAt: 2026-09-07 07:32:52 +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:*811ef1b6-82af-4386-b8be-0e0ccd9279a8,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-workflowjhccr/series-workflowjhccr-build-action-3997211479/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-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 07:33:02 +0000 UTC FinishedAt: 2026-09-07 08:29:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 07:33:02 +0000 UTC FinishedAt: 2026-09-07 08:29:19 +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":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"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:*531232ca-c5b1-4f06-b09c-d326666bf921,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*811ef1b6-82af-4386-b8be-0e0ccd9279a8,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-workflowjhccr/series-workflowjhccr-build-action-807007458/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-workflowjhccr/series-workflowjhccr-build-action-3997211479/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 07:33:02 +0000 UTC FinishedAt: 2026-09-07 07:33:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 07:33:02 +0000 UTC FinishedAt: 2026-09-07 07:33:09 +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":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"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-workflowjhccr/series-workflowjhccr-convert-artifact-4276404412/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 07:33:02 +0000 UTC FinishedAt: 2026-09-07 07:33:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 07:33:02 +0000 UTC FinishedAt: 2026-09-07 07:33:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 07:33:02 +0000 UTC FinishedAt: 2026-09-07 07:33:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 07:33:12 +0000 UTC FinishedAt: 2026-09-07 08:29:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjhccr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["plfxlc_mac_rx","rx_urb_complete","handle_rx_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b60ed34f712e9f606d80951f1586f4274ebadf1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PLFXLC","WLAN_VENDOR_PURELIFI","MAC80211","CFG80211","USB","WLAN"],"series_id":"028a71d4-0324-4c51-8e2b-ed934f2fec5a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 07:33:12 +0000 UTC FinishedAt: 2026-09-07 08:29:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*531232ca-c5b1-4f06-b09c-d326666bf921,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*811ef1b6-82af-4386-b8be-0e0ccd9279a8,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-workflowjhccr/series-workflowjhccr-build-action-807007458/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-workflowjhccr/series-workflowjhccr-build-action-3997211479/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-workflowjhccr/series-workflowjhccr-convert-artifact-4276404412/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,}