Name: series-workflowchn4z Phase: Succeeded StartedAt: 2026-09-11 11:37:28 +0000 UTC FinishedAt: 2026-09-11 16:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[0] Phase: Succeeded StartedAt: 2026-09-11 11:37:28 +0000 UTC FinishedAt: 2026-09-11 12:22:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 11:37:28 +0000 UTC FinishedAt: 2026-09-11 12:22:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_VLAN_FILTERING", "VLAN_8021Q" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_VLAN_FILTERING", "VLAN_8021Q" ], "series_id": "6eca8c6c-237c-456d-8ac2-8e4ae06e9683" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__vlan_del", "__vlan_flush", "br_vlan_delete", "nbp_vlan_delete", "br_vlan_flush", "nbp_vlan_flush" ], "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+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdmxhbl9kZWwmIzM0OywKICAgICYjMzQ7X192bGFuX2ZsdXNoJiMzNDssCiAgICAmIzM0O2JyX3ZsYW5fZGVsZXRlJiMzNDssCiAgICAmIzM0O25icF92bGFuX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDticl92bGFuX2ZsdXNoJiMzNDssCiAgICAmIzM0O25icF92bGFuX2ZsdXNoJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgVkxBTiBkZWxldGlvbiBhbmQgZmx1c2hpbmcgbG9naWMgaW4gdGhlIExpbnV4IGJyaWRnZSAoYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCkuIFNwZWNpZmljYWxseSwgaXQgYWRkcyBhIGB0ZWFyZG93bmAgZmxhZyB0byBgX192bGFuX2RlbCgpYCB0byBlbnN1cmUgcmVzb3VyY2UgY2xlYW51cCBjb250aW51ZXMgZXZlbiBpZiBkZXZpY2Uvc3dpdGNoZGV2IFZMQU4gZGVsZXRpb24gcmV0dXJucyBhbiBlcnJvciBkdXJpbmcgZmx1c2gsIGF2b2lkcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiBgcGAgaW4gYF9fdmxhbl9mbHVzaCgpYCwgYW5kIHNhdmVzIGB2bGFuLVx1MDAzZXZpZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSB0byBwcmV2ZW50IGEgdXNlLWFmdGVyLWZyZWUgcmVhZCBhZnRlciBgX192bGFuX2RlbCgpYC5cblxuVGhlc2UgY2hhbmdlcyBleGNsdXNpdmVseSB0b3VjaCBlcnJvciBoYW5kbGluZywgY29udHJvbCBmbG93LCBhbmQgb2JqZWN0IGxpZmV0aW1lIChOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIHVzZS1hZnRlci1mcmVlIHJpc2tzLCBib3RoIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGNoZWNrcyBhbmQgS0FTQU4pLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29weSBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBwYXJzaW5nIGxvZ2ljLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJyaWRnZSBWTEFOIGRlbGV0aW9uIGFuZCBmbHVzaCBoYW5kbGluZyBpbiBuZXQvYnJpZGdlL2JyX3ZsYW4uYy4gSXQgaW50cm9kdWNlcyBhIHRlYXJkb3duIGZsYWcgdG8gZW5zdXJlIGJyaWRnZSBhbmQgcG9ydCBWTEFOcyBhcmUgY2xlYW5lZCB1cCBvbiB0ZWFyZG93bi9mbHVzaCBldmVuIGlmIHVuZGVybHlpbmcgZGV2aWNlL3N3aXRjaGRldiBvcGVyYXRpb25zIHJldHVybiBlcnJvcnMsIGFuZCBmaXhlcyBlcnJvciBsb2dnaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMVkxBTiwgYnJpZGdlIGNvbmZpZ3VyYXRpb24pIGFuZCBicmlkZ2UgZGV2aWNlIHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzEzMGZiMjJhMTQwYzRmMmFhYTUxYzFiNGU5NWU2MWVjYjMxZmU2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjIxOjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfdmxhbi5jIGIvbmV0L2JyaWRnZS9icl92bGFuLmNcbmluZGV4IDFlMGU0MzY2MjllY2UuLjNhYTBlMWZlZGViMjYgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl92bGFuLmNcbkBAIC0zODcsNyAmIzQzOzM4Nyw3IEBAIHN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4gXHRnb3RvIG91dDtcbiB9XG4gXG4tc3RhdGljIGludCBfX3ZsYW5fZGVsKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXG4mIzQzO3N0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCBib29sIHRlYXJkb3duKVxuIHtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYgPSB2O1xuIFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG5AQCAtNDA1LDEzICYjNDM7NDA1LDE0IEBAIHN0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxuIFx0X192bGFuX2RlbGV0ZV9wdmlkKHZnLCB2LVx1MDAzZXZpZCk7XG4gXHRpZiAocCkge1xuIFx0XHRlcnIgPSBfX3ZsYW5fdmlkX2RlbChwLVx1MDAzZWRldiwgcC1cdTAwM2Viciwgdik7XG4tXHRcdGlmIChlcnIpXG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiAhdGVhcmRvd24pXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9IGVsc2Uge1xuIFx0XHRlcnIgPSBicl9zd2l0Y2hkZXZfcG9ydF92bGFuX2RlbCh2LVx1MDAzZWJyLVx1MDAzZWRldiwgdi1cdTAwM2V2aWQpO1xuLVx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVPUE5PVFNVUFApXG4mIzQzO1x0XHRpZiAoZXJyID09IC1FT1BOT1RTVVBQKVxuJiM0MztcdFx0XHRlcnIgPSAwO1xuJiM0MztcdFx0ZWxzZSBpZiAoZXJyIFx1MDAyNlx1MDAyNiAhdGVhcmRvd24pXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdGVyciA9IDA7XG4gXHR9XG4gXG4gXHRpZiAoYnJfdmxhbl9zaG91bGRfdXNlKHYpKSB7XG5AQCAtNDQ4LDcgJiM0Mzs0NDksNyBAQCBzdGF0aWMgdm9pZCBfX3ZsYW5fZmx1c2goY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHRcdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcbiB7XG4gXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCAqdG1wO1xuLVx0dTE2IHZfc3RhcnQgPSAwLCB2X2VuZCA9IDA7XG4mIzQzO1x0dTE2IHZfc3RhcnQgPSAwLCB2X2VuZCA9IDAsIHZpZDtcbiBcdGludCBlcnI7XG4gXG4gXHRfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHZnLVx1MDAzZXB2aWQpO1xuQEAgLTQ2MywxMiAmIzQzOzQ2NCwxOCBAQCBzdGF0aWMgdm9pZCBfX3ZsYW5fZmx1c2goY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHR9XG4gXHRcdHZfZW5kID0gdmxhbi1cdTAwM2V2aWQ7XG4gXG4tXHRcdGVyciA9IF9fdmxhbl9kZWwodmxhbik7XG4mIzQzO1x0XHR2aWQgPSB2bGFuLVx1MDAzZXZpZDtcbiYjNDM7XHRcdGVyciA9IF9fdmxhbl9kZWwodmxhbiwgdHJ1ZSk7XG4gXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRicl9lcnIoYnIsXG4tXHRcdFx0ICAgICAgIFwmIzM0O3BvcnQgJXUoJXMpIGZhaWxlZCB0byBkZWxldGUgdmxhbiAlZDogJXBlXFxuXCYjMzQ7LFxuLVx0XHRcdCAgICAgICAodW5zaWduZWQgaW50KSBwLVx1MDAzZXBvcnRfbm8sIHAtXHUwMDNlZGV2LVx1MDAzZW5hbWUsXG4tXHRcdFx0ICAgICAgIHZsYW4tXHUwMDNldmlkLCBFUlJfUFRSKGVycikpO1xuJiM0MztcdFx0XHRpZiAocClcbiYjNDM7XHRcdFx0XHRicl9lcnIoYnIsXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O3BvcnQgJXUoJXMpIGZhaWxlZCB0byBkZWxldGUgdmxhbiAlZDogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICAodW5zaWduZWQgaW50KXAtXHUwMDNlcG9ydF9ubywgcC1cdTAwM2VkZXYtXHUwMDNlbmFtZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgdmlkLCBFUlJfUFRSKGVycikpO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0YnJfZXJyKGJyLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtmYWlsZWQgdG8gZGVsZXRlIGJyaWRnZSB2bGFuICVkOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTgzOCw3ICYjNDM7ODQ1LDcgQEAgaW50IGJyX3ZsYW5fZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHZpZClcbiBcbiBcdHZsYW5fdHVubmVsX2luZm9fZGVsKHZnLCB2KTtcbiBcbi1cdHJldHVybiBfX3ZsYW5fZGVsKHYpO1xuJiM0MztcdHJldHVybiBfX3ZsYW5fZGVsKHYsIGZhbHNlKTtcbiB9XG4gXG4gdm9pZCBicl92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbkBAIC0xMzY5LDcgJiM0MzsxMzc2LDcgQEAgaW50IG5icF92bGFuX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkKVxuIFx0YnJfZmRiX2ZpbmRfZGVsZXRlX2xvY2FsKHBvcnQtXHUwMDNlYnIsIHBvcnQsIHBvcnQtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCB2aWQpO1xuIFx0YnJfZmRiX2RlbGV0ZV9ieV9wb3J0KHBvcnQtXHUwMDNlYnIsIHBvcnQsIHZpZCwgMCk7XG4gXG4tXHRyZXR1cm4gX192bGFuX2RlbCh2KTtcbiYjNDM7XHRyZXR1cm4gX192bGFuX2RlbCh2LCBmYWxzZSk7XG4gfVxuIFxuIHZvaWQgbmJwX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3ZsYW5fZGVsJiMzNDssCiAgICAmIzM0O19fdmxhbl9mbHVzaCYjMzQ7LAogICAgJiMzNDticl92bGFuX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9mbHVzaCYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJyaWRnZSBWTEFOIGRlbGV0aW9uIGFuZCBmbHVzaCBoYW5kbGluZyBpbiBuZXQvYnJpZGdlL2JyX3ZsYW4uYy4gSXQgaW50cm9kdWNlcyBhIHRlYXJkb3duIGZsYWcgdG8gZW5zdXJlIGJyaWRnZSBhbmQgcG9ydCBWTEFOcyBhcmUgY2xlYW5lZCB1cCBvbiB0ZWFyZG93bi9mbHVzaCBldmVuIGlmIHVuZGVybHlpbmcgZGV2aWNlL3N3aXRjaGRldiBvcGVyYXRpb25zIHJldHVybiBlcnJvcnMsIGFuZCBmaXhlcyBlcnJvciBsb2dnaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMVkxBTiwgYnJpZGdlIGNvbmZpZ3VyYXRpb24pIGFuZCBicmlkZ2UgZGV2aWNlIHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzEzMGZiMjJhMTQwYzRmMmFhYTUxYzFiNGU5NWU2MWVjYjMxZmU2MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDEyOjIxOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl92bGFuLmMgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uYwppbmRleCAxZTBlNDM2NjI5ZWNlLi4zYWEwZTFmZWRlYjI2IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3ZsYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uYwpAQCAtMzg3LDcgJiM0MzszODcsNyBAQCBzdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLAogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdikKJiM0MztzdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgYm9vbCB0ZWFyZG93bikKIHsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICptYXN0ZXJ2ID0gdjsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZzsKQEAgLTQwNSwxMyAmIzQzOzQwNSwxNCBAQCBzdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdikKIAlfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHYtJmd0O3ZpZCk7CiAJaWYgKHApIHsKIAkJZXJyID0gX192bGFuX3ZpZF9kZWwocC0mZ3Q7ZGV2LCBwLSZndDticiwgdik7Ci0JCWlmIChlcnIpCiYjNDM7CQlpZiAoZXJyICZhbXA7JmFtcDsgIXRlYXJkb3duKQogCQkJZ290byBvdXQ7CiAJfSBlbHNlIHsKIAkJZXJyID0gYnJfc3dpdGNoZGV2X3BvcnRfdmxhbl9kZWwodi0mZ3Q7YnItJmd0O2Rldiwgdi0mZ3Q7dmlkKTsKLQkJaWYgKGVyciAmYW1wOyZhbXA7IGVyciAhPSAtRU9QTk9UU1VQUCkKJiM0MzsJCWlmIChlcnIgPT0gLUVPUE5PVFNVUFApCiYjNDM7CQkJZXJyID0gMDsKJiM0MzsJCWVsc2UgaWYgKGVyciAmYW1wOyZhbXA7ICF0ZWFyZG93bikKIAkJCWdvdG8gb3V0OwotCQllcnIgPSAwOwogCX0KIAogCWlmIChicl92bGFuX3Nob3VsZF91c2UodikpIHsKQEAgLTQ0OCw3ICYjNDM7NDQ5LDcgQEAgc3RhdGljIHZvaWQgX192bGFuX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAkJCSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZykKIHsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCAqdG1wOwotCXUxNiB2X3N0YXJ0ID0gMCwgdl9lbmQgPSAwOwomIzQzOwl1MTYgdl9zdGFydCA9IDAsIHZfZW5kID0gMCwgdmlkOwogCWludCBlcnI7CiAKIAlfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHZnLSZndDtwdmlkKTsKQEAgLTQ2MywxMiAmIzQzOzQ2NCwxOCBAQCBzdGF0aWMgdm9pZCBfX3ZsYW5fZmx1c2goY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCQl9CiAJCXZfZW5kID0gdmxhbi0mZ3Q7dmlkOwogCi0JCWVyciA9IF9fdmxhbl9kZWwodmxhbik7CiYjNDM7CQl2aWQgPSB2bGFuLSZndDt2aWQ7CiYjNDM7CQllcnIgPSBfX3ZsYW5fZGVsKHZsYW4sIHRydWUpOwogCQlpZiAoZXJyKSB7Ci0JCQlicl9lcnIoYnIsCi0JCQkgICAgICAgJiMzNDtwb3J0ICV1KCVzKSBmYWlsZWQgdG8gZGVsZXRlIHZsYW4gJWQ6ICVwZVxuJiMzNDssCi0JCQkgICAgICAgKHVuc2lnbmVkIGludCkgcC0mZ3Q7cG9ydF9ubywgcC0mZ3Q7ZGV2LSZndDtuYW1lLAotCQkJICAgICAgIHZsYW4tJmd0O3ZpZCwgRVJSX1BUUihlcnIpKTsKJiM0MzsJCQlpZiAocCkKJiM0MzsJCQkJYnJfZXJyKGJyLAomIzQzOwkJCQkgICAgICAgJiMzNDtwb3J0ICV1KCVzKSBmYWlsZWQgdG8gZGVsZXRlIHZsYW4gJWQ6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSAgICAgICAodW5zaWduZWQgaW50KXAtJmd0O3BvcnRfbm8sIHAtJmd0O2Rldi0mZ3Q7bmFtZSwKJiM0MzsJCQkJICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCWJyX2VycihiciwKJiM0MzsJCQkJICAgICAgICYjMzQ7ZmFpbGVkIHRvIGRlbGV0ZSBicmlkZ2UgdmxhbiAlZDogJXBlXG4mIzM0OywKJiM0MzsJCQkJICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTsKIAkJfQogCX0KIApAQCAtODM4LDcgJiM0Mzs4NDUsNyBAQCBpbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKQogCiAJdmxhbl90dW5uZWxfaW5mb19kZWwodmcsIHYpOwogCi0JcmV0dXJuIF9fdmxhbl9kZWwodik7CiYjNDM7CXJldHVybiBfX3ZsYW5fZGVsKHYsIGZhbHNlKTsKIH0KIAogdm9pZCBicl92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlICpicikKQEAgLTEzNjksNyAmIzQzOzEzNzYsNyBAQCBpbnQgbmJwX3ZsYW5fZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQpCiAJYnJfZmRiX2ZpbmRfZGVsZXRlX2xvY2FsKHBvcnQtJmd0O2JyLCBwb3J0LCBwb3J0LSZndDtkZXYtJmd0O2Rldl9hZGRyLCB2aWQpOwogCWJyX2ZkYl9kZWxldGVfYnlfcG9ydChwb3J0LSZndDticiwgcG9ydCwgdmlkLCAwKTsKIAotCXJldHVybiBfX3ZsYW5fZGVsKHYpOwomIzQzOwlyZXR1cm4gX192bGFuX2RlbCh2LCBmYWxzZSk7CiB9CiAKIHZvaWQgbmJwX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc3NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZMQU4gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJIHNlZSB0aGUgZm9jdXMgaXMgb24gYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCwgc3BlY2lmaWNhbGx5LiBUaGUgY2hhbmdlcyBzZWVtIGNlbnRlcmVkIGFyb3VuZCBWTEFOIGRlbGV0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYF9fdmxhbl9kZWxgLCBgX192bGFuX2ZsdXNoYCwgYGJyX3ZsYW5fZGVsZXRlYCwgYW5kIGBuYnBfdmxhbl9kZWxldGVgLiBUaGlzIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGxpa2VseSB0d2Vha2luZyB0aGUgVkxBTiByZW1vdmFsIHByb2Nlc3Mgd2l0aGluIHRoZSBicmlkZ2luZyBjb2RlLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGJldHRlci4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSByZWxldmFudCBjb2RlLiBUaW1lIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb250ZW50IG9mIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AgaXRzZWxmLiBJJiMzOTtsbCBhbHNvIG5lZWQgdG8gY2hlY2sgYG5ldC9icmlkZ2UvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtYXkgaW5mbHVlbmNlIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB3aGF0ZXZlciYjMzk7cyBmYXN0ZXN0IOKAkyB0byBnZXQgdGhhdCBzb3VyY2UgY29kZSBwdWxsZWQgdXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhlc2UgbW9kaWZpY2F0aW9ucyBiZWZvcmUgSSBjYW4gZXZlbiBiZWdpbiB0byBhc3Nlc3MgdGhlaXIgaW1wYWN0IGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4NTpcdFx0fVxuIDM4NjpcdFxuIDM4NzpcdFx0Z290byBvdXQ7XG4gMzg4Olx0fVxuIDM4OTpcdFxuIDM5MDpcdHN0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCBib29sIHRlYXJkb3duKVxuIDM5MTpcdHtcbiAzOTI6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYgPSB2O1xuIDM5MzpcdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG4gMzk0Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwID0gTlVMTDtcbiAzOTU6XHRcdGludCBlcnIgPSAwO1xuIDM5NjpcdFxuIDM5NzpcdFx0aWYgKGJyX3ZsYW5faXNfbWFzdGVyKHYpKSB7XG4gMzk4Olx0XHRcdHZnID0gYnJfdmxhbl9ncm91cCh2LVx1MDAzZWJyKTtcbiAzOTk6XHRcdH0gZWxzZSB7XG4gNDAwOlx0XHRcdHAgPSB2LVx1MDAzZXBvcnQ7XG4gNDAxOlx0XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXAodi1cdTAwM2Vwb3J0KTtcbiA0MDI6XHRcdFx0bWFzdGVydiA9IHYtXHUwMDNlYnJ2bGFuO1xuIDQwMzpcdFx0fVxuIDQwNDpcdFxuIDQwNTpcdFx0X192bGFuX2RlbGV0ZV9wdmlkKHZnLCB2LVx1MDAzZXZpZCk7XG4gNDA2Olx0XHRpZiAocCkge1xuIDQwNzpcdFx0XHRlcnIgPSBfX3ZsYW5fdmlkX2RlbChwLVx1MDAzZWRldiwgcC1cdTAwM2Viciwgdik7XG4gNDA4Olx0XHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2ICF0ZWFyZG93bilcbiA0MDk6XHRcdFx0XHRnb3RvIG91dDtcbiA0MTA6XHRcdH0gZWxzZSB7XG4gNDExOlx0XHRcdGVyciA9IGJyX3N3aXRjaGRldl9wb3J0X3ZsYW5fZGVsKHYtXHUwMDNlYnItXHUwMDNlZGV2LCB2LVx1MDAzZXZpZCk7XG4gNDEyOlx0XHRcdGlmIChlcnIgPT0gLUVPUE5PVFNVUFApXG4gNDEzOlx0XHRcdFx0ZXJyID0gMDtcbiA0MTQ6XHRcdFx0ZWxzZSBpZiAoZXJyIFx1MDAyNlx1MDAyNiAhdGVhcmRvd24pXG4gNDE1Olx0XHRcdFx0Z290byBvdXQ7XG4gNDE2Olx0XHR9XG4gNDE3Olx0XG4gNDE4Olx0XHRpZiAoYnJfdmxhbl9zaG91bGRfdXNlKHYpKSB7XG4gNDE5Olx0XHRcdHYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+QlJJREdFX1ZMQU5fSU5GT19CUkVOVFJZO1xuIDQyMDpcdFx0XHR2Zy1cdTAwM2VudW1fdmxhbnMtLTtcbiA0MjE6XHRcdH1cbiA0MjI6XHRcbiA0MjM6XHRcdGlmIChtYXN0ZXJ2ICE9IHYpIHtcbiA0MjQ6XHRcdFx0dmxhbl90dW5uZWxfaW5mb19kZWwodmcsIHYpO1xuIDQyNTpcdFx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnZnLVx1MDAzZXZsYW5faGFzaCwgXHUwMDI2di1cdTAwM2V2bm9kZSxcbiA0MjY6XHRcdFx0XHRcdCAgICAgICBicl92bGFuX3JodF9wYXJhbXMpO1xuIDQyNzpcdFx0XHRfX3ZsYW5fZGVsX2xpc3Qodik7XG4gNDI4Olx0XHRcdG5icF92bGFuX3NldF92bGFuX2Rldl9zdGF0ZShwLCB2LVx1MDAzZXZpZCk7XG4gNDI5Olx0XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgZmFsc2UpO1xuIDQzMDpcdFx0XHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnYtXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xuIDQzMTpcdFx0XHRjYWxsX3JjdShcdTAwMjZ2LVx1MDAzZXJjdSwgbmJwX3ZsYW5fcmN1X2ZyZWUpO1xuIDQzMjpcdFx0fVxuIDQzMzpcdFxuIDQzNDpcdFx0YnJfdmxhbl9wdXRfbWFzdGVyKG1hc3RlcnYpO1xuIDQzNTpcdG91dDpcbiA0MzY6XHRcdHJldHVybiBlcnI7XG4gNDM3Olx0fVxuIDQzODpcdFxuIDQzOTpcdHN0YXRpYyB2b2lkIF9fdmxhbl9ncm91cF9mcmVlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxuIDQ0MDpcdHtcbiA0NDE6XHRcdFdBUk5fT04oIWxpc3RfZW1wdHkoXHUwMDI2dmctXHUwMDNldmxhbl9saXN0KSk7XG4gNDQyOlx0XHRyaGFzaHRhYmxlX2Rlc3Ryb3koXHUwMDI2dmctXHUwMDNldmxhbl9oYXNoKTtcbiA0NDM6XHRcdHZsYW5fdHVubmVsX2RlaW5pdCh2Zyk7XG4gNDQ0Olx0XHRrZnJlZSh2Zyk7XG4gNDQ1Olx0fVxuIDQ0NjpcdFxuIDQ0NzpcdHN0YXRpYyB2b2lkIF9fdmxhbl9mbHVzaChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gNDQ4Olx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gNDQ5Olx0XHRcdFx0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxuIDQ1MDpcdHtcbiA0NTE6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sICp0bXA7XG4gNDUyOlx0XHR1MTYgdl9zdGFydCA9IDAsIHZfZW5kID0gMCwgdmlkO1xuIDQ1MzpcdFx0aW50IGVycjtcbiA0NTQ6XHRcbiA0NTU6XHRcdF9fdmxhbl9kZWxldGVfcHZpZCh2ZywgdmctXHUwMDNlcHZpZCk7XG4gNDU2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmxhbiwgdG1wLCBcdTAwMjZ2Zy1cdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XG4gNDU3Olx0XHRcdC8qIHRha2UgY2FyZSBvZiBkaXNqb2ludCByYW5nZXMgKi9cbiA0NTg6XHRcdFx0aWYgKCF2X3N0YXJ0KSB7XG4gNDU5Olx0XHRcdFx0dl9zdGFydCA9IHZsYW4tXHUwMDNldmlkO1xuIDQ2MDpcdFx0XHR9IGVsc2UgaWYgKHZsYW4tXHUwMDNldmlkIC0gdl9lbmQgIT0gMSkge1xuIDQ2MTpcdFx0XHRcdC8qIGZvdW5kIHJhbmdlIGVuZCwgbm90aWZ5IGFuZCBzdGFydCBuZXh0IG9uZSAqL1xuIDQ2MjpcdFx0XHRcdGJyX3ZsYW5fbm90aWZ5KGJyLCBwLCB2X3N0YXJ0LCB2X2VuZCwgUlRNX0RFTFZMQU4pO1xuIDQ2MzpcdFx0XHRcdHZfc3RhcnQgPSB2bGFuLVx1MDAzZXZpZDtcbiA0NjQ6XHRcdFx0fVxuIDQ2NTpcdFx0XHR2X2VuZCA9IHZsYW4tXHUwMDNldmlkO1xuIDQ2NjpcdFxuIDQ2NzpcdFx0XHR2aWQgPSB2bGFuLVx1MDAzZXZpZDtcbiA0Njg6XHRcdFx0ZXJyID0gX192bGFuX2RlbCh2bGFuLCB0cnVlKTtcbiA0Njk6XHRcdFx0aWYgKGVycikge1xuIDQ3MDpcdFx0XHRcdGlmIChwKVxuIDQ3MTpcdFx0XHRcdFx0YnJfZXJyKGJyLFxuIDQ3MjpcdFx0XHRcdFx0ICAgICAgIFwmIzM0O3BvcnQgJXUoJXMpIGZhaWxlZCB0byBkZWxldGUgdmxhbiAlZDogJXBlXFxuXCYjMzQ7LFxuIDQ3MzpcdFx0XHRcdFx0ICAgICAgICh1bnNpZ25lZCBpbnQpcC1cdTAwM2Vwb3J0X25vLCBwLVx1MDAzZWRldi1cdTAwM2VuYW1lLFxuIDQ3NDpcdFx0XHRcdFx0ICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjEzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBWTEFOIENvbmZpZ3VyYXRpb24gaW4gQnJpZGdlIE5ldHdvcmtpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gYG5ldC9icmlkZ2UvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBicmlkZ2luZyBmdW5jdGlvbmFsaXR5IHJlc2lkZSBpbiB0aGUga2VybmVsIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIFZMQU4gc3VwcG9ydCBvcHRpb25zLCBob3cgdGhleSYjMzk7cmUgZXhwb3NlZCwgYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhleSBtaWdodCBoYXZlIHdpdGhpbiB0aGUgYnJpZGdlIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHNwZWNpZmljIGBDT05GSUdfYCBmbGFncyBvciBvdGhlciBzZXR0aW5ncyB0aGF0IGVuYWJsZSwgZGlzYWJsZSwgYW5kIGZpbmUtdHVuZSBWTEFOIGJlaGF2aW9yICp3aXRoaW4qIHRoZSBjb250ZXh0IG9mIGEgYnJpZGdlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIG9wdGlvbnMgcmVsYXRlZCB0byBWTEFOIGZpbHRlcmluZywgVkxBTi1hd2FyZSBicmlkZ2luZywgYW5kIHBvdGVudGlhbGx5IHNvbWUgZmluZXItZ3JhaW5lZCBjb250cm9scyBvdmVyIFZMQU4gdGFnZ2luZyBhbmQgdW50YWdnaW5nIGJlaGF2aW9yIG9uIGJyaWRnZSBwb3J0cy4gS25vd2luZyB0aGUgc3BlY2lmaWNzIG9mIHRoZSBLY29uZmlnIGZpbGUgd2lsbCBsZXQgbWUgdW5kZXJzdGFuZCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFuZCBtb2R1bGVzIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgVkxBTnMgdG8gZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWc9MzY9Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTQ5LVxubmV0L2JyaWRnZS9LY29uZmlnOjUwOmNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy01MS1cdGJvb2wgXCYjMzQ7VkxBTiBmaWx0ZXJpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL01ha2VmaWxlPTIxPWJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgJiM0Mzs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cbm5ldC9icmlkZ2UvTWFrZWZpbGU6MjM6YnJpZGdlLSQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORykgJiM0Mzs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTI0LVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjIzMz1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIzNC17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORylcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIzNi1cdGlmIChicl9vcHRfZ2V0KHBvcnQtXHUwMDNlYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkpIHtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzNTI9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzUzLXtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM1NDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzU1LVx0c3RydWN0IG5ldF9icmlkZ2UgKmJyO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTExOTU9c3RhdGljIGludCBicl92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTIwNy1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjEyMDg6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTEyMDktXHRpZiAoZGF0YVtJRkxBX0JSX1ZMQU5fUFJPVE9DT0xdIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTEyOTU9c3RhdGljIGludCBicl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpicmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xMzY3LVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTM2ODojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTM2OS1cdGlmIChkYXRhW0lGTEFfQlJfVkxBTl9QUk9UT0NPTF0pIHtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xNjE5PXN0YXRpYyBzaXplX3QgYnJfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE2MjctXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSkgJiM0MzsgICAgIC8qIElGTEFfQlJfVkxBTl9GSUxURVJJTkcgKi9cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE2Mjg6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE2MjktXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUxNikpICYjNDM7XHQvKiBJRkxBX0JSX1ZMQU5fUFJPVE9DT0wgKi9cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xNjc4PXN0YXRpYyBpbnQgYnJfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicmRldilcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzMwLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTczMTojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTczMi1cdGlmIChubGFfcHV0X2JlMTYoc2tiLCBJRkxBX0JSX1ZMQU5fUFJPVE9DT0wsIGJyLVx1MDAzZXZsYW5fcHJvdG8pIHx8XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MzkyPXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQge1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTM5OC1cdHVuc2lnbmVkIGxvbmdcdFx0XHRmbGFncztcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjM5OTojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDAwLVx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cFx0X19yY3UgKnZsZ3JwO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTUwMj1zdHJ1Y3QgbmV0X2JyaWRnZSB7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTA3LVx0LyogVGhlc2UgZmllbGRzIGFyZSBhY2Nlc3NlZCBvbiBlYWNoIHBhY2tldCAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NTA4OiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01MDktXHRfX2JlMTZcdFx0XHRcdHZsYW5fcHJvdG87XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NTk4PXN0cnVjdCBicl9pbnB1dF9za2JfY2Ige1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYwOS1cdHU4IGdyYXRfYXJwOjE7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo2MTA6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYxMS1cdHU4IHZsYW5fZmlsdGVyZWQ6MTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTY1PWJyX211bHRpY2FzdF9jdHhfb3B0aW9uc19lcXVhbChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4MSxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTcyLS8qIGJyX3ZsYW4uYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU3MzojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU3NC1ib29sIGJyX2FsbG93ZWRfaW5ncmVzcyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTg3OT1zdGF0aWMgaW5saW5lIHUxNiBicl92bGFuX2ZsYWdzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBwdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4ODYtLyogYnJfdmxhbl9vcHRpb25zLmMgKi9cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4ODc6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4ODgtYm9vbCBicl92bGFuX29wdHNfZXFfcmFuZ2UoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdl9jdXJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE5MzQ9c3RhdGljIGlubGluZSBib29sIGJyX3ZsYW5fc3RhdGVfYWxsb3dlZCh1OCBzdGF0ZSwgYm9vbCBsZWFybl9hbGxvdylcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTQ3LS8qIGJyX21zdC5jICovXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTQ4OiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTQ5LURFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShicl9tc3RfdXNlZCk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oPTMyPWludCBicl92bGFuX3R1bm5lbF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGludCBjbWQsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oLTM0LVxubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oOjM1OiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmgtMzYtLyogYnJfdmxhbl90dW5uZWwuYyAqL1xuLS1cbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYz04Mzk9c3RhdGljIERFVklDRV9BVFRSX1JXKG5mX2NhbGxfYXJwdGFibGVzKTtcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy04NDAtI2VuZGlmXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM6ODQxOiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtODQyLXN0YXRpYyBzc2l6ZV90IHZsYW5fZmlsdGVyaW5nX3Nob3coc3RydWN0IGRldmljZSAqZCxcbi0tXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9OTM1PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpicmlkZ2VfYXR0cnNbXSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtOTgxLSNlbmRpZlxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jOjk4MjojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTk4My1cdFx1MDAyNmRldl9hdHRyX3ZsYW5fZmlsdGVyaW5nLmF0dHIsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9OTAxPWludCBicl92bGFuX2ZpbHRlcl90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05MDUtXHRcdC5vcmlnX2RldiA9IGJyLVx1MDAzZWRldixcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjkwNjpcdFx0LmlkID0gU1dJVENIREVWX0FUVFJfSURfQlJJREdFX1ZMQU5fRklMVEVSSU5HLFxubmV0L2JyaWRnZS9icl92bGFuLmMtOTA3LVx0XHQuZmxhZ3MgPSBTV0lUQ0hERVZfRl9TS0lQX0VPUE5PVFNVUFAsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MTI2ND1pbnQgbmJwX3ZsYW5faW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTI2Ny1cdFx0Lm9yaWdfZGV2ID0gcC1cdTAwM2Vici1cdTAwM2VkZXYsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMjY4Olx0XHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9CUklER0VfVkxBTl9GSUxURVJJTkcsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMjY5LVx0XHQuZmxhZ3MgPSBTV0lUQ0hERVZfRl9TS0lQX0VPUE5PVFNVUFAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE3NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBWTEFOIEZpbHRlcmluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBoZWFkIHN0cmFpZ2h0IGludG8gdGhlIGBuZXQvYnJpZGdlL0tjb25maWdgIGZpbGUuIEkmIzM5O20gc3BlY2lmaWNhbGx5IHplcm9pbmcgaW4gb24gdGhlIGBCUklER0VfVkxBTl9GSUxURVJJTkdgIG9wdGlvbi4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgVkxBTiBmaWx0ZXJpbmcgY29uZmlndXJhdGlvbiBpbiB0aGUgYnJpZGdpbmcgY29kZSBpcyBkZWZpbmVkLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBvcHRpb24gaXMgZXhwb3NlZCB0byB0aGUgdXNlciwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMgKGxpa2UgVkxBTiBzdXBwb3J0IGluIGdlbmVyYWwpLCBhbmQgaG93IGl0IGluZmx1ZW5jZXMgdGhlIGJ1aWxkIHByb2Nlc3MuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIEtjb25maWcgc3ludGF4IHVzZWQgdGhlcmUsIGFueSBhc3NvY2lhdGVkIGRlZmF1bHRzLCBoZWxwIHRleHQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdC4gSXQmIzM5O3MgYSBrZXkgcGFydCBvZiBob3cgdGhlIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHkgaGFuZGxlcyBWTEFOIHRhZ2dlZCBmcmFtZXMsIHNvIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb25maWd1cmF0aW9uIGlzIGVzc2VudGlhbCBmb3IgYW55IGJyaWRnZS1yZWxhdGVkIGRlYnVnZ2luZyBvciBvcHRpbWl6YXRpb24gSSBtaWdodCBiZSB0YWNrbGluZy4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIHJlY2FsbCB0aGUgdW5kZXJseWluZyBjb25maWcgbG9naWMgb3IgdW5kZXJzdGFuZCBob3cgdGhpcyBhZmZlY3RzIHRoaW5ncyBmcm9tIGZpcnN0IHByaW5jaXBsZXMgaWYgSSBhbSBmZWVsaW5nIHJ1c3R5LCBiZWZvcmUgZGVsdmluZyBpbnRvIGFjdHVhbCBicmlkZ2UgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIDgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgQlJJREdFXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDs4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBMTENcbiAgIDk6XHRcdHNlbGVjdCBTVFBcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBMaW51eCBib3ggd2lsbCBiZSBhYmxlIHRvIGFjdCBhcyBhblxuICAxMjpcdFx0ICBFdGhlcm5ldCBicmlkZ2UsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRpZmZlcmVudCBFdGhlcm5ldCBzZWdtZW50cyBpdFxuICAxMzpcdFx0ICBpcyBjb25uZWN0ZWQgdG8gd2lsbCBhcHBlYXIgYXMgb25lIEV0aGVybmV0IHRvIHRoZSBwYXJ0aWNpcGFudHMuXG4gIDE0Olx0XHQgIFNldmVyYWwgc3VjaCBicmlkZ2VzIGNhbiB3b3JrIHRvZ2V0aGVyIHRvIGNyZWF0ZSBldmVuIGxhcmdlclxuICAxNTpcdFx0ICBuZXR3b3JrcyBvZiBFdGhlcm5ldHMgdXNpbmcgdGhlIElFRUUgODAyLjEgc3Bhbm5pbmcgdHJlZSBhbGdvcml0aG0uXG4gIDE2Olx0XHQgIEFzIHRoaXMgaXMgYSBzdGFuZGFyZCwgTGludXggYnJpZGdlcyB3aWxsIGNvb3BlcmF0ZSBwcm9wZXJseSB3aXRoXG4gIDE3Olx0XHQgIG90aGVyIHRoaXJkIHBhcnR5IGJyaWRnZSBwcm9kdWN0cy5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgSW4gb3JkZXIgdG8gdXNlIHRoZSBFdGhlcm5ldCBicmlkZ2UsIHlvdSYjMzk7bGwgbmVlZCB0aGUgYnJpZGdlXG4gIDIwOlx0XHQgIGNvbmZpZ3VyYXRpb24gdG9vbHM7IHNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0XHUwMDNlXG4gIDIxOlx0XHQgIGZvciBsb2NhdGlvbi4gUGxlYXNlIHJlYWQgdGhlIEJyaWRnZSBtaW5pLUhPV1RPIGZvciBtb3JlXG4gIDIyOlx0XHQgIGluZm9ybWF0aW9uLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB5b3UgZW5hYmxlIGlwdGFibGVzIHN1cHBvcnQgYWxvbmcgd2l0aCB0aGUgYnJpZGdlIHN1cHBvcnQgdGhlbiB5b3VcbiAgMjU6XHRcdCAgdHVybiB5b3VyIGJyaWRnZSBpbnRvIGEgYnJpZGdpbmcgSVAgZmlyZXdhbGwuXG4gIDI2Olx0XHQgIGlwdGFibGVzIHdpbGwgdGhlbiBzZWUgdGhlIElQIHBhY2tldHMgYmVpbmcgYnJpZGdlZCwgc28geW91IG5lZWQgdG9cbiAgMjc6XHRcdCAgdGFrZSB0aGlzIGludG8gYWNjb3VudCB3aGVuIHNldHRpbmcgdXAgeW91ciBmaXJld2FsbCBydWxlcy5cbiAgMjg6XHRcdCAgRW5hYmxpbmcgYXJwdGFibGVzIHN1cHBvcnQgd2hlbiBicmlkZ2luZyB3aWxsIGxldCBhcnB0YWJsZXMgc2VlXG4gIDI5Olx0XHQgIGJyaWRnZWQgQVJQIHRyYWZmaWMgaW4gdGhlIGFycHRhYmxlcyBGT1JXQVJEIGNoYWluLlxuICAzMDpcdFxuICAzMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICAzMjpcdFx0ICB3aWxsIGJlIGNhbGxlZCBicmlkZ2UuXG4gIDMzOlx0XG4gIDM0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXG4gIDM3Olx0XHRib29sIFwmIzM0O0lHTVAvTUxEIHNub29waW5nXCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIEJSSURHRVxuICAzOTpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDQwOlx0XHRkZWZhdWx0IHlcbiAgNDE6XHRcdGhlbHBcbiAgNDI6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHlcbiAgNDM6XHRcdCAgZm9yd2FyZCBtdWx0aWNhc3QgdHJhZmZpYyBiYXNlZCBvbiBJR01QL01MRCB0cmFmZmljIHJlY2VpdmVkIGZyb21cbiAgNDQ6XHRcdCAgZWFjaCBwb3J0LlxuICA0NTpcdFxuICA0NjpcdFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cbiAgNDc6XHRcbiAgNDg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgNDk6XHRcbiAgNTA6XHRjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXG4gIDUxOlx0XHRib29sIFwmIzM0O1ZMQU4gZmlsdGVyaW5nXCYjMzQ7XG4gIDUyOlx0XHRkZXBlbmRzIG9uIEJSSURHRVxuICA1MzpcdFx0ZGVwZW5kcyBvbiBWTEFOXzgwMjFRXG4gIDU0Olx0XHRkZWZhdWx0IG5cbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHlcbiAgNTc6XHRcdCAgcmVjZWl2ZSBhbmQgZm9yd2FyZCB0cmFmZmljIGJhc2VkIG9uIFZMQU4gaW5mb3JtYXRpb24gaW4gdGhlIHBhY2tldFxuICA1ODpcdFx0ICBhbnkgVkxBTiBpbmZvcm1hdGlvbiBjb25maWd1cmVkIG9uIHRoZSBicmlkZ2UgcG9ydCBvciBicmlkZ2UgZGV2aWNlLlxuICA1OTpcdFxuICA2MDpcdFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cbiAgNjE6XHRcbiAgNjI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgNjM6XHRcbiAgNjQ6XHRjb25maWcgQlJJREdFX01SUFxuICA2NTpcdFx0Ym9vbCBcJiMzNDtNUlAgcHJvdG9jb2xcJiMzNDtcbiAgNjY6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gIDY3Olx0XHRkZWZhdWx0IG5cbiAgNjg6XHRcdGhlbHBcbiAgNjk6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgdG8gcnVuIE1SUFxuICA3MDpcdFx0ICBwcm90b2NvbCB0byBkZXRlY3QgbG9vcHNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mzk0CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogNjA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVkxBTiBEZWxldGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHBhdGNoIHRoYXQgcmVmYWN0b3JzIHRoZSBWTEFOIGRlbGV0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBicmlkZ2luZyBjb2RlLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYSBgdGVhcmRvd25gIGJvb2xlYW4gYXJndW1lbnQgdG8gdGhlIGBfX3ZsYW5fZGVsYCBmdW5jdGlvbi4gVGhpcyBpcyBzaWduaWZpY2FudCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBuZXcgcGFyYW1ldGVyLgoKTG9va2luZyBhdCB0aGUgYF9fdmxhbl9kZWxgIGZ1bmN0aW9uIGl0c2VsZiwgdGhlIGxvZ2ljIG5vdyBzZWVtcyB0byBjb25kaXRpb25hbGx5IGhhbmRsZSBlcnJvcnMuIEJlZm9yZSwgZXJyb3JzIHdlcmUgYWx3YXlzIHByb3BhZ2F0ZWQuIE5vdywgaXQgYXBwZWFycyB0aGUgYHRlYXJkb3duYCBmbGFnIGluZmx1ZW5jZXMgdGhlIGVycm9yIGhhbmRsaW5nLiBJZiBgdGVhcmRvd25gIGlzIHRydWUsIGNlcnRhaW4gZXJyb3JzIG1pZ2h0IGJlIGlnbm9yZWQsIHBhcnRpY3VsYXJseSBpbiB0aGUgYF9fdmxhbl9mbHVzaGAgcGF0aC4gV2UmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgc3BlY2lmaWMgZXJyb3IgY29kZXMgYXJlIG5vdyBiZWluZyBoYW5kbGVkIGRpZmZlcmVudGx5IGJhc2VkIG9uIHRoaXMgbmV3IHRlYXJkb3duIGZsYWcsIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIGRpZmZlcmVudCBjYWxsaW5nIGNvbnRleHRzLiBUaGUgY29uZGl0aW9uYWwgbG9naWMgbm93IGluIHBsYWNlIGluc2lkZSB0aGUgYGlmIChlcnIgJmFtcDsmYW1wOyAhdGVhcmRvd24pYCBibG9ja3MgYXJlIGNydWNpYWwuCgpUaGUgZGlmZiBhbHNvIHNob3dzIHRoYXQgYGJyX3ZsYW5fZGVsZXRlYCBhbmQgYG5icF92bGFuX2RlbGV0ZWAgbm93IGNhbGwgYF9fdmxhbl9kZWxgIHdpdGggYHRlYXJkb3duYCBzZXQgdG8gYGZhbHNlYC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZXNlIGZ1bmN0aW9ucywgaW4gdGhlIGN1cnJlbnQgY29udGV4dCwgYXJlICpub3QqIGludGVuZGVkIHRvIGJlIGEgdGVhcmRvd24sIG9yIG1vcmUgcGVybWFuZW50LCBjbGVhbnVwLCBhbmQgdGh1cywgZXJyb3JzIHNob3VsZCBiZSBjaGVja2VkLgoKSG93ZXZlciwgYF9fdmxhbl9mbHVzaGAgbm93IGNhbGxzIGBfX3ZsYW5fZGVsYCB3aXRoIGB0ZWFyZG93bmAgc2V0IHRvIGB0cnVlYC4gVGhpcyBpbXBsaWVzIHRoYXQgaW4gdGhlIGNvbnRleHQgb2YgZmx1c2hpbmcgVkxBTnMsIHBlcmhhcHMgZHVyaW5nIGJyaWRnZSBkZXN0cnVjdGlvbiBvciByZWNvbmZpZ3VyYXRpb24sIHRoZSBlcnJvcnMgcmVsYXRlZCB0byBWTEFOIGRlbGV0aW9uIGFyZSBub3QgYXMgY3JpdGljYWwsIGFuZCBwZXJoYXBzIGNhbiBiZSBpZ25vcmVkLiBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBwdXJwb3NlIG9mIGBfX3ZsYW5fZmx1c2hgIHRvIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzLiBUaGUgbG9nIG1lc3NhZ2UgZm9ybWF0dGluZyBkaWZmZXJlbmNlcyBiYXNlZCBvbiBgcGAgYXJlIGFsc28gbm90ZXdvcnRoeSAtIHRoaXMgYXBwZWFycyB0byBiZSBhIHJlZmluZW1lbnQgb2YgZXJyb3IgbWVzc2FnaW5nLgoKVWx0aW1hdGVseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscyB0byBgYnJfdmxhbl9kZWxldGVgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgYW5kIGBfX3ZsYW5fZmx1c2hgIHRvIHVuZGVyc3RhbmQgdGhlIHZhcmlvdXMgY29udGV4dHMgaW4gd2hpY2ggVkxBTiBkZWxldGlvbiBpcyBwZXJmb3JtZWQsIGFuZCB0aHVzLCB3aHkgdGhlIGB0ZWFyZG93bmAgZmxhZyBpcyBuZWVkZWQuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIHRoZXNlIGNhbGwgcGF0aHMgdG8gZm9ybSBhIGNvbmNsdXNpdmUganVkZ2VtZW50IG9uIHdoYXQgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBhY2hpZXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoYnJfdmxhbl9kZWxldGV8bmJwX3ZsYW5fZGVsZXRlfGJyX3ZsYW5fZmx1c2h8bmJwX3ZsYW5fZmx1c2gpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX2RldmljZS5jPTExOT1zdGF0aWMgaW50IGJyX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNDItXHRpZiAoZXJyKSB7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE0MzpcdFx0YnJfdmxhbl9mbHVzaChicik7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE0NC1cdFx0YnJfbWRiX2hhc2hfZmluaShicik7XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0xNTM9c3RhdGljIHZvaWQgYnJfZGV2X3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTU4LVx0YnJfbXVsdGljYXN0X3VuaW5pdF9zdGF0cyhicik7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE1OTpcdGJyX3ZsYW5fZmx1c2goYnIpO1xubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNjAtXHRicl9tZGJfaGFzaF9maW5pKGJyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmM9MzM0PXN0YXRpYyB2b2lkIGRlbF9uYnAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmMtMzU2LVxubmV0L2JyaWRnZS9icl9pZi5jOjM1NzpcdG5icF92bGFuX2ZsdXNoKHApO1xubmV0L2JyaWRnZS9icl9pZi5jLTM1OC1cdGJyX2ZkYl9kZWxldGVfYnlfcG9ydChiciwgcCwgMCwgMSk7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9Njk4PXN0YXRpYyBpbnQgYnJfdmxhbl9pbmZvKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy03MjMtXHRcdGlmIChwKSB7XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzo3MjQ6XHRcdFx0aWYgKCFuYnBfdmxhbl9kZWxldGUocCwgdmluZm8tXHUwMDNldmlkKSlcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTcyNS1cdFx0XHRcdCpjaGFuZ2VkID0gdHJ1ZTtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy03MjctXHRcdFx0aWYgKCh2aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19NQVNURVIpIFx1MDAyNlx1MDAyNlxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NzI4Olx0XHRcdCAgICAhYnJfdmxhbl9kZWxldGUocC1cdTAwM2ViciwgdmluZm8tXHUwMDNldmlkKSlcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTcyOS1cdFx0XHRcdCpjaGFuZ2VkID0gdHJ1ZTtcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjczMDpcdFx0fSBlbHNlIGlmICghYnJfdmxhbl9kZWxldGUoYnIsIHZpbmZvLVx1MDAzZXZpZCkpIHtcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTczMS1cdFx0XHQqY2hhbmdlZCA9IHRydWU7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU4NT1pbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTg2LVx0XHRib29sICpjaGFuZ2VkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU4NzppbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1ODg6dm9pZCBicl92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTg5LXN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKmJyX3ZsYW5fZmluZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZywgdTE2IHZpZCk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTYwND1pbnQgbmJwX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQsIHUxNiBmbGFncyxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE2MDUtXHRcdCBib29sICpjaGFuZ2VkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTYwNjppbnQgbmJwX3ZsYW5fZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTYwNzp2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTYwOC1pbnQgbmJwX3ZsYW5faW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE3MjE9c3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTcyNy1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE3Mjg6c3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTcyOS17XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTczMi1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE3MzM6c3RhdGljIGlubGluZSB2b2lkIGJyX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTczNC17XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTc0Nj1zdGF0aWMgaW5saW5lIGludCBuYnBfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZCwgdTE2IGZsYWdzLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3NTItXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNzUzOnN0YXRpYyBpbmxpbmUgaW50IG5icF92bGFuX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkKVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTc1NC17XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTc1Ny1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE3NTg6c3RhdGljIGlubGluZSB2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNzU5LXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz03ODY9aW50IGJyX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHZpZCwgdTE2IGZsYWdzLCBib29sICpjaGFuZ2VkLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTgzMC0gKi9cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjgzMTppbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKVxubmV0L2JyaWRnZS9icl92bGFuLmMtODMyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04NTAtXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo4NTE6dm9pZCBicl92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTg1Mi17XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MTA4Nz1zdGF0aWMgdm9pZCBicl92bGFuX2Rpc2FibGVfZGVmYXVsdF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMDk1LVx0aWYgKHZsYW5fZGVmYXVsdF9wdmlkKGJyX3ZsYW5fZ3JvdXAoYnIpLCBwdmlkKSkge1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTA5NjpcdFx0aWYgKCFicl92bGFuX2RlbGV0ZShiciwgcHZpZCkpXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMDk3LVx0XHRcdGJyX3ZsYW5fbm90aWZ5KGJyLCBOVUxMLCBwdmlkLCAwLCBSVE1fREVMVkxBTik7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTEwMS1cdFx0aWYgKHZsYW5fZGVmYXVsdF9wdmlkKG5icF92bGFuX2dyb3VwKHApLCBwdmlkKSBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjExMDI6XHRcdCAgICAhbmJwX3ZsYW5fZGVsZXRlKHAsIHB2aWQpKVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTEwMy1cdFx0XHRicl92bGFuX25vdGlmeShiciwgcCwgcHZpZCwgMCwgUlRNX0RFTFZMQU4pO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTExMDk9aW50IF9fYnJfdmxhbl9zZXRfZGVmYXVsdF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHB2aWQsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTE0NS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjExNDY6XHRcdGlmICghYnJfdmxhbl9kZWxldGUoYnIsIG9sZF9wdmlkKSlcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExNDctXHRcdFx0YnJfdmxhbl9ub3RpZnkoYnIsIE5VTEwsIG9sZF9wdmlkLCAwLCBSVE1fREVMVkxBTik7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTE2Ny1cdFx0XHRnb3RvIGVycl9wb3J0O1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTE2ODpcdFx0aWYgKCFuYnBfdmxhbl9kZWxldGUocCwgb2xkX3B2aWQpKVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTE2OS1cdFx0XHRicl92bGFuX25vdGlmeShiciwgcCwgb2xkX3B2aWQsIDAsIFJUTV9ERUxWTEFOKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTkxLVx0XHR9XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMTkyOlx0XHRuYnBfdmxhbl9kZWxldGUocCwgcHZpZCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTkzLVx0XHRicl92bGFuX25vdGlmeShiciwgcCwgcHZpZCwgMCwgUlRNX0RFTFZMQU4pO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEyMDQtXHRcdH1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEyMDU6XHRcdGJyX3ZsYW5fZGVsZXRlKGJyLCBwdmlkKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEyMDYtXHRcdGJyX3ZsYW5fbm90aWZ5KGJyLCBOVUxMLCBwdmlkLCAwLCBSVE1fREVMVkxBTik7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MTMyMj1pbnQgbmJwX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQsIHUxNiBmbGFncyxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzY2LSAqL1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTM2NzppbnQgbmJwX3ZsYW5fZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQpXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzY4LXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzgxLVxubmV0L2JyaWRnZS9icl92bGFuLmM6MTM4Mjp2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzgzLXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xNzU0PWludCBicl92bGFuX2JyaWRnZV9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTc2OS1cdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxNzcwOlx0XHRjaGFuZ2VkID0gIWJyX3ZsYW5fZGVsZXRlKGJyLCBici1cdTAwM2VkZWZhdWx0X3B2aWQpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMTc3MS1cdFx0dmxjbWQgPSBSVE1fREVMVkxBTjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpczogVkxBTiBEZWxldGlvbiBpbiBMaW51eCBCcmlkZ2UgU3Vic3lzdGVtKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgYnJfdmxhbl9kZWxldGVgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgYF9fdmxhbl9mbHVzaGAsIGFuZCBgX192bGFuX2RlbGAgd2l0aGluIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AuIFRoaXMgaXMgYWxsIHdpdGhpbiB0aGUgTGludXggYnJpZGdlIHN1YnN5c3RlbSwgd2hpY2gsIGNyaXRpY2FsbHksIGhhcyBWTEFOIGZpbHRlcmluZyBlbmFibGVkIChgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2ApLiBXZSYjMzk7cmUgdGFsa2luZyBzdGFuZGFyZCBuZXR3b3JraW5nIG9wZXJhdGlvbnMgaGVyZSDigJMgYnJpZGdlIGNyZWF0aW9uLCBhZGRpbmcgcG9ydHMsIGNvbmZpZ3VyaW5nIFZMQU5zIHVzaW5nIE5ldGxpbmsgKFJUTV9ORVdWTEFOLCBSVE1fREVMVkxBTiwgZXRjLiksIGFuZCBmbHVzaGluZyBWTEFOcyBvbiBwb3J0IGRlbGV0aW9uIG9yIGJyaWRnZSB1bmluaXRpYWxpemF0aW9uL2ZsdXNoLiBUaGVzZSBhcmUgYWxsIHRoaW5ncyB0aGF0IGFyZSAqZGlyZWN0bHkqIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLCBhbmQgc3l6a2FsbGVyIGhhcyBhbHJlYWR5IGhhbW1lcmVkIG9uIHRoZXNlIGludGVyZmFjZXMgdGhyb3VnaCBgcnRubC9uZXRsaW5rYCwgc28gd2Uga25vdyB0aGVyZSYjMzk7cyBzb21lIGV4aXN0aW5nIGNvdmVyYWdlLgoKVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmcgKm5vdyo/CgpUaGUgY3JpdGVyaWEgc2VlbSB0byBsaW5lIHVwLiBXZSBoYXZlIGEgY29yZSBzdWJzeXN0ZW0gdGhhdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBpbnRlcmZhY2VzIGxpa2UgbmV0bGluayAocnRuZXRsaW5rKSwgYnJpZGdlIGRldmljZSBvcGVyYXRpb25zLCBhbmQgc29ja2V0IHN5c2NhbGxzLiBUaGF0JiMzOTtzIGEgaHVnZSBwb3NpdGl2ZS4KClRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgYXJlIGRlZmluaXRlbHkgaW1wYWN0aW5nIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gIGBfX3ZsYW5fZGVsYCwgYF9fdmxhbl9mbHVzaGAsIGBicl92bGFuX2RlbGV0ZWAsIGFuZCBgbmJwX3ZsYW5fZGVsZXRlYCwgd2hpY2ggaXMgZ3JlYXQuICBTcGVjaWZpY2FsbHksIHRoaXMgcGF0Y2ggYXBwZWFycyB0byBiZSBmaWRkbGluZyB3aXRoIGVycm9yIGhhbmRsaW5nIGR1cmluZyBWTEFOIGZsdXNoL3RlYXJkb3duIGFuZCBzdGFuZGFyZCBWTEFOIGRlbGV0aW9uLiAgSXQgc2VlbXMgdGhlIGtleSBjaGFuZ2UgaXMgYWJvdXQgaG93IGVycm9ycyBhcmUgaGFuZGxlZCB3aGVuIHRlYXJpbmcgZG93biBWTEFOcy4gIEluIGBfX3ZsYW5fZGVsYCwgaWYgYHRlYXJkb3duYCBpcyBgdHJ1ZWAsIGVycm9ycyBmcm9tIGludGVybmFsIGNhbGxzICpkb24mIzM5O3QqIGFib3J0IHRoZSBwcm9jZXNzOyBpbnN0ZWFkLCBpdCBjb250aW51ZXMgdG8gY2xlYW4gdXAgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBzY2hlZHVsZSBSQ1UgZnJlZS4gSG93ZXZlciwgaWYgdGVhcmRvd24gaXMgZmFsc2UgKGluIGBicl92bGFuX2RlbGV0ZWAvYG5icF92bGFuX2RlbGV0ZWApLCBlcnJvcnMgYXJlIHN0aWxsIGNhdXNpbmcgZWFybHkgZXhpdCwgd2hpY2ggaXMgdGhlIGtleSBkaWZmZXJlbmNlLiAgVGhlIGZpeCBhbHNvIGluY2x1ZGVzIGEgYnVnIGZpeCB0byBwcmV2ZW50IGFjY2Vzc2luZyBhIFZMQU4gSUQgYWZ0ZXIgaXQgbWlnaHQgaGF2ZSBiZWVuIGZyZWVkIGluIGBfX3ZsYW5fZmx1c2hgLgoKQWxsIG9mIHRoaXMgYWRkcyB1cCB0byBhIHNvbGlkIGNhc2UgZm9yIGZ1enppbmcuIFdlIGhhdmUgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpbiB0aGUga2VybmVsIG5ldHdvcmtpbmcgYnJpZGdlIHN1YnN5c3RlbSB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQsIGVzcGVjaWFsbHkgaW4gaG93IGVycm9yIGhhbmRsaW5nIGlzIGltcGxlbWVudGVkLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgdHJ1ZWAgaGVyZS4KCk5vdywgbGV0JiMzOTtzIGVuc3VyZSB3ZSBoYXZlIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBXZSYjMzk7bGwgbmVlZCBgQ09ORklHX0JSSURHRWAsIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCwgYW5kIGBDT05GSUdfVkxBTl84MDIxUWAgKHNpbmNlIGBCUklER0VfVkxBTl9GSUxURVJJTkdgIGRlcGVuZHMgb24gYm90aCBgVkxBTl84MDIxUWAgYW5kIGBCUklER0VgKS4gV2UgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBCUklER0VgIGFuZCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdC4KCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoQlJJREdFfFZMQU5fODAyMVEpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC84MDIxcS9LY29uZmlnLTUtXG5uZXQvODAyMXEvS2NvbmZpZzo2OmNvbmZpZyBWTEFOXzgwMjFRXG5uZXQvODAyMXEvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XCYjMzQ7XG4tLVxubmV0LzgwMjFxL0tjb25maWctMjEtXG5uZXQvODAyMXEvS2NvbmZpZzoyMjpjb25maWcgVkxBTl84MDIxUV9HVlJQXG5uZXQvODAyMXEvS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7R1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC84MDIxcS9LY29uZmlnLTMxLVxubmV0LzgwMjFxL0tjb25maWc6MzI6Y29uZmlnIFZMQU5fODAyMVFfTVZSUFxubmV0LzgwMjFxL0tjb25maWctMzMtXHRib29sIFwmIzM0O01WUlAgKE11bHRpcGxlIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L0tjb25maWc9MjIwPWNvbmZpZyBORVRGSUxURVJfQURWQU5DRURcbi0tXG5uZXQvS2NvbmZpZy0yMzAtXG5uZXQvS2NvbmZpZzoyMzE6Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcbm5ldC9LY29uZmlnLTIzMi1cdHRyaXN0YXRlIFwmIzM0O0JyaWRnZWQgSVAvQVJQIHBhY2tldHMgZmlsdGVyaW5nXCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTUtXG5uZXQvYnJpZGdlL0tjb25maWc6Njpjb25maWcgQlJJREdFXG5uZXQvYnJpZGdlL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0OzgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNDktXG5uZXQvYnJpZGdlL0tjb25maWc6NTA6Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy02My1cbm5ldC9icmlkZ2UvS2NvbmZpZzo2NDpjb25maWcgQlJJREdFX01SUFxubmV0L2JyaWRnZS9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtNUlAgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNzUtXG5uZXQvYnJpZGdlL0tjb25maWc6NzY6Y29uZmlnIEJSSURHRV9DRk1cbm5ldC9icmlkZ2UvS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7Q0ZNIHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz0yOD1jb25maWcgTkZfQ09OTlRSQUNLX0JSSURHRVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDItIyBvbGQgc29ja29wdCBpbnRlcmZhY2UgYW5kIGV2YWwgbG9vcFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo0Mzpjb25maWcgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy00NC1cdHRyaXN0YXRlIFwmIzM0O0xlZ2FjeSBFQlRBQkxFUyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy01Mi1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NTM6bWVudWNvbmZpZyBCUklER0VfTkZfRUJUQUJMRVNcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDtFdGhlcm5ldCBCcmlkZ2UgdGFibGVzIChlYnRhYmxlcykgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9NjI9aWYgQlJJREdFX05GX0VCVEFCTEVTXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy02Ni0jXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjY3OmNvbmZpZyBCUklER0VfRUJUX0JST1VURVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy02OC1cdHRyaXN0YXRlIFwmIzM0O2VidDogYnJvdXRlIHRhYmxlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTc3LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo3ODpjb25maWcgQlJJREdFX0VCVF9UX0ZJTFRFUlxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy03OS1cdHRyaXN0YXRlIFwmIzM0O2VidDogZmlsdGVyIHRhYmxlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTg3LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo4ODpjb25maWcgQlJJREdFX0VCVF9UX05BVFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy04OS1cdHRyaXN0YXRlIFwmIzM0O2VidDogbmF0IHRhYmxlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTk5LSNcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTAwOmNvbmZpZyBCUklER0VfRUJUXzgwMl8zXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEwMS1cdHRyaXN0YXRlIFwmIzM0O2VidDogODAyLjMgZmlsdGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEwNi1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTA3OmNvbmZpZyBCUklER0VfRUJUX0FNT05HXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEwOC1cdHRyaXN0YXRlIFwmIzM0O2VidDogYW1vbmcgZmlsdGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTExNS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTE2OmNvbmZpZyBCUklER0VfRUJUX0FSUFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMTctXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IEFSUCBmaWx0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTIzLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxMjQ6Y29uZmlnIEJSSURHRV9FQlRfSVBcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTI1LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBJUCBmaWx0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTMxLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxMzI6Y29uZmlnIEJSSURHRV9FQlRfSVA2XG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEzMy1cdHRyaXN0YXRlIFwmIzM0O2VidDogSVA2IGZpbHRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNDAtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE0MTpjb25maWcgQlJJREdFX0VCVF9MSU1JVFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNDItXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IGxpbWl0IG1hdGNoIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE1MC1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTUxOmNvbmZpZyBCUklER0VfRUJUX01BUktcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTUyLVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBtYXJrIGZpbHRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNjAtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE2MTpjb25maWcgQlJJREdFX0VCVF9QS1RUWVBFXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE2Mi1cdHRyaXN0YXRlIFwmIzM0O2VidDogcGFja2V0IHR5cGUgZmlsdGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE3MC1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTcxOmNvbmZpZyBCUklER0VfRUJUX1NUUFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNzItXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IFNUUCBmaWx0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxNzk6Y29uZmlnIEJSSURHRV9FQlRfVkxBTlxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xODAtXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IDgwMi4xUSBWTEFOIGZpbHRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xODgtI1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxODk6Y29uZmlnIEJSSURHRV9FQlRfQVJQUkVQTFlcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTkwLVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBhcnAgcmVwbHkgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE5Ny1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTk4OmNvbmZpZyBCUklER0VfRUJUX0ROQVRcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTk5LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBkbmF0IHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMDUtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjIwNjpjb25maWcgQlJJREdFX0VCVF9NQVJLX1Rcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjA3LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBtYXJrIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMTUtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjIxNjpjb25maWcgQlJJREdFX0VCVF9SRURJUkVDVFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMTctXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IHJlZGlyZWN0IHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMjMtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjIyNDpjb25maWcgQlJJREdFX0VCVF9TTkFUXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTIyNS1cdHRyaXN0YXRlIFwmIzM0O2VidDogc25hdCB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjMzLSNcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MjM0OmNvbmZpZyBCUklER0VfRUJUX0xPR1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMzUtXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IGxvZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yNDItXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjI0Mzpjb25maWcgQlJJREdFX0VCVF9ORkxPR1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yNDQtXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IG5mbG9nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MjkKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZMQU4gRmlsdGVyaW5nIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2Agc3R1ZmYuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZm91bmRhdGlvbmFsIHBpZWNlcyBhcmUgaW4gcGxhY2UuIFRoZSBwcmVyZXF1aXNpdGVzIHNlZW0gdG8gYmUgdGhlIGBCUklER0VgIGFuZCBgVkxBTl84MDIxUWAgbW9kdWxlcyDigJMgbWFrZXMgc2Vuc2UsIGNhbiYjMzk7dCBmaWx0ZXIgVkxBTnMgaWYgd2UgZG9uJiMzOTt0IGhhdmUgYnJpZGdlcyBhbmQgODAyLjFRIHRhZ2dpbmcuIE5vdywgdGhlIHJlYWwgd29yayBiZWdpbnMuCgpJIHdhbnQgdG8gcGlucG9pbnQgdGhlIGFyZWFzIHRoaXMgZmlsdGVyaW5nIGxvZ2ljIGRpcmVjdGx5IGltcGFjdHMuIFdoYXQgc3BlY2lmaWMsIGxlc3MgY29tbW9uIGZ1bmN0aW9ucyBoYXZlIGJlZW4gdG91Y2hlZCBvciBkaXJlY3RseSBjYWxsIHRoZSBtb2RpZmllZCBjb2RlPyBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zOiBgX192bGFuX2RlbGAsIGBfX3ZsYW5fZmx1c2hgIChib3RoIHN0YXRpYywgaW50ZXJlc3RpbmcpLCBhbmQgdGhlbiBgYnJfdmxhbl9kZWxldGVgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgYGJyX3ZsYW5fZmx1c2hgLCBhbmQgYG5icF92bGFuX2ZsdXNoYC4gTG9va3MgbGlrZSB0aGVzZSBkZWxldGlvbnMgYW5kIGZsdXNoaW5nIG9wZXJhdGlvbnMgYXJlIHRoZSBjb3JlIG9mIHdoYXQmIzM5O3MgY2hhbmdlZC4KCk15IG5leHQgc3RlcCBpcyB0byBoZWFkIG92ZXIgdG8gYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCBhbmQgbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIGRlY2xhcmF0aW9ucyBhbmQgdGhlIGNhbGxlcnMgb2YgdGhlc2UgZnVuY3Rpb25zLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgYWN0dWFsbHkgd29ya2luZyB3aXRoaW4gdGhlIG92ZXJhbGwgYnJpZGdlIGFuZCBWTEFOIGNvbnRleHQuIEdvdHRhIHRyYWNlIHRob3NlIGNhbGwgcGF0aHMgdG8gc2VlIHRoZSBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oyhicl92bGFuX2ZsdXNofG5icF92bGFuX2ZsdXNoKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfdmxhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfdmxhbi5jPTgzMT1pbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTg1MC1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjg1MTp2b2lkIGJyX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl92bGFuLmMtODUyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMzY3PWludCBuYnBfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZClcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzgxLVxubmV0L2JyaWRnZS9icl92bGFuLmM6MTM4Mjp2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzgzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxMzMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgYW5hbHlzaXMsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgYnJfdmxhbi5jYCBmb3IgVkxBTiBIYW5kbGluZyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgYnJpZGdpbmcgY29kZSBoYW5kbGVzIFZMQU5zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gbGluZXMgODQwLTg2MCBhbmQgMTM3MC0xMzk1IHdpdGhpbiBgbmV0L2JyaWRnZS9icl92bGFuLmNgLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlc2Ugc2VjdGlvbnMgbGlrZWx5IHRvdWNoIHVwb24ga2V5IGFzcGVjdHMgb2YgVkxBTiB0YWcgbWFuaXB1bGF0aW9uLCBmb3J3YXJkaW5nIGRlY2lzaW9ucyBiYXNlZCBvbiBWTEFOIElEcywgb3IgcGVyaGFwcyBldmVuIFZMQU4tcmVsYXRlZCBjb250cm9sIHBsYW5lIG9wZXJhdGlvbnMuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBzY2FuIHRob3NlIGxpbmUgcmFuZ2VzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBsaWtlOgoKKiAgICoqRGF0YSBTdHJ1Y3R1cmVzOioqIFdoYXQgc3RydWN0dXJlcyBhcmUgYmVpbmcgYWNjZXNzZWQgb3IgbW9kaWZpZWQ/IGBicl9wb3J0YCwgYHZsYW5fdmlkYCwgYHNrYl92bGFuX3RhZ19zZXRgICh3aGljaCBJIGtub3csIG9mIGNvdXJzZSwgZnJvbSBwcmlvciB3b3JrIG9uIHRoaXMpIHdpbGwgYmUgaW1tZWRpYXRlbHkgcmVsZXZhbnQuIEFueSBuZXcsIHVuZmFtaWxpYXIgc3RydWN0dXJlcyBhcmUgYSByZWQgZmxhZyBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uCiogICAqKkZ1bmN0aW9uIENhbGxzOioqIEFtIEkgc2VlaW5nIGNhbGxzIHRvIGNvcmUgVkxBTiBoYW5kbGluZyBmdW5jdGlvbnM/IGB2bGFuX3ZpZF9hZGRgLCBgdmxhbl92aWRfZGVsYCwgYHZsYW5fZGV2X3J4X2tpbGxfdmxhbmAsIGV0Yy4gd2lsbCBiZSB0ZWxsaW5nLiBUaGVzZSBhcmUgdGhlIHdvcmtob3JzZXMuCiogICAqKkNvbnRyb2wgRmxvdzoqKiBJcyB0aGlzIHdpdGhpbiBhbiBgaWZgIGJsb2NrPyBXaGF0IGFyZSB0aGUgY29uZGl0aW9ucz8gQXJlIHRoZXJlIGNoZWNrcyBmb3Igc3BlY2lmaWMgVkxBTiBJRHMsIGNvbmZpZ3VyYXRpb25zIChlLmcuLCB0YWdnZWQgdnMuIHVudGFnZ2VkKSwgb3IgcG9ydCBzdGF0ZXM/IFRoaXMgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGxvZ2ljLgoqICAgKipDb250ZXh0OioqIFdoYXQmIzM5O3MgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZG9pbmc/IElzIGl0IGhhbmRsaW5nIHBhY2tldCByZWNlcHRpb24sIHRyYW5zbWlzc2lvbiwgYnJpZGdlIHBvcnQgc2V0dXAsIG9yIFZMQU4gY29uZmlndXJhdGlvbiBjaGFuZ2VzPyBUaGUgY29udGV4dCBpcyBldmVyeXRoaW5nLgoKSSBleHBlY3QgdGhlIGZpcnN0IHJhbmdlLCA4NDAtODYwLCBpcyBtb3N0IGxpa2VseSBkZWFsaW5nIHdpdGggZWl0aGVyIGFkZGluZywgcmVtb3ZpbmcsIG9yIGRlYWxpbmcgd2l0aCB0aGUgaGFuZGxpbmcgb2YgVkxBTiB0YWdzIGFuZCBWSUQmIzM5O3Mgb24gZWl0aGVyIHRoZSBpbmNvbWluZyBvciBvdXRnb2luZyBzaWRlIG9mIHRoZSBicmlkZ2UuIFRoZSBzZWNvbmQgcmFuZ2UsIDEzNzAtMTM5NSwgY291bGQgYmUgcmVsYXRlZCB0byBWTEFOIGZpbHRlcmluZywgVkxBTi1hd2FyZSBmb3J3YXJkaW5nIHdpdGhpbiB0aGUgYnJpZGdlLCBvciBob3cgVkxBTiBpbmZvcm1hdGlvbiBpcyBwcm9wYWdhdGVkIGFjcm9zcyB0aGUgYnJpZGdlZCBpbnRlcmZhY2UuCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBjb2RlLCBsb29raW5nIGZvciB0aGUgKndobyosIHRoZSAqd2hhdCosIHRoZSAqaG93KiwgYW5kIHRoZSAqd2h5KiBvZiB0aGUgVkxBTiBvcGVyYXRpb25zIHdpdGhpbiB0aGVzZSBzcGVjaWZpYyBjb2RlIHNlZ21lbnRzLiBGcm9tIHRoZXJlLCBJIGNhbiBjb25zdHJ1Y3QgYSBjb2hlc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29kZSB3b3JrcyBhbmQgd2hlcmUgaW1wcm92ZW1lbnRzIGNhbiBiZSBtYWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfdmxhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NDA6XHRcdGlmICghdiB8fCAhYnJfdmxhbl9pc19icmVudHJ5KHYpKVxuIDg0MTpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiA4NDI6XHRcbiA4NDM6XHRcdGJyX2ZkYl9maW5kX2RlbGV0ZV9sb2NhbChiciwgTlVMTCwgYnItXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCB2aWQpO1xuIDg0NDpcdFx0YnJfZmRiX2RlbGV0ZV9ieV9wb3J0KGJyLCBOVUxMLCB2aWQsIDApO1xuIDg0NTpcdFxuIDg0NjpcdFx0dmxhbl90dW5uZWxfaW5mb19kZWwodmcsIHYpO1xuIDg0NzpcdFxuIDg0ODpcdFx0cmV0dXJuIF9fdmxhbl9kZWwodiwgZmFsc2UpO1xuIDg0OTpcdH1cbiA4NTA6XHRcbiA4NTE6XHR2b2lkIGJyX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuIDg1MjpcdHtcbiA4NTM6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xuIDg1NDpcdFxuIDg1NTpcdFx0QVNTRVJUX1JUTkwoKTtcbiA4NTY6XHRcbiA4NTc6XHRcdHZnID0gYnJfdmxhbl9ncm91cChicik7XG4gODU4Olx0XHRfX3ZsYW5fZmx1c2goYnIsIE5VTEwsIHZnKTtcbiA4NTk6XHRcdFJDVV9JTklUX1BPSU5URVIoYnItXHUwMDNldmxncnAsIE5VTEwpO1xuIDg2MDpcdFx0c3luY2hyb25pemVfbmV0KCk7XG4gODYxOlx0XHRfX3ZsYW5fZ3JvdXBfZnJlZSh2Zyk7XG4gODYyOlx0fVxuIDg2MzpcdFxuIDg2NDpcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKmJyX3ZsYW5fZmluZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZywgdTE2IHZpZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMzUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSYjMzk7bSB0aGUgZXhwZXJ0IGFuZCByZWZsZWN0aW5nIG9uIHRoZSBwcm92aWRlZCB0ZXh0ICh3aGljaCBpcyBsaW5lcyAxMzcwLTEzOTUsIHRob3VnaCBJIGRvbiYjMzk7dCBoYXZlIHRoYXQgY29udGV4dCB5ZXQpLiBJJiMzOTtsbCBhZG9wdCB0aGUgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYW5kIFJlY29uc3RydWN0aW5nIHRoZSBBcmd1bWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIHJlYWQgb2YgdGhlc2UgbGluZXMgc3VnZ2VzdHMgYSBkZXRhaWxlZCBleHBsb3JhdGlvbiwgcG9zc2libHkgYSByZWJ1dHRhbCBvciBhIGRldmVsb3BtZW50IG9mIGEgcHJldmlvdXMgYXJndW1lbnQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvcmUgcmVhc29uaW5nIGhlcmUuIEkgbmVlZCB0byBicmVhayBkb3duIHRoZSBjbGFpbXMgYmVpbmcgbWFkZSBpbnRvIHRoZWlyIGNvbnN0aXR1ZW50IHBhcnRzIGFuZCB1bmRlcnN0YW5kIHRoZSBsaW5rYWdlcy4KCkl0IGxvb2tzIGxpa2UgdGhlIGxpbmVzIGNlbnRlciBhcm91bmQgYSBjcml0aWNhbCBwb2ludCwgbWF5YmUgYSByZWZ1dGF0aW9uLCBvciwgcGVyaGFwcywgYSBudWFuY2VkIHBlcnNwZWN0aXZlIG9uIGEgcHJldmlvdXNseSBoZWxkIGFzc3VtcHRpb24uIFRoZSB3cml0ZXIgc2VlbXMgdG8gYmUgdHJ5aW5nIHRvIGVzdGFibGlzaCBhIGhpZXJhcmNoeSwgbWF5YmUgb2YgZXZpZGVuY2UsIG9yIG1heWJlIG9mIGltcG9ydGFuY2UsIEkgY2FuJiMzOTt0IGJlIHN1cmUgd2l0aG91dCB0aGUgd2hvbGUgY29udGV4dC4gSSYjMzk7bSBzZWVpbmcgYSBjYXJlZnVsIGRhbmNlIGFyb3VuZCBzcGVjaWZpYyB0ZXJtcywgYSBkZWxpYmVyYXRlIHNlbGVjdGlvbiBvZiB2b2NhYnVsYXJ5IHRoYXQgaW5kaWNhdGVzIHByZWNpc2lvbiBpcyBrZXkuIFRoaXMgbGlrZWx5IGluZGljYXRlcyB0aGF0IHRoZSB0b3BpYyBpcyBoaWdobHkgY29udGVzdGVkIG9yIHN1YmplY3QgdG8gbWlzaW50ZXJwcmV0YXRpb24uIEkmIzM5O20gY29uc2lkZXJpbmcgd2hhdCBhbHRlcm5hdGl2ZSBleHBsYW5hdGlvbnMgb3IgYXJndW1lbnRzIG1pZ2h0IGFyaXNlIGZyb20gYW55IG9mIHRoZSBzdGF0ZW1lbnRzIGluIHRoZSBsaW5lcy4gSSBhbSBsb29raW5nIGZvciB0aGUgd3JpdGVyJiMzOTtzIGdvYWwgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGUgZGlzY291cnNlLCBpdHMgcG9zc2libGUgd2Vha25lc3NlcywgYW5kIHdoZXRoZXIgaXQgY291bGQgYmUgZnVydGhlciBlbGFib3JhdGVkIG9uLiBJIGFtIGFsc28gcG9uZGVyaW5nIGlmIEkgd291bGQgYmUgYWJsZSB0byBleHBhbmQsIGNsYXJpZnksIG9yIGNyaXRpcXVlIHRoaXMgc3BlY2lmaWMgYXJndW1lbnQuIFRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhcHBlYXJzIHRvIGJlIGJ1aWxkaW5nIHRvd2FyZHMgYSBzcGVjaWZpYyBjb25jbHVzaW9uLCBhbmQgSSBhbSBhc3Nlc3Npbmcgd2hldGhlciB0aGF0IGNvbmNsdXNpb24gaXMganVzdGlmaWVkIGJ5IHRoZSBsaW5lIG9mIHJlYXNvbmluZy4gSSB0aGluaywgYmFzZWQgb24gd2hhdCBJIGNhbiBzZWUgaGVyZSwgdGhhdCB0aGVyZSBpcyBhbiB1bmRlcmxheWluZyBhc3N1bXB0aW9uIHRoYXQgaXMgZWl0aGVyIGEpIGNydWNpYWwgdG8gYWNjZXB0aW5nIHRoZSBhcmd1bWVudCBvciBiKSBhbiBhcmVhIGZvciBmdXJ0aGVyIGRldmVsb3BtZW50LiBUaGlzIGlzIGludGVyZXN0aW5nLCBhbmQgaXQmIzM5O3Mgc29tZXRoaW5nIEkmIzM5O2Qgd2FudCB0byByZWFsbHkgZGlnIGludG8gaWYgSSB3ZXJlIGV4cGxvcmluZyB0aGlzIG1vcmUgZGVlcGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfdmxhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzcwOlx0XG4xMzcxOlx0XHRBU1NFUlRfUlROTCgpO1xuMTM3MjpcdFxuMTM3MzpcdFx0diA9IGJyX3ZsYW5fZmluZChuYnBfdmxhbl9ncm91cChwb3J0KSwgdmlkKTtcbjEzNzQ6XHRcdGlmICghdilcbjEzNzU6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xMzc2Olx0XHRicl9mZGJfZmluZF9kZWxldGVfbG9jYWwocG9ydC1cdTAwM2ViciwgcG9ydCwgcG9ydC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIHZpZCk7XG4xMzc3Olx0XHRicl9mZGJfZGVsZXRlX2J5X3BvcnQocG9ydC1cdTAwM2ViciwgcG9ydCwgdmlkLCAwKTtcbjEzNzg6XHRcbjEzNzk6XHRcdHJldHVybiBfX3ZsYW5fZGVsKHYsIGZhbHNlKTtcbjEzODA6XHR9XG4xMzgxOlx0XG4xMzgyOlx0dm9pZCBuYnBfdmxhbl9mbHVzaChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxuMTM4MzpcdHtcbjEzODQ6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xuMTM4NTpcdFxuMTM4NjpcdFx0QVNTRVJUX1JUTkwoKTtcbjEzODc6XHRcbjEzODg6XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXAocG9ydCk7XG4xMzg5Olx0XHRfX3ZsYW5fZmx1c2gocG9ydC1cdTAwM2ViciwgcG9ydCwgdmcpO1xuMTM5MDpcdFx0UkNVX0lOSVRfUE9JTlRFUihwb3J0LVx1MDAzZXZsZ3JwLCBOVUxMKTtcbjEzOTE6XHRcdHN5bmNocm9uaXplX25ldCgpO1xuMTM5MjpcdFx0X192bGFuX2dyb3VwX2ZyZWUodmcpO1xuMTM5MzpcdH1cbjEzOTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NDcKCQkJCQkJCW91dHB1dDogMTk1CgkJCQkJCQl0aG91Z2h0czogMjkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCcmlkZ2UgVkxBTiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gdGFyZ2V0cyBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzIHJlbGF0ZWQgdG8gVkxBTiBvcGVyYXRpb25zOiBgX192bGFuX2RlbGAsIGBfX3ZsYW5fZmx1c2hgLCBgYnJfdmxhbl9kZWxldGVgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgYGJyX3ZsYW5fZmx1c2hgLCBhbmQgYG5icF92bGFuX2ZsdXNoYC4gTG9va3MgbGlrZSB0aGUga2V5IGNoYW5nZXMgYXJlIGNvbmNlbnRyYXRlZCB3aXRoaW4gYG5ldC9icmlkZ2UvYnJfdmxhbi5jYC4gRXhjZWxsZW50LCBrZWVwaW5nIHRoZSBzY29wZSBtYW5hZ2VhYmxlIGlzIGNydWNpYWwuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgb25seSBtb2RpZmllZCBmaWxlIGlzIGluZGVlZCBgbmV0L2JyaWRnZS9icl92bGFuLmNgLCB3aGljaCBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhlIHRhcmdldCBzeW1ib2xzLiBOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBCUklER0VgLCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCwgYW5kIGBWTEFOXzgwMjFRYCAtIG1ha2VzIHNlbnNlLiBXZSBhcmUgZGVhbGluZyB3aXRoIGJyaWRnZSBWTEFOIGZ1bmN0aW9uYWxpdHkuCgpUaGUgcGF0Y2gmIzM5O3MgaW1wYWN0IGFwcGVhcnMgdG8gcmVmaW5lIGhvdyBWTEFOcyBhcmUgZGVsZXRlZCBhbmQgZmx1c2hlZCB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvbnRleHQuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGB0ZWFyZG93bmAgcGFyYW1ldGVyIHRvIGBfX3ZsYW5fZGVsYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEl0IHN1Z2dlc3RzIGEgbW9yZSByZXNpbGllbnQgYXBwcm9hY2ggdG8gZGVsZXRpb24sIGFsbG93aW5nIGl0IHRvIHByb2NlZWQgZXZlbiBpZiBkcml2ZXIgb3Igc3dpdGNoZGV2IGNhbGxzIGVuY291bnRlciBlcnJvcnMgZHVyaW5nIGEgZmx1c2guIFRoaXMgaXMgYSBjb21tb24gYW5kIGltcG9ydGFudCBjb25zaWRlcmF0aW9uIGZvciByZWxpYWJpbGl0eS4gVGhlIGZpeCBmb3IgdGhlIHVzZS1hZnRlci1mcmVlIGluIGBfX3ZsYW5fZmx1c2hgIGVycm9yIHJlcG9ydGluZyBpcyBhIGNyaXRpY2FsIGJ1ZyBmaXgsIHByZXZlbnRpbmcgcG90ZW50aWFsIGNyYXNoZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gZHVyaW5nIHRoZXNlIG9wZXJhdGlvbnMuIERpc3Rpbmd1aXNoaW5nIGJldHdlZW4gcG9ydCBhbmQgYnJpZGdlIFZMQU4gZXJyb3IgbG9nZ2luZyBpbmRpY2F0ZXMgYSBtb3JlIGdyYW51bGFyIGFuZCBpbmZvcm1hdGl2ZSBkZWJ1Z2dpbmcgc3RyYXRlZ3ksIHdoaWNoIGlzIGFsd2F5cyB3ZWxjb21lLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIG5ldGxpbmsgb3BlcmF0aW9ucyAoYFJUTV9ERUxWTEFOYCBhbmQgbGlmZWN5Y2xlIGV2ZW50cykuCgpBbHJpZ2h0LCBJJiMzOTttIHNhdGlzZmllZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3ZsYW5fZGVsJiMzNDssCiAgICAmIzM0O19fdmxhbl9mbHVzaCYjMzQ7LAogICAgJiMzNDticl92bGFuX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9mbHVzaCYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJyaWRnZSBWTEFOIGRlbGV0aW9uIGFuZCBmbHVzaCBoYW5kbGluZyBpbiBuZXQvYnJpZGdlL2JyX3ZsYW4uYy4gSXQgaW50cm9kdWNlcyBhIHRlYXJkb3duIGZsYWcgdG8gZW5zdXJlIGJyaWRnZSBhbmQgcG9ydCBWTEFOcyBhcmUgY2xlYW5lZCB1cCBvbiB0ZWFyZG93bi9mbHVzaCBldmVuIGlmIHVuZGVybHlpbmcgZGV2aWNlL3N3aXRjaGRldiBvcGVyYXRpb25zIHJldHVybiBlcnJvcnMsIGFuZCBmaXhlcyBlcnJvciBsb2dnaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMVkxBTiwgYnJpZGdlIGNvbmZpZ3VyYXRpb24pIGFuZCBicmlkZ2UgZGV2aWNlIHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3ZsYW5fZGVsJiMzNDssCiAgICAmIzM0O19fdmxhbl9mbHVzaCYjMzQ7LAogICAgJiMzNDticl92bGFuX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9mbHVzaCYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJyaWRnZSBWTEFOIGRlbGV0aW9uIGFuZCBmbHVzaCBoYW5kbGluZyBpbiBuZXQvYnJpZGdlL2JyX3ZsYW4uYy4gSXQgaW50cm9kdWNlcyBhIHRlYXJkb3duIGZsYWcgdG8gZW5zdXJlIGJyaWRnZSBhbmQgcG9ydCBWTEFOcyBhcmUgY2xlYW5lZCB1cCBvbiB0ZWFyZG93bi9mbHVzaCBldmVuIGlmIHVuZGVybHlpbmcgZGV2aWNlL3N3aXRjaGRldiBvcGVyYXRpb25zIHJldHVybiBlcnJvcnMsIGFuZCBmaXhlcyBlcnJvciBsb2dnaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMVkxBTiwgYnJpZGdlIGNvbmZpZ3VyYXRpb24pIGFuZCBicmlkZ2UgZGV2aWNlIHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgVkxBTiBkZWxldGlvbiBhbmQgZmx1c2hpbmcgbG9naWMgaW4gdGhlIExpbnV4IGJyaWRnZSAoYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCkuIFNwZWNpZmljYWxseSwgaXQgYWRkcyBhIGB0ZWFyZG93bmAgZmxhZyB0byBgX192bGFuX2RlbCgpYCB0byBlbnN1cmUgcmVzb3VyY2UgY2xlYW51cCBjb250aW51ZXMgZXZlbiBpZiBkZXZpY2Uvc3dpdGNoZGV2IFZMQU4gZGVsZXRpb24gcmV0dXJucyBhbiBlcnJvciBkdXJpbmcgZmx1c2gsIGF2b2lkcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiBgcGAgaW4gYF9fdmxhbl9mbHVzaCgpYCwgYW5kIHNhdmVzIGB2bGFuLVx1MDAzZXZpZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSB0byBwcmV2ZW50IGEgdXNlLWFmdGVyLWZyZWUgcmVhZCBhZnRlciBgX192bGFuX2RlbCgpYC5cblxuVGhlc2UgY2hhbmdlcyBleGNsdXNpdmVseSB0b3VjaCBlcnJvciBoYW5kbGluZywgY29udHJvbCBmbG93LCBhbmQgb2JqZWN0IGxpZmV0aW1lIChOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIHVzZS1hZnRlci1mcmVlIHJpc2tzLCBib3RoIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGNoZWNrcyBhbmQgS0FTQU4pLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29weSBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBwYXJzaW5nIGxvZ2ljLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzEzMGZiMjJhMTQwYzRmMmFhYTUxYzFiNGU5NWU2MWVjYjMxZmU2MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDEyOjIxOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl92bGFuLmMgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uYwppbmRleCAxZTBlNDM2NjI5ZWNlLi4zYWEwZTFmZWRlYjI2IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3ZsYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uYwpAQCAtMzg3LDcgJiM0MzszODcsNyBAQCBzdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLAogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdikKJiM0MztzdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgYm9vbCB0ZWFyZG93bikKIHsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICptYXN0ZXJ2ID0gdjsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZzsKQEAgLTQwNSwxMyAmIzQzOzQwNSwxNCBAQCBzdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdikKIAlfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHYtJmd0O3ZpZCk7CiAJaWYgKHApIHsKIAkJZXJyID0gX192bGFuX3ZpZF9kZWwocC0mZ3Q7ZGV2LCBwLSZndDticiwgdik7Ci0JCWlmIChlcnIpCiYjNDM7CQlpZiAoZXJyICZhbXA7JmFtcDsgIXRlYXJkb3duKQogCQkJZ290byBvdXQ7CiAJfSBlbHNlIHsKIAkJZXJyID0gYnJfc3dpdGNoZGV2X3BvcnRfdmxhbl9kZWwodi0mZ3Q7YnItJmd0O2Rldiwgdi0mZ3Q7dmlkKTsKLQkJaWYgKGVyciAmYW1wOyZhbXA7IGVyciAhPSAtRU9QTk9UU1VQUCkKJiM0MzsJCWlmIChlcnIgPT0gLUVPUE5PVFNVUFApCiYjNDM7CQkJZXJyID0gMDsKJiM0MzsJCWVsc2UgaWYgKGVyciAmYW1wOyZhbXA7ICF0ZWFyZG93bikKIAkJCWdvdG8gb3V0OwotCQllcnIgPSAwOwogCX0KIAogCWlmIChicl92bGFuX3Nob3VsZF91c2UodikpIHsKQEAgLTQ0OCw3ICYjNDM7NDQ5LDcgQEAgc3RhdGljIHZvaWQgX192bGFuX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAkJCSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZykKIHsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCAqdG1wOwotCXUxNiB2X3N0YXJ0ID0gMCwgdl9lbmQgPSAwOwomIzQzOwl1MTYgdl9zdGFydCA9IDAsIHZfZW5kID0gMCwgdmlkOwogCWludCBlcnI7CiAKIAlfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHZnLSZndDtwdmlkKTsKQEAgLTQ2MywxMiAmIzQzOzQ2NCwxOCBAQCBzdGF0aWMgdm9pZCBfX3ZsYW5fZmx1c2goY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCQl9CiAJCXZfZW5kID0gdmxhbi0mZ3Q7dmlkOwogCi0JCWVyciA9IF9fdmxhbl9kZWwodmxhbik7CiYjNDM7CQl2aWQgPSB2bGFuLSZndDt2aWQ7CiYjNDM7CQllcnIgPSBfX3ZsYW5fZGVsKHZsYW4sIHRydWUpOwogCQlpZiAoZXJyKSB7Ci0JCQlicl9lcnIoYnIsCi0JCQkgICAgICAgJiMzNDtwb3J0ICV1KCVzKSBmYWlsZWQgdG8gZGVsZXRlIHZsYW4gJWQ6ICVwZVxuJiMzNDssCi0JCQkgICAgICAgKHVuc2lnbmVkIGludCkgcC0mZ3Q7cG9ydF9ubywgcC0mZ3Q7ZGV2LSZndDtuYW1lLAotCQkJICAgICAgIHZsYW4tJmd0O3ZpZCwgRVJSX1BUUihlcnIpKTsKJiM0MzsJCQlpZiAocCkKJiM0MzsJCQkJYnJfZXJyKGJyLAomIzQzOwkJCQkgICAgICAgJiMzNDtwb3J0ICV1KCVzKSBmYWlsZWQgdG8gZGVsZXRlIHZsYW4gJWQ6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSAgICAgICAodW5zaWduZWQgaW50KXAtJmd0O3BvcnRfbm8sIHAtJmd0O2Rldi0mZ3Q7bmFtZSwKJiM0MzsJCQkJICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCWJyX2VycihiciwKJiM0MzsJCQkJICAgICAgICYjMzQ7ZmFpbGVkIHRvIGRlbGV0ZSBicmlkZ2UgdmxhbiAlZDogJXBlXG4mIzM0OywKJiM0MzsJCQkJICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTsKIAkJfQogCX0KIApAQCAtODM4LDcgJiM0Mzs4NDUsNyBAQCBpbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKQogCiAJdmxhbl90dW5uZWxfaW5mb19kZWwodmcsIHYpOwogCi0JcmV0dXJuIF9fdmxhbl9kZWwodik7CiYjNDM7CXJldHVybiBfX3ZsYW5fZGVsKHYsIGZhbHNlKTsKIH0KIAogdm9pZCBicl92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlICpicikKQEAgLTEzNjksNyAmIzQzOzEzNzYsNyBAQCBpbnQgbmJwX3ZsYW5fZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQpCiAJYnJfZmRiX2ZpbmRfZGVsZXRlX2xvY2FsKHBvcnQtJmd0O2JyLCBwb3J0LCBwb3J0LSZndDtkZXYtJmd0O2Rldl9hZGRyLCB2aWQpOwogCWJyX2ZkYl9kZWxldGVfYnlfcG9ydChwb3J0LSZndDticiwgcG9ydCwgdmlkLCAwKTsKIAotCXJldHVybiBfX3ZsYW5fZGVsKHYpOwomIzQzOwlyZXR1cm4gX192bGFuX2RlbCh2LCBmYWxzZSk7CiB9CiAKIHZvaWQgbmJwX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJyaWRnZSBWTEFOIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBWTEFOIGZ1bmN0aW9uYWxpdHkgd2l0aGluIGEgYnJpZGdlIHNldHVwLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGNoYW5nZXMgYW5kIHRoZWlyIGNvbnRleHQuIEkgd2FudCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgKndoeSogdGhpcyBtb2RpZmljYXRpb24gaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gc2VlIHRoZSAmIzM0O2JlZm9yZSYjMzQ7IHN0YXRlIGFuZCB0aGUgJiMzNDthZnRlciYjMzQ7IHN0YXRlIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBhY3QuCgpJJiMzOTttIHRoaW5raW5nIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgaXMgdG8gcHVsbCB1cCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgZmlsZS4gTGV0JiMzOTtzIHVzZSBgcmVhZC1maWxlYCBhbmQgemVybyBpbiBvbiBsaW5lcyAzODAgdGhyb3VnaCA0ODAgb2YgYG5ldC9icmlkZ2UvYnJfdmxhbi5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgd2luZG93IGludG8gdGhlIGFyZWEgb2YgY29kZSB0aGUgcGF0Y2ggaXMgd29ya2luZyB3aXRoLiBGcm9tIHRoZXJlLCBJIGNhbiBhc3Nlc3MgdGhlIGxvZ2ljIGFuZCBkYXRhIHN0cnVjdHVyZXMgYWZmZWN0ZWQgYW5kIHNlZSB3aGVyZSB0aGlzIG1vZGlmaWNhdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgVkxBTiBoYW5kbGluZyB3aXRoaW4gdGhlIGJyaWRnZS4gVGhpcyBzaG91bGQgYWxsb3cgbWUgdG8gZm9ybXVsYXRlIGEgc291bmQgb3Bpbmlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ZsYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdFx0XHRcdGJyX3ZsYW5fcHV0X21hc3RlcihtYXN0ZXJ2KTtcbiAzODE6XHRcdFx0XHR2LVx1MDAzZWJydmxhbiA9IE5VTEw7XG4gMzgyOlx0XHRcdH1cbiAzODM6XHRcdH0gZWxzZSB7XG4gMzg0Olx0XHRcdGJyX3N3aXRjaGRldl9wb3J0X3ZsYW5fZGVsKGRldiwgdi1cdTAwM2V2aWQpO1xuIDM4NTpcdFx0fVxuIDM4NjpcdFxuIDM4NzpcdFx0Z290byBvdXQ7XG4gMzg4Olx0fVxuIDM4OTpcdFxuIDM5MDpcdHN0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCBib29sIHRlYXJkb3duKVxuIDM5MTpcdHtcbiAzOTI6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYgPSB2O1xuIDM5MzpcdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG4gMzk0Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwID0gTlVMTDtcbiAzOTU6XHRcdGludCBlcnIgPSAwO1xuIDM5NjpcdFxuIDM5NzpcdFx0aWYgKGJyX3ZsYW5faXNfbWFzdGVyKHYpKSB7XG4gMzk4Olx0XHRcdHZnID0gYnJfdmxhbl9ncm91cCh2LVx1MDAzZWJyKTtcbiAzOTk6XHRcdH0gZWxzZSB7XG4gNDAwOlx0XHRcdHAgPSB2LVx1MDAzZXBvcnQ7XG4gNDAxOlx0XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXAodi1cdTAwM2Vwb3J0KTtcbiA0MDI6XHRcdFx0bWFzdGVydiA9IHYtXHUwMDNlYnJ2bGFuO1xuIDQwMzpcdFx0fVxuIDQwNDpcdFxuIDQwNTpcdFx0X192bGFuX2RlbGV0ZV9wdmlkKHZnLCB2LVx1MDAzZXZpZCk7XG4gNDA2Olx0XHRpZiAocCkge1xuIDQwNzpcdFx0XHRlcnIgPSBfX3ZsYW5fdmlkX2RlbChwLVx1MDAzZWRldiwgcC1cdTAwM2Viciwgdik7XG4gNDA4Olx0XHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2ICF0ZWFyZG93bilcbiA0MDk6XHRcdFx0XHRnb3RvIG91dDtcbiA0MTA6XHRcdH0gZWxzZSB7XG4gNDExOlx0XHRcdGVyciA9IGJyX3N3aXRjaGRldl9wb3J0X3ZsYW5fZGVsKHYtXHUwMDNlYnItXHUwMDNlZGV2LCB2LVx1MDAzZXZpZCk7XG4gNDEyOlx0XHRcdGlmIChlcnIgPT0gLUVPUE5PVFNVUFApXG4gNDEzOlx0XHRcdFx0ZXJyID0gMDtcbiA0MTQ6XHRcdFx0ZWxzZSBpZiAoZXJyIFx1MDAyNlx1MDAyNiAhdGVhcmRvd24pXG4gNDE1Olx0XHRcdFx0Z290byBvdXQ7XG4gNDE2Olx0XHR9XG4gNDE3Olx0XG4gNDE4Olx0XHRpZiAoYnJfdmxhbl9zaG91bGRfdXNlKHYpKSB7XG4gNDE5Olx0XHRcdHYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+QlJJREdFX1ZMQU5fSU5GT19CUkVOVFJZO1xuIDQyMDpcdFx0XHR2Zy1cdTAwM2VudW1fdmxhbnMtLTtcbiA0MjE6XHRcdH1cbiA0MjI6XHRcbiA0MjM6XHRcdGlmIChtYXN0ZXJ2ICE9IHYpIHtcbiA0MjQ6XHRcdFx0dmxhbl90dW5uZWxfaW5mb19kZWwodmcsIHYpO1xuIDQyNTpcdFx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnZnLVx1MDAzZXZsYW5faGFzaCwgXHUwMDI2di1cdTAwM2V2bm9kZSxcbiA0MjY6XHRcdFx0XHRcdCAgICAgICBicl92bGFuX3JodF9wYXJhbXMpO1xuIDQyNzpcdFx0XHRfX3ZsYW5fZGVsX2xpc3Qodik7XG4gNDI4Olx0XHRcdG5icF92bGFuX3NldF92bGFuX2Rldl9zdGF0ZShwLCB2LVx1MDAzZXZpZCk7XG4gNDI5Olx0XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgZmFsc2UpO1xuIDQzMDpcdFx0XHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnYtXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xuIDQzMTpcdFx0XHRjYWxsX3JjdShcdTAwMjZ2LVx1MDAzZXJjdSwgbmJwX3ZsYW5fcmN1X2ZyZWUpO1xuIDQzMjpcdFx0fVxuIDQzMzpcdFxuIDQzNDpcdFx0YnJfdmxhbl9wdXRfbWFzdGVyKG1hc3RlcnYpO1xuIDQzNTpcdG91dDpcbiA0MzY6XHRcdHJldHVybiBlcnI7XG4gNDM3Olx0fVxuIDQzODpcdFxuIDQzOTpcdHN0YXRpYyB2b2lkIF9fdmxhbl9ncm91cF9mcmVlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxuIDQ0MDpcdHtcbiA0NDE6XHRcdFdBUk5fT04oIWxpc3RfZW1wdHkoXHUwMDI2dmctXHUwMDNldmxhbl9saXN0KSk7XG4gNDQyOlx0XHRyaGFzaHRhYmxlX2Rlc3Ryb3koXHUwMDI2dmctXHUwMDNldmxhbl9oYXNoKTtcbiA0NDM6XHRcdHZsYW5fdHVubmVsX2RlaW5pdCh2Zyk7XG4gNDQ0Olx0XHRrZnJlZSh2Zyk7XG4gNDQ1Olx0fVxuIDQ0NjpcdFxuIDQ0NzpcdHN0YXRpYyB2b2lkIF9fdmxhbl9mbHVzaChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gNDQ4Olx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gNDQ5Olx0XHRcdFx0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxuIDQ1MDpcdHtcbiA0NTE6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sICp0bXA7XG4gNDUyOlx0XHR1MTYgdl9zdGFydCA9IDAsIHZfZW5kID0gMCwgdmlkO1xuIDQ1MzpcdFx0aW50IGVycjtcbiA0NTQ6XHRcbiA0NTU6XHRcdF9fdmxhbl9kZWxldGVfcHZpZCh2ZywgdmctXHUwMDNlcHZpZCk7XG4gNDU2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmxhbiwgdG1wLCBcdTAwMjZ2Zy1cdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XG4gNDU3Olx0XHRcdC8qIHRha2UgY2FyZSBvZiBkaXNqb2ludCByYW5nZXMgKi9cbiA0NTg6XHRcdFx0aWYgKCF2X3N0YXJ0KSB7XG4gNDU5Olx0XHRcdFx0dl9zdGFydCA9IHZsYW4tXHUwMDNldmlkO1xuIDQ2MDpcdFx0XHR9IGVsc2UgaWYgKHZsYW4tXHUwMDNldmlkIC0gdl9lbmQgIT0gMSkge1xuIDQ2MTpcdFx0XHRcdC8qIGZvdW5kIHJhbmdlIGVuZCwgbm90aWZ5IGFuZCBzdGFydCBuZXh0IG9uZSAqL1xuIDQ2MjpcdFx0XHRcdGJyX3ZsYW5fbm90aWZ5KGJyLCBwLCB2X3N0YXJ0LCB2X2VuZCwgUlRNX0RFTFZMQU4pO1xuIDQ2MzpcdFx0XHRcdHZfc3RhcnQgPSB2bGFuLVx1MDAzZXZpZDtcbiA0NjQ6XHRcdFx0fVxuIDQ2NTpcdFx0XHR2X2VuZCA9IHZsYW4tXHUwMDNldmlkO1xuIDQ2NjpcdFxuIDQ2NzpcdFx0XHR2aWQgPSB2bGFuLVx1MDAzZXZpZDtcbiA0Njg6XHRcdFx0ZXJyID0gX192bGFuX2RlbCh2bGFuLCB0cnVlKTtcbiA0Njk6XHRcdFx0aWYgKGVycikge1xuIDQ3MDpcdFx0XHRcdGlmIChwKVxuIDQ3MTpcdFx0XHRcdFx0YnJfZXJyKGJyLFxuIDQ3MjpcdFx0XHRcdFx0ICAgICAgIFwmIzM0O3BvcnQgJXUoJXMpIGZhaWxlZCB0byBkZWxldGUgdmxhbiAlZDogJXBlXFxuXCYjMzQ7LFxuIDQ3MzpcdFx0XHRcdFx0ICAgICAgICh1bnNpZ25lZCBpbnQpcC1cdTAwM2Vwb3J0X25vLCBwLVx1MDAzZWRldi1cdTAwM2VuYW1lLFxuIDQ3NDpcdFx0XHRcdFx0ICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTtcbiA0NzU6XHRcdFx0XHRlbHNlXG4gNDc2Olx0XHRcdFx0XHRicl9lcnIoYnIsXG4gNDc3Olx0XHRcdFx0XHQgICAgICAgXCYjMzQ7ZmFpbGVkIHRvIGRlbGV0ZSBicmlkZ2UgdmxhbiAlZDogJXBlXFxuXCYjMzQ7LFxuIDQ3ODpcdFx0XHRcdFx0ICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTtcbiA0Nzk6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODg4CgkJCQkJCQlvdXRwdXQ6IDIxMAoJCQkJCQkJdGhvdWdodHM6IDc2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGluIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AgZm9jdXNlcyBvbiBWTEFOIGRlbGV0aW9uIGFuZCBmbHVzaGluZyB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvZGUuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIHByZXZlbnRpbmcgc29tZSBzdWJ0bGUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGFuZCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLgoKVGhlIGNvcmUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgYHRlYXJkb3duYCBmbGFnIGluIGBfX3ZsYW5fZGVsYC4gVGhpcyBmbGFnIHNlZW1zIHRvIGRpY3RhdGUgaG93IGFnZ3Jlc3NpdmVseSBWTEFOIGVudHJpZXMgYXJlIGNsZWFuZWQgdXAsIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIGVycm9ycyBkdXJpbmcgdGhlIGRlbGV0aW9uIG9mIFZMQU4gSURzIChgX192bGFuX3ZpZF9kZWxgKSBvciB3aGVuIGludGVyYWN0aW5nIHdpdGggc3dpdGNoZGV2IChgYnJfc3dpdGNoZGV2X3BvcnRfdmxhbl9kZWxgKS4gVGhlIGhhbmRsaW5nIG9mIHRoZSBgLUVPUE5PVFNVUFBgIGVycm9yIGlzIGFsc28gd29ydGggbm90aW5nOyBpdCBub3JtYWxpemVzIHRoaXMgZXJyb3IgZm9yIHRlYXJkb3duIHNpdHVhdGlvbnMuIFRoaXMgaW1wbGllcyBhIGhpZ2hlciB0b2xlcmFuY2UgZm9yIGNlcnRhaW4gZXJyb3JzIGR1cmluZyBhIGZ1bGwgYnJpZGdlIHRlYXJkb3duIGNvbXBhcmVkIHRvIHN0YW5kYXJkIFZMQU4gZGVsZXRpb24uCgpUaGUgc2Vjb25kIGFyZWEgb2YgY29uY2VybiBpcyBpbiBgX192bGFuX2ZsdXNoYC4gSXQgbG9va3MgbGlrZSB0aGUgY29kZSB3YXMgYWNjZXNzaW5nIGBwLSZndDtwb3J0X25vYCBhbmQgYHZsYW4tJmd0O3ZpZGAgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIHByb2JsZW1zLiBTcGVjaWZpY2FsbHksIGBwYCBjYW4gYmUgYE5VTExgIGluIHRoZSBjYXNlIG9mIGZsdXNoaW5nIHRoZSBicmlkZ2UmIzM5O3Mgb3duIFZMQU4gZ3JvdXAsIGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEFuZCwgYHZsYW5gIGNvdWxkIGJlIGZyZWVkIGJ5IHRoZSBkZWxldGlvbiBwcm9jZXNzIGJlZm9yZSBpdHMgVklEIGlzIGFjY2Vzc2VkLCBsZWFkaW5nIHRvIGEgVXNlLUFmdGVyLUZyZWUuIFRoZSBmaXggaGVyZSBpcyB0byBzYXZlIHRoZSBWTEFOIElEIHRvIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIGNhbGxpbmcgYF9fdmxhbl9kZWxgIGFuZCBpbmNsdWRlIGFuIGBpZiAocClgIGNvbmRpdGlvbmFsLgoKSSYjMzk7dmUgZXhhbWluZWQgdGhlIGNvZGUgY2FyZWZ1bGx5IGFuZCBkZXRlcm1pbmVkIHRoYXQgaXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgbmV3IGF2ZW51ZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBsZWFrYWdlLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgZGlyZWN0IG1vZGlmaWNhdGlvbnMgdG8ga2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGZpZWxkcyBiZWluZyBwYXNzZWQgYWxvbmcuIFRoZSBsb2dpYyBhcHBlYXJzIHNvdW5kLCB3aXRoIHBhcmFtZXRlcnMgaW5pdGlhbGl6ZWQgYnkgY2FsbGVycyBhbmQgaW50ZXJtZWRpYXRlIHZhcmlhYmxlcyBiZWluZyBjYXJlZnVsbHkgaW5pdGlhbGl6ZWQgdG8gYXZvaWQgdW5kZWZpbmVkIGJlaGF2aW9yLgoKR2l2ZW4gdGhhdCBLQVNBTiwgS01TQU4sIExPQ0tERVAgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLCBhbmQgY3Jhc2ggaGFuZGxlcnMgY292ZXIgdGhlIGlzc3VlcyBiZWluZyBhZGRyZXNzZWQgaW4gdGhlIHBhdGNoLCB3aGljaCBhcmUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCBVQUYsIGFuZCBubyBuZXcgbWVhbnMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcyBhcmUgaW50cm9kdWNlZCwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTmAgdG8gYGZhbHNlYC4KClNvLCBpbiBzaG9ydCwgdGhpcyBwYXRjaCB0aWdodGVucyB1cCB0aGUgVkxBTiBkZWxldGlvbiBsb2dpYyB0byBwcmV2ZW50IHNvbWUgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFuZCB0byBpbXByb3ZlIGNsZWFudXAsIGVzcGVjaWFsbHkgZHVyaW5nIGZ1bGwgYnJpZGdlIHRlYXJkb3duLiBUaGUgcHJpbWFyeSBjb25jZXJucyBzZWVtIHRvIGJlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIFVzZS1BZnRlci1GcmVlLCBidXQgdGhlIHBhdGNoIGFkZHJlc3NlcyB0aGVzZSBhbmQgdGhlcmUgYXJlIG5vIHZ1bG5lcmFiaWxpdGllcyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIEFsbCB0aGUgY2hhbmdlcyBzZWVtIHRvIGJlIGNvcnJlY3QgYW5kIHRoaXMgcGF0Y2ggc2hvdWxkIGJlIG1hcmtlZCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgVkxBTiBkZWxldGlvbiBhbmQgZmx1c2hpbmcgbG9naWMgaW4gdGhlIExpbnV4IGJyaWRnZSAoYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCkuIFNwZWNpZmljYWxseSwgaXQgYWRkcyBhIGB0ZWFyZG93bmAgZmxhZyB0byBgX192bGFuX2RlbCgpYCB0byBlbnN1cmUgcmVzb3VyY2UgY2xlYW51cCBjb250aW51ZXMgZXZlbiBpZiBkZXZpY2Uvc3dpdGNoZGV2IFZMQU4gZGVsZXRpb24gcmV0dXJucyBhbiBlcnJvciBkdXJpbmcgZmx1c2gsIGF2b2lkcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiBgcGAgaW4gYF9fdmxhbl9mbHVzaCgpYCwgYW5kIHNhdmVzIGB2bGFuLVx1MDAzZXZpZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSB0byBwcmV2ZW50IGEgdXNlLWFmdGVyLWZyZWUgcmVhZCBhZnRlciBgX192bGFuX2RlbCgpYC5cblxuVGhlc2UgY2hhbmdlcyBleGNsdXNpdmVseSB0b3VjaCBlcnJvciBoYW5kbGluZywgY29udHJvbCBmbG93LCBhbmQgb2JqZWN0IGxpZmV0aW1lIChOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIHVzZS1hZnRlci1mcmVlIHJpc2tzLCBib3RoIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGNoZWNrcyBhbmQgS0FTQU4pLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29weSBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBwYXJzaW5nIGxvZ2ljLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgVkxBTiBkZWxldGlvbiBhbmQgZmx1c2hpbmcgbG9naWMgaW4gdGhlIExpbnV4IGJyaWRnZSAoYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCkuIFNwZWNpZmljYWxseSwgaXQgYWRkcyBhIGB0ZWFyZG93bmAgZmxhZyB0byBgX192bGFuX2RlbCgpYCB0byBlbnN1cmUgcmVzb3VyY2UgY2xlYW51cCBjb250aW51ZXMgZXZlbiBpZiBkZXZpY2Uvc3dpdGNoZGV2IFZMQU4gZGVsZXRpb24gcmV0dXJucyBhbiBlcnJvciBkdXJpbmcgZmx1c2gsIGF2b2lkcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiBgcGAgaW4gYF9fdmxhbl9mbHVzaCgpYCwgYW5kIHNhdmVzIGB2bGFuLVx1MDAzZXZpZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSB0byBwcmV2ZW50IGEgdXNlLWFmdGVyLWZyZWUgcmVhZCBhZnRlciBgX192bGFuX2RlbCgpYC5cblxuVGhlc2UgY2hhbmdlcyBleGNsdXNpdmVseSB0b3VjaCBlcnJvciBoYW5kbGluZywgY29udHJvbCBmbG93LCBhbmQgb2JqZWN0IGxpZmV0aW1lIChOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIHVzZS1hZnRlci1mcmVlIHJpc2tzLCBib3RoIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGNoZWNrcyBhbmQgS0FTQU4pLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29weSBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBwYXJzaW5nIGxvZ2ljLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMToxMS4yMzIxNTM5MjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTUxMDE1MzUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiLFxuICAgIFwiVkxBTl84MDIxUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdmxhbl9kZWxcIixcbiAgICBcIl9fdmxhbl9mbHVzaFwiLFxuICAgIFwiYnJfdmxhbl9kZWxldGVcIixcbiAgICBcIm5icF92bGFuX2RlbGV0ZVwiLFxuICAgIFwiYnJfdmxhbl9mbHVzaFwiLFxuICAgIFwibmJwX3ZsYW5fZmx1c2hcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFZMQU4gZGVsZXRpb24gYW5kIGZsdXNoaW5nIGxvZ2ljIGluIHRoZSBMaW51eCBicmlkZ2UgKGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2ApLiBTcGVjaWZpY2FsbHksIGl0IGFkZHMgYSBgdGVhcmRvd25gIGZsYWcgdG8gYF9fdmxhbl9kZWwoKWAgdG8gZW5zdXJlIHJlc291cmNlIGNsZWFudXAgY29udGludWVzIGV2ZW4gaWYgZGV2aWNlL3N3aXRjaGRldiBWTEFOIGRlbGV0aW9uIHJldHVybnMgYW4gZXJyb3IgZHVyaW5nIGZsdXNoLCBhdm9pZHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24gYHBgIGluIGBfX3ZsYW5fZmx1c2goKWAsIGFuZCBzYXZlcyBgdmxhbi1cXHUwMDNldmlkYCB0byBhIGxvY2FsIHZhcmlhYmxlIHRvIHByZXZlbnQgYSB1c2UtYWZ0ZXItZnJlZSByZWFkIGFmdGVyIGBfX3ZsYW5fZGVsKClgLlxcblxcblRoZXNlIGNoYW5nZXMgZXhjbHVzaXZlbHkgdG91Y2ggZXJyb3IgaGFuZGxpbmcsIGNvbnRyb2wgZmxvdywgYW5kIG9iamVjdCBsaWZldGltZSAoTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcywgYm90aCBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBjaGVja3MgYW5kIEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvcHkgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBidWZmZXIgcGFyc2luZyBsb2dpYy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJyaWRnZSBWTEFOIGRlbGV0aW9uIGFuZCBmbHVzaCBoYW5kbGluZyBpbiBuZXQvYnJpZGdlL2JyX3ZsYW4uYy4gSXQgaW50cm9kdWNlcyBhIHRlYXJkb3duIGZsYWcgdG8gZW5zdXJlIGJyaWRnZSBhbmQgcG9ydCBWTEFOcyBhcmUgY2xlYW5lZCB1cCBvbiB0ZWFyZG93bi9mbHVzaCBldmVuIGlmIHVuZGVybHlpbmcgZGV2aWNlL3N3aXRjaGRldiBvcGVyYXRpb25zIHJldHVybiBlcnJvcnMsIGFuZCBmaXhlcyBlcnJvciBsb2dnaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMVkxBTiwgYnJpZGdlIGNvbmZpZ3VyYXRpb24pIGFuZCBicmlkZ2UgZGV2aWNlIHRlYXJkb3duLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMToxMS4yMzIxNTkxNjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODMxMTk2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMTMwZmIyMmExNDBjNGYyYWFhNTFjMWI0ZTk1ZTYxZWNiMzFmZTYyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjIxOjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfdmxhbi5jIGIvbmV0L2JyaWRnZS9icl92bGFuLmNcXG5pbmRleCAxZTBlNDM2NjI5ZWNlLi4zYWEwZTFmZWRlYjI2IDEwMDY0NFxcbi0tLSBhL25ldC9icmlkZ2UvYnJfdmxhbi5jXFxuKysrIGIvbmV0L2JyaWRnZS9icl92bGFuLmNcXG5AQCAtMzg3LDcgKzM4Nyw3IEBAIHN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXFxuIFxcdGdvdG8gb3V0O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcXG4rc3RhdGljIGludCBfX3ZsYW5fZGVsKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIGJvb2wgdGVhcmRvd24pXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqbWFzdGVydiA9IHY7XFxuIFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xcbkBAIC00MDUsMTMgKzQwNSwxNCBAQCBzdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcXG4gXFx0X192bGFuX2RlbGV0ZV9wdmlkKHZnLCB2LVxcdTAwM2V2aWQpO1xcbiBcXHRpZiAocCkge1xcbiBcXHRcXHRlcnIgPSBfX3ZsYW5fdmlkX2RlbChwLVxcdTAwM2VkZXYsIHAtXFx1MDAzZWJyLCB2KTtcXG4tXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiAhdGVhcmRvd24pXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRlcnIgPSBicl9zd2l0Y2hkZXZfcG9ydF92bGFuX2RlbCh2LVxcdTAwM2Vici1cXHUwMDNlZGV2LCB2LVxcdTAwM2V2aWQpO1xcbi1cXHRcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUClcXG4rXFx0XFx0aWYgKGVyciA9PSAtRU9QTk9UU1VQUClcXG4rXFx0XFx0XFx0ZXJyID0gMDtcXG4rXFx0XFx0ZWxzZSBpZiAoZXJyIFxcdTAwMjZcXHUwMDI2ICF0ZWFyZG93bilcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdGVyciA9IDA7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChicl92bGFuX3Nob3VsZF91c2UodikpIHtcXG5AQCAtNDQ4LDcgKzQ0OSw3IEBAIHN0YXRpYyB2b2lkIF9fdmxhbl9mbHVzaChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCAqdG1wO1xcbi1cXHR1MTYgdl9zdGFydCA9IDAsIHZfZW5kID0gMDtcXG4rXFx0dTE2IHZfc3RhcnQgPSAwLCB2X2VuZCA9IDAsIHZpZDtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdF9fdmxhbl9kZWxldGVfcHZpZCh2ZywgdmctXFx1MDAzZXB2aWQpO1xcbkBAIC00NjMsMTIgKzQ2NCwxOCBAQCBzdGF0aWMgdm9pZCBfX3ZsYW5fZmx1c2goY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbiBcXHRcXHR9XFxuIFxcdFxcdHZfZW5kID0gdmxhbi1cXHUwMDNldmlkO1xcbiBcXG4tXFx0XFx0ZXJyID0gX192bGFuX2RlbCh2bGFuKTtcXG4rXFx0XFx0dmlkID0gdmxhbi1cXHUwMDNldmlkO1xcbitcXHRcXHRlcnIgPSBfX3ZsYW5fZGVsKHZsYW4sIHRydWUpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdGJyX2VycihicixcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCJwb3J0ICV1KCVzKSBmYWlsZWQgdG8gZGVsZXRlIHZsYW4gJWQ6ICVwZVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgICh1bnNpZ25lZCBpbnQpIHAtXFx1MDAzZXBvcnRfbm8sIHAtXFx1MDAzZWRldi1cXHUwMDNlbmFtZSxcXG4tXFx0XFx0XFx0ICAgICAgIHZsYW4tXFx1MDAzZXZpZCwgRVJSX1BUUihlcnIpKTtcXG4rXFx0XFx0XFx0aWYgKHApXFxuK1xcdFxcdFxcdFxcdGJyX2VycihicixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJwb3J0ICV1KCVzKSBmYWlsZWQgdG8gZGVsZXRlIHZsYW4gJWQ6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgICh1bnNpZ25lZCBpbnQpcC1cXHUwMDNlcG9ydF9ubywgcC1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdmlkLCBFUlJfUFRSKGVycikpO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdGJyX2VycihicixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJmYWlsZWQgdG8gZGVsZXRlIGJyaWRnZSB2bGFuICVkOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB2aWQsIEVSUl9QVFIoZXJyKSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtODM4LDcgKzg0NSw3IEBAIGludCBicl92bGFuX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQpXFxuIFxcbiBcXHR2bGFuX3R1bm5lbF9pbmZvX2RlbCh2Zywgdik7XFxuIFxcbi1cXHRyZXR1cm4gX192bGFuX2RlbCh2KTtcXG4rXFx0cmV0dXJuIF9fdmxhbl9kZWwodiwgZmFsc2UpO1xcbiB9XFxuIFxcbiB2b2lkIGJyX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbkBAIC0xMzY5LDcgKzEzNzYsNyBAQCBpbnQgbmJwX3ZsYW5fZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQpXFxuIFxcdGJyX2ZkYl9maW5kX2RlbGV0ZV9sb2NhbChwb3J0LVxcdTAwM2ViciwgcG9ydCwgcG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgdmlkKTtcXG4gXFx0YnJfZmRiX2RlbGV0ZV9ieV9wb3J0KHBvcnQtXFx1MDAzZWJyLCBwb3J0LCB2aWQsIDApO1xcbiBcXG4tXFx0cmV0dXJuIF9fdmxhbl9kZWwodik7XFxuK1xcdHJldHVybiBfX3ZsYW5fZGVsKHYsIGZhbHNlKTtcXG4gfVxcbiBcXG4gdm9pZCBuYnBfdmxhbl9mbHVzaChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMToxMi41MTYwMDI2NThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQxMjM2MTgxNDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCIsXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX192bGFuX2RlbFwiLFxuICAgIFwiX192bGFuX2ZsdXNoXCIsXG4gICAgXCJicl92bGFuX2RlbGV0ZVwiLFxuICAgIFwibmJwX3ZsYW5fZGVsZXRlXCIsXG4gICAgXCJicl92bGFuX2ZsdXNoXCIsXG4gICAgXCJuYnBfdmxhbl9mbHVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgYnJpZGdlIFZMQU4gZGVsZXRpb24gYW5kIGZsdXNoIGhhbmRsaW5nIGluIG5ldC9icmlkZ2UvYnJfdmxhbi5jLiBJdCBpbnRyb2R1Y2VzIGEgdGVhcmRvd24gZmxhZyB0byBlbnN1cmUgYnJpZGdlIGFuZCBwb3J0IFZMQU5zIGFyZSBjbGVhbmVkIHVwIG9uIHRlYXJkb3duL2ZsdXNoIGV2ZW4gaWYgdW5kZXJseWluZyBkZXZpY2Uvc3dpdGNoZGV2IG9wZXJhdGlvbnMgcmV0dXJuIGVycm9ycywgYW5kIGZpeGVzIGVycm9yIGxvZ2dpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBydG5ldGxpbmsgKFJUTV9ERUxWTEFOLCBicmlkZ2UgY29uZmlndXJhdGlvbikgYW5kIGJyaWRnZSBkZXZpY2UgdGVhcmRvd24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzEzMGZiMjJhMTQwYzRmMmFhYTUxYzFiNGU5NWU2MWVjYjMxZmU2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjIxOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl92bGFuLmMgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xuaW5kZXggMWUwZTQzNjYyOWVjZS4uM2FhMGUxZmVkZWIyNiAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfdmxhbi5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xuQEAgLTM4Nyw3ICszODcsNyBAQCBzdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLFxuIFx0Z290byBvdXQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxuK3N0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCBib29sIHRlYXJkb3duKVxuIHtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYgPSB2O1xuIFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG5AQCAtNDA1LDEzICs0MDUsMTQgQEAgc3RhdGljIGludCBfX3ZsYW5fZGVsKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXG4gXHRfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHYtXHUwMDNldmlkKTtcbiBcdGlmIChwKSB7XG4gXHRcdGVyciA9IF9fdmxhbl92aWRfZGVsKHAtXHUwMDNlZGV2LCBwLVx1MDAzZWJyLCB2KTtcbi1cdFx0aWYgKGVycilcbitcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgIXRlYXJkb3duKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gYnJfc3dpdGNoZGV2X3BvcnRfdmxhbl9kZWwodi1cdTAwM2Vici1cdTAwM2VkZXYsIHYtXHUwMDNldmlkKTtcbi1cdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZXJyICE9IC1FT1BOT1RTVVBQKVxuK1x0XHRpZiAoZXJyID09IC1FT1BOT1RTVVBQKVxuK1x0XHRcdGVyciA9IDA7XG4rXHRcdGVsc2UgaWYgKGVyciBcdTAwMjZcdTAwMjYgIXRlYXJkb3duKVxuIFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRlcnIgPSAwO1xuIFx0fVxuIFxuIFx0aWYgKGJyX3ZsYW5fc2hvdWxkX3VzZSh2KSkge1xuQEAgLTQ0OCw3ICs0NDksNyBAQCBzdGF0aWMgdm9pZCBfX3ZsYW5fZmx1c2goY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHRcdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcbiB7XG4gXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCAqdG1wO1xuLVx0dTE2IHZfc3RhcnQgPSAwLCB2X2VuZCA9IDA7XG4rXHR1MTYgdl9zdGFydCA9IDAsIHZfZW5kID0gMCwgdmlkO1xuIFx0aW50IGVycjtcbiBcbiBcdF9fdmxhbl9kZWxldGVfcHZpZCh2ZywgdmctXHUwMDNlcHZpZCk7XG5AQCAtNDYzLDEyICs0NjQsMTggQEAgc3RhdGljIHZvaWQgX192bGFuX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdFx0fVxuIFx0XHR2X2VuZCA9IHZsYW4tXHUwMDNldmlkO1xuIFxuLVx0XHRlcnIgPSBfX3ZsYW5fZGVsKHZsYW4pO1xuK1x0XHR2aWQgPSB2bGFuLVx1MDAzZXZpZDtcbitcdFx0ZXJyID0gX192bGFuX2RlbCh2bGFuLCB0cnVlKTtcbiBcdFx0aWYgKGVycikge1xuLVx0XHRcdGJyX2Vycihicixcbi1cdFx0XHQgICAgICAgXCJwb3J0ICV1KCVzKSBmYWlsZWQgdG8gZGVsZXRlIHZsYW4gJWQ6ICVwZVxcblwiLFxuLVx0XHRcdCAgICAgICAodW5zaWduZWQgaW50KSBwLVx1MDAzZXBvcnRfbm8sIHAtXHUwMDNlZGV2LVx1MDAzZW5hbWUsXG4tXHRcdFx0ICAgICAgIHZsYW4tXHUwMDNldmlkLCBFUlJfUFRSKGVycikpO1xuK1x0XHRcdGlmIChwKVxuK1x0XHRcdFx0YnJfZXJyKGJyLFxuK1x0XHRcdFx0ICAgICAgIFwicG9ydCAldSglcykgZmFpbGVkIHRvIGRlbGV0ZSB2bGFuICVkOiAlcGVcXG5cIixcbitcdFx0XHRcdCAgICAgICAodW5zaWduZWQgaW50KXAtXHUwMDNlcG9ydF9ubywgcC1cdTAwM2VkZXYtXHUwMDNlbmFtZSxcbitcdFx0XHRcdCAgICAgICB2aWQsIEVSUl9QVFIoZXJyKSk7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0YnJfZXJyKGJyLFxuK1x0XHRcdFx0ICAgICAgIFwiZmFpbGVkIHRvIGRlbGV0ZSBicmlkZ2UgdmxhbiAlZDogJXBlXFxuXCIsXG4rXHRcdFx0XHQgICAgICAgdmlkLCBFUlJfUFRSKGVycikpO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtODM4LDcgKzg0NSw3IEBAIGludCBicl92bGFuX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQpXG4gXG4gXHR2bGFuX3R1bm5lbF9pbmZvX2RlbCh2Zywgdik7XG4gXG4tXHRyZXR1cm4gX192bGFuX2RlbCh2KTtcbitcdHJldHVybiBfX3ZsYW5fZGVsKHYsIGZhbHNlKTtcbiB9XG4gXG4gdm9pZCBicl92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbkBAIC0xMzY5LDcgKzEzNzYsNyBAQCBpbnQgbmJwX3ZsYW5fZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQpXG4gXHRicl9mZGJfZmluZF9kZWxldGVfbG9jYWwocG9ydC1cdTAwM2ViciwgcG9ydCwgcG9ydC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIHZpZCk7XG4gXHRicl9mZGJfZGVsZXRlX2J5X3BvcnQocG9ydC1cdTAwM2ViciwgcG9ydCwgdmlkLCAwKTtcbiBcbi1cdHJldHVybiBfX3ZsYW5fZGVsKHYpO1xuK1x0cmV0dXJuIF9fdmxhbl9kZWwodiwgZmFsc2UpO1xuIH1cbiBcbiB2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMToxMi41MTYwMDM4MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTgwMDY0NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVkxBTiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJIHNlZSB0aGUgZm9jdXMgaXMgb24gYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCwgc3BlY2lmaWNhbGx5LiBUaGUgY2hhbmdlcyBzZWVtIGNlbnRlcmVkIGFyb3VuZCBWTEFOIGRlbGV0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYF9fdmxhbl9kZWxgLCBgX192bGFuX2ZsdXNoYCwgYGJyX3ZsYW5fZGVsZXRlYCwgYW5kIGBuYnBfdmxhbl9kZWxldGVgLiBUaGlzIHN1Z2dlc3RzIHRoZXkncmUgbGlrZWx5IHR3ZWFraW5nIHRoZSBWTEFOIHJlbW92YWwgcHJvY2VzcyB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvZGUuXG5cbk5vdywgSSdsbCBuZWVkIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGJldHRlci4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IGNvZGUuIFRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvbnRlbnQgb2YgYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCBpdHNlbGYuIEknbGwgYWxzbyBuZWVkIHRvIGNoZWNrIGBuZXQvYnJpZGdlL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWF5IGluZmx1ZW5jZSB0aGlzIGNoYW5nZS4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB3aGF0ZXZlcidzIGZhc3Rlc3Qg4oCTIHRvIGdldCB0aGF0IHNvdXJjZSBjb2RlIHB1bGxlZCB1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGJlaGluZCB0aGVzZSBtb2RpZmljYXRpb25zIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyB0aGVpciBpbXBhY3QgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMToxOS40OTYwNzE3MjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzg1LFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzg1OlxcdFxcdH1cXG4gMzg2OlxcdFxcbiAzODc6XFx0XFx0Z290byBvdXQ7XFxuIDM4ODpcXHR9XFxuIDM4OTpcXHRcXG4gMzkwOlxcdHN0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCBib29sIHRlYXJkb3duKVxcbiAzOTE6XFx0e1xcbiAzOTI6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqbWFzdGVydiA9IHY7XFxuIDM5MzpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcXG4gMzk0OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAgPSBOVUxMO1xcbiAzOTU6XFx0XFx0aW50IGVyciA9IDA7XFxuIDM5NjpcXHRcXG4gMzk3OlxcdFxcdGlmIChicl92bGFuX2lzX21hc3Rlcih2KSkge1xcbiAzOTg6XFx0XFx0XFx0dmcgPSBicl92bGFuX2dyb3VwKHYtXFx1MDAzZWJyKTtcXG4gMzk5OlxcdFxcdH0gZWxzZSB7XFxuIDQwMDpcXHRcXHRcXHRwID0gdi1cXHUwMDNlcG9ydDtcXG4gNDAxOlxcdFxcdFxcdHZnID0gbmJwX3ZsYW5fZ3JvdXAodi1cXHUwMDNlcG9ydCk7XFxuIDQwMjpcXHRcXHRcXHRtYXN0ZXJ2ID0gdi1cXHUwMDNlYnJ2bGFuO1xcbiA0MDM6XFx0XFx0fVxcbiA0MDQ6XFx0XFxuIDQwNTpcXHRcXHRfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHYtXFx1MDAzZXZpZCk7XFxuIDQwNjpcXHRcXHRpZiAocCkge1xcbiA0MDc6XFx0XFx0XFx0ZXJyID0gX192bGFuX3ZpZF9kZWwocC1cXHUwMDNlZGV2LCBwLVxcdTAwM2Viciwgdik7XFxuIDQwODpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2ICF0ZWFyZG93bilcXG4gNDA5OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA0MTA6XFx0XFx0fSBlbHNlIHtcXG4gNDExOlxcdFxcdFxcdGVyciA9IGJyX3N3aXRjaGRldl9wb3J0X3ZsYW5fZGVsKHYtXFx1MDAzZWJyLVxcdTAwM2VkZXYsIHYtXFx1MDAzZXZpZCk7XFxuIDQxMjpcXHRcXHRcXHRpZiAoZXJyID09IC1FT1BOT1RTVVBQKVxcbiA0MTM6XFx0XFx0XFx0XFx0ZXJyID0gMDtcXG4gNDE0OlxcdFxcdFxcdGVsc2UgaWYgKGVyciBcXHUwMDI2XFx1MDAyNiAhdGVhcmRvd24pXFxuIDQxNTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNDE2OlxcdFxcdH1cXG4gNDE3OlxcdFxcbiA0MTg6XFx0XFx0aWYgKGJyX3ZsYW5fc2hvdWxkX3VzZSh2KSkge1xcbiA0MTk6XFx0XFx0XFx0di1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkJSSURHRV9WTEFOX0lORk9fQlJFTlRSWTtcXG4gNDIwOlxcdFxcdFxcdHZnLVxcdTAwM2VudW1fdmxhbnMtLTtcXG4gNDIxOlxcdFxcdH1cXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0aWYgKG1hc3RlcnYgIT0gdikge1xcbiA0MjQ6XFx0XFx0XFx0dmxhbl90dW5uZWxfaW5mb19kZWwodmcsIHYpO1xcbiA0MjU6XFx0XFx0XFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2dmctXFx1MDAzZXZsYW5faGFzaCwgXFx1MDAyNnYtXFx1MDAzZXZub2RlLFxcbiA0MjY6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGJyX3ZsYW5fcmh0X3BhcmFtcyk7XFxuIDQyNzpcXHRcXHRcXHRfX3ZsYW5fZGVsX2xpc3Qodik7XFxuIDQyODpcXHRcXHRcXHRuYnBfdmxhbl9zZXRfdmxhbl9kZXZfc3RhdGUocCwgdi1cXHUwMDNldmlkKTtcXG4gNDI5OlxcdFxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgZmFsc2UpO1xcbiA0MzA6XFx0XFx0XFx0YnJfbXVsdGljYXN0X3BvcnRfY3R4X2RlaW5pdChcXHUwMDI2di1cXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xcbiA0MzE6XFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnYtXFx1MDAzZXJjdSwgbmJwX3ZsYW5fcmN1X2ZyZWUpO1xcbiA0MzI6XFx0XFx0fVxcbiA0MzM6XFx0XFxuIDQzNDpcXHRcXHRicl92bGFuX3B1dF9tYXN0ZXIobWFzdGVydik7XFxuIDQzNTpcXHRvdXQ6XFxuIDQzNjpcXHRcXHRyZXR1cm4gZXJyO1xcbiA0Mzc6XFx0fVxcbiA0Mzg6XFx0XFxuIDQzOTpcXHRzdGF0aWMgdm9pZCBfX3ZsYW5fZ3JvdXBfZnJlZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcXG4gNDQwOlxcdHtcXG4gNDQxOlxcdFxcdFdBUk5fT04oIWxpc3RfZW1wdHkoXFx1MDAyNnZnLVxcdTAwM2V2bGFuX2xpc3QpKTtcXG4gNDQyOlxcdFxcdHJoYXNodGFibGVfZGVzdHJveShcXHUwMDI2dmctXFx1MDAzZXZsYW5faGFzaCk7XFxuIDQ0MzpcXHRcXHR2bGFuX3R1bm5lbF9kZWluaXQodmcpO1xcbiA0NDQ6XFx0XFx0a2ZyZWUodmcpO1xcbiA0NDU6XFx0fVxcbiA0NDY6XFx0XFxuIDQ0NzpcXHRzdGF0aWMgdm9pZCBfX3ZsYW5fZmx1c2goY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbiA0NDg6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuIDQ0OTpcXHRcXHRcXHRcXHQgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcpXFxuIDQ1MDpcXHR7XFxuIDQ1MTpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCAqdG1wO1xcbiA0NTI6XFx0XFx0dTE2IHZfc3RhcnQgPSAwLCB2X2VuZCA9IDAsIHZpZDtcXG4gNDUzOlxcdFxcdGludCBlcnI7XFxuIDQ1NDpcXHRcXG4gNDU1OlxcdFxcdF9fdmxhbl9kZWxldGVfcHZpZCh2ZywgdmctXFx1MDAzZXB2aWQpO1xcbiA0NTY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZsYW4sIHRtcCwgXFx1MDAyNnZnLVxcdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XFxuIDQ1NzpcXHRcXHRcXHQvKiB0YWtlIGNhcmUgb2YgZGlzam9pbnQgcmFuZ2VzICovXFxuIDQ1ODpcXHRcXHRcXHRpZiAoIXZfc3RhcnQpIHtcXG4gNDU5OlxcdFxcdFxcdFxcdHZfc3RhcnQgPSB2bGFuLVxcdTAwM2V2aWQ7XFxuIDQ2MDpcXHRcXHRcXHR9IGVsc2UgaWYgKHZsYW4tXFx1MDAzZXZpZCAtIHZfZW5kICE9IDEpIHtcXG4gNDYxOlxcdFxcdFxcdFxcdC8qIGZvdW5kIHJhbmdlIGVuZCwgbm90aWZ5IGFuZCBzdGFydCBuZXh0IG9uZSAqL1xcbiA0NjI6XFx0XFx0XFx0XFx0YnJfdmxhbl9ub3RpZnkoYnIsIHAsIHZfc3RhcnQsIHZfZW5kLCBSVE1fREVMVkxBTik7XFxuIDQ2MzpcXHRcXHRcXHRcXHR2X3N0YXJ0ID0gdmxhbi1cXHUwMDNldmlkO1xcbiA0NjQ6XFx0XFx0XFx0fVxcbiA0NjU6XFx0XFx0XFx0dl9lbmQgPSB2bGFuLVxcdTAwM2V2aWQ7XFxuIDQ2NjpcXHRcXG4gNDY3OlxcdFxcdFxcdHZpZCA9IHZsYW4tXFx1MDAzZXZpZDtcXG4gNDY4OlxcdFxcdFxcdGVyciA9IF9fdmxhbl9kZWwodmxhbiwgdHJ1ZSk7XFxuIDQ2OTpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuIDQ3MDpcXHRcXHRcXHRcXHRpZiAocClcXG4gNDcxOlxcdFxcdFxcdFxcdFxcdGJyX2VycihicixcXG4gNDcyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwicG9ydCAldSglcykgZmFpbGVkIHRvIGRlbGV0ZSB2bGFuICVkOiAlcGVcXFxcblxcXCIsXFxuIDQ3MzpcXHRcXHRcXHRcXHRcXHQgICAgICAgKHVuc2lnbmVkIGludClwLVxcdTAwM2Vwb3J0X25vLCBwLVxcdTAwM2VkZXYtXFx1MDAzZW5hbWUsXFxuIDQ3NDpcXHRcXHRcXHRcXHRcXHQgICAgICAgdmlkLCBFUlJfUFRSKGVycikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMToxOS40OTYyMTE3OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTE3NDQ5NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFZMQU4gQ29uZmlndXJhdGlvbiBpbiBCcmlkZ2UgTmV0d29ya2luZyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gYG5ldC9icmlkZ2UvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBicmlkZ2luZyBmdW5jdGlvbmFsaXR5IHJlc2lkZSBpbiB0aGUga2VybmVsIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIFZMQU4gc3VwcG9ydCBvcHRpb25zLCBob3cgdGhleSdyZSBleHBvc2VkLCBhbmQgYW55IGRlcGVuZGVuY2llcyB0aGV5IG1pZ2h0IGhhdmUgd2l0aGluIHRoZSBicmlkZ2UgY29uZmlndXJhdGlvbi4gSSdtIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBgQ09ORklHX2AgZmxhZ3Mgb3Igb3RoZXIgc2V0dGluZ3MgdGhhdCBlbmFibGUsIGRpc2FibGUsIGFuZCBmaW5lLXR1bmUgVkxBTiBiZWhhdmlvciAqd2l0aGluKiB0aGUgY29udGV4dCBvZiBhIGJyaWRnZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIG9wdGlvbnMgcmVsYXRlZCB0byBWTEFOIGZpbHRlcmluZywgVkxBTi1hd2FyZSBicmlkZ2luZywgYW5kIHBvdGVudGlhbGx5IHNvbWUgZmluZXItZ3JhaW5lZCBjb250cm9scyBvdmVyIFZMQU4gdGFnZ2luZyBhbmQgdW50YWdnaW5nIGJlaGF2aW9yIG9uIGJyaWRnZSBwb3J0cy4gS25vd2luZyB0aGUgc3BlY2lmaWNzIG9mIHRoZSBLY29uZmlnIGZpbGUgd2lsbCBsZXQgbWUgdW5kZXJzdGFuZCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFuZCBtb2R1bGVzIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgVkxBTnMgdG8gZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjIyLjYxMzY2NDUzMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTc5MDA3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUklER0VfVkxBTl9GSUxURVJJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL0tjb25maWc9MzY9Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNDktXFxubmV0L2JyaWRnZS9LY29uZmlnOjUwOmNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiVkxBTiBmaWx0ZXJpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL01ha2VmaWxlPTIxPWJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgKz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cXG5uZXQvYnJpZGdlL01ha2VmaWxlOjIzOmJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yNC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjIzMz1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMzQte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIzNTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIzNi1cXHRpZiAoYnJfb3B0X2dldChwb3J0LVxcdTAwM2ViciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSkge1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzUyPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNTMte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM1NDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM1NS1cXHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xMTk1PXN0YXRpYyBpbnQgYnJfdmFsaWRhdGUoc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTIwNy1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxMjA4OiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTIwOS1cXHRpZiAoZGF0YVtJRkxBX0JSX1ZMQU5fUFJPVE9DT0xdIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xMjk1PXN0YXRpYyBpbnQgYnJfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xMzY3LVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjEzNjg6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xMzY5LVxcdGlmIChkYXRhW0lGTEFfQlJfVkxBTl9QUk9UT0NPTF0pIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTE2MTk9c3RhdGljIHNpemVfdCBicl9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNjI3LVxcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSArICAgICAvKiBJRkxBX0JSX1ZMQU5fRklMVEVSSU5HICovXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTYyODojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE2MjktXFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMTYpKSArXFx0LyogSUZMQV9CUl9WTEFOX1BST1RPQ09MICovXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xNjc4PXN0YXRpYyBpbnQgYnJfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3MzAtXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTczMTojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3MzItXFx0aWYgKG5sYV9wdXRfYmUxNihza2IsIElGTEFfQlJfVkxBTl9QUk9UT0NPTCwgYnItXFx1MDAzZXZsYW5fcHJvdG8pIHx8XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0zOTI9c3RydWN0IG5ldF9icmlkZ2VfcG9ydCB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0zOTgtXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGZsYWdzO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjM5OTojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTQwMC1cXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwXFx0X19yY3UgKnZsZ3JwO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NTAyPXN0cnVjdCBuZXRfYnJpZGdlIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTUwNy1cXHQvKiBUaGVzZSBmaWVsZHMgYXJlIGFjY2Vzc2VkIG9uIGVhY2ggcGFja2V0ICovXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NTA4OiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTA5LVxcdF9fYmUxNlxcdFxcdFxcdFxcdHZsYW5fcHJvdG87XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD01OTg9c3RydWN0IGJyX2lucHV0X3NrYl9jYiB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC02MDktXFx0dTggZ3JhdF9hcnA6MTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo2MTA6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC02MTEtXFx0dTggdmxhbl9maWx0ZXJlZDoxO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU2NT1icl9tdWx0aWNhc3RfY3R4X29wdGlvbnNfZXF1YWwoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eDEsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTcyLS8qIGJyX3ZsYW4uYyAqL1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NzM6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTc0LWJvb2wgYnJfYWxsb3dlZF9pbmdyZXNzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE4Nzk9c3RhdGljIGlubGluZSB1MTYgYnJfdmxhbl9mbGFncyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgcHZpZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4ODYtLyogYnJfdmxhbl9vcHRpb25zLmMgKi9cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxODg3OiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTg4OC1ib29sIGJyX3ZsYW5fb3B0c19lcV9yYW5nZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2X2N1cnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xOTM0PXN0YXRpYyBpbmxpbmUgYm9vbCBicl92bGFuX3N0YXRlX2FsbG93ZWQodTggc3RhdGUsIGJvb2wgbGVhcm5fYWxsb3cpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTQ3LS8qIGJyX21zdC5jICovXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk0ODojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NDktREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGJyX21zdF91c2VkKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaD0zMj1pbnQgYnJfdmxhbl90dW5uZWxfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBpbnQgY21kLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oLTM0LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaDozNTojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaC0zNi0vKiBicl92bGFuX3R1bm5lbC5jICovXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9ODM5PXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhuZl9jYWxsX2FycHRhYmxlcyk7XFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTg0MC0jZW5kaWZcXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM6ODQxOiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTg0Mi1zdGF0aWMgc3NpemVfdCB2bGFuX2ZpbHRlcmluZ19zaG93KHN0cnVjdCBkZXZpY2UgKmQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9OTM1PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpicmlkZ2VfYXR0cnNbXSA9IHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy05ODEtI2VuZGlmXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jOjk4MjojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy05ODMtXFx0XFx1MDAyNmRldl9hdHRyX3ZsYW5fZmlsdGVyaW5nLmF0dHIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz05MDE9aW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtOTA1LVxcdFxcdC5vcmlnX2RldiA9IGJyLVxcdTAwM2VkZXYsXFxubmV0L2JyaWRnZS9icl92bGFuLmM6OTA2OlxcdFxcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX0JSSURHRV9WTEFOX0ZJTFRFUklORyxcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05MDctXFx0XFx0LmZsYWdzID0gU1dJVENIREVWX0ZfU0tJUF9FT1BOT1RTVVBQLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MTI2ND1pbnQgbmJwX3ZsYW5faW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMjY3LVxcdFxcdC5vcmlnX2RldiA9IHAtXFx1MDAzZWJyLVxcdTAwM2VkZXYsXFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTI2ODpcXHRcXHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9CUklER0VfVkxBTl9GSUxURVJJTkcsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTI2OS1cXHRcXHQuZmxhZ3MgPSBTV0lUQ0hERVZfRl9TS0lQX0VPUE5PVFNVUFAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjIyLjY2MzQ2MDA2NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MTg4MTQwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWTEFOIEZpbHRlcmluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBsZXQncyBoZWFkIHN0cmFpZ2h0IGludG8gdGhlIGBuZXQvYnJpZGdlL0tjb25maWdgIGZpbGUuIEknbSBzcGVjaWZpY2FsbHkgemVyb2luZyBpbiBvbiB0aGUgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2Agb3B0aW9uLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiBWTEFOIGZpbHRlcmluZyBjb25maWd1cmF0aW9uIGluIHRoZSBicmlkZ2luZyBjb2RlIGlzIGRlZmluZWQuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgb3B0aW9uIGlzIGV4cG9zZWQgdG8gdGhlIHVzZXIsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIChsaWtlIFZMQU4gc3VwcG9ydCBpbiBnZW5lcmFsKSwgYW5kIGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBLY29uZmlnIHN5bnRheCB1c2VkIHRoZXJlLCBhbnkgYXNzb2NpYXRlZCBkZWZhdWx0cywgaGVscCB0ZXh0LCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQuIEl0J3MgYSBrZXkgcGFydCBvZiBob3cgdGhlIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHkgaGFuZGxlcyBWTEFOIHRhZ2dlZCBmcmFtZXMsIHNvIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb25maWd1cmF0aW9uIGlzIGVzc2VudGlhbCBmb3IgYW55IGJyaWRnZS1yZWxhdGVkIGRlYnVnZ2luZyBvciBvcHRpbWl6YXRpb24gSSBtaWdodCBiZSB0YWNrbGluZy4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIHJlY2FsbCB0aGUgdW5kZXJseWluZyBjb25maWcgbG9naWMgb3IgdW5kZXJzdGFuZCBob3cgdGhpcyBhZmZlY3RzIHRoaW5ncyBmcm9tIGZpcnN0IHByaW5jaXBsZXMgaWYgSSBhbSBmZWVsaW5nIHJ1c3R5LCBiZWZvcmUgZGVsdmluZyBpbnRvIGFjdHVhbCBicmlkZ2UgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE3NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjI1LjE4MjI3NjU0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyA4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEJSSURHRVxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIjgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1xcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBMTENcXG4gICA5OlxcdFxcdHNlbGVjdCBTVFBcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBMaW51eCBib3ggd2lsbCBiZSBhYmxlIHRvIGFjdCBhcyBhblxcbiAgMTI6XFx0XFx0ICBFdGhlcm5ldCBicmlkZ2UsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRpZmZlcmVudCBFdGhlcm5ldCBzZWdtZW50cyBpdFxcbiAgMTM6XFx0XFx0ICBpcyBjb25uZWN0ZWQgdG8gd2lsbCBhcHBlYXIgYXMgb25lIEV0aGVybmV0IHRvIHRoZSBwYXJ0aWNpcGFudHMuXFxuICAxNDpcXHRcXHQgIFNldmVyYWwgc3VjaCBicmlkZ2VzIGNhbiB3b3JrIHRvZ2V0aGVyIHRvIGNyZWF0ZSBldmVuIGxhcmdlclxcbiAgMTU6XFx0XFx0ICBuZXR3b3JrcyBvZiBFdGhlcm5ldHMgdXNpbmcgdGhlIElFRUUgODAyLjEgc3Bhbm5pbmcgdHJlZSBhbGdvcml0aG0uXFxuICAxNjpcXHRcXHQgIEFzIHRoaXMgaXMgYSBzdGFuZGFyZCwgTGludXggYnJpZGdlcyB3aWxsIGNvb3BlcmF0ZSBwcm9wZXJseSB3aXRoXFxuICAxNzpcXHRcXHQgIG90aGVyIHRoaXJkIHBhcnR5IGJyaWRnZSBwcm9kdWN0cy5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBJbiBvcmRlciB0byB1c2UgdGhlIEV0aGVybmV0IGJyaWRnZSwgeW91J2xsIG5lZWQgdGhlIGJyaWRnZVxcbiAgMjA6XFx0XFx0ICBjb25maWd1cmF0aW9uIHRvb2xzOyBzZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RcXHUwMDNlXFxuICAyMTpcXHRcXHQgIGZvciBsb2NhdGlvbi4gUGxlYXNlIHJlYWQgdGhlIEJyaWRnZSBtaW5pLUhPV1RPIGZvciBtb3JlXFxuICAyMjpcXHRcXHQgIGluZm9ybWF0aW9uLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHlvdSBlbmFibGUgaXB0YWJsZXMgc3VwcG9ydCBhbG9uZyB3aXRoIHRoZSBicmlkZ2Ugc3VwcG9ydCB0aGVuIHlvdVxcbiAgMjU6XFx0XFx0ICB0dXJuIHlvdXIgYnJpZGdlIGludG8gYSBicmlkZ2luZyBJUCBmaXJld2FsbC5cXG4gIDI2OlxcdFxcdCAgaXB0YWJsZXMgd2lsbCB0aGVuIHNlZSB0aGUgSVAgcGFja2V0cyBiZWluZyBicmlkZ2VkLCBzbyB5b3UgbmVlZCB0b1xcbiAgMjc6XFx0XFx0ICB0YWtlIHRoaXMgaW50byBhY2NvdW50IHdoZW4gc2V0dGluZyB1cCB5b3VyIGZpcmV3YWxsIHJ1bGVzLlxcbiAgMjg6XFx0XFx0ICBFbmFibGluZyBhcnB0YWJsZXMgc3VwcG9ydCB3aGVuIGJyaWRnaW5nIHdpbGwgbGV0IGFycHRhYmxlcyBzZWVcXG4gIDI5OlxcdFxcdCAgYnJpZGdlZCBBUlAgdHJhZmZpYyBpbiB0aGUgYXJwdGFibGVzIEZPUldBUkQgY2hhaW4uXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDMyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgYnJpZGdlLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNTpcXHRcXG4gIDM2OlxcdGNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xcbiAgMzc6XFx0XFx0Ym9vbCBcXFwiSUdNUC9NTEQgc25vb3BpbmdcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAgMzk6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICA0MDpcXHRcXHRkZWZhdWx0IHlcXG4gIDQxOlxcdFxcdGhlbHBcXG4gIDQyOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHlcXG4gIDQzOlxcdFxcdCAgZm9yd2FyZCBtdWx0aWNhc3QgdHJhZmZpYyBiYXNlZCBvbiBJR01QL01MRCB0cmFmZmljIHJlY2VpdmVkIGZyb21cXG4gIDQ0OlxcdFxcdCAgZWFjaCBwb3J0LlxcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICA0OTpcXHRcXG4gIDUwOlxcdGNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG4gIDUxOlxcdFxcdGJvb2wgXFxcIlZMQU4gZmlsdGVyaW5nXFxcIlxcbiAgNTI6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gIDUzOlxcdFxcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxcbiAgNTQ6XFx0XFx0ZGVmYXVsdCBuXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XFxuICA1NzpcXHRcXHQgIHJlY2VpdmUgYW5kIGZvcndhcmQgdHJhZmZpYyBiYXNlZCBvbiBWTEFOIGluZm9ybWF0aW9uIGluIHRoZSBwYWNrZXRcXG4gIDU4OlxcdFxcdCAgYW55IFZMQU4gaW5mb3JtYXRpb24gY29uZmlndXJlZCBvbiB0aGUgYnJpZGdlIHBvcnQgb3IgYnJpZGdlIGRldmljZS5cXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgNjM6XFx0XFxuICA2NDpcXHRjb25maWcgQlJJREdFX01SUFxcbiAgNjU6XFx0XFx0Ym9vbCBcXFwiTVJQIHByb3RvY29sXFxcIlxcbiAgNjY6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gIDY3OlxcdFxcdGRlZmF1bHQgblxcbiAgNjg6XFx0XFx0aGVscFxcbiAgNjk6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSB0byBydW4gTVJQXFxuICA3MDpcXHRcXHQgIHByb3RvY29sIHRvIGRldGVjdCBsb29wc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMToyNS4xODIzNDcwNDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDg4Njg4MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVkxBTiBEZWxldGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBhdGNoIHRoYXQgcmVmYWN0b3JzIHRoZSBWTEFOIGRlbGV0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBicmlkZ2luZyBjb2RlLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYSBgdGVhcmRvd25gIGJvb2xlYW4gYXJndW1lbnQgdG8gdGhlIGBfX3ZsYW5fZGVsYCBmdW5jdGlvbi4gVGhpcyBpcyBzaWduaWZpY2FudCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBuZXcgcGFyYW1ldGVyLlxuXG5Mb29raW5nIGF0IHRoZSBgX192bGFuX2RlbGAgZnVuY3Rpb24gaXRzZWxmLCB0aGUgbG9naWMgbm93IHNlZW1zIHRvIGNvbmRpdGlvbmFsbHkgaGFuZGxlIGVycm9ycy4gQmVmb3JlLCBlcnJvcnMgd2VyZSBhbHdheXMgcHJvcGFnYXRlZC4gTm93LCBpdCBhcHBlYXJzIHRoZSBgdGVhcmRvd25gIGZsYWcgaW5mbHVlbmNlcyB0aGUgZXJyb3IgaGFuZGxpbmcuIElmIGB0ZWFyZG93bmAgaXMgdHJ1ZSwgY2VydGFpbiBlcnJvcnMgbWlnaHQgYmUgaWdub3JlZCwgcGFydGljdWxhcmx5IGluIHRoZSBgX192bGFuX2ZsdXNoYCBwYXRoLiBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHNwZWNpZmljIGVycm9yIGNvZGVzIGFyZSBub3cgYmVpbmcgaGFuZGxlZCBkaWZmZXJlbnRseSBiYXNlZCBvbiB0aGlzIG5ldyB0ZWFyZG93biBmbGFnLCBhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBkaWZmZXJlbnQgY2FsbGluZyBjb250ZXh0cy4gVGhlIGNvbmRpdGlvbmFsIGxvZ2ljIG5vdyBpbiBwbGFjZSBpbnNpZGUgdGhlIGBpZiAoZXJyIFx1MDAyNlx1MDAyNiAhdGVhcmRvd24pYCBibG9ja3MgYXJlIGNydWNpYWwuXG5cblRoZSBkaWZmIGFsc28gc2hvd3MgdGhhdCBgYnJfdmxhbl9kZWxldGVgIGFuZCBgbmJwX3ZsYW5fZGVsZXRlYCBub3cgY2FsbCBgX192bGFuX2RlbGAgd2l0aCBgdGVhcmRvd25gIHNldCB0byBgZmFsc2VgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlc2UgZnVuY3Rpb25zLCBpbiB0aGUgY3VycmVudCBjb250ZXh0LCBhcmUgKm5vdCogaW50ZW5kZWQgdG8gYmUgYSB0ZWFyZG93biwgb3IgbW9yZSBwZXJtYW5lbnQsIGNsZWFudXAsIGFuZCB0aHVzLCBlcnJvcnMgc2hvdWxkIGJlIGNoZWNrZWQuXG5cbkhvd2V2ZXIsIGBfX3ZsYW5fZmx1c2hgIG5vdyBjYWxscyBgX192bGFuX2RlbGAgd2l0aCBgdGVhcmRvd25gIHNldCB0byBgdHJ1ZWAuIFRoaXMgaW1wbGllcyB0aGF0IGluIHRoZSBjb250ZXh0IG9mIGZsdXNoaW5nIFZMQU5zLCBwZXJoYXBzIGR1cmluZyBicmlkZ2UgZGVzdHJ1Y3Rpb24gb3IgcmVjb25maWd1cmF0aW9uLCB0aGUgZXJyb3JzIHJlbGF0ZWQgdG8gVkxBTiBkZWxldGlvbiBhcmUgbm90IGFzIGNyaXRpY2FsLCBhbmQgcGVyaGFwcyBjYW4gYmUgaWdub3JlZC4gSSdsbCBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBwdXJwb3NlIG9mIGBfX3ZsYW5fZmx1c2hgIHRvIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzLiBUaGUgbG9nIG1lc3NhZ2UgZm9ybWF0dGluZyBkaWZmZXJlbmNlcyBiYXNlZCBvbiBgcGAgYXJlIGFsc28gbm90ZXdvcnRoeSAtIHRoaXMgYXBwZWFycyB0byBiZSBhIHJlZmluZW1lbnQgb2YgZXJyb3IgbWVzc2FnaW5nLlxuXG5VbHRpbWF0ZWx5LCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBicl92bGFuX2RlbGV0ZWAsIGBuYnBfdmxhbl9kZWxldGVgLCBhbmQgYF9fdmxhbl9mbHVzaGAgdG8gdW5kZXJzdGFuZCB0aGUgdmFyaW91cyBjb250ZXh0cyBpbiB3aGljaCBWTEFOIGRlbGV0aW9uIGlzIHBlcmZvcm1lZCwgYW5kIHRodXMsIHdoeSB0aGUgYHRlYXJkb3duYCBmbGFnIGlzIG5lZWRlZC4gSSdsbCBuZWVkIHRvIHVzZSB0aGVzZSBjYWxsIHBhdGhzIHRvIGZvcm0gYSBjb25jbHVzaXZlIGp1ZGdlbWVudCBvbiB3aGF0IHRoZSBwYXRjaCBpcyB0cnlpbmcgdG8gYWNoaWV2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM5NCwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjMwLjI3MTAzODc0OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MDQ2NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKGJyX3ZsYW5fZGVsZXRlfG5icF92bGFuX2RlbGV0ZXxicl92bGFuX2ZsdXNofG5icF92bGFuX2ZsdXNoKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MTE5PXN0YXRpYyBpbnQgYnJfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTQyLVxcdGlmIChlcnIpIHtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE0MzpcXHRcXHRicl92bGFuX2ZsdXNoKGJyKTtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE0NC1cXHRcXHRicl9tZGJfaGFzaF9maW5pKGJyKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MTUzPXN0YXRpYyB2b2lkIGJyX2Rldl91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTU4LVxcdGJyX211bHRpY2FzdF91bmluaXRfc3RhdHMoYnIpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MTU5OlxcdGJyX3ZsYW5fZmx1c2goYnIpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTYwLVxcdGJyX21kYl9oYXNoX2ZpbmkoYnIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jPTMzND1zdGF0aWMgdm9pZCBkZWxfbmJwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmMtMzU2LVxcbm5ldC9icmlkZ2UvYnJfaWYuYzozNTc6XFx0bmJwX3ZsYW5fZmx1c2gocCk7XFxubmV0L2JyaWRnZS9icl9pZi5jLTM1OC1cXHRicl9mZGJfZGVsZXRlX2J5X3BvcnQoYnIsIHAsIDAsIDEpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9Njk4PXN0YXRpYyBpbnQgYnJfdmxhbl9pbmZvKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTcyMy1cXHRcXHRpZiAocCkge1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjcyNDpcXHRcXHRcXHRpZiAoIW5icF92bGFuX2RlbGV0ZShwLCB2aW5mby1cXHUwMDNldmlkKSlcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy03MjUtXFx0XFx0XFx0XFx0KmNoYW5nZWQgPSB0cnVlO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNzI3LVxcdFxcdFxcdGlmICgodmluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19NQVNURVIpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NzI4OlxcdFxcdFxcdCAgICAhYnJfdmxhbl9kZWxldGUocC1cXHUwMDNlYnIsIHZpbmZvLVxcdTAwM2V2aWQpKVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTcyOS1cXHRcXHRcXHRcXHQqY2hhbmdlZCA9IHRydWU7XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NzMwOlxcdFxcdH0gZWxzZSBpZiAoIWJyX3ZsYW5fZGVsZXRlKGJyLCB2aW5mby1cXHUwMDNldmlkKSkge1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTczMS1cXHRcXHRcXHQqY2hhbmdlZCA9IHRydWU7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTg1PWludCBicl92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQsIHUxNiBmbGFncyxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTg2LVxcdFxcdGJvb2wgKmNoYW5nZWQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU4NzppbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTg4OnZvaWQgYnJfdmxhbl9mbHVzaChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1ODktc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqYnJfdmxhbl9maW5kKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLCB1MTYgdmlkKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE2MDQ9aW50IG5icF92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkLCB1MTYgZmxhZ3MsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTYwNS1cXHRcXHQgYm9vbCAqY2hhbmdlZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNjA2OmludCBuYnBfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTYwNzp2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE2MDgtaW50IG5icF92bGFuX2luaXQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE3MjE9c3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNzI3LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE3Mjg6c3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3Mjkte1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTczMi1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNzMzOnN0YXRpYyBpbmxpbmUgdm9pZCBicl92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNzM0LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE3NDY9c3RhdGljIGlubGluZSBpbnQgbmJwX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQsIHUxNiBmbGFncyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3NTItXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTc1MzpzdGF0aWMgaW5saW5lIGludCBuYnBfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZClcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNzU0LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3NTctXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTc1ODpzdGF0aWMgaW5saW5lIHZvaWQgbmJwX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNzU5LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTc4Nj1pbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsIGJvb2wgKmNoYW5nZWQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04MzAtICovXFxubmV0L2JyaWRnZS9icl92bGFuLmM6ODMxOmludCBicl92bGFuX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQpXFxubmV0L2JyaWRnZS9icl92bGFuLmMtODMyLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTg1MC1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo4NTE6dm9pZCBicl92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04NTIte1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MTA4Nz1zdGF0aWMgdm9pZCBicl92bGFuX2Rpc2FibGVfZGVmYXVsdF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEwOTUtXFx0aWYgKHZsYW5fZGVmYXVsdF9wdmlkKGJyX3ZsYW5fZ3JvdXAoYnIpLCBwdmlkKSkge1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEwOTY6XFx0XFx0aWYgKCFicl92bGFuX2RlbGV0ZShiciwgcHZpZCkpXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTA5Ny1cXHRcXHRcXHRicl92bGFuX25vdGlmeShiciwgTlVMTCwgcHZpZCwgMCwgUlRNX0RFTFZMQU4pO1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTEwMS1cXHRcXHRpZiAodmxhbl9kZWZhdWx0X3B2aWQobmJwX3ZsYW5fZ3JvdXAocCksIHB2aWQpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTEwMjpcXHRcXHQgICAgIW5icF92bGFuX2RlbGV0ZShwLCBwdmlkKSlcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTAzLVxcdFxcdFxcdGJyX3ZsYW5fbm90aWZ5KGJyLCBwLCBwdmlkLCAwLCBSVE1fREVMVkxBTik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMTA5PWludCBfX2JyX3ZsYW5fc2V0X2RlZmF1bHRfcHZpZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiBwdmlkLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTE0NS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMTQ2OlxcdFxcdGlmICghYnJfdmxhbl9kZWxldGUoYnIsIG9sZF9wdmlkKSlcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTQ3LVxcdFxcdFxcdGJyX3ZsYW5fbm90aWZ5KGJyLCBOVUxMLCBvbGRfcHZpZCwgMCwgUlRNX0RFTFZMQU4pO1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTE2Ny1cXHRcXHRcXHRnb3RvIGVycl9wb3J0O1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjExNjg6XFx0XFx0aWYgKCFuYnBfdmxhbl9kZWxldGUocCwgb2xkX3B2aWQpKVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExNjktXFx0XFx0XFx0YnJfdmxhbl9ub3RpZnkoYnIsIHAsIG9sZF9wdmlkLCAwLCBSVE1fREVMVkxBTik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTkxLVxcdFxcdH1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMTkyOlxcdFxcdG5icF92bGFuX2RlbGV0ZShwLCBwdmlkKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTkzLVxcdFxcdGJyX3ZsYW5fbm90aWZ5KGJyLCBwLCBwdmlkLCAwLCBSVE1fREVMVkxBTik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMjA0LVxcdFxcdH1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMjA1OlxcdFxcdGJyX3ZsYW5fZGVsZXRlKGJyLCBwdmlkKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMjA2LVxcdFxcdGJyX3ZsYW5fbm90aWZ5KGJyLCBOVUxMLCBwdmlkLCAwLCBSVE1fREVMVkxBTik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMzIyPWludCBuYnBfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZCwgdTE2IGZsYWdzLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTM2Ni0gKi9cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMzY3OmludCBuYnBfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZClcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzY4LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEzODEtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTM4Mjp2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTM4My17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xNzU0PWludCBicl92bGFuX2JyaWRnZV9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNzY5LVxcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTc3MDpcXHRcXHRjaGFuZ2VkID0gIWJyX3ZsYW5fZGVsZXRlKGJyLCBici1cXHUwMDNlZGVmYXVsdF9wdmlkKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNzcxLVxcdFxcdHZsY21kID0gUlRNX0RFTFZMQU47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjMwLjMyMTk1MTUzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNDE1NTY4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpczogVkxBTiBEZWxldGlvbiBpbiBMaW51eCBCcmlkZ2UgU3Vic3lzdGVtKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgYnJfdmxhbl9kZWxldGVgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgYF9fdmxhbl9mbHVzaGAsIGFuZCBgX192bGFuX2RlbGAgd2l0aGluIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AuIFRoaXMgaXMgYWxsIHdpdGhpbiB0aGUgTGludXggYnJpZGdlIHN1YnN5c3RlbSwgd2hpY2gsIGNyaXRpY2FsbHksIGhhcyBWTEFOIGZpbHRlcmluZyBlbmFibGVkIChgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2ApLiBXZSdyZSB0YWxraW5nIHN0YW5kYXJkIG5ldHdvcmtpbmcgb3BlcmF0aW9ucyBoZXJlIOKAkyBicmlkZ2UgY3JlYXRpb24sIGFkZGluZyBwb3J0cywgY29uZmlndXJpbmcgVkxBTnMgdXNpbmcgTmV0bGluayAoUlRNX05FV1ZMQU4sIFJUTV9ERUxWTEFOLCBldGMuKSwgYW5kIGZsdXNoaW5nIFZMQU5zIG9uIHBvcnQgZGVsZXRpb24gb3IgYnJpZGdlIHVuaW5pdGlhbGl6YXRpb24vZmx1c2guIFRoZXNlIGFyZSBhbGwgdGhpbmdzIHRoYXQgYXJlICpkaXJlY3RseSogYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UsIGFuZCBzeXprYWxsZXIgaGFzIGFscmVhZHkgaGFtbWVyZWQgb24gdGhlc2UgaW50ZXJmYWNlcyB0aHJvdWdoIGBydG5sL25ldGxpbmtgLCBzbyB3ZSBrbm93IHRoZXJlJ3Mgc29tZSBleGlzdGluZyBjb3ZlcmFnZS5cblxuVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmcgKm5vdyo/XG5cblRoZSBjcml0ZXJpYSBzZWVtIHRvIGxpbmUgdXAuIFdlIGhhdmUgYSBjb3JlIHN1YnN5c3RlbSB0aGF0J3MgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgaW50ZXJmYWNlcyBsaWtlIG5ldGxpbmsgKHJ0bmV0bGluayksIGJyaWRnZSBkZXZpY2Ugb3BlcmF0aW9ucywgYW5kIHNvY2tldCBzeXNjYWxscy4gVGhhdCdzIGEgaHVnZSBwb3NpdGl2ZS5cblxuVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgZGVmaW5pdGVseSBpbXBhY3RpbmcgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiAgYF9fdmxhbl9kZWxgLCBgX192bGFuX2ZsdXNoYCwgYGJyX3ZsYW5fZGVsZXRlYCwgYW5kIGBuYnBfdmxhbl9kZWxldGVgLCB3aGljaCBpcyBncmVhdC4gIFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIGZpZGRsaW5nIHdpdGggZXJyb3IgaGFuZGxpbmcgZHVyaW5nIFZMQU4gZmx1c2gvdGVhcmRvd24gYW5kIHN0YW5kYXJkIFZMQU4gZGVsZXRpb24uICBJdCBzZWVtcyB0aGUga2V5IGNoYW5nZSBpcyBhYm91dCBob3cgZXJyb3JzIGFyZSBoYW5kbGVkIHdoZW4gdGVhcmluZyBkb3duIFZMQU5zLiAgSW4gYF9fdmxhbl9kZWxgLCBpZiBgdGVhcmRvd25gIGlzIGB0cnVlYCwgZXJyb3JzIGZyb20gaW50ZXJuYWwgY2FsbHMgKmRvbid0KiBhYm9ydCB0aGUgcHJvY2VzczsgaW5zdGVhZCwgaXQgY29udGludWVzIHRvIGNsZWFuIHVwIGRhdGEgc3RydWN0dXJlcyBhbmQgc2NoZWR1bGUgUkNVIGZyZWUuIEhvd2V2ZXIsIGlmIHRlYXJkb3duIGlzIGZhbHNlIChpbiBgYnJfdmxhbl9kZWxldGVgL2BuYnBfdmxhbl9kZWxldGVgKSwgZXJyb3JzIGFyZSBzdGlsbCBjYXVzaW5nIGVhcmx5IGV4aXQsIHdoaWNoIGlzIHRoZSBrZXkgZGlmZmVyZW5jZS4gIFRoZSBmaXggYWxzbyBpbmNsdWRlcyBhIGJ1ZyBmaXggdG8gcHJldmVudCBhY2Nlc3NpbmcgYSBWTEFOIElEIGFmdGVyIGl0IG1pZ2h0IGhhdmUgYmVlbiBmcmVlZCBpbiBgX192bGFuX2ZsdXNoYC5cblxuQWxsIG9mIHRoaXMgYWRkcyB1cCB0byBhIHNvbGlkIGNhc2UgZm9yIGZ1enppbmcuIFdlIGhhdmUgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpbiB0aGUga2VybmVsIG5ldHdvcmtpbmcgYnJpZGdlIHN1YnN5c3RlbSB0aGF0J3MgYmVlbiBtb2RpZmllZCwgZXNwZWNpYWxseSBpbiBob3cgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBkZWZpbml0ZWx5IGJlIGB0cnVlYCBoZXJlLlxuXG5Ob3csIGxldCdzIGVuc3VyZSB3ZSBoYXZlIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBXZSdsbCBuZWVkIGBDT05GSUdfQlJJREdFYCwgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLCBhbmQgYENPTkZJR19WTEFOXzgwMjFRYCAoc2luY2UgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AgZGVwZW5kcyBvbiBib3RoIGBWTEFOXzgwMjFRYCBhbmQgYEJSSURHRWApLiBXZSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBmb3IgYEJSSURHRWAgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgIHRvIGNvbmZpcm0gdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0LlxuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTQ3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjM1LjY2MzUxMDg5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjUxMzY0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgKEJSSURHRXxWTEFOXzgwMjFRKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0LzgwMjFxL0tjb25maWctNS1cXG5uZXQvODAyMXEvS2NvbmZpZzo2OmNvbmZpZyBWTEFOXzgwMjFRXFxubmV0LzgwMjFxL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XFxcIlxcbi0tXFxubmV0LzgwMjFxL0tjb25maWctMjEtXFxubmV0LzgwMjFxL0tjb25maWc6MjI6Y29uZmlnIFZMQU5fODAyMVFfR1ZSUFxcbm5ldC84MDIxcS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkdWUlAgKEdBUlAgVkxBTiBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvODAyMXEvS2NvbmZpZy0zMS1cXG5uZXQvODAyMXEvS2NvbmZpZzozMjpjb25maWcgVkxBTl84MDIxUV9NVlJQXFxubmV0LzgwMjFxL0tjb25maWctMzMtXFx0Ym9vbCBcXFwiTVZSUCAoTXVsdGlwbGUgVkxBTiBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvS2NvbmZpZz0yMjA9Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFxcbi0tXFxubmV0L0tjb25maWctMjMwLVxcbm5ldC9LY29uZmlnOjIzMTpjb25maWcgQlJJREdFX05FVEZJTFRFUlxcbm5ldC9LY29uZmlnLTIzMi1cXHR0cmlzdGF0ZSBcXFwiQnJpZGdlZCBJUC9BUlAgcGFja2V0cyBmaWx0ZXJpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNS1cXG5uZXQvYnJpZGdlL0tjb25maWc6Njpjb25maWcgQlJJREdFXFxubmV0L2JyaWRnZS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIjgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1xcXCJcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cXG5uZXQvYnJpZGdlL0tjb25maWc6MzY6Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTM3LVxcdGJvb2wgXFxcIklHTVAvTUxEIHNub29waW5nXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTQ5LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo1MDpjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIlZMQU4gZmlsdGVyaW5nXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTYzLVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo2NDpjb25maWcgQlJJREdFX01SUFxcbm5ldC9icmlkZ2UvS2NvbmZpZy02NS1cXHRib29sIFxcXCJNUlAgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNzUtXFxubmV0L2JyaWRnZS9LY29uZmlnOjc2OmNvbmZpZyBCUklER0VfQ0ZNXFxubmV0L2JyaWRnZS9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIkNGTSBwcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Mjg9Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0VcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDItIyBvbGQgc29ja29wdCBpbnRlcmZhY2UgYW5kIGV2YWwgbG9vcFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NDM6Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJMZWdhY3kgRUJUQUJMRVMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNTItXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo1MzptZW51Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNTQtXFx0dHJpc3RhdGUgXFxcIkV0aGVybmV0IEJyaWRnZSB0YWJsZXMgKGVidGFibGVzKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz02Mj1pZiBCUklER0VfTkZfRUJUQUJMRVNcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNjYtI1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6Njc6Y29uZmlnIEJSSURHRV9FQlRfQlJPVVRFXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy02OC1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBicm91dGUgdGFibGUgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNzctXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo3ODpjb25maWcgQlJJREdFX0VCVF9UX0ZJTFRFUlxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNzktXFx0dHJpc3RhdGUgXFxcImVidDogZmlsdGVyIHRhYmxlIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTg3LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6ODg6Y29uZmlnIEJSSURHRV9FQlRfVF9OQVRcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTg5LVxcdHRyaXN0YXRlIFxcXCJlYnQ6IG5hdCB0YWJsZSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy05OS0jXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxMDA6Y29uZmlnIEJSSURHRV9FQlRfODAyXzNcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEwMS1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiA4MDIuMyBmaWx0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTA2LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTA3OmNvbmZpZyBCUklER0VfRUJUX0FNT05HXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMDgtXFx0dHJpc3RhdGUgXFxcImVidDogYW1vbmcgZmlsdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTExNS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjExNjpjb25maWcgQlJJREdFX0VCVF9BUlBcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTExNy1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBBUlAgZmlsdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEyMy1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjEyNDpjb25maWcgQlJJREdFX0VCVF9JUFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTI1LVxcdHRyaXN0YXRlIFxcXCJlYnQ6IElQIGZpbHRlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMzEtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxMzI6Y29uZmlnIEJSSURHRV9FQlRfSVA2XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMzMtXFx0dHJpc3RhdGUgXFxcImVidDogSVA2IGZpbHRlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNDAtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxNDE6Y29uZmlnIEJSSURHRV9FQlRfTElNSVRcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBsaW1pdCBtYXRjaCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNTAtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxNTE6Y29uZmlnIEJSSURHRV9FQlRfTUFSS1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTUyLVxcdHRyaXN0YXRlIFxcXCJlYnQ6IG1hcmsgZmlsdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE2MC1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE2MTpjb25maWcgQlJJREdFX0VCVF9QS1RUWVBFXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNjItXFx0dHJpc3RhdGUgXFxcImVidDogcGFja2V0IHR5cGUgZmlsdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE3MC1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE3MTpjb25maWcgQlJJREdFX0VCVF9TVFBcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE3Mi1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBTVFAgZmlsdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE3OC1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE3OTpjb25maWcgQlJJREdFX0VCVF9WTEFOXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xODAtXFx0dHJpc3RhdGUgXFxcImVidDogODAyLjFRIFZMQU4gZmlsdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE4OC0jXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxODk6Y29uZmlnIEJSSURHRV9FQlRfQVJQUkVQTFlcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE5MC1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBhcnAgcmVwbHkgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE5Ny1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE5ODpjb25maWcgQlJJREdFX0VCVF9ETkFUXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xOTktXFx0dHJpc3RhdGUgXFxcImVidDogZG5hdCB0YXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjA1LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MjA2OmNvbmZpZyBCUklER0VfRUJUX01BUktfVFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjA3LVxcdHRyaXN0YXRlIFxcXCJlYnQ6IG1hcmsgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTIxNS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjIxNjpjb25maWcgQlJJREdFX0VCVF9SRURJUkVDVFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjE3LVxcdHRyaXN0YXRlIFxcXCJlYnQ6IHJlZGlyZWN0IHRhcmdldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMjMtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyMjQ6Y29uZmlnIEJSSURHRV9FQlRfU05BVFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjI1LVxcdHRyaXN0YXRlIFxcXCJlYnQ6IHNuYXQgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTIzMy0jXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyMzQ6Y29uZmlnIEJSSURHRV9FQlRfTE9HXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMzUtXFx0dHJpc3RhdGUgXFxcImVidDogbG9nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTI0Mi1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjI0Mzpjb25maWcgQlJJREdFX0VCVF9ORkxPR1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjQ0LVxcdHRyaXN0YXRlIFxcXCJlYnQ6IG5mbG9nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjM1Ljc0MDAyOTkxN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDA2Mzg2NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWTEFOIEZpbHRlcmluZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBzdHVmZi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBmb3VuZGF0aW9uYWwgcGllY2VzIGFyZSBpbiBwbGFjZS4gVGhlIHByZXJlcXVpc2l0ZXMgc2VlbSB0byBiZSB0aGUgYEJSSURHRWAgYW5kIGBWTEFOXzgwMjFRYCBtb2R1bGVzIOKAkyBtYWtlcyBzZW5zZSwgY2FuJ3QgZmlsdGVyIFZMQU5zIGlmIHdlIGRvbid0IGhhdmUgYnJpZGdlcyBhbmQgODAyLjFRIHRhZ2dpbmcuIE5vdywgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cbkkgd2FudCB0byBwaW5wb2ludCB0aGUgYXJlYXMgdGhpcyBmaWx0ZXJpbmcgbG9naWMgZGlyZWN0bHkgaW1wYWN0cy4gV2hhdCBzcGVjaWZpYywgbGVzcyBjb21tb24gZnVuY3Rpb25zIGhhdmUgYmVlbiB0b3VjaGVkIG9yIGRpcmVjdGx5IGNhbGwgdGhlIG1vZGlmaWVkIGNvZGU/IExldCdzIHNlZS4uLiBJJ3ZlIGdvdCBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zOiBgX192bGFuX2RlbGAsIGBfX3ZsYW5fZmx1c2hgIChib3RoIHN0YXRpYywgaW50ZXJlc3RpbmcpLCBhbmQgdGhlbiBgYnJfdmxhbl9kZWxldGVgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgYGJyX3ZsYW5fZmx1c2hgLCBhbmQgYG5icF92bGFuX2ZsdXNoYC4gTG9va3MgbGlrZSB0aGVzZSBkZWxldGlvbnMgYW5kIGZsdXNoaW5nIG9wZXJhdGlvbnMgYXJlIHRoZSBjb3JlIG9mIHdoYXQncyBjaGFuZ2VkLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCBvdmVyIHRvIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AgYW5kIG1ldGljdWxvdXNseSBleGFtaW5lIHRoZSBkZWNsYXJhdGlvbnMgYW5kIHRoZSBjYWxsZXJzIG9mIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyBpcyB3aGVyZSBJJ2xsIGdldCB0aGUgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgYWN0dWFsbHkgd29ya2luZyB3aXRoaW4gdGhlIG92ZXJhbGwgYnJpZGdlIGFuZCBWTEFOIGNvbnRleHQuIEdvdHRhIHRyYWNlIHRob3NlIGNhbGwgcGF0aHMgdG8gc2VlIHRoZSBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDI5LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjM4Ljc0NjQxODczM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk1NTEwNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKGJyX3ZsYW5fZmx1c2h8bmJwX3ZsYW5fZmx1c2gpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jPTgzMT1pbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtODUwLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjg1MTp2b2lkIGJyX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTg1Mi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMzY3PWludCBuYnBfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEzODEtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTM4Mjp2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTM4My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjM4Ljc5NTk3NjAyNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTQ0ODgyMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBhbmFseXNpcywgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYGJyX3ZsYW4uY2AgZm9yIFZMQU4gSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgYnJpZGdpbmcgY29kZSBoYW5kbGVzIFZMQU5zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gbGluZXMgODQwLTg2MCBhbmQgMTM3MC0xMzk1IHdpdGhpbiBgbmV0L2JyaWRnZS9icl92bGFuLmNgLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGVzZSBzZWN0aW9ucyBsaWtlbHkgdG91Y2ggdXBvbiBrZXkgYXNwZWN0cyBvZiBWTEFOIHRhZyBtYW5pcHVsYXRpb24sIGZvcndhcmRpbmcgZGVjaXNpb25zIGJhc2VkIG9uIFZMQU4gSURzLCBvciBwZXJoYXBzIGV2ZW4gVkxBTi1yZWxhdGVkIGNvbnRyb2wgcGxhbmUgb3BlcmF0aW9ucy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgc2NhbiB0aG9zZSBsaW5lIHJhbmdlcy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBsaWtlOlxuXG4qICAgKipEYXRhIFN0cnVjdHVyZXM6KiogV2hhdCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhY2Nlc3NlZCBvciBtb2RpZmllZD8gYGJyX3BvcnRgLCBgdmxhbl92aWRgLCBgc2tiX3ZsYW5fdGFnX3NldGAgKHdoaWNoIEkga25vdywgb2YgY291cnNlLCBmcm9tIHByaW9yIHdvcmsgb24gdGhpcykgd2lsbCBiZSBpbW1lZGlhdGVseSByZWxldmFudC4gQW55IG5ldywgdW5mYW1pbGlhciBzdHJ1Y3R1cmVzIGFyZSBhIHJlZCBmbGFnIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi5cbiogICAqKkZ1bmN0aW9uIENhbGxzOioqIEFtIEkgc2VlaW5nIGNhbGxzIHRvIGNvcmUgVkxBTiBoYW5kbGluZyBmdW5jdGlvbnM/IGB2bGFuX3ZpZF9hZGRgLCBgdmxhbl92aWRfZGVsYCwgYHZsYW5fZGV2X3J4X2tpbGxfdmxhbmAsIGV0Yy4gd2lsbCBiZSB0ZWxsaW5nLiBUaGVzZSBhcmUgdGhlIHdvcmtob3JzZXMuXG4qICAgKipDb250cm9sIEZsb3c6KiogSXMgdGhpcyB3aXRoaW4gYW4gYGlmYCBibG9jaz8gV2hhdCBhcmUgdGhlIGNvbmRpdGlvbnM/IEFyZSB0aGVyZSBjaGVja3MgZm9yIHNwZWNpZmljIFZMQU4gSURzLCBjb25maWd1cmF0aW9ucyAoZS5nLiwgdGFnZ2VkIHZzLiB1bnRhZ2dlZCksIG9yIHBvcnQgc3RhdGVzPyBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBsb2dpYy5cbiogICAqKkNvbnRleHQ6KiogV2hhdCdzIHRoZSBzdXJyb3VuZGluZyBjb2RlIGRvaW5nPyBJcyBpdCBoYW5kbGluZyBwYWNrZXQgcmVjZXB0aW9uLCB0cmFuc21pc3Npb24sIGJyaWRnZSBwb3J0IHNldHVwLCBvciBWTEFOIGNvbmZpZ3VyYXRpb24gY2hhbmdlcz8gVGhlIGNvbnRleHQgaXMgZXZlcnl0aGluZy5cblxuSSBleHBlY3QgdGhlIGZpcnN0IHJhbmdlLCA4NDAtODYwLCBpcyBtb3N0IGxpa2VseSBkZWFsaW5nIHdpdGggZWl0aGVyIGFkZGluZywgcmVtb3ZpbmcsIG9yIGRlYWxpbmcgd2l0aCB0aGUgaGFuZGxpbmcgb2YgVkxBTiB0YWdzIGFuZCBWSUQncyBvbiBlaXRoZXIgdGhlIGluY29taW5nIG9yIG91dGdvaW5nIHNpZGUgb2YgdGhlIGJyaWRnZS4gVGhlIHNlY29uZCByYW5nZSwgMTM3MC0xMzk1LCBjb3VsZCBiZSByZWxhdGVkIHRvIFZMQU4gZmlsdGVyaW5nLCBWTEFOLWF3YXJlIGZvcndhcmRpbmcgd2l0aGluIHRoZSBicmlkZ2UsIG9yIGhvdyBWTEFOIGluZm9ybWF0aW9uIGlzIHByb3BhZ2F0ZWQgYWNyb3NzIHRoZSBicmlkZ2VkIGludGVyZmFjZS5cblxuRXNzZW50aWFsbHksIEknbSBtZW50YWxseSBwYXJzaW5nIHRoZSBjb2RlLCBsb29raW5nIGZvciB0aGUgKndobyosIHRoZSAqd2hhdCosIHRoZSAqaG93KiwgYW5kIHRoZSAqd2h5KiBvZiB0aGUgVkxBTiBvcGVyYXRpb25zIHdpdGhpbiB0aGVzZSBzcGVjaWZpYyBjb2RlIHNlZ21lbnRzLiBGcm9tIHRoZXJlLCBJIGNhbiBjb25zdHJ1Y3QgYSBjb2hlc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29kZSB3b3JrcyBhbmQgd2hlcmUgaW1wcm92ZW1lbnRzIGNhbiBiZSBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzEzMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjQzLjM0MDg2MTQwM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODQwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODQwOlxcdFxcdGlmICghdiB8fCAhYnJfdmxhbl9pc19icmVudHJ5KHYpKVxcbiA4NDE6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDg0MjpcXHRcXG4gODQzOlxcdFxcdGJyX2ZkYl9maW5kX2RlbGV0ZV9sb2NhbChiciwgTlVMTCwgYnItXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIHZpZCk7XFxuIDg0NDpcXHRcXHRicl9mZGJfZGVsZXRlX2J5X3BvcnQoYnIsIE5VTEwsIHZpZCwgMCk7XFxuIDg0NTpcXHRcXG4gODQ2OlxcdFxcdHZsYW5fdHVubmVsX2luZm9fZGVsKHZnLCB2KTtcXG4gODQ3OlxcdFxcbiA4NDg6XFx0XFx0cmV0dXJuIF9fdmxhbl9kZWwodiwgZmFsc2UpO1xcbiA4NDk6XFx0fVxcbiA4NTA6XFx0XFxuIDg1MTpcXHR2b2lkIGJyX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbiA4NTI6XFx0e1xcbiA4NTM6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XFxuIDg1NDpcXHRcXG4gODU1OlxcdFxcdEFTU0VSVF9SVE5MKCk7XFxuIDg1NjpcXHRcXG4gODU3OlxcdFxcdHZnID0gYnJfdmxhbl9ncm91cChicik7XFxuIDg1ODpcXHRcXHRfX3ZsYW5fZmx1c2goYnIsIE5VTEwsIHZnKTtcXG4gODU5OlxcdFxcdFJDVV9JTklUX1BPSU5URVIoYnItXFx1MDAzZXZsZ3JwLCBOVUxMKTtcXG4gODYwOlxcdFxcdHN5bmNocm9uaXplX25ldCgpO1xcbiA4NjE6XFx0XFx0X192bGFuX2dyb3VwX2ZyZWUodmcpO1xcbiA4NjI6XFx0fVxcbiA4NjM6XFx0XFxuIDg2NDpcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICpicl92bGFuX2ZpbmQoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsIHUxNiB2aWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjQzLjM0MDk4ODEyM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTk0NjEzMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIEknbSB0aGUgZXhwZXJ0IGFuZCByZWZsZWN0aW5nIG9uIHRoZSBwcm92aWRlZCB0ZXh0ICh3aGljaCBpcyBsaW5lcyAxMzcwLTEzOTUsIHRob3VnaCBJIGRvbid0IGhhdmUgdGhhdCBjb250ZXh0IHlldCkuIEknbGwgYWRvcHQgdGhlIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYW5kIFJlY29uc3RydWN0aW5nIHRoZSBBcmd1bWVudCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gTXkgaW5pdGlhbCByZWFkIG9mIHRoZXNlIGxpbmVzIHN1Z2dlc3RzIGEgZGV0YWlsZWQgZXhwbG9yYXRpb24sIHBvc3NpYmx5IGEgcmVidXR0YWwgb3IgYSBkZXZlbG9wbWVudCBvZiBhIHByZXZpb3VzIGFyZ3VtZW50LiBJJ20gZm9jdXNpbmcgb24gdGhlIGNvcmUgcmVhc29uaW5nIGhlcmUuIEkgbmVlZCB0byBicmVhayBkb3duIHRoZSBjbGFpbXMgYmVpbmcgbWFkZSBpbnRvIHRoZWlyIGNvbnN0aXR1ZW50IHBhcnRzIGFuZCB1bmRlcnN0YW5kIHRoZSBsaW5rYWdlcy5cblxuSXQgbG9va3MgbGlrZSB0aGUgbGluZXMgY2VudGVyIGFyb3VuZCBhIGNyaXRpY2FsIHBvaW50LCBtYXliZSBhIHJlZnV0YXRpb24sIG9yLCBwZXJoYXBzLCBhIG51YW5jZWQgcGVyc3BlY3RpdmUgb24gYSBwcmV2aW91c2x5IGhlbGQgYXNzdW1wdGlvbi4gVGhlIHdyaXRlciBzZWVtcyB0byBiZSB0cnlpbmcgdG8gZXN0YWJsaXNoIGEgaGllcmFyY2h5LCBtYXliZSBvZiBldmlkZW5jZSwgb3IgbWF5YmUgb2YgaW1wb3J0YW5jZSwgSSBjYW4ndCBiZSBzdXJlIHdpdGhvdXQgdGhlIHdob2xlIGNvbnRleHQuIEknbSBzZWVpbmcgYSBjYXJlZnVsIGRhbmNlIGFyb3VuZCBzcGVjaWZpYyB0ZXJtcywgYSBkZWxpYmVyYXRlIHNlbGVjdGlvbiBvZiB2b2NhYnVsYXJ5IHRoYXQgaW5kaWNhdGVzIHByZWNpc2lvbiBpcyBrZXkuIFRoaXMgbGlrZWx5IGluZGljYXRlcyB0aGF0IHRoZSB0b3BpYyBpcyBoaWdobHkgY29udGVzdGVkIG9yIHN1YmplY3QgdG8gbWlzaW50ZXJwcmV0YXRpb24uIEknbSBjb25zaWRlcmluZyB3aGF0IGFsdGVybmF0aXZlIGV4cGxhbmF0aW9ucyBvciBhcmd1bWVudHMgbWlnaHQgYXJpc2UgZnJvbSBhbnkgb2YgdGhlIHN0YXRlbWVudHMgaW4gdGhlIGxpbmVzLiBJIGFtIGxvb2tpbmcgZm9yIHRoZSB3cml0ZXIncyBnb2FsIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhlIGRpc2NvdXJzZSwgaXRzIHBvc3NpYmxlIHdlYWtuZXNzZXMsIGFuZCB3aGV0aGVyIGl0IGNvdWxkIGJlIGZ1cnRoZXIgZWxhYm9yYXRlZCBvbi4gSSBhbSBhbHNvIHBvbmRlcmluZyBpZiBJIHdvdWxkIGJlIGFibGUgdG8gZXhwYW5kLCBjbGFyaWZ5LCBvciBjcml0aXF1ZSB0aGlzIHNwZWNpZmljIGFyZ3VtZW50LiBUaGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYXBwZWFycyB0byBiZSBidWlsZGluZyB0b3dhcmRzIGEgc3BlY2lmaWMgY29uY2x1c2lvbiwgYW5kIEkgYW0gYXNzZXNzaW5nIHdoZXRoZXIgdGhhdCBjb25jbHVzaW9uIGlzIGp1c3RpZmllZCBieSB0aGUgbGluZSBvZiByZWFzb25pbmcuIEkgdGhpbmssIGJhc2VkIG9uIHdoYXQgSSBjYW4gc2VlIGhlcmUsIHRoYXQgdGhlcmUgaXMgYW4gdW5kZXJsYXlpbmcgYXNzdW1wdGlvbiB0aGF0IGlzIGVpdGhlciBhKSBjcnVjaWFsIHRvIGFjY2VwdGluZyB0aGUgYXJndW1lbnQgb3IgYikgYW4gYXJlYSBmb3IgZnVydGhlciBkZXZlbG9wbWVudC4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIGl0J3Mgc29tZXRoaW5nIEknZCB3YW50IHRvIHJlYWxseSBkaWcgaW50byBpZiBJIHdlcmUgZXhwbG9yaW5nIHRoaXMgbW9yZSBkZWVwbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTM1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMTo0Ny4zMzU2MDM0NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTEyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM3MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM3MDpcXHRcXG4xMzcxOlxcdFxcdEFTU0VSVF9SVE5MKCk7XFxuMTM3MjpcXHRcXG4xMzczOlxcdFxcdHYgPSBicl92bGFuX2ZpbmQobmJwX3ZsYW5fZ3JvdXAocG9ydCksIHZpZCk7XFxuMTM3NDpcXHRcXHRpZiAoIXYpXFxuMTM3NTpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4xMzc2OlxcdFxcdGJyX2ZkYl9maW5kX2RlbGV0ZV9sb2NhbChwb3J0LVxcdTAwM2ViciwgcG9ydCwgcG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgdmlkKTtcXG4xMzc3OlxcdFxcdGJyX2ZkYl9kZWxldGVfYnlfcG9ydChwb3J0LVxcdTAwM2ViciwgcG9ydCwgdmlkLCAwKTtcXG4xMzc4OlxcdFxcbjEzNzk6XFx0XFx0cmV0dXJuIF9fdmxhbl9kZWwodiwgZmFsc2UpO1xcbjEzODA6XFx0fVxcbjEzODE6XFx0XFxuMTM4MjpcXHR2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxuMTM4MzpcXHR7XFxuMTM4NDpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcXG4xMzg1OlxcdFxcbjEzODY6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4xMzg3OlxcdFxcbjEzODg6XFx0XFx0dmcgPSBuYnBfdmxhbl9ncm91cChwb3J0KTtcXG4xMzg5OlxcdFxcdF9fdmxhbl9mbHVzaChwb3J0LVxcdTAwM2ViciwgcG9ydCwgdmcpO1xcbjEzOTA6XFx0XFx0UkNVX0lOSVRfUE9JTlRFUihwb3J0LVxcdTAwM2V2bGdycCwgTlVMTCk7XFxuMTM5MTpcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4xMzkyOlxcdFxcdF9fdmxhbl9ncm91cF9mcmVlKHZnKTtcXG4xMzkzOlxcdH1cXG4xMzk0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMTo0Ny4zMzU3MTY3MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzM4NzQxMDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCcmlkZ2UgVkxBTiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIHRhcmdldHMgc3BlY2lmaWMgZm9jdXMgc3ltYm9scyByZWxhdGVkIHRvIFZMQU4gb3BlcmF0aW9uczogYF9fdmxhbl9kZWxgLCBgX192bGFuX2ZsdXNoYCwgYGJyX3ZsYW5fZGVsZXRlYCwgYG5icF92bGFuX2RlbGV0ZWAsIGBicl92bGFuX2ZsdXNoYCwgYW5kIGBuYnBfdmxhbl9mbHVzaGAuIExvb2tzIGxpa2UgdGhlIGtleSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgd2l0aGluIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AuIEV4Y2VsbGVudCwga2VlcGluZyB0aGUgc2NvcGUgbWFuYWdlYWJsZSBpcyBjcnVjaWFsLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBvbmx5IG1vZGlmaWVkIGZpbGUgaXMgaW5kZWVkIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AsIHdoaWNoIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGUgdGFyZ2V0IHN5bWJvbHMuIE5vdywgbGV0J3MgY29uc2lkZXIgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgQlJJREdFYCwgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AsIGFuZCBgVkxBTl84MDIxUWAgLSBtYWtlcyBzZW5zZS4gV2UgYXJlIGRlYWxpbmcgd2l0aCBicmlkZ2UgVkxBTiBmdW5jdGlvbmFsaXR5LlxuXG5UaGUgcGF0Y2gncyBpbXBhY3QgYXBwZWFycyB0byByZWZpbmUgaG93IFZMQU5zIGFyZSBkZWxldGVkIGFuZCBmbHVzaGVkIHdpdGhpbiB0aGUgYnJpZGdpbmcgY29udGV4dC4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGUgYHRlYXJkb3duYCBwYXJhbWV0ZXIgdG8gYF9fdmxhbl9kZWxgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gSXQgc3VnZ2VzdHMgYSBtb3JlIHJlc2lsaWVudCBhcHByb2FjaCB0byBkZWxldGlvbiwgYWxsb3dpbmcgaXQgdG8gcHJvY2VlZCBldmVuIGlmIGRyaXZlciBvciBzd2l0Y2hkZXYgY2FsbHMgZW5jb3VudGVyIGVycm9ycyBkdXJpbmcgYSBmbHVzaC4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgaW1wb3J0YW50IGNvbnNpZGVyYXRpb24gZm9yIHJlbGlhYmlsaXR5LiBUaGUgZml4IGZvciB0aGUgdXNlLWFmdGVyLWZyZWUgaW4gYF9fdmxhbl9mbHVzaGAgZXJyb3IgcmVwb3J0aW5nIGlzIGEgY3JpdGljYWwgYnVnIGZpeCwgcHJldmVudGluZyBwb3RlbnRpYWwgY3Jhc2hlcyBvciBtZW1vcnkgY29ycnVwdGlvbiBkdXJpbmcgdGhlc2Ugb3BlcmF0aW9ucy4gRGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiBwb3J0IGFuZCBicmlkZ2UgVkxBTiBlcnJvciBsb2dnaW5nIGluZGljYXRlcyBhIG1vcmUgZ3JhbnVsYXIgYW5kIGluZm9ybWF0aXZlIGRlYnVnZ2luZyBzdHJhdGVneSwgd2hpY2ggaXMgYWx3YXlzIHdlbGNvbWUuIFdlJ3JlIGRlYWxpbmcgd2l0aCBuZXRsaW5rIG9wZXJhdGlvbnMgKGBSVE1fREVMVkxBTmAgYW5kIGxpZmVjeWNsZSBldmVudHMpLlxuXG5BbHJpZ2h0LCBJJ20gc2F0aXNmaWVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NDcsIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6MjE6NTMuNjc0NDU5NzQ4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc3MjEwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCIsXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX192bGFuX2RlbFwiLFxuICAgIFwiX192bGFuX2ZsdXNoXCIsXG4gICAgXCJicl92bGFuX2RlbGV0ZVwiLFxuICAgIFwibmJwX3ZsYW5fZGVsZXRlXCIsXG4gICAgXCJicl92bGFuX2ZsdXNoXCIsXG4gICAgXCJuYnBfdmxhbl9mbHVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgYnJpZGdlIFZMQU4gZGVsZXRpb24gYW5kIGZsdXNoIGhhbmRsaW5nIGluIG5ldC9icmlkZ2UvYnJfdmxhbi5jLiBJdCBpbnRyb2R1Y2VzIGEgdGVhcmRvd24gZmxhZyB0byBlbnN1cmUgYnJpZGdlIGFuZCBwb3J0IFZMQU5zIGFyZSBjbGVhbmVkIHVwIG9uIHRlYXJkb3duL2ZsdXNoIGV2ZW4gaWYgdW5kZXJseWluZyBkZXZpY2Uvc3dpdGNoZGV2IG9wZXJhdGlvbnMgcmV0dXJuIGVycm9ycywgYW5kIGZpeGVzIGVycm9yIGxvZ2dpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBydG5ldGxpbmsgKFJUTV9ERUxWTEFOLCBicmlkZ2UgY29uZmlndXJhdGlvbikgYW5kIGJyaWRnZSBkZXZpY2UgdGVhcmRvd24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfVkxBTl9GSUxURVJJTkdcIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3ZsYW5fZGVsXCIsXG4gICAgXCJfX3ZsYW5fZmx1c2hcIixcbiAgICBcImJyX3ZsYW5fZGVsZXRlXCIsXG4gICAgXCJuYnBfdmxhbl9kZWxldGVcIixcbiAgICBcImJyX3ZsYW5fZmx1c2hcIixcbiAgICBcIm5icF92bGFuX2ZsdXNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBicmlkZ2UgVkxBTiBkZWxldGlvbiBhbmQgZmx1c2ggaGFuZGxpbmcgaW4gbmV0L2JyaWRnZS9icl92bGFuLmMuIEl0IGludHJvZHVjZXMgYSB0ZWFyZG93biBmbGFnIHRvIGVuc3VyZSBicmlkZ2UgYW5kIHBvcnQgVkxBTnMgYXJlIGNsZWFuZWQgdXAgb24gdGVhcmRvd24vZmx1c2ggZXZlbiBpZiB1bmRlcmx5aW5nIGRldmljZS9zd2l0Y2hkZXYgb3BlcmF0aW9ucyByZXR1cm4gZXJyb3JzLCBhbmQgZml4ZXMgZXJyb3IgbG9nZ2luZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHJ0bmV0bGluayAoUlRNX0RFTFZMQU4sIGJyaWRnZSBjb25maWd1cmF0aW9uKSBhbmQgYnJpZGdlIGRldmljZSB0ZWFyZG93bi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6MjE6NTMuNzUyMTg4MDM2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjk5MDEwOTk2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjUzLjc1MjYyNzM4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI2OTg5NjY1MzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBWTEFOIGRlbGV0aW9uIGFuZCBmbHVzaGluZyBsb2dpYyBpbiB0aGUgTGludXggYnJpZGdlIChgbmV0L2JyaWRnZS9icl92bGFuLmNgKS4gU3BlY2lmaWNhbGx5LCBpdCBhZGRzIGEgYHRlYXJkb3duYCBmbGFnIHRvIGBfX3ZsYW5fZGVsKClgIHRvIGVuc3VyZSByZXNvdXJjZSBjbGVhbnVwIGNvbnRpbnVlcyBldmVuIGlmIGRldmljZS9zd2l0Y2hkZXYgVkxBTiBkZWxldGlvbiByZXR1cm5zIGFuIGVycm9yIGR1cmluZyBmbHVzaCwgYXZvaWRzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9uIGBwYCBpbiBgX192bGFuX2ZsdXNoKClgLCBhbmQgc2F2ZXMgYHZsYW4tXFx1MDAzZXZpZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSB0byBwcmV2ZW50IGEgdXNlLWFmdGVyLWZyZWUgcmVhZCBhZnRlciBgX192bGFuX2RlbCgpYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGV4Y2x1c2l2ZWx5IHRvdWNoIGVycm9yIGhhbmRsaW5nLCBjb250cm9sIGZsb3csIGFuZCBvYmplY3QgbGlmZXRpbWUgKE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBhbmQgdXNlLWFmdGVyLWZyZWUgcmlza3MsIGJvdGggY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzIGFuZCBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb3B5IHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIHBhcnNpbmcgbG9naWMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzEzMGZiMjJhMTQwYzRmMmFhYTUxYzFiNGU5NWU2MWVjYjMxZmU2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjIxOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl92bGFuLmMgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xuaW5kZXggMWUwZTQzNjYyOWVjZS4uM2FhMGUxZmVkZWIyNiAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfdmxhbi5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xuQEAgLTM4Nyw3ICszODcsNyBAQCBzdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLFxuIFx0Z290byBvdXQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxuK3N0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCBib29sIHRlYXJkb3duKVxuIHtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYgPSB2O1xuIFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG5AQCAtNDA1LDEzICs0MDUsMTQgQEAgc3RhdGljIGludCBfX3ZsYW5fZGVsKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXG4gXHRfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHYtXHUwMDNldmlkKTtcbiBcdGlmIChwKSB7XG4gXHRcdGVyciA9IF9fdmxhbl92aWRfZGVsKHAtXHUwMDNlZGV2LCBwLVx1MDAzZWJyLCB2KTtcbi1cdFx0aWYgKGVycilcbitcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgIXRlYXJkb3duKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gYnJfc3dpdGNoZGV2X3BvcnRfdmxhbl9kZWwodi1cdTAwM2Vici1cdTAwM2VkZXYsIHYtXHUwMDNldmlkKTtcbi1cdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZXJyICE9IC1FT1BOT1RTVVBQKVxuK1x0XHRpZiAoZXJyID09IC1FT1BOT1RTVVBQKVxuK1x0XHRcdGVyciA9IDA7XG4rXHRcdGVsc2UgaWYgKGVyciBcdTAwMjZcdTAwMjYgIXRlYXJkb3duKVxuIFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRlcnIgPSAwO1xuIFx0fVxuIFxuIFx0aWYgKGJyX3ZsYW5fc2hvdWxkX3VzZSh2KSkge1xuQEAgLTQ0OCw3ICs0NDksNyBAQCBzdGF0aWMgdm9pZCBfX3ZsYW5fZmx1c2goY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHRcdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcbiB7XG4gXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCAqdG1wO1xuLVx0dTE2IHZfc3RhcnQgPSAwLCB2X2VuZCA9IDA7XG4rXHR1MTYgdl9zdGFydCA9IDAsIHZfZW5kID0gMCwgdmlkO1xuIFx0aW50IGVycjtcbiBcbiBcdF9fdmxhbl9kZWxldGVfcHZpZCh2ZywgdmctXHUwMDNlcHZpZCk7XG5AQCAtNDYzLDEyICs0NjQsMTggQEAgc3RhdGljIHZvaWQgX192bGFuX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdFx0fVxuIFx0XHR2X2VuZCA9IHZsYW4tXHUwMDNldmlkO1xuIFxuLVx0XHRlcnIgPSBfX3ZsYW5fZGVsKHZsYW4pO1xuK1x0XHR2aWQgPSB2bGFuLVx1MDAzZXZpZDtcbitcdFx0ZXJyID0gX192bGFuX2RlbCh2bGFuLCB0cnVlKTtcbiBcdFx0aWYgKGVycikge1xuLVx0XHRcdGJyX2Vycihicixcbi1cdFx0XHQgICAgICAgXCJwb3J0ICV1KCVzKSBmYWlsZWQgdG8gZGVsZXRlIHZsYW4gJWQ6ICVwZVxcblwiLFxuLVx0XHRcdCAgICAgICAodW5zaWduZWQgaW50KSBwLVx1MDAzZXBvcnRfbm8sIHAtXHUwMDNlZGV2LVx1MDAzZW5hbWUsXG4tXHRcdFx0ICAgICAgIHZsYW4tXHUwMDNldmlkLCBFUlJfUFRSKGVycikpO1xuK1x0XHRcdGlmIChwKVxuK1x0XHRcdFx0YnJfZXJyKGJyLFxuK1x0XHRcdFx0ICAgICAgIFwicG9ydCAldSglcykgZmFpbGVkIHRvIGRlbGV0ZSB2bGFuICVkOiAlcGVcXG5cIixcbitcdFx0XHRcdCAgICAgICAodW5zaWduZWQgaW50KXAtXHUwMDNlcG9ydF9ubywgcC1cdTAwM2VkZXYtXHUwMDNlbmFtZSxcbitcdFx0XHRcdCAgICAgICB2aWQsIEVSUl9QVFIoZXJyKSk7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0YnJfZXJyKGJyLFxuK1x0XHRcdFx0ICAgICAgIFwiZmFpbGVkIHRvIGRlbGV0ZSBicmlkZ2UgdmxhbiAlZDogJXBlXFxuXCIsXG4rXHRcdFx0XHQgICAgICAgdmlkLCBFUlJfUFRSKGVycikpO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtODM4LDcgKzg0NSw3IEBAIGludCBicl92bGFuX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQpXG4gXG4gXHR2bGFuX3R1bm5lbF9pbmZvX2RlbCh2Zywgdik7XG4gXG4tXHRyZXR1cm4gX192bGFuX2RlbCh2KTtcbitcdHJldHVybiBfX3ZsYW5fZGVsKHYsIGZhbHNlKTtcbiB9XG4gXG4gdm9pZCBicl92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbkBAIC0xMzY5LDcgKzEzNzYsNyBAQCBpbnQgbmJwX3ZsYW5fZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQpXG4gXHRicl9mZGJfZmluZF9kZWxldGVfbG9jYWwocG9ydC1cdTAwM2ViciwgcG9ydCwgcG9ydC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIHZpZCk7XG4gXHRicl9mZGJfZGVsZXRlX2J5X3BvcnQocG9ydC1cdTAwM2ViciwgcG9ydCwgdmlkLCAwKTtcbiBcbi1cdHJldHVybiBfX3ZsYW5fZGVsKHYpO1xuK1x0cmV0dXJuIF9fdmxhbl9kZWwodiwgZmFsc2UpO1xuIH1cbiBcbiB2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMTo1My43NTI2Mjg0NjZaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk3MzM0MDczOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCcmlkZ2UgVkxBTiBDb2RlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIFZMQU4gZnVuY3Rpb25hbGl0eSB3aXRoaW4gYSBicmlkZ2Ugc2V0dXAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY2hhbmdlcyBhbmQgdGhlaXIgY29udGV4dC4gSSB3YW50IGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiAqd2h5KiB0aGlzIG1vZGlmaWNhdGlvbiBpcyBoYXBwZW5pbmcuIEkgbmVlZCB0byBzZWUgdGhlIFwiYmVmb3JlXCIgc3RhdGUgYW5kIHRoZSBcImFmdGVyXCIgc3RhdGUgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGFjdC5cblxuSSdtIHRoaW5raW5nIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgaXMgdG8gcHVsbCB1cCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgZmlsZS4gTGV0J3MgdXNlIGByZWFkLWZpbGVgIGFuZCB6ZXJvIGluIG9uIGxpbmVzIDM4MCB0aHJvdWdoIDQ4MCBvZiBgbmV0L2JyaWRnZS9icl92bGFuLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCB3aW5kb3cgaW50byB0aGUgYXJlYSBvZiBjb2RlIHRoZSBwYXRjaCBpcyB3b3JraW5nIHdpdGguIEZyb20gdGhlcmUsIEkgY2FuIGFzc2VzcyB0aGUgbG9naWMgYW5kIGRhdGEgc3RydWN0dXJlcyBhZmZlY3RlZCBhbmQgc2VlIHdoZXJlIHRoaXMgbW9kaWZpY2F0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBWTEFOIGhhbmRsaW5nIHdpdGhpbiB0aGUgYnJpZGdlLiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBmb3JtdWxhdGUgYSBzb3VuZCBvcGluaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMjoxMy40ODYwMzk1MzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODA6XFx0XFx0XFx0XFx0YnJfdmxhbl9wdXRfbWFzdGVyKG1hc3RlcnYpO1xcbiAzODE6XFx0XFx0XFx0XFx0di1cXHUwMDNlYnJ2bGFuID0gTlVMTDtcXG4gMzgyOlxcdFxcdFxcdH1cXG4gMzgzOlxcdFxcdH0gZWxzZSB7XFxuIDM4NDpcXHRcXHRcXHRicl9zd2l0Y2hkZXZfcG9ydF92bGFuX2RlbChkZXYsIHYtXFx1MDAzZXZpZCk7XFxuIDM4NTpcXHRcXHR9XFxuIDM4NjpcXHRcXG4gMzg3OlxcdFxcdGdvdG8gb3V0O1xcbiAzODg6XFx0fVxcbiAzODk6XFx0XFxuIDM5MDpcXHRzdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgYm9vbCB0ZWFyZG93bilcXG4gMzkxOlxcdHtcXG4gMzkyOlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYgPSB2O1xcbiAzOTM6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XFxuIDM5NDpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwID0gTlVMTDtcXG4gMzk1OlxcdFxcdGludCBlcnIgPSAwO1xcbiAzOTY6XFx0XFxuIDM5NzpcXHRcXHRpZiAoYnJfdmxhbl9pc19tYXN0ZXIodikpIHtcXG4gMzk4OlxcdFxcdFxcdHZnID0gYnJfdmxhbl9ncm91cCh2LVxcdTAwM2Vicik7XFxuIDM5OTpcXHRcXHR9IGVsc2Uge1xcbiA0MDA6XFx0XFx0XFx0cCA9IHYtXFx1MDAzZXBvcnQ7XFxuIDQwMTpcXHRcXHRcXHR2ZyA9IG5icF92bGFuX2dyb3VwKHYtXFx1MDAzZXBvcnQpO1xcbiA0MDI6XFx0XFx0XFx0bWFzdGVydiA9IHYtXFx1MDAzZWJydmxhbjtcXG4gNDAzOlxcdFxcdH1cXG4gNDA0OlxcdFxcbiA0MDU6XFx0XFx0X192bGFuX2RlbGV0ZV9wdmlkKHZnLCB2LVxcdTAwM2V2aWQpO1xcbiA0MDY6XFx0XFx0aWYgKHApIHtcXG4gNDA3OlxcdFxcdFxcdGVyciA9IF9fdmxhbl92aWRfZGVsKHAtXFx1MDAzZWRldiwgcC1cXHUwMDNlYnIsIHYpO1xcbiA0MDg6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiAhdGVhcmRvd24pXFxuIDQwOTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNDEwOlxcdFxcdH0gZWxzZSB7XFxuIDQxMTpcXHRcXHRcXHRlcnIgPSBicl9zd2l0Y2hkZXZfcG9ydF92bGFuX2RlbCh2LVxcdTAwM2Vici1cXHUwMDNlZGV2LCB2LVxcdTAwM2V2aWQpO1xcbiA0MTI6XFx0XFx0XFx0aWYgKGVyciA9PSAtRU9QTk9UU1VQUClcXG4gNDEzOlxcdFxcdFxcdFxcdGVyciA9IDA7XFxuIDQxNDpcXHRcXHRcXHRlbHNlIGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgIXRlYXJkb3duKVxcbiA0MTU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQxNjpcXHRcXHR9XFxuIDQxNzpcXHRcXG4gNDE4OlxcdFxcdGlmIChicl92bGFuX3Nob3VsZF91c2UodikpIHtcXG4gNDE5OlxcdFxcdFxcdHYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5CUklER0VfVkxBTl9JTkZPX0JSRU5UUlk7XFxuIDQyMDpcXHRcXHRcXHR2Zy1cXHUwMDNlbnVtX3ZsYW5zLS07XFxuIDQyMTpcXHRcXHR9XFxuIDQyMjpcXHRcXG4gNDIzOlxcdFxcdGlmIChtYXN0ZXJ2ICE9IHYpIHtcXG4gNDI0OlxcdFxcdFxcdHZsYW5fdHVubmVsX2luZm9fZGVsKHZnLCB2KTtcXG4gNDI1OlxcdFxcdFxcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXFx1MDAyNnZnLVxcdTAwM2V2bGFuX2hhc2gsIFxcdTAwMjZ2LVxcdTAwM2V2bm9kZSxcXG4gNDI2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBicl92bGFuX3JodF9wYXJhbXMpO1xcbiA0Mjc6XFx0XFx0XFx0X192bGFuX2RlbF9saXN0KHYpO1xcbiA0Mjg6XFx0XFx0XFx0bmJwX3ZsYW5fc2V0X3ZsYW5fZGV2X3N0YXRlKHAsIHYtXFx1MDAzZXZpZCk7XFxuIDQyOTpcXHRcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHYsIGZhbHNlKTtcXG4gNDMwOlxcdFxcdFxcdGJyX211bHRpY2FzdF9wb3J0X2N0eF9kZWluaXQoXFx1MDAyNnYtXFx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcXG4gNDMxOlxcdFxcdFxcdGNhbGxfcmN1KFxcdTAwMjZ2LVxcdTAwM2VyY3UsIG5icF92bGFuX3JjdV9mcmVlKTtcXG4gNDMyOlxcdFxcdH1cXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0YnJfdmxhbl9wdXRfbWFzdGVyKG1hc3RlcnYpO1xcbiA0MzU6XFx0b3V0OlxcbiA0MzY6XFx0XFx0cmV0dXJuIGVycjtcXG4gNDM3OlxcdH1cXG4gNDM4OlxcdFxcbiA0Mzk6XFx0c3RhdGljIHZvaWQgX192bGFuX2dyb3VwX2ZyZWUoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcpXFxuIDQ0MDpcXHR7XFxuIDQ0MTpcXHRcXHRXQVJOX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0KSk7XFxuIDQ0MjpcXHRcXHRyaGFzaHRhYmxlX2Rlc3Ryb3koXFx1MDAyNnZnLVxcdTAwM2V2bGFuX2hhc2gpO1xcbiA0NDM6XFx0XFx0dmxhbl90dW5uZWxfZGVpbml0KHZnKTtcXG4gNDQ0OlxcdFxcdGtmcmVlKHZnKTtcXG4gNDQ1OlxcdH1cXG4gNDQ2OlxcdFxcbiA0NDc6XFx0c3RhdGljIHZvaWQgX192bGFuX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4gNDQ4OlxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbiA0NDk6XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxcbiA0NTA6XFx0e1xcbiA0NTE6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgKnRtcDtcXG4gNDUyOlxcdFxcdHUxNiB2X3N0YXJ0ID0gMCwgdl9lbmQgPSAwLCB2aWQ7XFxuIDQ1MzpcXHRcXHRpbnQgZXJyO1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHZnLVxcdTAwM2VwdmlkKTtcXG4gNDU2OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bGFuLCB0bXAsIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xcbiA0NTc6XFx0XFx0XFx0LyogdGFrZSBjYXJlIG9mIGRpc2pvaW50IHJhbmdlcyAqL1xcbiA0NTg6XFx0XFx0XFx0aWYgKCF2X3N0YXJ0KSB7XFxuIDQ1OTpcXHRcXHRcXHRcXHR2X3N0YXJ0ID0gdmxhbi1cXHUwMDNldmlkO1xcbiA0NjA6XFx0XFx0XFx0fSBlbHNlIGlmICh2bGFuLVxcdTAwM2V2aWQgLSB2X2VuZCAhPSAxKSB7XFxuIDQ2MTpcXHRcXHRcXHRcXHQvKiBmb3VuZCByYW5nZSBlbmQsIG5vdGlmeSBhbmQgc3RhcnQgbmV4dCBvbmUgKi9cXG4gNDYyOlxcdFxcdFxcdFxcdGJyX3ZsYW5fbm90aWZ5KGJyLCBwLCB2X3N0YXJ0LCB2X2VuZCwgUlRNX0RFTFZMQU4pO1xcbiA0NjM6XFx0XFx0XFx0XFx0dl9zdGFydCA9IHZsYW4tXFx1MDAzZXZpZDtcXG4gNDY0OlxcdFxcdFxcdH1cXG4gNDY1OlxcdFxcdFxcdHZfZW5kID0gdmxhbi1cXHUwMDNldmlkO1xcbiA0NjY6XFx0XFxuIDQ2NzpcXHRcXHRcXHR2aWQgPSB2bGFuLVxcdTAwM2V2aWQ7XFxuIDQ2ODpcXHRcXHRcXHRlcnIgPSBfX3ZsYW5fZGVsKHZsYW4sIHRydWUpO1xcbiA0Njk6XFx0XFx0XFx0aWYgKGVycikge1xcbiA0NzA6XFx0XFx0XFx0XFx0aWYgKHApXFxuIDQ3MTpcXHRcXHRcXHRcXHRcXHRicl9lcnIoYnIsXFxuIDQ3MjpcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcInBvcnQgJXUoJXMpIGZhaWxlZCB0byBkZWxldGUgdmxhbiAlZDogJXBlXFxcXG5cXFwiLFxcbiA0NzM6XFx0XFx0XFx0XFx0XFx0ICAgICAgICh1bnNpZ25lZCBpbnQpcC1cXHUwMDNlcG9ydF9ubywgcC1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lLFxcbiA0NzQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTtcXG4gNDc1OlxcdFxcdFxcdFxcdGVsc2VcXG4gNDc2OlxcdFxcdFxcdFxcdFxcdGJyX2VycihicixcXG4gNDc3OlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwiZmFpbGVkIHRvIGRlbGV0ZSBicmlkZ2UgdmxhbiAlZDogJXBlXFxcXG5cXFwiLFxcbiA0Nzg6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTtcXG4gNDc5OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6MjI6MTMuNDg2MjMwMjQ3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcyNTYwNDQxOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaW4gYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCBmb2N1c2VzIG9uIFZMQU4gZGVsZXRpb24gYW5kIGZsdXNoaW5nIHdpdGhpbiB0aGUgYnJpZGdpbmcgY29kZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBmb2N1c2VkIG9uIGltcHJvdmluZyBlcnJvciBoYW5kbGluZyBhbmQgcHJldmVudGluZyBzb21lIHN1YnRsZSBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYW5kIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuXG5cblRoZSBjb3JlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgdGhlIGludHJvZHVjdGlvbiBvZiBhIGB0ZWFyZG93bmAgZmxhZyBpbiBgX192bGFuX2RlbGAuIFRoaXMgZmxhZyBzZWVtcyB0byBkaWN0YXRlIGhvdyBhZ2dyZXNzaXZlbHkgVkxBTiBlbnRyaWVzIGFyZSBjbGVhbmVkIHVwLCBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiBlcnJvcnMgZHVyaW5nIHRoZSBkZWxldGlvbiBvZiBWTEFOIElEcyAoYF9fdmxhbl92aWRfZGVsYCkgb3Igd2hlbiBpbnRlcmFjdGluZyB3aXRoIHN3aXRjaGRldiAoYGJyX3N3aXRjaGRldl9wb3J0X3ZsYW5fZGVsYCkuIFRoZSBoYW5kbGluZyBvZiB0aGUgYC1FT1BOT1RTVVBQYCBlcnJvciBpcyBhbHNvIHdvcnRoIG5vdGluZzsgaXQgbm9ybWFsaXplcyB0aGlzIGVycm9yIGZvciB0ZWFyZG93biBzaXR1YXRpb25zLiBUaGlzIGltcGxpZXMgYSBoaWdoZXIgdG9sZXJhbmNlIGZvciBjZXJ0YWluIGVycm9ycyBkdXJpbmcgYSBmdWxsIGJyaWRnZSB0ZWFyZG93biBjb21wYXJlZCB0byBzdGFuZGFyZCBWTEFOIGRlbGV0aW9uLlxuXG5UaGUgc2Vjb25kIGFyZWEgb2YgY29uY2VybiBpcyBpbiBgX192bGFuX2ZsdXNoYC4gSXQgbG9va3MgbGlrZSB0aGUgY29kZSB3YXMgYWNjZXNzaW5nIGBwLVx1MDAzZXBvcnRfbm9gIGFuZCBgdmxhbi1cdTAwM2V2aWRgIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byBwcm9ibGVtcy4gU3BlY2lmaWNhbGx5LCBgcGAgY2FuIGJlIGBOVUxMYCBpbiB0aGUgY2FzZSBvZiBmbHVzaGluZyB0aGUgYnJpZGdlJ3Mgb3duIFZMQU4gZ3JvdXAsIGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEFuZCwgYHZsYW5gIGNvdWxkIGJlIGZyZWVkIGJ5IHRoZSBkZWxldGlvbiBwcm9jZXNzIGJlZm9yZSBpdHMgVklEIGlzIGFjY2Vzc2VkLCBsZWFkaW5nIHRvIGEgVXNlLUFmdGVyLUZyZWUuIFRoZSBmaXggaGVyZSBpcyB0byBzYXZlIHRoZSBWTEFOIElEIHRvIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIGNhbGxpbmcgYF9fdmxhbl9kZWxgIGFuZCBpbmNsdWRlIGFuIGBpZiAocClgIGNvbmRpdGlvbmFsLlxuXG5JJ3ZlIGV4YW1pbmVkIHRoZSBjb2RlIGNhcmVmdWxseSBhbmQgZGV0ZXJtaW5lZCB0aGF0IGl0IGRvZXNuJ3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgbmV3IGF2ZW51ZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBsZWFrYWdlLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgZGlyZWN0IG1vZGlmaWNhdGlvbnMgdG8ga2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGZpZWxkcyBiZWluZyBwYXNzZWQgYWxvbmcuIFRoZSBsb2dpYyBhcHBlYXJzIHNvdW5kLCB3aXRoIHBhcmFtZXRlcnMgaW5pdGlhbGl6ZWQgYnkgY2FsbGVycyBhbmQgaW50ZXJtZWRpYXRlIHZhcmlhYmxlcyBiZWluZyBjYXJlZnVsbHkgaW5pdGlhbGl6ZWQgdG8gYXZvaWQgdW5kZWZpbmVkIGJlaGF2aW9yLlxuXG5HaXZlbiB0aGF0IEtBU0FOLCBLTVNBTiwgTE9DS0RFUCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMsIGFuZCBjcmFzaCBoYW5kbGVycyBjb3ZlciB0aGUgaXNzdWVzIGJlaW5nIGFkZHJlc3NlZCBpbiB0aGUgcGF0Y2gsIHdoaWNoIGFyZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIFVBRiwgYW5kIG5vIG5ldyBtZWFucyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAuXG5cblNvLCBpbiBzaG9ydCwgdGhpcyBwYXRjaCB0aWdodGVucyB1cCB0aGUgVkxBTiBkZWxldGlvbiBsb2dpYyB0byBwcmV2ZW50IHNvbWUgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFuZCB0byBpbXByb3ZlIGNsZWFudXAsIGVzcGVjaWFsbHkgZHVyaW5nIGZ1bGwgYnJpZGdlIHRlYXJkb3duLiBUaGUgcHJpbWFyeSBjb25jZXJucyBzZWVtIHRvIGJlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIFVzZS1BZnRlci1GcmVlLCBidXQgdGhlIHBhdGNoIGFkZHJlc3NlcyB0aGVzZSBhbmQgdGhlcmUgYXJlIG5vIHZ1bG5lcmFiaWxpdGllcyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIEFsbCB0aGUgY2hhbmdlcyBzZWVtIHRvIGJlIGNvcnJlY3QgYW5kIHRoaXMgcGF0Y2ggc2hvdWxkIGJlIG1hcmtlZCBgTmVlZHNLTVNBTiA9IGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4OCwiT3V0cHV0VG9rZW5zIjoyMTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMjoyMC43NDIyNzc3ODhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFZMQU4gZGVsZXRpb24gYW5kIGZsdXNoaW5nIGxvZ2ljIGluIHRoZSBMaW51eCBicmlkZ2UgKGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2ApLiBTcGVjaWZpY2FsbHksIGl0IGFkZHMgYSBgdGVhcmRvd25gIGZsYWcgdG8gYF9fdmxhbl9kZWwoKWAgdG8gZW5zdXJlIHJlc291cmNlIGNsZWFudXAgY29udGludWVzIGV2ZW4gaWYgZGV2aWNlL3N3aXRjaGRldiBWTEFOIGRlbGV0aW9uIHJldHVybnMgYW4gZXJyb3IgZHVyaW5nIGZsdXNoLCBhdm9pZHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24gYHBgIGluIGBfX3ZsYW5fZmx1c2goKWAsIGFuZCBzYXZlcyBgdmxhbi1cXHUwMDNldmlkYCB0byBhIGxvY2FsIHZhcmlhYmxlIHRvIHByZXZlbnQgYSB1c2UtYWZ0ZXItZnJlZSByZWFkIGFmdGVyIGBfX3ZsYW5fZGVsKClgLlxcblxcblRoZXNlIGNoYW5nZXMgZXhjbHVzaXZlbHkgdG91Y2ggZXJyb3IgaGFuZGxpbmcsIGNvbnRyb2wgZmxvdywgYW5kIG9iamVjdCBsaWZldGltZSAoTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcywgYm90aCBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBjaGVja3MgYW5kIEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvcHkgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBidWZmZXIgcGFyc2luZyBsb2dpYy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBWTEFOIGRlbGV0aW9uIGFuZCBmbHVzaGluZyBsb2dpYyBpbiB0aGUgTGludXggYnJpZGdlIChgbmV0L2JyaWRnZS9icl92bGFuLmNgKS4gU3BlY2lmaWNhbGx5LCBpdCBhZGRzIGEgYHRlYXJkb3duYCBmbGFnIHRvIGBfX3ZsYW5fZGVsKClgIHRvIGVuc3VyZSByZXNvdXJjZSBjbGVhbnVwIGNvbnRpbnVlcyBldmVuIGlmIGRldmljZS9zd2l0Y2hkZXYgVkxBTiBkZWxldGlvbiByZXR1cm5zIGFuIGVycm9yIGR1cmluZyBmbHVzaCwgYXZvaWRzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9uIGBwYCBpbiBgX192bGFuX2ZsdXNoKClgLCBhbmQgc2F2ZXMgYHZsYW4tXFx1MDAzZXZpZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSB0byBwcmV2ZW50IGEgdXNlLWFmdGVyLWZyZWUgcmVhZCBhZnRlciBgX192bGFuX2RlbCgpYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGV4Y2x1c2l2ZWx5IHRvdWNoIGVycm9yIGhhbmRsaW5nLCBjb250cm9sIGZsb3csIGFuZCBvYmplY3QgbGlmZXRpbWUgKE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBhbmQgdXNlLWFmdGVyLWZyZWUgcmlza3MsIGJvdGggY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzIGFuZCBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb3B5IHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIHBhcnNpbmcgbG9naWMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowchn4z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 11:37:28 +0000 UTC FinishedAt: 2026-09-11 12:22:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_VLAN_FILTERING", "VLAN_8021Q" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_VLAN_FILTERING", "VLAN_8021Q" ], "series_id": "6eca8c6c-237c-456d-8ac2-8e4ae06e9683" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__vlan_del", "__vlan_flush", "br_vlan_delete", "nbp_vlan_delete", "br_vlan_flush", "nbp_vlan_flush" ], "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+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfVkxBTl9GSUxURVJJTkcmIzM0OywKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdmxhbl9kZWwmIzM0OywKICAgICYjMzQ7X192bGFuX2ZsdXNoJiMzNDssCiAgICAmIzM0O2JyX3ZsYW5fZGVsZXRlJiMzNDssCiAgICAmIzM0O25icF92bGFuX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDticl92bGFuX2ZsdXNoJiMzNDssCiAgICAmIzM0O25icF92bGFuX2ZsdXNoJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgVkxBTiBkZWxldGlvbiBhbmQgZmx1c2hpbmcgbG9naWMgaW4gdGhlIExpbnV4IGJyaWRnZSAoYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCkuIFNwZWNpZmljYWxseSwgaXQgYWRkcyBhIGB0ZWFyZG93bmAgZmxhZyB0byBgX192bGFuX2RlbCgpYCB0byBlbnN1cmUgcmVzb3VyY2UgY2xlYW51cCBjb250aW51ZXMgZXZlbiBpZiBkZXZpY2Uvc3dpdGNoZGV2IFZMQU4gZGVsZXRpb24gcmV0dXJucyBhbiBlcnJvciBkdXJpbmcgZmx1c2gsIGF2b2lkcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiBgcGAgaW4gYF9fdmxhbl9mbHVzaCgpYCwgYW5kIHNhdmVzIGB2bGFuLVx1MDAzZXZpZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSB0byBwcmV2ZW50IGEgdXNlLWFmdGVyLWZyZWUgcmVhZCBhZnRlciBgX192bGFuX2RlbCgpYC5cblxuVGhlc2UgY2hhbmdlcyBleGNsdXNpdmVseSB0b3VjaCBlcnJvciBoYW5kbGluZywgY29udHJvbCBmbG93LCBhbmQgb2JqZWN0IGxpZmV0aW1lIChOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIHVzZS1hZnRlci1mcmVlIHJpc2tzLCBib3RoIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGNoZWNrcyBhbmQgS0FTQU4pLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29weSBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBwYXJzaW5nIGxvZ2ljLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJyaWRnZSBWTEFOIGRlbGV0aW9uIGFuZCBmbHVzaCBoYW5kbGluZyBpbiBuZXQvYnJpZGdlL2JyX3ZsYW4uYy4gSXQgaW50cm9kdWNlcyBhIHRlYXJkb3duIGZsYWcgdG8gZW5zdXJlIGJyaWRnZSBhbmQgcG9ydCBWTEFOcyBhcmUgY2xlYW5lZCB1cCBvbiB0ZWFyZG93bi9mbHVzaCBldmVuIGlmIHVuZGVybHlpbmcgZGV2aWNlL3N3aXRjaGRldiBvcGVyYXRpb25zIHJldHVybiBlcnJvcnMsIGFuZCBmaXhlcyBlcnJvciBsb2dnaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMVkxBTiwgYnJpZGdlIGNvbmZpZ3VyYXRpb24pIGFuZCBicmlkZ2UgZGV2aWNlIHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzEzMGZiMjJhMTQwYzRmMmFhYTUxYzFiNGU5NWU2MWVjYjMxZmU2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjIxOjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfdmxhbi5jIGIvbmV0L2JyaWRnZS9icl92bGFuLmNcbmluZGV4IDFlMGU0MzY2MjllY2UuLjNhYTBlMWZlZGViMjYgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl92bGFuLmNcbkBAIC0zODcsNyAmIzQzOzM4Nyw3IEBAIHN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXG4gXHRnb3RvIG91dDtcbiB9XG4gXG4tc3RhdGljIGludCBfX3ZsYW5fZGVsKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXG4mIzQzO3N0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCBib29sIHRlYXJkb3duKVxuIHtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYgPSB2O1xuIFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG5AQCAtNDA1LDEzICYjNDM7NDA1LDE0IEBAIHN0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxuIFx0X192bGFuX2RlbGV0ZV9wdmlkKHZnLCB2LVx1MDAzZXZpZCk7XG4gXHRpZiAocCkge1xuIFx0XHRlcnIgPSBfX3ZsYW5fdmlkX2RlbChwLVx1MDAzZWRldiwgcC1cdTAwM2Viciwgdik7XG4tXHRcdGlmIChlcnIpXG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiAhdGVhcmRvd24pXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9IGVsc2Uge1xuIFx0XHRlcnIgPSBicl9zd2l0Y2hkZXZfcG9ydF92bGFuX2RlbCh2LVx1MDAzZWJyLVx1MDAzZWRldiwgdi1cdTAwM2V2aWQpO1xuLVx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVPUE5PVFNVUFApXG4mIzQzO1x0XHRpZiAoZXJyID09IC1FT1BOT1RTVVBQKVxuJiM0MztcdFx0XHRlcnIgPSAwO1xuJiM0MztcdFx0ZWxzZSBpZiAoZXJyIFx1MDAyNlx1MDAyNiAhdGVhcmRvd24pXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdGVyciA9IDA7XG4gXHR9XG4gXG4gXHRpZiAoYnJfdmxhbl9zaG91bGRfdXNlKHYpKSB7XG5AQCAtNDQ4LDcgJiM0Mzs0NDksNyBAQCBzdGF0aWMgdm9pZCBfX3ZsYW5fZmx1c2goY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHRcdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcbiB7XG4gXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCAqdG1wO1xuLVx0dTE2IHZfc3RhcnQgPSAwLCB2X2VuZCA9IDA7XG4mIzQzO1x0dTE2IHZfc3RhcnQgPSAwLCB2X2VuZCA9IDAsIHZpZDtcbiBcdGludCBlcnI7XG4gXG4gXHRfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHZnLVx1MDAzZXB2aWQpO1xuQEAgLTQ2MywxMiAmIzQzOzQ2NCwxOCBAQCBzdGF0aWMgdm9pZCBfX3ZsYW5fZmx1c2goY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHR9XG4gXHRcdHZfZW5kID0gdmxhbi1cdTAwM2V2aWQ7XG4gXG4tXHRcdGVyciA9IF9fdmxhbl9kZWwodmxhbik7XG4mIzQzO1x0XHR2aWQgPSB2bGFuLVx1MDAzZXZpZDtcbiYjNDM7XHRcdGVyciA9IF9fdmxhbl9kZWwodmxhbiwgdHJ1ZSk7XG4gXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRicl9lcnIoYnIsXG4tXHRcdFx0ICAgICAgIFwmIzM0O3BvcnQgJXUoJXMpIGZhaWxlZCB0byBkZWxldGUgdmxhbiAlZDogJXBlXFxuXCYjMzQ7LFxuLVx0XHRcdCAgICAgICAodW5zaWduZWQgaW50KSBwLVx1MDAzZXBvcnRfbm8sIHAtXHUwMDNlZGV2LVx1MDAzZW5hbWUsXG4tXHRcdFx0ICAgICAgIHZsYW4tXHUwMDNldmlkLCBFUlJfUFRSKGVycikpO1xuJiM0MztcdFx0XHRpZiAocClcbiYjNDM7XHRcdFx0XHRicl9lcnIoYnIsXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O3BvcnQgJXUoJXMpIGZhaWxlZCB0byBkZWxldGUgdmxhbiAlZDogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICAodW5zaWduZWQgaW50KXAtXHUwMDNlcG9ydF9ubywgcC1cdTAwM2VkZXYtXHUwMDNlbmFtZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgdmlkLCBFUlJfUFRSKGVycikpO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0YnJfZXJyKGJyLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtmYWlsZWQgdG8gZGVsZXRlIGJyaWRnZSB2bGFuICVkOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTgzOCw3ICYjNDM7ODQ1LDcgQEAgaW50IGJyX3ZsYW5fZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHZpZClcbiBcbiBcdHZsYW5fdHVubmVsX2luZm9fZGVsKHZnLCB2KTtcbiBcbi1cdHJldHVybiBfX3ZsYW5fZGVsKHYpO1xuJiM0MztcdHJldHVybiBfX3ZsYW5fZGVsKHYsIGZhbHNlKTtcbiB9XG4gXG4gdm9pZCBicl92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbkBAIC0xMzY5LDcgJiM0MzsxMzc2LDcgQEAgaW50IG5icF92bGFuX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkKVxuIFx0YnJfZmRiX2ZpbmRfZGVsZXRlX2xvY2FsKHBvcnQtXHUwMDNlYnIsIHBvcnQsIHBvcnQtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCB2aWQpO1xuIFx0YnJfZmRiX2RlbGV0ZV9ieV9wb3J0KHBvcnQtXHUwMDNlYnIsIHBvcnQsIHZpZCwgMCk7XG4gXG4tXHRyZXR1cm4gX192bGFuX2RlbCh2KTtcbiYjNDM7XHRyZXR1cm4gX192bGFuX2RlbCh2LCBmYWxzZSk7XG4gfVxuIFxuIHZvaWQgbmJwX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3ZsYW5fZGVsJiMzNDssCiAgICAmIzM0O19fdmxhbl9mbHVzaCYjMzQ7LAogICAgJiMzNDticl92bGFuX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9mbHVzaCYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJyaWRnZSBWTEFOIGRlbGV0aW9uIGFuZCBmbHVzaCBoYW5kbGluZyBpbiBuZXQvYnJpZGdlL2JyX3ZsYW4uYy4gSXQgaW50cm9kdWNlcyBhIHRlYXJkb3duIGZsYWcgdG8gZW5zdXJlIGJyaWRnZSBhbmQgcG9ydCBWTEFOcyBhcmUgY2xlYW5lZCB1cCBvbiB0ZWFyZG93bi9mbHVzaCBldmVuIGlmIHVuZGVybHlpbmcgZGV2aWNlL3N3aXRjaGRldiBvcGVyYXRpb25zIHJldHVybiBlcnJvcnMsIGFuZCBmaXhlcyBlcnJvciBsb2dnaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMVkxBTiwgYnJpZGdlIGNvbmZpZ3VyYXRpb24pIGFuZCBicmlkZ2UgZGV2aWNlIHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzEzMGZiMjJhMTQwYzRmMmFhYTUxYzFiNGU5NWU2MWVjYjMxZmU2MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDEyOjIxOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl92bGFuLmMgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uYwppbmRleCAxZTBlNDM2NjI5ZWNlLi4zYWEwZTFmZWRlYjI2IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3ZsYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uYwpAQCAtMzg3LDcgJiM0MzszODcsNyBAQCBzdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLAogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdikKJiM0MztzdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgYm9vbCB0ZWFyZG93bikKIHsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICptYXN0ZXJ2ID0gdjsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZzsKQEAgLTQwNSwxMyAmIzQzOzQwNSwxNCBAQCBzdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdikKIAlfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHYtJmd0O3ZpZCk7CiAJaWYgKHApIHsKIAkJZXJyID0gX192bGFuX3ZpZF9kZWwocC0mZ3Q7ZGV2LCBwLSZndDticiwgdik7Ci0JCWlmIChlcnIpCiYjNDM7CQlpZiAoZXJyICZhbXA7JmFtcDsgIXRlYXJkb3duKQogCQkJZ290byBvdXQ7CiAJfSBlbHNlIHsKIAkJZXJyID0gYnJfc3dpdGNoZGV2X3BvcnRfdmxhbl9kZWwodi0mZ3Q7YnItJmd0O2Rldiwgdi0mZ3Q7dmlkKTsKLQkJaWYgKGVyciAmYW1wOyZhbXA7IGVyciAhPSAtRU9QTk9UU1VQUCkKJiM0MzsJCWlmIChlcnIgPT0gLUVPUE5PVFNVUFApCiYjNDM7CQkJZXJyID0gMDsKJiM0MzsJCWVsc2UgaWYgKGVyciAmYW1wOyZhbXA7ICF0ZWFyZG93bikKIAkJCWdvdG8gb3V0OwotCQllcnIgPSAwOwogCX0KIAogCWlmIChicl92bGFuX3Nob3VsZF91c2UodikpIHsKQEAgLTQ0OCw3ICYjNDM7NDQ5LDcgQEAgc3RhdGljIHZvaWQgX192bGFuX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAkJCSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZykKIHsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCAqdG1wOwotCXUxNiB2X3N0YXJ0ID0gMCwgdl9lbmQgPSAwOwomIzQzOwl1MTYgdl9zdGFydCA9IDAsIHZfZW5kID0gMCwgdmlkOwogCWludCBlcnI7CiAKIAlfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHZnLSZndDtwdmlkKTsKQEAgLTQ2MywxMiAmIzQzOzQ2NCwxOCBAQCBzdGF0aWMgdm9pZCBfX3ZsYW5fZmx1c2goY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCQl9CiAJCXZfZW5kID0gdmxhbi0mZ3Q7dmlkOwogCi0JCWVyciA9IF9fdmxhbl9kZWwodmxhbik7CiYjNDM7CQl2aWQgPSB2bGFuLSZndDt2aWQ7CiYjNDM7CQllcnIgPSBfX3ZsYW5fZGVsKHZsYW4sIHRydWUpOwogCQlpZiAoZXJyKSB7Ci0JCQlicl9lcnIoYnIsCi0JCQkgICAgICAgJiMzNDtwb3J0ICV1KCVzKSBmYWlsZWQgdG8gZGVsZXRlIHZsYW4gJWQ6ICVwZVxuJiMzNDssCi0JCQkgICAgICAgKHVuc2lnbmVkIGludCkgcC0mZ3Q7cG9ydF9ubywgcC0mZ3Q7ZGV2LSZndDtuYW1lLAotCQkJICAgICAgIHZsYW4tJmd0O3ZpZCwgRVJSX1BUUihlcnIpKTsKJiM0MzsJCQlpZiAocCkKJiM0MzsJCQkJYnJfZXJyKGJyLAomIzQzOwkJCQkgICAgICAgJiMzNDtwb3J0ICV1KCVzKSBmYWlsZWQgdG8gZGVsZXRlIHZsYW4gJWQ6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSAgICAgICAodW5zaWduZWQgaW50KXAtJmd0O3BvcnRfbm8sIHAtJmd0O2Rldi0mZ3Q7bmFtZSwKJiM0MzsJCQkJICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCWJyX2VycihiciwKJiM0MzsJCQkJICAgICAgICYjMzQ7ZmFpbGVkIHRvIGRlbGV0ZSBicmlkZ2UgdmxhbiAlZDogJXBlXG4mIzM0OywKJiM0MzsJCQkJICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTsKIAkJfQogCX0KIApAQCAtODM4LDcgJiM0Mzs4NDUsNyBAQCBpbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKQogCiAJdmxhbl90dW5uZWxfaW5mb19kZWwodmcsIHYpOwogCi0JcmV0dXJuIF9fdmxhbl9kZWwodik7CiYjNDM7CXJldHVybiBfX3ZsYW5fZGVsKHYsIGZhbHNlKTsKIH0KIAogdm9pZCBicl92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlICpicikKQEAgLTEzNjksNyAmIzQzOzEzNzYsNyBAQCBpbnQgbmJwX3ZsYW5fZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQpCiAJYnJfZmRiX2ZpbmRfZGVsZXRlX2xvY2FsKHBvcnQtJmd0O2JyLCBwb3J0LCBwb3J0LSZndDtkZXYtJmd0O2Rldl9hZGRyLCB2aWQpOwogCWJyX2ZkYl9kZWxldGVfYnlfcG9ydChwb3J0LSZndDticiwgcG9ydCwgdmlkLCAwKTsKIAotCXJldHVybiBfX3ZsYW5fZGVsKHYpOwomIzQzOwlyZXR1cm4gX192bGFuX2RlbCh2LCBmYWxzZSk7CiB9CiAKIHZvaWQgbmJwX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc3NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZMQU4gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJIHNlZSB0aGUgZm9jdXMgaXMgb24gYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCwgc3BlY2lmaWNhbGx5LiBUaGUgY2hhbmdlcyBzZWVtIGNlbnRlcmVkIGFyb3VuZCBWTEFOIGRlbGV0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYF9fdmxhbl9kZWxgLCBgX192bGFuX2ZsdXNoYCwgYGJyX3ZsYW5fZGVsZXRlYCwgYW5kIGBuYnBfdmxhbl9kZWxldGVgLiBUaGlzIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGxpa2VseSB0d2Vha2luZyB0aGUgVkxBTiByZW1vdmFsIHByb2Nlc3Mgd2l0aGluIHRoZSBicmlkZ2luZyBjb2RlLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGJldHRlci4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSByZWxldmFudCBjb2RlLiBUaW1lIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb250ZW50IG9mIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AgaXRzZWxmLiBJJiMzOTtsbCBhbHNvIG5lZWQgdG8gY2hlY2sgYG5ldC9icmlkZ2UvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtYXkgaW5mbHVlbmNlIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB3aGF0ZXZlciYjMzk7cyBmYXN0ZXN0IOKAkyB0byBnZXQgdGhhdCBzb3VyY2UgY29kZSBwdWxsZWQgdXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhlc2UgbW9kaWZpY2F0aW9ucyBiZWZvcmUgSSBjYW4gZXZlbiBiZWdpbiB0byBhc3Nlc3MgdGhlaXIgaW1wYWN0IGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl92bGFuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4NTpcdFx0fVxuIDM4NjpcdFxuIDM4NzpcdFx0Z290byBvdXQ7XG4gMzg4Olx0fVxuIDM4OTpcdFxuIDM5MDpcdHN0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCBib29sIHRlYXJkb3duKVxuIDM5MTpcdHtcbiAzOTI6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYgPSB2O1xuIDM5MzpcdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG4gMzk0Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwID0gTlVMTDtcbiAzOTU6XHRcdGludCBlcnIgPSAwO1xuIDM5NjpcdFxuIDM5NzpcdFx0aWYgKGJyX3ZsYW5faXNfbWFzdGVyKHYpKSB7XG4gMzk4Olx0XHRcdHZnID0gYnJfdmxhbl9ncm91cCh2LVx1MDAzZWJyKTtcbiAzOTk6XHRcdH0gZWxzZSB7XG4gNDAwOlx0XHRcdHAgPSB2LVx1MDAzZXBvcnQ7XG4gNDAxOlx0XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXAodi1cdTAwM2Vwb3J0KTtcbiA0MDI6XHRcdFx0bWFzdGVydiA9IHYtXHUwMDNlYnJ2bGFuO1xuIDQwMzpcdFx0fVxuIDQwNDpcdFxuIDQwNTpcdFx0X192bGFuX2RlbGV0ZV9wdmlkKHZnLCB2LVx1MDAzZXZpZCk7XG4gNDA2Olx0XHRpZiAocCkge1xuIDQwNzpcdFx0XHRlcnIgPSBfX3ZsYW5fdmlkX2RlbChwLVx1MDAzZWRldiwgcC1cdTAwM2Viciwgdik7XG4gNDA4Olx0XHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2ICF0ZWFyZG93bilcbiA0MDk6XHRcdFx0XHRnb3RvIG91dDtcbiA0MTA6XHRcdH0gZWxzZSB7XG4gNDExOlx0XHRcdGVyciA9IGJyX3N3aXRjaGRldl9wb3J0X3ZsYW5fZGVsKHYtXHUwMDNlYnItXHUwMDNlZGV2LCB2LVx1MDAzZXZpZCk7XG4gNDEyOlx0XHRcdGlmIChlcnIgPT0gLUVPUE5PVFNVUFApXG4gNDEzOlx0XHRcdFx0ZXJyID0gMDtcbiA0MTQ6XHRcdFx0ZWxzZSBpZiAoZXJyIFx1MDAyNlx1MDAyNiAhdGVhcmRvd24pXG4gNDE1Olx0XHRcdFx0Z290byBvdXQ7XG4gNDE2Olx0XHR9XG4gNDE3Olx0XG4gNDE4Olx0XHRpZiAoYnJfdmxhbl9zaG91bGRfdXNlKHYpKSB7XG4gNDE5Olx0XHRcdHYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+QlJJREdFX1ZMQU5fSU5GT19CUkVOVFJZO1xuIDQyMDpcdFx0XHR2Zy1cdTAwM2VudW1fdmxhbnMtLTtcbiA0MjE6XHRcdH1cbiA0MjI6XHRcbiA0MjM6XHRcdGlmIChtYXN0ZXJ2ICE9IHYpIHtcbiA0MjQ6XHRcdFx0dmxhbl90dW5uZWxfaW5mb19kZWwodmcsIHYpO1xuIDQyNTpcdFx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnZnLVx1MDAzZXZsYW5faGFzaCwgXHUwMDI2di1cdTAwM2V2bm9kZSxcbiA0MjY6XHRcdFx0XHRcdCAgICAgICBicl92bGFuX3JodF9wYXJhbXMpO1xuIDQyNzpcdFx0XHRfX3ZsYW5fZGVsX2xpc3Qodik7XG4gNDI4Olx0XHRcdG5icF92bGFuX3NldF92bGFuX2Rldl9zdGF0ZShwLCB2LVx1MDAzZXZpZCk7XG4gNDI5Olx0XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgZmFsc2UpO1xuIDQzMDpcdFx0XHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnYtXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xuIDQzMTpcdFx0XHRjYWxsX3JjdShcdTAwMjZ2LVx1MDAzZXJjdSwgbmJwX3ZsYW5fcmN1X2ZyZWUpO1xuIDQzMjpcdFx0fVxuIDQzMzpcdFxuIDQzNDpcdFx0YnJfdmxhbl9wdXRfbWFzdGVyKG1hc3RlcnYpO1xuIDQzNTpcdG91dDpcbiA0MzY6XHRcdHJldHVybiBlcnI7XG4gNDM3Olx0fVxuIDQzODpcdFxuIDQzOTpcdHN0YXRpYyB2b2lkIF9fdmxhbl9ncm91cF9mcmVlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxuIDQ0MDpcdHtcbiA0NDE6XHRcdFdBUk5fT04oIWxpc3RfZW1wdHkoXHUwMDI2dmctXHUwMDNldmxhbl9saXN0KSk7XG4gNDQyOlx0XHRyaGFzaHRhYmxlX2Rlc3Ryb3koXHUwMDI2dmctXHUwMDNldmxhbl9oYXNoKTtcbiA0NDM6XHRcdHZsYW5fdHVubmVsX2RlaW5pdCh2Zyk7XG4gNDQ0Olx0XHRrZnJlZSh2Zyk7XG4gNDQ1Olx0fVxuIDQ0NjpcdFxuIDQ0NzpcdHN0YXRpYyB2b2lkIF9fdmxhbl9mbHVzaChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gNDQ4Olx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gNDQ5Olx0XHRcdFx0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxuIDQ1MDpcdHtcbiA0NTE6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sICp0bXA7XG4gNDUyOlx0XHR1MTYgdl9zdGFydCA9IDAsIHZfZW5kID0gMCwgdmlkO1xuIDQ1MzpcdFx0aW50IGVycjtcbiA0NTQ6XHRcbiA0NTU6XHRcdF9fdmxhbl9kZWxldGVfcHZpZCh2ZywgdmctXHUwMDNlcHZpZCk7XG4gNDU2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmxhbiwgdG1wLCBcdTAwMjZ2Zy1cdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XG4gNDU3Olx0XHRcdC8qIHRha2UgY2FyZSBvZiBkaXNqb2ludCByYW5nZXMgKi9cbiA0NTg6XHRcdFx0aWYgKCF2X3N0YXJ0KSB7XG4gNDU5Olx0XHRcdFx0dl9zdGFydCA9IHZsYW4tXHUwMDNldmlkO1xuIDQ2MDpcdFx0XHR9IGVsc2UgaWYgKHZsYW4tXHUwMDNldmlkIC0gdl9lbmQgIT0gMSkge1xuIDQ2MTpcdFx0XHRcdC8qIGZvdW5kIHJhbmdlIGVuZCwgbm90aWZ5IGFuZCBzdGFydCBuZXh0IG9uZSAqL1xuIDQ2MjpcdFx0XHRcdGJyX3ZsYW5fbm90aWZ5KGJyLCBwLCB2X3N0YXJ0LCB2X2VuZCwgUlRNX0RFTFZMQU4pO1xuIDQ2MzpcdFx0XHRcdHZfc3RhcnQgPSB2bGFuLVx1MDAzZXZpZDtcbiA0NjQ6XHRcdFx0fVxuIDQ2NTpcdFx0XHR2X2VuZCA9IHZsYW4tXHUwMDNldmlkO1xuIDQ2NjpcdFxuIDQ2NzpcdFx0XHR2aWQgPSB2bGFuLVx1MDAzZXZpZDtcbiA0Njg6XHRcdFx0ZXJyID0gX192bGFuX2RlbCh2bGFuLCB0cnVlKTtcbiA0Njk6XHRcdFx0aWYgKGVycikge1xuIDQ3MDpcdFx0XHRcdGlmIChwKVxuIDQ3MTpcdFx0XHRcdFx0YnJfZXJyKGJyLFxuIDQ3MjpcdFx0XHRcdFx0ICAgICAgIFwmIzM0O3BvcnQgJXUoJXMpIGZhaWxlZCB0byBkZWxldGUgdmxhbiAlZDogJXBlXFxuXCYjMzQ7LFxuIDQ3MzpcdFx0XHRcdFx0ICAgICAgICh1bnNpZ25lZCBpbnQpcC1cdTAwM2Vwb3J0X25vLCBwLVx1MDAzZWRldi1cdTAwM2VuYW1lLFxuIDQ3NDpcdFx0XHRcdFx0ICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjEzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBWTEFOIENvbmZpZ3VyYXRpb24gaW4gQnJpZGdlIE5ldHdvcmtpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gYG5ldC9icmlkZ2UvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBicmlkZ2luZyBmdW5jdGlvbmFsaXR5IHJlc2lkZSBpbiB0aGUga2VybmVsIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIFZMQU4gc3VwcG9ydCBvcHRpb25zLCBob3cgdGhleSYjMzk7cmUgZXhwb3NlZCwgYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhleSBtaWdodCBoYXZlIHdpdGhpbiB0aGUgYnJpZGdlIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHNwZWNpZmljIGBDT05GSUdfYCBmbGFncyBvciBvdGhlciBzZXR0aW5ncyB0aGF0IGVuYWJsZSwgZGlzYWJsZSwgYW5kIGZpbmUtdHVuZSBWTEFOIGJlaGF2aW9yICp3aXRoaW4qIHRoZSBjb250ZXh0IG9mIGEgYnJpZGdlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIG9wdGlvbnMgcmVsYXRlZCB0byBWTEFOIGZpbHRlcmluZywgVkxBTi1hd2FyZSBicmlkZ2luZywgYW5kIHBvdGVudGlhbGx5IHNvbWUgZmluZXItZ3JhaW5lZCBjb250cm9scyBvdmVyIFZMQU4gdGFnZ2luZyBhbmQgdW50YWdnaW5nIGJlaGF2aW9yIG9uIGJyaWRnZSBwb3J0cy4gS25vd2luZyB0aGUgc3BlY2lmaWNzIG9mIHRoZSBLY29uZmlnIGZpbGUgd2lsbCBsZXQgbWUgdW5kZXJzdGFuZCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFuZCBtb2R1bGVzIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgVkxBTnMgdG8gZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL0tjb25maWc9MzY9Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTQ5LVxubmV0L2JyaWRnZS9LY29uZmlnOjUwOmNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy01MS1cdGJvb2wgXCYjMzQ7VkxBTiBmaWx0ZXJpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL01ha2VmaWxlPTIxPWJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgJiM0Mzs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cbm5ldC9icmlkZ2UvTWFrZWZpbGU6MjM6YnJpZGdlLSQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORykgJiM0Mzs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTI0LVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjIzMz1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgYm9vbCBvbilcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIzNC17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklORylcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIzNi1cdGlmIChicl9vcHRfZ2V0KHBvcnQtXHUwMDNlYnIsIEJST1BUX01DQVNUX1ZMQU5fU05PT1BJTkdfRU5BQkxFRCkpIHtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQzNTI9dm9pZCBicl9tdWx0aWNhc3RfdXBkYXRlX3ZsYW5fbWNhc3RfY3R4KHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHU4IHN0YXRlKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzUzLXtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM1NDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzU1LVx0c3RydWN0IG5ldF9icmlkZ2UgKmJyO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTExOTU9c3RhdGljIGludCBicl92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTIwNy1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjEyMDg6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTEyMDktXHRpZiAoZGF0YVtJRkxBX0JSX1ZMQU5fUFJPVE9DT0xdIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTEyOTU9c3RhdGljIGludCBicl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpicmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xMzY3LVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTM2ODojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTM2OS1cdGlmIChkYXRhW0lGTEFfQlJfVkxBTl9QUk9UT0NPTF0pIHtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xNjE5PXN0YXRpYyBzaXplX3QgYnJfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE2MjctXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSkgJiM0MzsgICAgIC8qIElGTEFfQlJfVkxBTl9GSUxURVJJTkcgKi9cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE2Mjg6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE2MjktXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUxNikpICYjNDM7XHQvKiBJRkxBX0JSX1ZMQU5fUFJPVE9DT0wgKi9cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xNjc4PXN0YXRpYyBpbnQgYnJfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicmRldilcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzMwLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTczMTojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTczMi1cdGlmIChubGFfcHV0X2JlMTYoc2tiLCBJRkxBX0JSX1ZMQU5fUFJPVE9DT0wsIGJyLVx1MDAzZXZsYW5fcHJvdG8pIHx8XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MzkyPXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQge1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTM5OC1cdHVuc2lnbmVkIGxvbmdcdFx0XHRmbGFncztcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjM5OTojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDAwLVx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cFx0X19yY3UgKnZsZ3JwO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTUwMj1zdHJ1Y3QgbmV0X2JyaWRnZSB7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTA3LVx0LyogVGhlc2UgZmllbGRzIGFyZSBhY2Nlc3NlZCBvbiBlYWNoIHBhY2tldCAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NTA4OiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01MDktXHRfX2JlMTZcdFx0XHRcdHZsYW5fcHJvdG87XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NTk4PXN0cnVjdCBicl9pbnB1dF9za2JfY2Ige1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYwOS1cdHU4IGdyYXRfYXJwOjE7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo2MTA6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTYxMS1cdHU4IHZsYW5fZmlsdGVyZWQ6MTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTY1PWJyX211bHRpY2FzdF9jdHhfb3B0aW9uc19lcXVhbChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4MSxcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTcyLS8qIGJyX3ZsYW4uYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU3MzojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTU3NC1ib29sIGJyX2FsbG93ZWRfaW5ncmVzcyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTg3OT1zdGF0aWMgaW5saW5lIHUxNiBicl92bGFuX2ZsYWdzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBwdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4ODYtLyogYnJfdmxhbl9vcHRpb25zLmMgKi9cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4ODc6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4ODgtYm9vbCBicl92bGFuX29wdHNfZXFfcmFuZ2UoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdl9jdXJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE5MzQ9c3RhdGljIGlubGluZSBib29sIGJyX3ZsYW5fc3RhdGVfYWxsb3dlZCh1OCBzdGF0ZSwgYm9vbCBsZWFybl9hbGxvdylcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTQ3LS8qIGJyX21zdC5jICovXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxOTQ4OiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTQ5LURFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShicl9tc3RfdXNlZCk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oPTMyPWludCBicl92bGFuX3R1bm5lbF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGludCBjbWQsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oLTM0LVxubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oOjM1OiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGVfdHVubmVsLmgtMzYtLyogYnJfdmxhbl90dW5uZWwuYyAqL1xuLS1cbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYz04Mzk9c3RhdGljIERFVklDRV9BVFRSX1JXKG5mX2NhbGxfYXJwdGFibGVzKTtcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy04NDAtI2VuZGlmXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM6ODQxOiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtODQyLXN0YXRpYyBzc2l6ZV90IHZsYW5fZmlsdGVyaW5nX3Nob3coc3RydWN0IGRldmljZSAqZCxcbi0tXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9OTM1PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpicmlkZ2VfYXR0cnNbXSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtOTgxLSNlbmRpZlxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jOjk4MjojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTk4My1cdFx1MDAyNmRldl9hdHRyX3ZsYW5fZmlsdGVyaW5nLmF0dHIsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9OTAxPWludCBicl92bGFuX2ZpbHRlcl90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05MDUtXHRcdC5vcmlnX2RldiA9IGJyLVx1MDAzZWRldixcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjkwNjpcdFx0LmlkID0gU1dJVENIREVWX0FUVFJfSURfQlJJREdFX1ZMQU5fRklMVEVSSU5HLFxubmV0L2JyaWRnZS9icl92bGFuLmMtOTA3LVx0XHQuZmxhZ3MgPSBTV0lUQ0hERVZfRl9TS0lQX0VPUE5PVFNVUFAsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MTI2ND1pbnQgbmJwX3ZsYW5faW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTI2Ny1cdFx0Lm9yaWdfZGV2ID0gcC1cdTAwM2Vici1cdTAwM2VkZXYsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMjY4Olx0XHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9CUklER0VfVkxBTl9GSUxURVJJTkcsXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMjY5LVx0XHQuZmxhZ3MgPSBTV0lUQ0hERVZfRl9TS0lQX0VPUE5PVFNVUFAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE3NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBWTEFOIEZpbHRlcmluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBoZWFkIHN0cmFpZ2h0IGludG8gdGhlIGBuZXQvYnJpZGdlL0tjb25maWdgIGZpbGUuIEkmIzM5O20gc3BlY2lmaWNhbGx5IHplcm9pbmcgaW4gb24gdGhlIGBCUklER0VfVkxBTl9GSUxURVJJTkdgIG9wdGlvbi4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgVkxBTiBmaWx0ZXJpbmcgY29uZmlndXJhdGlvbiBpbiB0aGUgYnJpZGdpbmcgY29kZSBpcyBkZWZpbmVkLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBvcHRpb24gaXMgZXhwb3NlZCB0byB0aGUgdXNlciwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMgKGxpa2UgVkxBTiBzdXBwb3J0IGluIGdlbmVyYWwpLCBhbmQgaG93IGl0IGluZmx1ZW5jZXMgdGhlIGJ1aWxkIHByb2Nlc3MuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIEtjb25maWcgc3ludGF4IHVzZWQgdGhlcmUsIGFueSBhc3NvY2lhdGVkIGRlZmF1bHRzLCBoZWxwIHRleHQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdC4gSXQmIzM5O3MgYSBrZXkgcGFydCBvZiBob3cgdGhlIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHkgaGFuZGxlcyBWTEFOIHRhZ2dlZCBmcmFtZXMsIHNvIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb25maWd1cmF0aW9uIGlzIGVzc2VudGlhbCBmb3IgYW55IGJyaWRnZS1yZWxhdGVkIGRlYnVnZ2luZyBvciBvcHRpbWl6YXRpb24gSSBtaWdodCBiZSB0YWNrbGluZy4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIHJlY2FsbCB0aGUgdW5kZXJseWluZyBjb25maWcgbG9naWMgb3IgdW5kZXJzdGFuZCBob3cgdGhpcyBhZmZlY3RzIHRoaW5ncyBmcm9tIGZpcnN0IHByaW5jaXBsZXMgaWYgSSBhbSBmZWVsaW5nIHJ1c3R5LCBiZWZvcmUgZGVsdmluZyBpbnRvIGFjdHVhbCBicmlkZ2UgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIDgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgQlJJREdFXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDs4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBMTENcbiAgIDk6XHRcdHNlbGVjdCBTVFBcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBMaW51eCBib3ggd2lsbCBiZSBhYmxlIHRvIGFjdCBhcyBhblxuICAxMjpcdFx0ICBFdGhlcm5ldCBicmlkZ2UsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRpZmZlcmVudCBFdGhlcm5ldCBzZWdtZW50cyBpdFxuICAxMzpcdFx0ICBpcyBjb25uZWN0ZWQgdG8gd2lsbCBhcHBlYXIgYXMgb25lIEV0aGVybmV0IHRvIHRoZSBwYXJ0aWNpcGFudHMuXG4gIDE0Olx0XHQgIFNldmVyYWwgc3VjaCBicmlkZ2VzIGNhbiB3b3JrIHRvZ2V0aGVyIHRvIGNyZWF0ZSBldmVuIGxhcmdlclxuICAxNTpcdFx0ICBuZXR3b3JrcyBvZiBFdGhlcm5ldHMgdXNpbmcgdGhlIElFRUUgODAyLjEgc3Bhbm5pbmcgdHJlZSBhbGdvcml0aG0uXG4gIDE2Olx0XHQgIEFzIHRoaXMgaXMgYSBzdGFuZGFyZCwgTGludXggYnJpZGdlcyB3aWxsIGNvb3BlcmF0ZSBwcm9wZXJseSB3aXRoXG4gIDE3Olx0XHQgIG90aGVyIHRoaXJkIHBhcnR5IGJyaWRnZSBwcm9kdWN0cy5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgSW4gb3JkZXIgdG8gdXNlIHRoZSBFdGhlcm5ldCBicmlkZ2UsIHlvdSYjMzk7bGwgbmVlZCB0aGUgYnJpZGdlXG4gIDIwOlx0XHQgIGNvbmZpZ3VyYXRpb24gdG9vbHM7IHNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0XHUwMDNlXG4gIDIxOlx0XHQgIGZvciBsb2NhdGlvbi4gUGxlYXNlIHJlYWQgdGhlIEJyaWRnZSBtaW5pLUhPV1RPIGZvciBtb3JlXG4gIDIyOlx0XHQgIGluZm9ybWF0aW9uLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB5b3UgZW5hYmxlIGlwdGFibGVzIHN1cHBvcnQgYWxvbmcgd2l0aCB0aGUgYnJpZGdlIHN1cHBvcnQgdGhlbiB5b3VcbiAgMjU6XHRcdCAgdHVybiB5b3VyIGJyaWRnZSBpbnRvIGEgYnJpZGdpbmcgSVAgZmlyZXdhbGwuXG4gIDI2Olx0XHQgIGlwdGFibGVzIHdpbGwgdGhlbiBzZWUgdGhlIElQIHBhY2tldHMgYmVpbmcgYnJpZGdlZCwgc28geW91IG5lZWQgdG9cbiAgMjc6XHRcdCAgdGFrZSB0aGlzIGludG8gYWNjb3VudCB3aGVuIHNldHRpbmcgdXAgeW91ciBmaXJld2FsbCBydWxlcy5cbiAgMjg6XHRcdCAgRW5hYmxpbmcgYXJwdGFibGVzIHN1cHBvcnQgd2hlbiBicmlkZ2luZyB3aWxsIGxldCBhcnB0YWJsZXMgc2VlXG4gIDI5Olx0XHQgIGJyaWRnZWQgQVJQIHRyYWZmaWMgaW4gdGhlIGFycHRhYmxlcyBGT1JXQVJEIGNoYWluLlxuICAzMDpcdFxuICAzMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICAzMjpcdFx0ICB3aWxsIGJlIGNhbGxlZCBicmlkZ2UuXG4gIDMzOlx0XG4gIDM0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXG4gIDM3Olx0XHRib29sIFwmIzM0O0lHTVAvTUxEIHNub29waW5nXCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIEJSSURHRVxuICAzOTpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDQwOlx0XHRkZWZhdWx0IHlcbiAgNDE6XHRcdGhlbHBcbiAgNDI6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHlcbiAgNDM6XHRcdCAgZm9yd2FyZCBtdWx0aWNhc3QgdHJhZmZpYyBiYXNlZCBvbiBJR01QL01MRCB0cmFmZmljIHJlY2VpdmVkIGZyb21cbiAgNDQ6XHRcdCAgZWFjaCBwb3J0LlxuICA0NTpcdFxuICA0NjpcdFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cbiAgNDc6XHRcbiAgNDg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgNDk6XHRcbiAgNTA6XHRjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXG4gIDUxOlx0XHRib29sIFwmIzM0O1ZMQU4gZmlsdGVyaW5nXCYjMzQ7XG4gIDUyOlx0XHRkZXBlbmRzIG9uIEJSSURHRVxuICA1MzpcdFx0ZGVwZW5kcyBvbiBWTEFOXzgwMjFRXG4gIDU0Olx0XHRkZWZhdWx0IG5cbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHlcbiAgNTc6XHRcdCAgcmVjZWl2ZSBhbmQgZm9yd2FyZCB0cmFmZmljIGJhc2VkIG9uIFZMQU4gaW5mb3JtYXRpb24gaW4gdGhlIHBhY2tldFxuICA1ODpcdFx0ICBhbnkgVkxBTiBpbmZvcm1hdGlvbiBjb25maWd1cmVkIG9uIHRoZSBicmlkZ2UgcG9ydCBvciBicmlkZ2UgZGV2aWNlLlxuICA1OTpcdFxuICA2MDpcdFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cbiAgNjE6XHRcbiAgNjI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgNjM6XHRcbiAgNjQ6XHRjb25maWcgQlJJREdFX01SUFxuICA2NTpcdFx0Ym9vbCBcJiMzNDtNUlAgcHJvdG9jb2xcJiMzNDtcbiAgNjY6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gIDY3Olx0XHRkZWZhdWx0IG5cbiAgNjg6XHRcdGhlbHBcbiAgNjk6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgdG8gcnVuIE1SUFxuICA3MDpcdFx0ICBwcm90b2NvbCB0byBkZXRlY3QgbG9vcHNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mzk0CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogNjA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVkxBTiBEZWxldGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHBhdGNoIHRoYXQgcmVmYWN0b3JzIHRoZSBWTEFOIGRlbGV0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBicmlkZ2luZyBjb2RlLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYSBgdGVhcmRvd25gIGJvb2xlYW4gYXJndW1lbnQgdG8gdGhlIGBfX3ZsYW5fZGVsYCBmdW5jdGlvbi4gVGhpcyBpcyBzaWduaWZpY2FudCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBuZXcgcGFyYW1ldGVyLgoKTG9va2luZyBhdCB0aGUgYF9fdmxhbl9kZWxgIGZ1bmN0aW9uIGl0c2VsZiwgdGhlIGxvZ2ljIG5vdyBzZWVtcyB0byBjb25kaXRpb25hbGx5IGhhbmRsZSBlcnJvcnMuIEJlZm9yZSwgZXJyb3JzIHdlcmUgYWx3YXlzIHByb3BhZ2F0ZWQuIE5vdywgaXQgYXBwZWFycyB0aGUgYHRlYXJkb3duYCBmbGFnIGluZmx1ZW5jZXMgdGhlIGVycm9yIGhhbmRsaW5nLiBJZiBgdGVhcmRvd25gIGlzIHRydWUsIGNlcnRhaW4gZXJyb3JzIG1pZ2h0IGJlIGlnbm9yZWQsIHBhcnRpY3VsYXJseSBpbiB0aGUgYF9fdmxhbl9mbHVzaGAgcGF0aC4gV2UmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgc3BlY2lmaWMgZXJyb3IgY29kZXMgYXJlIG5vdyBiZWluZyBoYW5kbGVkIGRpZmZlcmVudGx5IGJhc2VkIG9uIHRoaXMgbmV3IHRlYXJkb3duIGZsYWcsIGFuZCBob3cgdGhpcyByZWxhdGVzIHRvIGRpZmZlcmVudCBjYWxsaW5nIGNvbnRleHRzLiBUaGUgY29uZGl0aW9uYWwgbG9naWMgbm93IGluIHBsYWNlIGluc2lkZSB0aGUgYGlmIChlcnIgJmFtcDsmYW1wOyAhdGVhcmRvd24pYCBibG9ja3MgYXJlIGNydWNpYWwuCgpUaGUgZGlmZiBhbHNvIHNob3dzIHRoYXQgYGJyX3ZsYW5fZGVsZXRlYCBhbmQgYG5icF92bGFuX2RlbGV0ZWAgbm93IGNhbGwgYF9fdmxhbl9kZWxgIHdpdGggYHRlYXJkb3duYCBzZXQgdG8gYGZhbHNlYC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZXNlIGZ1bmN0aW9ucywgaW4gdGhlIGN1cnJlbnQgY29udGV4dCwgYXJlICpub3QqIGludGVuZGVkIHRvIGJlIGEgdGVhcmRvd24sIG9yIG1vcmUgcGVybWFuZW50LCBjbGVhbnVwLCBhbmQgdGh1cywgZXJyb3JzIHNob3VsZCBiZSBjaGVja2VkLgoKSG93ZXZlciwgYF9fdmxhbl9mbHVzaGAgbm93IGNhbGxzIGBfX3ZsYW5fZGVsYCB3aXRoIGB0ZWFyZG93bmAgc2V0IHRvIGB0cnVlYC4gVGhpcyBpbXBsaWVzIHRoYXQgaW4gdGhlIGNvbnRleHQgb2YgZmx1c2hpbmcgVkxBTnMsIHBlcmhhcHMgZHVyaW5nIGJyaWRnZSBkZXN0cnVjdGlvbiBvciByZWNvbmZpZ3VyYXRpb24sIHRoZSBlcnJvcnMgcmVsYXRlZCB0byBWTEFOIGRlbGV0aW9uIGFyZSBub3QgYXMgY3JpdGljYWwsIGFuZCBwZXJoYXBzIGNhbiBiZSBpZ25vcmVkLiBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBwdXJwb3NlIG9mIGBfX3ZsYW5fZmx1c2hgIHRvIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzLiBUaGUgbG9nIG1lc3NhZ2UgZm9ybWF0dGluZyBkaWZmZXJlbmNlcyBiYXNlZCBvbiBgcGAgYXJlIGFsc28gbm90ZXdvcnRoeSAtIHRoaXMgYXBwZWFycyB0byBiZSBhIHJlZmluZW1lbnQgb2YgZXJyb3IgbWVzc2FnaW5nLgoKVWx0aW1hdGVseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscyB0byBgYnJfdmxhbl9kZWxldGVgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgYW5kIGBfX3ZsYW5fZmx1c2hgIHRvIHVuZGVyc3RhbmQgdGhlIHZhcmlvdXMgY29udGV4dHMgaW4gd2hpY2ggVkxBTiBkZWxldGlvbiBpcyBwZXJmb3JtZWQsIGFuZCB0aHVzLCB3aHkgdGhlIGB0ZWFyZG93bmAgZmxhZyBpcyBuZWVkZWQuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIHRoZXNlIGNhbGwgcGF0aHMgdG8gZm9ybSBhIGNvbmNsdXNpdmUganVkZ2VtZW50IG9uIHdoYXQgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBhY2hpZXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoYnJfdmxhbl9kZWxldGV8bmJwX3ZsYW5fZGVsZXRlfGJyX3ZsYW5fZmx1c2h8bmJwX3ZsYW5fZmx1c2gpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX2RldmljZS5jPTExOT1zdGF0aWMgaW50IGJyX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNDItXHRpZiAoZXJyKSB7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE0MzpcdFx0YnJfdmxhbl9mbHVzaChicik7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE0NC1cdFx0YnJfbWRiX2hhc2hfZmluaShicik7XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0xNTM9c3RhdGljIHZvaWQgYnJfZGV2X3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTU4LVx0YnJfbXVsdGljYXN0X3VuaW5pdF9zdGF0cyhicik7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE1OTpcdGJyX3ZsYW5fZmx1c2goYnIpO1xubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNjAtXHRicl9tZGJfaGFzaF9maW5pKGJyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmM9MzM0PXN0YXRpYyB2b2lkIGRlbF9uYnAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmMtMzU2LVxubmV0L2JyaWRnZS9icl9pZi5jOjM1NzpcdG5icF92bGFuX2ZsdXNoKHApO1xubmV0L2JyaWRnZS9icl9pZi5jLTM1OC1cdGJyX2ZkYl9kZWxldGVfYnlfcG9ydChiciwgcCwgMCwgMSk7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9Njk4PXN0YXRpYyBpbnQgYnJfdmxhbl9pbmZvKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy03MjMtXHRcdGlmIChwKSB7XG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzo3MjQ6XHRcdFx0aWYgKCFuYnBfdmxhbl9kZWxldGUocCwgdmluZm8tXHUwMDNldmlkKSlcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTcyNS1cdFx0XHRcdCpjaGFuZ2VkID0gdHJ1ZTtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy03MjctXHRcdFx0aWYgKCh2aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19NQVNURVIpIFx1MDAyNlx1MDAyNlxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NzI4Olx0XHRcdCAgICAhYnJfdmxhbl9kZWxldGUocC1cdTAwM2ViciwgdmluZm8tXHUwMDNldmlkKSlcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTcyOS1cdFx0XHRcdCpjaGFuZ2VkID0gdHJ1ZTtcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjczMDpcdFx0fSBlbHNlIGlmICghYnJfdmxhbl9kZWxldGUoYnIsIHZpbmZvLVx1MDAzZXZpZCkpIHtcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTczMS1cdFx0XHQqY2hhbmdlZCA9IHRydWU7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU4NT1pbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTg2LVx0XHRib29sICpjaGFuZ2VkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU4NzppbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1ODg6dm9pZCBicl92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTg5LXN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKmJyX3ZsYW5fZmluZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZywgdTE2IHZpZCk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTYwND1pbnQgbmJwX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQsIHUxNiBmbGFncyxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE2MDUtXHRcdCBib29sICpjaGFuZ2VkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTYwNjppbnQgbmJwX3ZsYW5fZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTYwNzp2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTYwOC1pbnQgbmJwX3ZsYW5faW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE3MjE9c3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTcyNy1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE3Mjg6c3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTcyOS17XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTczMi1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE3MzM6c3RhdGljIGlubGluZSB2b2lkIGJyX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTczNC17XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTc0Nj1zdGF0aWMgaW5saW5lIGludCBuYnBfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZCwgdTE2IGZsYWdzLFxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3NTItXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNzUzOnN0YXRpYyBpbmxpbmUgaW50IG5icF92bGFuX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkKVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTc1NC17XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTc1Ny1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE3NTg6c3RhdGljIGlubGluZSB2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNzU5LXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz03ODY9aW50IGJyX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHZpZCwgdTE2IGZsYWdzLCBib29sICpjaGFuZ2VkLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTgzMC0gKi9cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjgzMTppbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKVxubmV0L2JyaWRnZS9icl92bGFuLmMtODMyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04NTAtXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo4NTE6dm9pZCBicl92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTg1Mi17XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MTA4Nz1zdGF0aWMgdm9pZCBicl92bGFuX2Rpc2FibGVfZGVmYXVsdF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMDk1LVx0aWYgKHZsYW5fZGVmYXVsdF9wdmlkKGJyX3ZsYW5fZ3JvdXAoYnIpLCBwdmlkKSkge1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTA5NjpcdFx0aWYgKCFicl92bGFuX2RlbGV0ZShiciwgcHZpZCkpXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMDk3LVx0XHRcdGJyX3ZsYW5fbm90aWZ5KGJyLCBOVUxMLCBwdmlkLCAwLCBSVE1fREVMVkxBTik7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTEwMS1cdFx0aWYgKHZsYW5fZGVmYXVsdF9wdmlkKG5icF92bGFuX2dyb3VwKHApLCBwdmlkKSBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjExMDI6XHRcdCAgICAhbmJwX3ZsYW5fZGVsZXRlKHAsIHB2aWQpKVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTEwMy1cdFx0XHRicl92bGFuX25vdGlmeShiciwgcCwgcHZpZCwgMCwgUlRNX0RFTFZMQU4pO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTExMDk9aW50IF9fYnJfdmxhbl9zZXRfZGVmYXVsdF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTE2IHB2aWQsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTE0NS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjExNDY6XHRcdGlmICghYnJfdmxhbl9kZWxldGUoYnIsIG9sZF9wdmlkKSlcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExNDctXHRcdFx0YnJfdmxhbl9ub3RpZnkoYnIsIE5VTEwsIG9sZF9wdmlkLCAwLCBSVE1fREVMVkxBTik7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTE2Ny1cdFx0XHRnb3RvIGVycl9wb3J0O1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTE2ODpcdFx0aWYgKCFuYnBfdmxhbl9kZWxldGUocCwgb2xkX3B2aWQpKVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTE2OS1cdFx0XHRicl92bGFuX25vdGlmeShiciwgcCwgb2xkX3B2aWQsIDAsIFJUTV9ERUxWTEFOKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTkxLVx0XHR9XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMTkyOlx0XHRuYnBfdmxhbl9kZWxldGUocCwgcHZpZCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTkzLVx0XHRicl92bGFuX25vdGlmeShiciwgcCwgcHZpZCwgMCwgUlRNX0RFTFZMQU4pO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEyMDQtXHRcdH1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEyMDU6XHRcdGJyX3ZsYW5fZGVsZXRlKGJyLCBwdmlkKTtcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEyMDYtXHRcdGJyX3ZsYW5fbm90aWZ5KGJyLCBOVUxMLCBwdmlkLCAwLCBSVE1fREVMVkxBTik7XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MTMyMj1pbnQgbmJwX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQsIHUxNiBmbGFncyxcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzY2LSAqL1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTM2NzppbnQgbmJwX3ZsYW5fZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQpXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzY4LXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzgxLVxubmV0L2JyaWRnZS9icl92bGFuLmM6MTM4Mjp2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzgzLXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xNzU0PWludCBicl92bGFuX2JyaWRnZV9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmMtMTc2OS1cdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxNzcwOlx0XHRjaGFuZ2VkID0gIWJyX3ZsYW5fZGVsZXRlKGJyLCBici1cdTAwM2VkZWZhdWx0X3B2aWQpO1xubmV0L2JyaWRnZS9icl92bGFuLmMtMTc3MS1cdFx0dmxjbWQgPSBSVE1fREVMVkxBTjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpczogVkxBTiBEZWxldGlvbiBpbiBMaW51eCBCcmlkZ2UgU3Vic3lzdGVtKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgYnJfdmxhbl9kZWxldGVgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgYF9fdmxhbl9mbHVzaGAsIGFuZCBgX192bGFuX2RlbGAgd2l0aGluIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AuIFRoaXMgaXMgYWxsIHdpdGhpbiB0aGUgTGludXggYnJpZGdlIHN1YnN5c3RlbSwgd2hpY2gsIGNyaXRpY2FsbHksIGhhcyBWTEFOIGZpbHRlcmluZyBlbmFibGVkIChgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2ApLiBXZSYjMzk7cmUgdGFsa2luZyBzdGFuZGFyZCBuZXR3b3JraW5nIG9wZXJhdGlvbnMgaGVyZSDigJMgYnJpZGdlIGNyZWF0aW9uLCBhZGRpbmcgcG9ydHMsIGNvbmZpZ3VyaW5nIFZMQU5zIHVzaW5nIE5ldGxpbmsgKFJUTV9ORVdWTEFOLCBSVE1fREVMVkxBTiwgZXRjLiksIGFuZCBmbHVzaGluZyBWTEFOcyBvbiBwb3J0IGRlbGV0aW9uIG9yIGJyaWRnZSB1bmluaXRpYWxpemF0aW9uL2ZsdXNoLiBUaGVzZSBhcmUgYWxsIHRoaW5ncyB0aGF0IGFyZSAqZGlyZWN0bHkqIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLCBhbmQgc3l6a2FsbGVyIGhhcyBhbHJlYWR5IGhhbW1lcmVkIG9uIHRoZXNlIGludGVyZmFjZXMgdGhyb3VnaCBgcnRubC9uZXRsaW5rYCwgc28gd2Uga25vdyB0aGVyZSYjMzk7cyBzb21lIGV4aXN0aW5nIGNvdmVyYWdlLgoKVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmcgKm5vdyo/CgpUaGUgY3JpdGVyaWEgc2VlbSB0byBsaW5lIHVwLiBXZSBoYXZlIGEgY29yZSBzdWJzeXN0ZW0gdGhhdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBpbnRlcmZhY2VzIGxpa2UgbmV0bGluayAocnRuZXRsaW5rKSwgYnJpZGdlIGRldmljZSBvcGVyYXRpb25zLCBhbmQgc29ja2V0IHN5c2NhbGxzLiBUaGF0JiMzOTtzIGEgaHVnZSBwb3NpdGl2ZS4KClRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgYXJlIGRlZmluaXRlbHkgaW1wYWN0aW5nIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gIGBfX3ZsYW5fZGVsYCwgYF9fdmxhbl9mbHVzaGAsIGBicl92bGFuX2RlbGV0ZWAsIGFuZCBgbmJwX3ZsYW5fZGVsZXRlYCwgd2hpY2ggaXMgZ3JlYXQuICBTcGVjaWZpY2FsbHksIHRoaXMgcGF0Y2ggYXBwZWFycyB0byBiZSBmaWRkbGluZyB3aXRoIGVycm9yIGhhbmRsaW5nIGR1cmluZyBWTEFOIGZsdXNoL3RlYXJkb3duIGFuZCBzdGFuZGFyZCBWTEFOIGRlbGV0aW9uLiAgSXQgc2VlbXMgdGhlIGtleSBjaGFuZ2UgaXMgYWJvdXQgaG93IGVycm9ycyBhcmUgaGFuZGxlZCB3aGVuIHRlYXJpbmcgZG93biBWTEFOcy4gIEluIGBfX3ZsYW5fZGVsYCwgaWYgYHRlYXJkb3duYCBpcyBgdHJ1ZWAsIGVycm9ycyBmcm9tIGludGVybmFsIGNhbGxzICpkb24mIzM5O3QqIGFib3J0IHRoZSBwcm9jZXNzOyBpbnN0ZWFkLCBpdCBjb250aW51ZXMgdG8gY2xlYW4gdXAgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBzY2hlZHVsZSBSQ1UgZnJlZS4gSG93ZXZlciwgaWYgdGVhcmRvd24gaXMgZmFsc2UgKGluIGBicl92bGFuX2RlbGV0ZWAvYG5icF92bGFuX2RlbGV0ZWApLCBlcnJvcnMgYXJlIHN0aWxsIGNhdXNpbmcgZWFybHkgZXhpdCwgd2hpY2ggaXMgdGhlIGtleSBkaWZmZXJlbmNlLiAgVGhlIGZpeCBhbHNvIGluY2x1ZGVzIGEgYnVnIGZpeCB0byBwcmV2ZW50IGFjY2Vzc2luZyBhIFZMQU4gSUQgYWZ0ZXIgaXQgbWlnaHQgaGF2ZSBiZWVuIGZyZWVkIGluIGBfX3ZsYW5fZmx1c2hgLgoKQWxsIG9mIHRoaXMgYWRkcyB1cCB0byBhIHNvbGlkIGNhc2UgZm9yIGZ1enppbmcuIFdlIGhhdmUgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpbiB0aGUga2VybmVsIG5ldHdvcmtpbmcgYnJpZGdlIHN1YnN5c3RlbSB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQsIGVzcGVjaWFsbHkgaW4gaG93IGVycm9yIGhhbmRsaW5nIGlzIGltcGxlbWVudGVkLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgdHJ1ZWAgaGVyZS4KCk5vdywgbGV0JiMzOTtzIGVuc3VyZSB3ZSBoYXZlIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBXZSYjMzk7bGwgbmVlZCBgQ09ORklHX0JSSURHRWAsIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCwgYW5kIGBDT05GSUdfVkxBTl84MDIxUWAgKHNpbmNlIGBCUklER0VfVkxBTl9GSUxURVJJTkdgIGRlcGVuZHMgb24gYm90aCBgVkxBTl84MDIxUWAgYW5kIGBCUklER0VgKS4gV2UgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIGBCUklER0VgIGFuZCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcyBhcmUgY29ycmVjdC4KCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyAoQlJJREdFfFZMQU5fODAyMVEpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC84MDIxcS9LY29uZmlnLTUtXG5uZXQvODAyMXEvS2NvbmZpZzo2OmNvbmZpZyBWTEFOXzgwMjFRXG5uZXQvODAyMXEvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XCYjMzQ7XG4tLVxubmV0LzgwMjFxL0tjb25maWctMjEtXG5uZXQvODAyMXEvS2NvbmZpZzoyMjpjb25maWcgVkxBTl84MDIxUV9HVlJQXG5uZXQvODAyMXEvS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7R1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC84MDIxcS9LY29uZmlnLTMxLVxubmV0LzgwMjFxL0tjb25maWc6MzI6Y29uZmlnIFZMQU5fODAyMVFfTVZSUFxubmV0LzgwMjFxL0tjb25maWctMzMtXHRib29sIFwmIzM0O01WUlAgKE11bHRpcGxlIFZMQU4gUmVnaXN0cmF0aW9uIFByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L0tjb25maWc9MjIwPWNvbmZpZyBORVRGSUxURVJfQURWQU5DRURcbi0tXG5uZXQvS2NvbmZpZy0yMzAtXG5uZXQvS2NvbmZpZzoyMzE6Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcbm5ldC9LY29uZmlnLTIzMi1cdHRyaXN0YXRlIFwmIzM0O0JyaWRnZWQgSVAvQVJQIHBhY2tldHMgZmlsdGVyaW5nXCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTUtXG5uZXQvYnJpZGdlL0tjb25maWc6Njpjb25maWcgQlJJREdFXG5uZXQvYnJpZGdlL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0OzgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7SUdNUC9NTEQgc25vb3BpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNDktXG5uZXQvYnJpZGdlL0tjb25maWc6NTA6Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xubmV0L2JyaWRnZS9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtWTEFOIGZpbHRlcmluZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy02My1cbm5ldC9icmlkZ2UvS2NvbmZpZzo2NDpjb25maWcgQlJJREdFX01SUFxubmV0L2JyaWRnZS9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtNUlAgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNzUtXG5uZXQvYnJpZGdlL0tjb25maWc6NzY6Y29uZmlnIEJSSURHRV9DRk1cbm5ldC9icmlkZ2UvS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7Q0ZNIHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz0yOD1jb25maWcgTkZfQ09OTlRSQUNLX0JSSURHRVxuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDItIyBvbGQgc29ja29wdCBpbnRlcmZhY2UgYW5kIGV2YWwgbG9vcFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo0Mzpjb25maWcgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy00NC1cdHRyaXN0YXRlIFwmIzM0O0xlZ2FjeSBFQlRBQkxFUyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy01Mi1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NTM6bWVudWNvbmZpZyBCUklER0VfTkZfRUJUQUJMRVNcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDtFdGhlcm5ldCBCcmlkZ2UgdGFibGVzIChlYnRhYmxlcykgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9NjI9aWYgQlJJREdFX05GX0VCVEFCTEVTXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy02Ni0jXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjY3OmNvbmZpZyBCUklER0VfRUJUX0JST1VURVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy02OC1cdHRyaXN0YXRlIFwmIzM0O2VidDogYnJvdXRlIHRhYmxlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTc3LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo3ODpjb25maWcgQlJJREdFX0VCVF9UX0ZJTFRFUlxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy03OS1cdHRyaXN0YXRlIFwmIzM0O2VidDogZmlsdGVyIHRhYmxlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTg3LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo4ODpjb25maWcgQlJJREdFX0VCVF9UX05BVFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy04OS1cdHRyaXN0YXRlIFwmIzM0O2VidDogbmF0IHRhYmxlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTk5LSNcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTAwOmNvbmZpZyBCUklER0VfRUJUXzgwMl8zXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEwMS1cdHRyaXN0YXRlIFwmIzM0O2VidDogODAyLjMgZmlsdGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEwNi1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTA3OmNvbmZpZyBCUklER0VfRUJUX0FNT05HXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEwOC1cdHRyaXN0YXRlIFwmIzM0O2VidDogYW1vbmcgZmlsdGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTExNS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTE2OmNvbmZpZyBCUklER0VfRUJUX0FSUFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMTctXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IEFSUCBmaWx0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTIzLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxMjQ6Y29uZmlnIEJSSURHRV9FQlRfSVBcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTI1LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBJUCBmaWx0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTMxLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxMzI6Y29uZmlnIEJSSURHRV9FQlRfSVA2XG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEzMy1cdHRyaXN0YXRlIFwmIzM0O2VidDogSVA2IGZpbHRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNDAtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE0MTpjb25maWcgQlJJREdFX0VCVF9MSU1JVFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNDItXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IGxpbWl0IG1hdGNoIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE1MC1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTUxOmNvbmZpZyBCUklER0VfRUJUX01BUktcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTUyLVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBtYXJrIGZpbHRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNjAtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE2MTpjb25maWcgQlJJREdFX0VCVF9QS1RUWVBFXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE2Mi1cdHRyaXN0YXRlIFwmIzM0O2VidDogcGFja2V0IHR5cGUgZmlsdGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE3MC1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTcxOmNvbmZpZyBCUklER0VfRUJUX1NUUFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNzItXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IFNUUCBmaWx0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxNzk6Y29uZmlnIEJSSURHRV9FQlRfVkxBTlxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xODAtXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IDgwMi4xUSBWTEFOIGZpbHRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xODgtI1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxODk6Y29uZmlnIEJSSURHRV9FQlRfQVJQUkVQTFlcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTkwLVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBhcnAgcmVwbHkgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE5Ny1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTk4OmNvbmZpZyBCUklER0VfRUJUX0ROQVRcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTk5LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBkbmF0IHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMDUtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjIwNjpjb25maWcgQlJJREdFX0VCVF9NQVJLX1Rcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjA3LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBtYXJrIHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMTUtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjIxNjpjb25maWcgQlJJREdFX0VCVF9SRURJUkVDVFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMTctXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IHJlZGlyZWN0IHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMjMtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjIyNDpjb25maWcgQlJJREdFX0VCVF9TTkFUXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTIyNS1cdHRyaXN0YXRlIFwmIzM0O2VidDogc25hdCB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjMzLSNcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MjM0OmNvbmZpZyBCUklER0VfRUJUX0xPR1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMzUtXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IGxvZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yNDItXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjI0Mzpjb25maWcgQlJJREdFX0VCVF9ORkxPR1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yNDQtXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IG5mbG9nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MjkKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZMQU4gRmlsdGVyaW5nIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2Agc3R1ZmYuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZm91bmRhdGlvbmFsIHBpZWNlcyBhcmUgaW4gcGxhY2UuIFRoZSBwcmVyZXF1aXNpdGVzIHNlZW0gdG8gYmUgdGhlIGBCUklER0VgIGFuZCBgVkxBTl84MDIxUWAgbW9kdWxlcyDigJMgbWFrZXMgc2Vuc2UsIGNhbiYjMzk7dCBmaWx0ZXIgVkxBTnMgaWYgd2UgZG9uJiMzOTt0IGhhdmUgYnJpZGdlcyBhbmQgODAyLjFRIHRhZ2dpbmcuIE5vdywgdGhlIHJlYWwgd29yayBiZWdpbnMuCgpJIHdhbnQgdG8gcGlucG9pbnQgdGhlIGFyZWFzIHRoaXMgZmlsdGVyaW5nIGxvZ2ljIGRpcmVjdGx5IGltcGFjdHMuIFdoYXQgc3BlY2lmaWMsIGxlc3MgY29tbW9uIGZ1bmN0aW9ucyBoYXZlIGJlZW4gdG91Y2hlZCBvciBkaXJlY3RseSBjYWxsIHRoZSBtb2RpZmllZCBjb2RlPyBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zOiBgX192bGFuX2RlbGAsIGBfX3ZsYW5fZmx1c2hgIChib3RoIHN0YXRpYywgaW50ZXJlc3RpbmcpLCBhbmQgdGhlbiBgYnJfdmxhbl9kZWxldGVgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgYGJyX3ZsYW5fZmx1c2hgLCBhbmQgYG5icF92bGFuX2ZsdXNoYC4gTG9va3MgbGlrZSB0aGVzZSBkZWxldGlvbnMgYW5kIGZsdXNoaW5nIG9wZXJhdGlvbnMgYXJlIHRoZSBjb3JlIG9mIHdoYXQmIzM5O3MgY2hhbmdlZC4KCk15IG5leHQgc3RlcCBpcyB0byBoZWFkIG92ZXIgdG8gYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCBhbmQgbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIGRlY2xhcmF0aW9ucyBhbmQgdGhlIGNhbGxlcnMgb2YgdGhlc2UgZnVuY3Rpb25zLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgYWN0dWFsbHkgd29ya2luZyB3aXRoaW4gdGhlIG92ZXJhbGwgYnJpZGdlIGFuZCBWTEFOIGNvbnRleHQuIEdvdHRhIHRyYWNlIHRob3NlIGNhbGwgcGF0aHMgdG8gc2VlIHRoZSBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oyhicl92bGFuX2ZsdXNofG5icF92bGFuX2ZsdXNoKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfdmxhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfdmxhbi5jPTgzMT1pbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTg1MC1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjg1MTp2b2lkIGJyX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxubmV0L2JyaWRnZS9icl92bGFuLmMtODUyLXtcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMzY3PWludCBuYnBfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZClcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzgxLVxubmV0L2JyaWRnZS9icl92bGFuLmM6MTM4Mjp2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzgzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxMzMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgYW5hbHlzaXMsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgYnJfdmxhbi5jYCBmb3IgVkxBTiBIYW5kbGluZyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgYnJpZGdpbmcgY29kZSBoYW5kbGVzIFZMQU5zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gbGluZXMgODQwLTg2MCBhbmQgMTM3MC0xMzk1IHdpdGhpbiBgbmV0L2JyaWRnZS9icl92bGFuLmNgLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlc2Ugc2VjdGlvbnMgbGlrZWx5IHRvdWNoIHVwb24ga2V5IGFzcGVjdHMgb2YgVkxBTiB0YWcgbWFuaXB1bGF0aW9uLCBmb3J3YXJkaW5nIGRlY2lzaW9ucyBiYXNlZCBvbiBWTEFOIElEcywgb3IgcGVyaGFwcyBldmVuIFZMQU4tcmVsYXRlZCBjb250cm9sIHBsYW5lIG9wZXJhdGlvbnMuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBzY2FuIHRob3NlIGxpbmUgcmFuZ2VzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBsaWtlOgoKKiAgICoqRGF0YSBTdHJ1Y3R1cmVzOioqIFdoYXQgc3RydWN0dXJlcyBhcmUgYmVpbmcgYWNjZXNzZWQgb3IgbW9kaWZpZWQ/IGBicl9wb3J0YCwgYHZsYW5fdmlkYCwgYHNrYl92bGFuX3RhZ19zZXRgICh3aGljaCBJIGtub3csIG9mIGNvdXJzZSwgZnJvbSBwcmlvciB3b3JrIG9uIHRoaXMpIHdpbGwgYmUgaW1tZWRpYXRlbHkgcmVsZXZhbnQuIEFueSBuZXcsIHVuZmFtaWxpYXIgc3RydWN0dXJlcyBhcmUgYSByZWQgZmxhZyBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uCiogICAqKkZ1bmN0aW9uIENhbGxzOioqIEFtIEkgc2VlaW5nIGNhbGxzIHRvIGNvcmUgVkxBTiBoYW5kbGluZyBmdW5jdGlvbnM/IGB2bGFuX3ZpZF9hZGRgLCBgdmxhbl92aWRfZGVsYCwgYHZsYW5fZGV2X3J4X2tpbGxfdmxhbmAsIGV0Yy4gd2lsbCBiZSB0ZWxsaW5nLiBUaGVzZSBhcmUgdGhlIHdvcmtob3JzZXMuCiogICAqKkNvbnRyb2wgRmxvdzoqKiBJcyB0aGlzIHdpdGhpbiBhbiBgaWZgIGJsb2NrPyBXaGF0IGFyZSB0aGUgY29uZGl0aW9ucz8gQXJlIHRoZXJlIGNoZWNrcyBmb3Igc3BlY2lmaWMgVkxBTiBJRHMsIGNvbmZpZ3VyYXRpb25zIChlLmcuLCB0YWdnZWQgdnMuIHVudGFnZ2VkKSwgb3IgcG9ydCBzdGF0ZXM/IFRoaXMgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGxvZ2ljLgoqICAgKipDb250ZXh0OioqIFdoYXQmIzM5O3MgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZG9pbmc/IElzIGl0IGhhbmRsaW5nIHBhY2tldCByZWNlcHRpb24sIHRyYW5zbWlzc2lvbiwgYnJpZGdlIHBvcnQgc2V0dXAsIG9yIFZMQU4gY29uZmlndXJhdGlvbiBjaGFuZ2VzPyBUaGUgY29udGV4dCBpcyBldmVyeXRoaW5nLgoKSSBleHBlY3QgdGhlIGZpcnN0IHJhbmdlLCA4NDAtODYwLCBpcyBtb3N0IGxpa2VseSBkZWFsaW5nIHdpdGggZWl0aGVyIGFkZGluZywgcmVtb3ZpbmcsIG9yIGRlYWxpbmcgd2l0aCB0aGUgaGFuZGxpbmcgb2YgVkxBTiB0YWdzIGFuZCBWSUQmIzM5O3Mgb24gZWl0aGVyIHRoZSBpbmNvbWluZyBvciBvdXRnb2luZyBzaWRlIG9mIHRoZSBicmlkZ2UuIFRoZSBzZWNvbmQgcmFuZ2UsIDEzNzAtMTM5NSwgY291bGQgYmUgcmVsYXRlZCB0byBWTEFOIGZpbHRlcmluZywgVkxBTi1hd2FyZSBmb3J3YXJkaW5nIHdpdGhpbiB0aGUgYnJpZGdlLCBvciBob3cgVkxBTiBpbmZvcm1hdGlvbiBpcyBwcm9wYWdhdGVkIGFjcm9zcyB0aGUgYnJpZGdlZCBpbnRlcmZhY2UuCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBjb2RlLCBsb29raW5nIGZvciB0aGUgKndobyosIHRoZSAqd2hhdCosIHRoZSAqaG93KiwgYW5kIHRoZSAqd2h5KiBvZiB0aGUgVkxBTiBvcGVyYXRpb25zIHdpdGhpbiB0aGVzZSBzcGVjaWZpYyBjb2RlIHNlZ21lbnRzLiBGcm9tIHRoZXJlLCBJIGNhbiBjb25zdHJ1Y3QgYSBjb2hlc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29kZSB3b3JrcyBhbmQgd2hlcmUgaW1wcm92ZW1lbnRzIGNhbiBiZSBtYWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfdmxhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NDA6XHRcdGlmICghdiB8fCAhYnJfdmxhbl9pc19icmVudHJ5KHYpKVxuIDg0MTpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiA4NDI6XHRcbiA4NDM6XHRcdGJyX2ZkYl9maW5kX2RlbGV0ZV9sb2NhbChiciwgTlVMTCwgYnItXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyLCB2aWQpO1xuIDg0NDpcdFx0YnJfZmRiX2RlbGV0ZV9ieV9wb3J0KGJyLCBOVUxMLCB2aWQsIDApO1xuIDg0NTpcdFxuIDg0NjpcdFx0dmxhbl90dW5uZWxfaW5mb19kZWwodmcsIHYpO1xuIDg0NzpcdFxuIDg0ODpcdFx0cmV0dXJuIF9fdmxhbl9kZWwodiwgZmFsc2UpO1xuIDg0OTpcdH1cbiA4NTA6XHRcbiA4NTE6XHR2b2lkIGJyX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxuIDg1MjpcdHtcbiA4NTM6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xuIDg1NDpcdFxuIDg1NTpcdFx0QVNTRVJUX1JUTkwoKTtcbiA4NTY6XHRcbiA4NTc6XHRcdHZnID0gYnJfdmxhbl9ncm91cChicik7XG4gODU4Olx0XHRfX3ZsYW5fZmx1c2goYnIsIE5VTEwsIHZnKTtcbiA4NTk6XHRcdFJDVV9JTklUX1BPSU5URVIoYnItXHUwMDNldmxncnAsIE5VTEwpO1xuIDg2MDpcdFx0c3luY2hyb25pemVfbmV0KCk7XG4gODYxOlx0XHRfX3ZsYW5fZ3JvdXBfZnJlZSh2Zyk7XG4gODYyOlx0fVxuIDg2MzpcdFxuIDg2NDpcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKmJyX3ZsYW5fZmluZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZywgdTE2IHZpZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMzUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSYjMzk7bSB0aGUgZXhwZXJ0IGFuZCByZWZsZWN0aW5nIG9uIHRoZSBwcm92aWRlZCB0ZXh0ICh3aGljaCBpcyBsaW5lcyAxMzcwLTEzOTUsIHRob3VnaCBJIGRvbiYjMzk7dCBoYXZlIHRoYXQgY29udGV4dCB5ZXQpLiBJJiMzOTtsbCBhZG9wdCB0aGUgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYW5kIFJlY29uc3RydWN0aW5nIHRoZSBBcmd1bWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLiBNeSBpbml0aWFsIHJlYWQgb2YgdGhlc2UgbGluZXMgc3VnZ2VzdHMgYSBkZXRhaWxlZCBleHBsb3JhdGlvbiwgcG9zc2libHkgYSByZWJ1dHRhbCBvciBhIGRldmVsb3BtZW50IG9mIGEgcHJldmlvdXMgYXJndW1lbnQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvcmUgcmVhc29uaW5nIGhlcmUuIEkgbmVlZCB0byBicmVhayBkb3duIHRoZSBjbGFpbXMgYmVpbmcgbWFkZSBpbnRvIHRoZWlyIGNvbnN0aXR1ZW50IHBhcnRzIGFuZCB1bmRlcnN0YW5kIHRoZSBsaW5rYWdlcy4KCkl0IGxvb2tzIGxpa2UgdGhlIGxpbmVzIGNlbnRlciBhcm91bmQgYSBjcml0aWNhbCBwb2ludCwgbWF5YmUgYSByZWZ1dGF0aW9uLCBvciwgcGVyaGFwcywgYSBudWFuY2VkIHBlcnNwZWN0aXZlIG9uIGEgcHJldmlvdXNseSBoZWxkIGFzc3VtcHRpb24uIFRoZSB3cml0ZXIgc2VlbXMgdG8gYmUgdHJ5aW5nIHRvIGVzdGFibGlzaCBhIGhpZXJhcmNoeSwgbWF5YmUgb2YgZXZpZGVuY2UsIG9yIG1heWJlIG9mIGltcG9ydGFuY2UsIEkgY2FuJiMzOTt0IGJlIHN1cmUgd2l0aG91dCB0aGUgd2hvbGUgY29udGV4dC4gSSYjMzk7bSBzZWVpbmcgYSBjYXJlZnVsIGRhbmNlIGFyb3VuZCBzcGVjaWZpYyB0ZXJtcywgYSBkZWxpYmVyYXRlIHNlbGVjdGlvbiBvZiB2b2NhYnVsYXJ5IHRoYXQgaW5kaWNhdGVzIHByZWNpc2lvbiBpcyBrZXkuIFRoaXMgbGlrZWx5IGluZGljYXRlcyB0aGF0IHRoZSB0b3BpYyBpcyBoaWdobHkgY29udGVzdGVkIG9yIHN1YmplY3QgdG8gbWlzaW50ZXJwcmV0YXRpb24uIEkmIzM5O20gY29uc2lkZXJpbmcgd2hhdCBhbHRlcm5hdGl2ZSBleHBsYW5hdGlvbnMgb3IgYXJndW1lbnRzIG1pZ2h0IGFyaXNlIGZyb20gYW55IG9mIHRoZSBzdGF0ZW1lbnRzIGluIHRoZSBsaW5lcy4gSSBhbSBsb29raW5nIGZvciB0aGUgd3JpdGVyJiMzOTtzIGdvYWwgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGUgZGlzY291cnNlLCBpdHMgcG9zc2libGUgd2Vha25lc3NlcywgYW5kIHdoZXRoZXIgaXQgY291bGQgYmUgZnVydGhlciBlbGFib3JhdGVkIG9uLiBJIGFtIGFsc28gcG9uZGVyaW5nIGlmIEkgd291bGQgYmUgYWJsZSB0byBleHBhbmQsIGNsYXJpZnksIG9yIGNyaXRpcXVlIHRoaXMgc3BlY2lmaWMgYXJndW1lbnQuIFRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhcHBlYXJzIHRvIGJlIGJ1aWxkaW5nIHRvd2FyZHMgYSBzcGVjaWZpYyBjb25jbHVzaW9uLCBhbmQgSSBhbSBhc3Nlc3Npbmcgd2hldGhlciB0aGF0IGNvbmNsdXNpb24gaXMganVzdGlmaWVkIGJ5IHRoZSBsaW5lIG9mIHJlYXNvbmluZy4gSSB0aGluaywgYmFzZWQgb24gd2hhdCBJIGNhbiBzZWUgaGVyZSwgdGhhdCB0aGVyZSBpcyBhbiB1bmRlcmxheWluZyBhc3N1bXB0aW9uIHRoYXQgaXMgZWl0aGVyIGEpIGNydWNpYWwgdG8gYWNjZXB0aW5nIHRoZSBhcmd1bWVudCBvciBiKSBhbiBhcmVhIGZvciBmdXJ0aGVyIGRldmVsb3BtZW50LiBUaGlzIGlzIGludGVyZXN0aW5nLCBhbmQgaXQmIzM5O3Mgc29tZXRoaW5nIEkmIzM5O2Qgd2FudCB0byByZWFsbHkgZGlnIGludG8gaWYgSSB3ZXJlIGV4cGxvcmluZyB0aGlzIG1vcmUgZGVlcGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfdmxhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzcwOlx0XG4xMzcxOlx0XHRBU1NFUlRfUlROTCgpO1xuMTM3MjpcdFxuMTM3MzpcdFx0diA9IGJyX3ZsYW5fZmluZChuYnBfdmxhbl9ncm91cChwb3J0KSwgdmlkKTtcbjEzNzQ6XHRcdGlmICghdilcbjEzNzU6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xMzc2Olx0XHRicl9mZGJfZmluZF9kZWxldGVfbG9jYWwocG9ydC1cdTAwM2ViciwgcG9ydCwgcG9ydC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIHZpZCk7XG4xMzc3Olx0XHRicl9mZGJfZGVsZXRlX2J5X3BvcnQocG9ydC1cdTAwM2ViciwgcG9ydCwgdmlkLCAwKTtcbjEzNzg6XHRcbjEzNzk6XHRcdHJldHVybiBfX3ZsYW5fZGVsKHYsIGZhbHNlKTtcbjEzODA6XHR9XG4xMzgxOlx0XG4xMzgyOlx0dm9pZCBuYnBfdmxhbl9mbHVzaChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxuMTM4MzpcdHtcbjEzODQ6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xuMTM4NTpcdFxuMTM4NjpcdFx0QVNTRVJUX1JUTkwoKTtcbjEzODc6XHRcbjEzODg6XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXAocG9ydCk7XG4xMzg5Olx0XHRfX3ZsYW5fZmx1c2gocG9ydC1cdTAwM2ViciwgcG9ydCwgdmcpO1xuMTM5MDpcdFx0UkNVX0lOSVRfUE9JTlRFUihwb3J0LVx1MDAzZXZsZ3JwLCBOVUxMKTtcbjEzOTE6XHRcdHN5bmNocm9uaXplX25ldCgpO1xuMTM5MjpcdFx0X192bGFuX2dyb3VwX2ZyZWUodmcpO1xuMTM5MzpcdH1cbjEzOTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NDcKCQkJCQkJCW91dHB1dDogMTk1CgkJCQkJCQl0aG91Z2h0czogMjkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCcmlkZ2UgVkxBTiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gdGFyZ2V0cyBzcGVjaWZpYyBmb2N1cyBzeW1ib2xzIHJlbGF0ZWQgdG8gVkxBTiBvcGVyYXRpb25zOiBgX192bGFuX2RlbGAsIGBfX3ZsYW5fZmx1c2hgLCBgYnJfdmxhbl9kZWxldGVgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgYGJyX3ZsYW5fZmx1c2hgLCBhbmQgYG5icF92bGFuX2ZsdXNoYC4gTG9va3MgbGlrZSB0aGUga2V5IGNoYW5nZXMgYXJlIGNvbmNlbnRyYXRlZCB3aXRoaW4gYG5ldC9icmlkZ2UvYnJfdmxhbi5jYC4gRXhjZWxsZW50LCBrZWVwaW5nIHRoZSBzY29wZSBtYW5hZ2VhYmxlIGlzIGNydWNpYWwuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgb25seSBtb2RpZmllZCBmaWxlIGlzIGluZGVlZCBgbmV0L2JyaWRnZS9icl92bGFuLmNgLCB3aGljaCBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhlIHRhcmdldCBzeW1ib2xzLiBOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBCUklER0VgLCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCwgYW5kIGBWTEFOXzgwMjFRYCAtIG1ha2VzIHNlbnNlLiBXZSBhcmUgZGVhbGluZyB3aXRoIGJyaWRnZSBWTEFOIGZ1bmN0aW9uYWxpdHkuCgpUaGUgcGF0Y2gmIzM5O3MgaW1wYWN0IGFwcGVhcnMgdG8gcmVmaW5lIGhvdyBWTEFOcyBhcmUgZGVsZXRlZCBhbmQgZmx1c2hlZCB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvbnRleHQuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGB0ZWFyZG93bmAgcGFyYW1ldGVyIHRvIGBfX3ZsYW5fZGVsYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEl0IHN1Z2dlc3RzIGEgbW9yZSByZXNpbGllbnQgYXBwcm9hY2ggdG8gZGVsZXRpb24sIGFsbG93aW5nIGl0IHRvIHByb2NlZWQgZXZlbiBpZiBkcml2ZXIgb3Igc3dpdGNoZGV2IGNhbGxzIGVuY291bnRlciBlcnJvcnMgZHVyaW5nIGEgZmx1c2guIFRoaXMgaXMgYSBjb21tb24gYW5kIGltcG9ydGFudCBjb25zaWRlcmF0aW9uIGZvciByZWxpYWJpbGl0eS4gVGhlIGZpeCBmb3IgdGhlIHVzZS1hZnRlci1mcmVlIGluIGBfX3ZsYW5fZmx1c2hgIGVycm9yIHJlcG9ydGluZyBpcyBhIGNyaXRpY2FsIGJ1ZyBmaXgsIHByZXZlbnRpbmcgcG90ZW50aWFsIGNyYXNoZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gZHVyaW5nIHRoZXNlIG9wZXJhdGlvbnMuIERpc3Rpbmd1aXNoaW5nIGJldHdlZW4gcG9ydCBhbmQgYnJpZGdlIFZMQU4gZXJyb3IgbG9nZ2luZyBpbmRpY2F0ZXMgYSBtb3JlIGdyYW51bGFyIGFuZCBpbmZvcm1hdGl2ZSBkZWJ1Z2dpbmcgc3RyYXRlZ3ksIHdoaWNoIGlzIGFsd2F5cyB3ZWxjb21lLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIG5ldGxpbmsgb3BlcmF0aW9ucyAoYFJUTV9ERUxWTEFOYCBhbmQgbGlmZWN5Y2xlIGV2ZW50cykuCgpBbHJpZ2h0LCBJJiMzOTttIHNhdGlzZmllZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3ZsYW5fZGVsJiMzNDssCiAgICAmIzM0O19fdmxhbl9mbHVzaCYjMzQ7LAogICAgJiMzNDticl92bGFuX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9mbHVzaCYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJyaWRnZSBWTEFOIGRlbGV0aW9uIGFuZCBmbHVzaCBoYW5kbGluZyBpbiBuZXQvYnJpZGdlL2JyX3ZsYW4uYy4gSXQgaW50cm9kdWNlcyBhIHRlYXJkb3duIGZsYWcgdG8gZW5zdXJlIGJyaWRnZSBhbmQgcG9ydCBWTEFOcyBhcmUgY2xlYW5lZCB1cCBvbiB0ZWFyZG93bi9mbHVzaCBldmVuIGlmIHVuZGVybHlpbmcgZGV2aWNlL3N3aXRjaGRldiBvcGVyYXRpb25zIHJldHVybiBlcnJvcnMsIGFuZCBmaXhlcyBlcnJvciBsb2dnaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMVkxBTiwgYnJpZGdlIGNvbmZpZ3VyYXRpb24pIGFuZCBicmlkZ2UgZGV2aWNlIHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDssCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3ZsYW5fZGVsJiMzNDssCiAgICAmIzM0O19fdmxhbl9mbHVzaCYjMzQ7LAogICAgJiMzNDticl92bGFuX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9kZWxldGUmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9mbHVzaCYjMzQ7LAogICAgJiMzNDtuYnBfdmxhbl9mbHVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJyaWRnZSBWTEFOIGRlbGV0aW9uIGFuZCBmbHVzaCBoYW5kbGluZyBpbiBuZXQvYnJpZGdlL2JyX3ZsYW4uYy4gSXQgaW50cm9kdWNlcyBhIHRlYXJkb3duIGZsYWcgdG8gZW5zdXJlIGJyaWRnZSBhbmQgcG9ydCBWTEFOcyBhcmUgY2xlYW5lZCB1cCBvbiB0ZWFyZG93bi9mbHVzaCBldmVuIGlmIHVuZGVybHlpbmcgZGV2aWNlL3N3aXRjaGRldiBvcGVyYXRpb25zIHJldHVybiBlcnJvcnMsIGFuZCBmaXhlcyBlcnJvciBsb2dnaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMVkxBTiwgYnJpZGdlIGNvbmZpZ3VyYXRpb24pIGFuZCBicmlkZ2UgZGV2aWNlIHRlYXJkb3duLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgVkxBTiBkZWxldGlvbiBhbmQgZmx1c2hpbmcgbG9naWMgaW4gdGhlIExpbnV4IGJyaWRnZSAoYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCkuIFNwZWNpZmljYWxseSwgaXQgYWRkcyBhIGB0ZWFyZG93bmAgZmxhZyB0byBgX192bGFuX2RlbCgpYCB0byBlbnN1cmUgcmVzb3VyY2UgY2xlYW51cCBjb250aW51ZXMgZXZlbiBpZiBkZXZpY2Uvc3dpdGNoZGV2IFZMQU4gZGVsZXRpb24gcmV0dXJucyBhbiBlcnJvciBkdXJpbmcgZmx1c2gsIGF2b2lkcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiBgcGAgaW4gYF9fdmxhbl9mbHVzaCgpYCwgYW5kIHNhdmVzIGB2bGFuLVx1MDAzZXZpZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSB0byBwcmV2ZW50IGEgdXNlLWFmdGVyLWZyZWUgcmVhZCBhZnRlciBgX192bGFuX2RlbCgpYC5cblxuVGhlc2UgY2hhbmdlcyBleGNsdXNpdmVseSB0b3VjaCBlcnJvciBoYW5kbGluZywgY29udHJvbCBmbG93LCBhbmQgb2JqZWN0IGxpZmV0aW1lIChOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIHVzZS1hZnRlci1mcmVlIHJpc2tzLCBib3RoIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGNoZWNrcyBhbmQgS0FTQU4pLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29weSBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBwYXJzaW5nIGxvZ2ljLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzEzMGZiMjJhMTQwYzRmMmFhYTUxYzFiNGU5NWU2MWVjYjMxZmU2MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDEyOjIxOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl92bGFuLmMgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uYwppbmRleCAxZTBlNDM2NjI5ZWNlLi4zYWEwZTFmZWRlYjI2IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3ZsYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uYwpAQCAtMzg3LDcgJiM0MzszODcsNyBAQCBzdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLAogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdikKJiM0MztzdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgYm9vbCB0ZWFyZG93bikKIHsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICptYXN0ZXJ2ID0gdjsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZzsKQEAgLTQwNSwxMyAmIzQzOzQwNSwxNCBAQCBzdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdikKIAlfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHYtJmd0O3ZpZCk7CiAJaWYgKHApIHsKIAkJZXJyID0gX192bGFuX3ZpZF9kZWwocC0mZ3Q7ZGV2LCBwLSZndDticiwgdik7Ci0JCWlmIChlcnIpCiYjNDM7CQlpZiAoZXJyICZhbXA7JmFtcDsgIXRlYXJkb3duKQogCQkJZ290byBvdXQ7CiAJfSBlbHNlIHsKIAkJZXJyID0gYnJfc3dpdGNoZGV2X3BvcnRfdmxhbl9kZWwodi0mZ3Q7YnItJmd0O2Rldiwgdi0mZ3Q7dmlkKTsKLQkJaWYgKGVyciAmYW1wOyZhbXA7IGVyciAhPSAtRU9QTk9UU1VQUCkKJiM0MzsJCWlmIChlcnIgPT0gLUVPUE5PVFNVUFApCiYjNDM7CQkJZXJyID0gMDsKJiM0MzsJCWVsc2UgaWYgKGVyciAmYW1wOyZhbXA7ICF0ZWFyZG93bikKIAkJCWdvdG8gb3V0OwotCQllcnIgPSAwOwogCX0KIAogCWlmIChicl92bGFuX3Nob3VsZF91c2UodikpIHsKQEAgLTQ0OCw3ICYjNDM7NDQ5LDcgQEAgc3RhdGljIHZvaWQgX192bGFuX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAkJCSBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZykKIHsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCAqdG1wOwotCXUxNiB2X3N0YXJ0ID0gMCwgdl9lbmQgPSAwOwomIzQzOwl1MTYgdl9zdGFydCA9IDAsIHZfZW5kID0gMCwgdmlkOwogCWludCBlcnI7CiAKIAlfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHZnLSZndDtwdmlkKTsKQEAgLTQ2MywxMiAmIzQzOzQ2NCwxOCBAQCBzdGF0aWMgdm9pZCBfX3ZsYW5fZmx1c2goY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCQl9CiAJCXZfZW5kID0gdmxhbi0mZ3Q7dmlkOwogCi0JCWVyciA9IF9fdmxhbl9kZWwodmxhbik7CiYjNDM7CQl2aWQgPSB2bGFuLSZndDt2aWQ7CiYjNDM7CQllcnIgPSBfX3ZsYW5fZGVsKHZsYW4sIHRydWUpOwogCQlpZiAoZXJyKSB7Ci0JCQlicl9lcnIoYnIsCi0JCQkgICAgICAgJiMzNDtwb3J0ICV1KCVzKSBmYWlsZWQgdG8gZGVsZXRlIHZsYW4gJWQ6ICVwZVxuJiMzNDssCi0JCQkgICAgICAgKHVuc2lnbmVkIGludCkgcC0mZ3Q7cG9ydF9ubywgcC0mZ3Q7ZGV2LSZndDtuYW1lLAotCQkJICAgICAgIHZsYW4tJmd0O3ZpZCwgRVJSX1BUUihlcnIpKTsKJiM0MzsJCQlpZiAocCkKJiM0MzsJCQkJYnJfZXJyKGJyLAomIzQzOwkJCQkgICAgICAgJiMzNDtwb3J0ICV1KCVzKSBmYWlsZWQgdG8gZGVsZXRlIHZsYW4gJWQ6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSAgICAgICAodW5zaWduZWQgaW50KXAtJmd0O3BvcnRfbm8sIHAtJmd0O2Rldi0mZ3Q7bmFtZSwKJiM0MzsJCQkJICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCWJyX2VycihiciwKJiM0MzsJCQkJICAgICAgICYjMzQ7ZmFpbGVkIHRvIGRlbGV0ZSBicmlkZ2UgdmxhbiAlZDogJXBlXG4mIzM0OywKJiM0MzsJCQkJICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTsKIAkJfQogCX0KIApAQCAtODM4LDcgJiM0Mzs4NDUsNyBAQCBpbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKQogCiAJdmxhbl90dW5uZWxfaW5mb19kZWwodmcsIHYpOwogCi0JcmV0dXJuIF9fdmxhbl9kZWwodik7CiYjNDM7CXJldHVybiBfX3ZsYW5fZGVsKHYsIGZhbHNlKTsKIH0KIAogdm9pZCBicl92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlICpicikKQEAgLTEzNjksNyAmIzQzOzEzNzYsNyBAQCBpbnQgbmJwX3ZsYW5fZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQpCiAJYnJfZmRiX2ZpbmRfZGVsZXRlX2xvY2FsKHBvcnQtJmd0O2JyLCBwb3J0LCBwb3J0LSZndDtkZXYtJmd0O2Rldl9hZGRyLCB2aWQpOwogCWJyX2ZkYl9kZWxldGVfYnlfcG9ydChwb3J0LSZndDticiwgcG9ydCwgdmlkLCAwKTsKIAotCXJldHVybiBfX3ZsYW5fZGVsKHYpOwomIzQzOwlyZXR1cm4gX192bGFuX2RlbCh2LCBmYWxzZSk7CiB9CiAKIHZvaWQgbmJwX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJyaWRnZSBWTEFOIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBWTEFOIGZ1bmN0aW9uYWxpdHkgd2l0aGluIGEgYnJpZGdlIHNldHVwLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGNoYW5nZXMgYW5kIHRoZWlyIGNvbnRleHQuIEkgd2FudCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgKndoeSogdGhpcyBtb2RpZmljYXRpb24gaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gc2VlIHRoZSAmIzM0O2JlZm9yZSYjMzQ7IHN0YXRlIGFuZCB0aGUgJiMzNDthZnRlciYjMzQ7IHN0YXRlIHRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBhY3QuCgpJJiMzOTttIHRoaW5raW5nIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgaXMgdG8gcHVsbCB1cCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgZmlsZS4gTGV0JiMzOTtzIHVzZSBgcmVhZC1maWxlYCBhbmQgemVybyBpbiBvbiBsaW5lcyAzODAgdGhyb3VnaCA0ODAgb2YgYG5ldC9icmlkZ2UvYnJfdmxhbi5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgd2luZG93IGludG8gdGhlIGFyZWEgb2YgY29kZSB0aGUgcGF0Y2ggaXMgd29ya2luZyB3aXRoLiBGcm9tIHRoZXJlLCBJIGNhbiBhc3Nlc3MgdGhlIGxvZ2ljIGFuZCBkYXRhIHN0cnVjdHVyZXMgYWZmZWN0ZWQgYW5kIHNlZSB3aGVyZSB0aGlzIG1vZGlmaWNhdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgVkxBTiBoYW5kbGluZyB3aXRoaW4gdGhlIGJyaWRnZS4gVGhpcyBzaG91bGQgYWxsb3cgbWUgdG8gZm9ybXVsYXRlIGEgc291bmQgb3Bpbmlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ZsYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdFx0XHRcdGJyX3ZsYW5fcHV0X21hc3RlcihtYXN0ZXJ2KTtcbiAzODE6XHRcdFx0XHR2LVx1MDAzZWJydmxhbiA9IE5VTEw7XG4gMzgyOlx0XHRcdH1cbiAzODM6XHRcdH0gZWxzZSB7XG4gMzg0Olx0XHRcdGJyX3N3aXRjaGRldl9wb3J0X3ZsYW5fZGVsKGRldiwgdi1cdTAwM2V2aWQpO1xuIDM4NTpcdFx0fVxuIDM4NjpcdFxuIDM4NzpcdFx0Z290byBvdXQ7XG4gMzg4Olx0fVxuIDM4OTpcdFxuIDM5MDpcdHN0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCBib29sIHRlYXJkb3duKVxuIDM5MTpcdHtcbiAzOTI6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYgPSB2O1xuIDM5MzpcdFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG4gMzk0Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwID0gTlVMTDtcbiAzOTU6XHRcdGludCBlcnIgPSAwO1xuIDM5NjpcdFxuIDM5NzpcdFx0aWYgKGJyX3ZsYW5faXNfbWFzdGVyKHYpKSB7XG4gMzk4Olx0XHRcdHZnID0gYnJfdmxhbl9ncm91cCh2LVx1MDAzZWJyKTtcbiAzOTk6XHRcdH0gZWxzZSB7XG4gNDAwOlx0XHRcdHAgPSB2LVx1MDAzZXBvcnQ7XG4gNDAxOlx0XHRcdHZnID0gbmJwX3ZsYW5fZ3JvdXAodi1cdTAwM2Vwb3J0KTtcbiA0MDI6XHRcdFx0bWFzdGVydiA9IHYtXHUwMDNlYnJ2bGFuO1xuIDQwMzpcdFx0fVxuIDQwNDpcdFxuIDQwNTpcdFx0X192bGFuX2RlbGV0ZV9wdmlkKHZnLCB2LVx1MDAzZXZpZCk7XG4gNDA2Olx0XHRpZiAocCkge1xuIDQwNzpcdFx0XHRlcnIgPSBfX3ZsYW5fdmlkX2RlbChwLVx1MDAzZWRldiwgcC1cdTAwM2Viciwgdik7XG4gNDA4Olx0XHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2ICF0ZWFyZG93bilcbiA0MDk6XHRcdFx0XHRnb3RvIG91dDtcbiA0MTA6XHRcdH0gZWxzZSB7XG4gNDExOlx0XHRcdGVyciA9IGJyX3N3aXRjaGRldl9wb3J0X3ZsYW5fZGVsKHYtXHUwMDNlYnItXHUwMDNlZGV2LCB2LVx1MDAzZXZpZCk7XG4gNDEyOlx0XHRcdGlmIChlcnIgPT0gLUVPUE5PVFNVUFApXG4gNDEzOlx0XHRcdFx0ZXJyID0gMDtcbiA0MTQ6XHRcdFx0ZWxzZSBpZiAoZXJyIFx1MDAyNlx1MDAyNiAhdGVhcmRvd24pXG4gNDE1Olx0XHRcdFx0Z290byBvdXQ7XG4gNDE2Olx0XHR9XG4gNDE3Olx0XG4gNDE4Olx0XHRpZiAoYnJfdmxhbl9zaG91bGRfdXNlKHYpKSB7XG4gNDE5Olx0XHRcdHYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+QlJJREdFX1ZMQU5fSU5GT19CUkVOVFJZO1xuIDQyMDpcdFx0XHR2Zy1cdTAwM2VudW1fdmxhbnMtLTtcbiA0MjE6XHRcdH1cbiA0MjI6XHRcbiA0MjM6XHRcdGlmIChtYXN0ZXJ2ICE9IHYpIHtcbiA0MjQ6XHRcdFx0dmxhbl90dW5uZWxfaW5mb19kZWwodmcsIHYpO1xuIDQyNTpcdFx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnZnLVx1MDAzZXZsYW5faGFzaCwgXHUwMDI2di1cdTAwM2V2bm9kZSxcbiA0MjY6XHRcdFx0XHRcdCAgICAgICBicl92bGFuX3JodF9wYXJhbXMpO1xuIDQyNzpcdFx0XHRfX3ZsYW5fZGVsX2xpc3Qodik7XG4gNDI4Olx0XHRcdG5icF92bGFuX3NldF92bGFuX2Rldl9zdGF0ZShwLCB2LVx1MDAzZXZpZCk7XG4gNDI5Olx0XHRcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgZmFsc2UpO1xuIDQzMDpcdFx0XHRicl9tdWx0aWNhc3RfcG9ydF9jdHhfZGVpbml0KFx1MDAyNnYtXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xuIDQzMTpcdFx0XHRjYWxsX3JjdShcdTAwMjZ2LVx1MDAzZXJjdSwgbmJwX3ZsYW5fcmN1X2ZyZWUpO1xuIDQzMjpcdFx0fVxuIDQzMzpcdFxuIDQzNDpcdFx0YnJfdmxhbl9wdXRfbWFzdGVyKG1hc3RlcnYpO1xuIDQzNTpcdG91dDpcbiA0MzY6XHRcdHJldHVybiBlcnI7XG4gNDM3Olx0fVxuIDQzODpcdFxuIDQzOTpcdHN0YXRpYyB2b2lkIF9fdmxhbl9ncm91cF9mcmVlKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxuIDQ0MDpcdHtcbiA0NDE6XHRcdFdBUk5fT04oIWxpc3RfZW1wdHkoXHUwMDI2dmctXHUwMDNldmxhbl9saXN0KSk7XG4gNDQyOlx0XHRyaGFzaHRhYmxlX2Rlc3Ryb3koXHUwMDI2dmctXHUwMDNldmxhbl9oYXNoKTtcbiA0NDM6XHRcdHZsYW5fdHVubmVsX2RlaW5pdCh2Zyk7XG4gNDQ0Olx0XHRrZnJlZSh2Zyk7XG4gNDQ1Olx0fVxuIDQ0NjpcdFxuIDQ0NzpcdHN0YXRpYyB2b2lkIF9fdmxhbl9mbHVzaChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4gNDQ4Olx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXG4gNDQ5Olx0XHRcdFx0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxuIDQ1MDpcdHtcbiA0NTE6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZsYW4sICp0bXA7XG4gNDUyOlx0XHR1MTYgdl9zdGFydCA9IDAsIHZfZW5kID0gMCwgdmlkO1xuIDQ1MzpcdFx0aW50IGVycjtcbiA0NTQ6XHRcbiA0NTU6XHRcdF9fdmxhbl9kZWxldGVfcHZpZCh2ZywgdmctXHUwMDNlcHZpZCk7XG4gNDU2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmxhbiwgdG1wLCBcdTAwMjZ2Zy1cdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XG4gNDU3Olx0XHRcdC8qIHRha2UgY2FyZSBvZiBkaXNqb2ludCByYW5nZXMgKi9cbiA0NTg6XHRcdFx0aWYgKCF2X3N0YXJ0KSB7XG4gNDU5Olx0XHRcdFx0dl9zdGFydCA9IHZsYW4tXHUwMDNldmlkO1xuIDQ2MDpcdFx0XHR9IGVsc2UgaWYgKHZsYW4tXHUwMDNldmlkIC0gdl9lbmQgIT0gMSkge1xuIDQ2MTpcdFx0XHRcdC8qIGZvdW5kIHJhbmdlIGVuZCwgbm90aWZ5IGFuZCBzdGFydCBuZXh0IG9uZSAqL1xuIDQ2MjpcdFx0XHRcdGJyX3ZsYW5fbm90aWZ5KGJyLCBwLCB2X3N0YXJ0LCB2X2VuZCwgUlRNX0RFTFZMQU4pO1xuIDQ2MzpcdFx0XHRcdHZfc3RhcnQgPSB2bGFuLVx1MDAzZXZpZDtcbiA0NjQ6XHRcdFx0fVxuIDQ2NTpcdFx0XHR2X2VuZCA9IHZsYW4tXHUwMDNldmlkO1xuIDQ2NjpcdFxuIDQ2NzpcdFx0XHR2aWQgPSB2bGFuLVx1MDAzZXZpZDtcbiA0Njg6XHRcdFx0ZXJyID0gX192bGFuX2RlbCh2bGFuLCB0cnVlKTtcbiA0Njk6XHRcdFx0aWYgKGVycikge1xuIDQ3MDpcdFx0XHRcdGlmIChwKVxuIDQ3MTpcdFx0XHRcdFx0YnJfZXJyKGJyLFxuIDQ3MjpcdFx0XHRcdFx0ICAgICAgIFwmIzM0O3BvcnQgJXUoJXMpIGZhaWxlZCB0byBkZWxldGUgdmxhbiAlZDogJXBlXFxuXCYjMzQ7LFxuIDQ3MzpcdFx0XHRcdFx0ICAgICAgICh1bnNpZ25lZCBpbnQpcC1cdTAwM2Vwb3J0X25vLCBwLVx1MDAzZWRldi1cdTAwM2VuYW1lLFxuIDQ3NDpcdFx0XHRcdFx0ICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTtcbiA0NzU6XHRcdFx0XHRlbHNlXG4gNDc2Olx0XHRcdFx0XHRicl9lcnIoYnIsXG4gNDc3Olx0XHRcdFx0XHQgICAgICAgXCYjMzQ7ZmFpbGVkIHRvIGRlbGV0ZSBicmlkZ2UgdmxhbiAlZDogJXBlXFxuXCYjMzQ7LFxuIDQ3ODpcdFx0XHRcdFx0ICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTtcbiA0Nzk6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODg4CgkJCQkJCQlvdXRwdXQ6IDIxMAoJCQkJCQkJdGhvdWdodHM6IDc2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGluIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AgZm9jdXNlcyBvbiBWTEFOIGRlbGV0aW9uIGFuZCBmbHVzaGluZyB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvZGUuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgZm9jdXNlZCBvbiBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIHByZXZlbnRpbmcgc29tZSBzdWJ0bGUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGFuZCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLgoKVGhlIGNvcmUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgYHRlYXJkb3duYCBmbGFnIGluIGBfX3ZsYW5fZGVsYC4gVGhpcyBmbGFnIHNlZW1zIHRvIGRpY3RhdGUgaG93IGFnZ3Jlc3NpdmVseSBWTEFOIGVudHJpZXMgYXJlIGNsZWFuZWQgdXAsIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIGVycm9ycyBkdXJpbmcgdGhlIGRlbGV0aW9uIG9mIFZMQU4gSURzIChgX192bGFuX3ZpZF9kZWxgKSBvciB3aGVuIGludGVyYWN0aW5nIHdpdGggc3dpdGNoZGV2IChgYnJfc3dpdGNoZGV2X3BvcnRfdmxhbl9kZWxgKS4gVGhlIGhhbmRsaW5nIG9mIHRoZSBgLUVPUE5PVFNVUFBgIGVycm9yIGlzIGFsc28gd29ydGggbm90aW5nOyBpdCBub3JtYWxpemVzIHRoaXMgZXJyb3IgZm9yIHRlYXJkb3duIHNpdHVhdGlvbnMuIFRoaXMgaW1wbGllcyBhIGhpZ2hlciB0b2xlcmFuY2UgZm9yIGNlcnRhaW4gZXJyb3JzIGR1cmluZyBhIGZ1bGwgYnJpZGdlIHRlYXJkb3duIGNvbXBhcmVkIHRvIHN0YW5kYXJkIFZMQU4gZGVsZXRpb24uCgpUaGUgc2Vjb25kIGFyZWEgb2YgY29uY2VybiBpcyBpbiBgX192bGFuX2ZsdXNoYC4gSXQgbG9va3MgbGlrZSB0aGUgY29kZSB3YXMgYWNjZXNzaW5nIGBwLSZndDtwb3J0X25vYCBhbmQgYHZsYW4tJmd0O3ZpZGAgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIHByb2JsZW1zLiBTcGVjaWZpY2FsbHksIGBwYCBjYW4gYmUgYE5VTExgIGluIHRoZSBjYXNlIG9mIGZsdXNoaW5nIHRoZSBicmlkZ2UmIzM5O3Mgb3duIFZMQU4gZ3JvdXAsIGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEFuZCwgYHZsYW5gIGNvdWxkIGJlIGZyZWVkIGJ5IHRoZSBkZWxldGlvbiBwcm9jZXNzIGJlZm9yZSBpdHMgVklEIGlzIGFjY2Vzc2VkLCBsZWFkaW5nIHRvIGEgVXNlLUFmdGVyLUZyZWUuIFRoZSBmaXggaGVyZSBpcyB0byBzYXZlIHRoZSBWTEFOIElEIHRvIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIGNhbGxpbmcgYF9fdmxhbl9kZWxgIGFuZCBpbmNsdWRlIGFuIGBpZiAocClgIGNvbmRpdGlvbmFsLgoKSSYjMzk7dmUgZXhhbWluZWQgdGhlIGNvZGUgY2FyZWZ1bGx5IGFuZCBkZXRlcm1pbmVkIHRoYXQgaXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgbmV3IGF2ZW51ZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBsZWFrYWdlLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgZGlyZWN0IG1vZGlmaWNhdGlvbnMgdG8ga2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGZpZWxkcyBiZWluZyBwYXNzZWQgYWxvbmcuIFRoZSBsb2dpYyBhcHBlYXJzIHNvdW5kLCB3aXRoIHBhcmFtZXRlcnMgaW5pdGlhbGl6ZWQgYnkgY2FsbGVycyBhbmQgaW50ZXJtZWRpYXRlIHZhcmlhYmxlcyBiZWluZyBjYXJlZnVsbHkgaW5pdGlhbGl6ZWQgdG8gYXZvaWQgdW5kZWZpbmVkIGJlaGF2aW9yLgoKR2l2ZW4gdGhhdCBLQVNBTiwgS01TQU4sIExPQ0tERVAgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLCBhbmQgY3Jhc2ggaGFuZGxlcnMgY292ZXIgdGhlIGlzc3VlcyBiZWluZyBhZGRyZXNzZWQgaW4gdGhlIHBhdGNoLCB3aGljaCBhcmUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCBVQUYsIGFuZCBubyBuZXcgbWVhbnMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcyBhcmUgaW50cm9kdWNlZCwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTmAgdG8gYGZhbHNlYC4KClNvLCBpbiBzaG9ydCwgdGhpcyBwYXRjaCB0aWdodGVucyB1cCB0aGUgVkxBTiBkZWxldGlvbiBsb2dpYyB0byBwcmV2ZW50IHNvbWUgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFuZCB0byBpbXByb3ZlIGNsZWFudXAsIGVzcGVjaWFsbHkgZHVyaW5nIGZ1bGwgYnJpZGdlIHRlYXJkb3duLiBUaGUgcHJpbWFyeSBjb25jZXJucyBzZWVtIHRvIGJlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIFVzZS1BZnRlci1GcmVlLCBidXQgdGhlIHBhdGNoIGFkZHJlc3NlcyB0aGVzZSBhbmQgdGhlcmUgYXJlIG5vIHZ1bG5lcmFiaWxpdGllcyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIEFsbCB0aGUgY2hhbmdlcyBzZWVtIHRvIGJlIGNvcnJlY3QgYW5kIHRoaXMgcGF0Y2ggc2hvdWxkIGJlIG1hcmtlZCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgVkxBTiBkZWxldGlvbiBhbmQgZmx1c2hpbmcgbG9naWMgaW4gdGhlIExpbnV4IGJyaWRnZSAoYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCkuIFNwZWNpZmljYWxseSwgaXQgYWRkcyBhIGB0ZWFyZG93bmAgZmxhZyB0byBgX192bGFuX2RlbCgpYCB0byBlbnN1cmUgcmVzb3VyY2UgY2xlYW51cCBjb250aW51ZXMgZXZlbiBpZiBkZXZpY2Uvc3dpdGNoZGV2IFZMQU4gZGVsZXRpb24gcmV0dXJucyBhbiBlcnJvciBkdXJpbmcgZmx1c2gsIGF2b2lkcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiBgcGAgaW4gYF9fdmxhbl9mbHVzaCgpYCwgYW5kIHNhdmVzIGB2bGFuLVx1MDAzZXZpZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSB0byBwcmV2ZW50IGEgdXNlLWFmdGVyLWZyZWUgcmVhZCBhZnRlciBgX192bGFuX2RlbCgpYC5cblxuVGhlc2UgY2hhbmdlcyBleGNsdXNpdmVseSB0b3VjaCBlcnJvciBoYW5kbGluZywgY29udHJvbCBmbG93LCBhbmQgb2JqZWN0IGxpZmV0aW1lIChOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIHVzZS1hZnRlci1mcmVlIHJpc2tzLCBib3RoIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGNoZWNrcyBhbmQgS0FTQU4pLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29weSBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBwYXJzaW5nIGxvZ2ljLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgVkxBTiBkZWxldGlvbiBhbmQgZmx1c2hpbmcgbG9naWMgaW4gdGhlIExpbnV4IGJyaWRnZSAoYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCkuIFNwZWNpZmljYWxseSwgaXQgYWRkcyBhIGB0ZWFyZG93bmAgZmxhZyB0byBgX192bGFuX2RlbCgpYCB0byBlbnN1cmUgcmVzb3VyY2UgY2xlYW51cCBjb250aW51ZXMgZXZlbiBpZiBkZXZpY2Uvc3dpdGNoZGV2IFZMQU4gZGVsZXRpb24gcmV0dXJucyBhbiBlcnJvciBkdXJpbmcgZmx1c2gsIGF2b2lkcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvbiBgcGAgaW4gYF9fdmxhbl9mbHVzaCgpYCwgYW5kIHNhdmVzIGB2bGFuLVx1MDAzZXZpZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSB0byBwcmV2ZW50IGEgdXNlLWFmdGVyLWZyZWUgcmVhZCBhZnRlciBgX192bGFuX2RlbCgpYC5cblxuVGhlc2UgY2hhbmdlcyBleGNsdXNpdmVseSB0b3VjaCBlcnJvciBoYW5kbGluZywgY29udHJvbCBmbG93LCBhbmQgb2JqZWN0IGxpZmV0aW1lIChOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIHVzZS1hZnRlci1mcmVlIHJpc2tzLCBib3RoIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGNoZWNrcyBhbmQgS0FTQU4pLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29weSBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGJ1ZmZlciBwYXJzaW5nIGxvZ2ljLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMToxMS4yMzIxNTM5MjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTUxMDE1MzUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiLFxuICAgIFwiVkxBTl84MDIxUVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdmxhbl9kZWxcIixcbiAgICBcIl9fdmxhbl9mbHVzaFwiLFxuICAgIFwiYnJfdmxhbl9kZWxldGVcIixcbiAgICBcIm5icF92bGFuX2RlbGV0ZVwiLFxuICAgIFwiYnJfdmxhbl9mbHVzaFwiLFxuICAgIFwibmJwX3ZsYW5fZmx1c2hcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFZMQU4gZGVsZXRpb24gYW5kIGZsdXNoaW5nIGxvZ2ljIGluIHRoZSBMaW51eCBicmlkZ2UgKGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2ApLiBTcGVjaWZpY2FsbHksIGl0IGFkZHMgYSBgdGVhcmRvd25gIGZsYWcgdG8gYF9fdmxhbl9kZWwoKWAgdG8gZW5zdXJlIHJlc291cmNlIGNsZWFudXAgY29udGludWVzIGV2ZW4gaWYgZGV2aWNlL3N3aXRjaGRldiBWTEFOIGRlbGV0aW9uIHJldHVybnMgYW4gZXJyb3IgZHVyaW5nIGZsdXNoLCBhdm9pZHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24gYHBgIGluIGBfX3ZsYW5fZmx1c2goKWAsIGFuZCBzYXZlcyBgdmxhbi1cXHUwMDNldmlkYCB0byBhIGxvY2FsIHZhcmlhYmxlIHRvIHByZXZlbnQgYSB1c2UtYWZ0ZXItZnJlZSByZWFkIGFmdGVyIGBfX3ZsYW5fZGVsKClgLlxcblxcblRoZXNlIGNoYW5nZXMgZXhjbHVzaXZlbHkgdG91Y2ggZXJyb3IgaGFuZGxpbmcsIGNvbnRyb2wgZmxvdywgYW5kIG9iamVjdCBsaWZldGltZSAoTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcywgYm90aCBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBjaGVja3MgYW5kIEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvcHkgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBidWZmZXIgcGFyc2luZyBsb2dpYy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGJyaWRnZSBWTEFOIGRlbGV0aW9uIGFuZCBmbHVzaCBoYW5kbGluZyBpbiBuZXQvYnJpZGdlL2JyX3ZsYW4uYy4gSXQgaW50cm9kdWNlcyBhIHRlYXJkb3duIGZsYWcgdG8gZW5zdXJlIGJyaWRnZSBhbmQgcG9ydCBWTEFOcyBhcmUgY2xlYW5lZCB1cCBvbiB0ZWFyZG93bi9mbHVzaCBldmVuIGlmIHVuZGVybHlpbmcgZGV2aWNlL3N3aXRjaGRldiBvcGVyYXRpb25zIHJldHVybiBlcnJvcnMsIGFuZCBmaXhlcyBlcnJvciBsb2dnaW5nLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgcnRuZXRsaW5rIChSVE1fREVMVkxBTiwgYnJpZGdlIGNvbmZpZ3VyYXRpb24pIGFuZCBicmlkZ2UgZGV2aWNlIHRlYXJkb3duLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMToxMS4yMzIxNTkxNjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODMxMTk2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMTMwZmIyMmExNDBjNGYyYWFhNTFjMWI0ZTk1ZTYxZWNiMzFmZTYyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjIxOjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfdmxhbi5jIGIvbmV0L2JyaWRnZS9icl92bGFuLmNcXG5pbmRleCAxZTBlNDM2NjI5ZWNlLi4zYWEwZTFmZWRlYjI2IDEwMDY0NFxcbi0tLSBhL25ldC9icmlkZ2UvYnJfdmxhbi5jXFxuKysrIGIvbmV0L2JyaWRnZS9icl92bGFuLmNcXG5AQCAtMzg3LDcgKzM4Nyw3IEBAIHN0YXRpYyBpbnQgX192bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgZmxhZ3MsXFxuIFxcdGdvdG8gb3V0O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcXG4rc3RhdGljIGludCBfX3ZsYW5fZGVsKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIGJvb2wgdGVhcmRvd24pXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqbWFzdGVydiA9IHY7XFxuIFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnO1xcbkBAIC00MDUsMTMgKzQwNSwxNCBAQCBzdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdilcXG4gXFx0X192bGFuX2RlbGV0ZV9wdmlkKHZnLCB2LVxcdTAwM2V2aWQpO1xcbiBcXHRpZiAocCkge1xcbiBcXHRcXHRlcnIgPSBfX3ZsYW5fdmlkX2RlbChwLVxcdTAwM2VkZXYsIHAtXFx1MDAzZWJyLCB2KTtcXG4tXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiAhdGVhcmRvd24pXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRlcnIgPSBicl9zd2l0Y2hkZXZfcG9ydF92bGFuX2RlbCh2LVxcdTAwM2Vici1cXHUwMDNlZGV2LCB2LVxcdTAwM2V2aWQpO1xcbi1cXHRcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGVyciAhPSAtRU9QTk9UU1VQUClcXG4rXFx0XFx0aWYgKGVyciA9PSAtRU9QTk9UU1VQUClcXG4rXFx0XFx0XFx0ZXJyID0gMDtcXG4rXFx0XFx0ZWxzZSBpZiAoZXJyIFxcdTAwMjZcXHUwMDI2ICF0ZWFyZG93bilcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdGVyciA9IDA7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChicl92bGFuX3Nob3VsZF91c2UodikpIHtcXG5AQCAtNDQ4LDcgKzQ0OSw3IEBAIHN0YXRpYyB2b2lkIF9fdmxhbl9mbHVzaChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCAqdG1wO1xcbi1cXHR1MTYgdl9zdGFydCA9IDAsIHZfZW5kID0gMDtcXG4rXFx0dTE2IHZfc3RhcnQgPSAwLCB2X2VuZCA9IDAsIHZpZDtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdF9fdmxhbl9kZWxldGVfcHZpZCh2ZywgdmctXFx1MDAzZXB2aWQpO1xcbkBAIC00NjMsMTIgKzQ2NCwxOCBAQCBzdGF0aWMgdm9pZCBfX3ZsYW5fZmx1c2goY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbiBcXHRcXHR9XFxuIFxcdFxcdHZfZW5kID0gdmxhbi1cXHUwMDNldmlkO1xcbiBcXG4tXFx0XFx0ZXJyID0gX192bGFuX2RlbCh2bGFuKTtcXG4rXFx0XFx0dmlkID0gdmxhbi1cXHUwMDNldmlkO1xcbitcXHRcXHRlcnIgPSBfX3ZsYW5fZGVsKHZsYW4sIHRydWUpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdGJyX2VycihicixcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCJwb3J0ICV1KCVzKSBmYWlsZWQgdG8gZGVsZXRlIHZsYW4gJWQ6ICVwZVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgICh1bnNpZ25lZCBpbnQpIHAtXFx1MDAzZXBvcnRfbm8sIHAtXFx1MDAzZWRldi1cXHUwMDNlbmFtZSxcXG4tXFx0XFx0XFx0ICAgICAgIHZsYW4tXFx1MDAzZXZpZCwgRVJSX1BUUihlcnIpKTtcXG4rXFx0XFx0XFx0aWYgKHApXFxuK1xcdFxcdFxcdFxcdGJyX2VycihicixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJwb3J0ICV1KCVzKSBmYWlsZWQgdG8gZGVsZXRlIHZsYW4gJWQ6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgICh1bnNpZ25lZCBpbnQpcC1cXHUwMDNlcG9ydF9ubywgcC1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdmlkLCBFUlJfUFRSKGVycikpO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdGJyX2VycihicixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJmYWlsZWQgdG8gZGVsZXRlIGJyaWRnZSB2bGFuICVkOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB2aWQsIEVSUl9QVFIoZXJyKSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtODM4LDcgKzg0NSw3IEBAIGludCBicl92bGFuX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQpXFxuIFxcbiBcXHR2bGFuX3R1bm5lbF9pbmZvX2RlbCh2Zywgdik7XFxuIFxcbi1cXHRyZXR1cm4gX192bGFuX2RlbCh2KTtcXG4rXFx0cmV0dXJuIF9fdmxhbl9kZWwodiwgZmFsc2UpO1xcbiB9XFxuIFxcbiB2b2lkIGJyX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbkBAIC0xMzY5LDcgKzEzNzYsNyBAQCBpbnQgbmJwX3ZsYW5fZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQpXFxuIFxcdGJyX2ZkYl9maW5kX2RlbGV0ZV9sb2NhbChwb3J0LVxcdTAwM2ViciwgcG9ydCwgcG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgdmlkKTtcXG4gXFx0YnJfZmRiX2RlbGV0ZV9ieV9wb3J0KHBvcnQtXFx1MDAzZWJyLCBwb3J0LCB2aWQsIDApO1xcbiBcXG4tXFx0cmV0dXJuIF9fdmxhbl9kZWwodik7XFxuK1xcdHJldHVybiBfX3ZsYW5fZGVsKHYsIGZhbHNlKTtcXG4gfVxcbiBcXG4gdm9pZCBuYnBfdmxhbl9mbHVzaChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMToxMi41MTYwMDI2NThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQxMjM2MTgxNDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCIsXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX192bGFuX2RlbFwiLFxuICAgIFwiX192bGFuX2ZsdXNoXCIsXG4gICAgXCJicl92bGFuX2RlbGV0ZVwiLFxuICAgIFwibmJwX3ZsYW5fZGVsZXRlXCIsXG4gICAgXCJicl92bGFuX2ZsdXNoXCIsXG4gICAgXCJuYnBfdmxhbl9mbHVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgYnJpZGdlIFZMQU4gZGVsZXRpb24gYW5kIGZsdXNoIGhhbmRsaW5nIGluIG5ldC9icmlkZ2UvYnJfdmxhbi5jLiBJdCBpbnRyb2R1Y2VzIGEgdGVhcmRvd24gZmxhZyB0byBlbnN1cmUgYnJpZGdlIGFuZCBwb3J0IFZMQU5zIGFyZSBjbGVhbmVkIHVwIG9uIHRlYXJkb3duL2ZsdXNoIGV2ZW4gaWYgdW5kZXJseWluZyBkZXZpY2Uvc3dpdGNoZGV2IG9wZXJhdGlvbnMgcmV0dXJuIGVycm9ycywgYW5kIGZpeGVzIGVycm9yIGxvZ2dpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBydG5ldGxpbmsgKFJUTV9ERUxWTEFOLCBicmlkZ2UgY29uZmlndXJhdGlvbikgYW5kIGJyaWRnZSBkZXZpY2UgdGVhcmRvd24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzEzMGZiMjJhMTQwYzRmMmFhYTUxYzFiNGU5NWU2MWVjYjMxZmU2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjIxOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl92bGFuLmMgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xuaW5kZXggMWUwZTQzNjYyOWVjZS4uM2FhMGUxZmVkZWIyNiAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfdmxhbi5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xuQEAgLTM4Nyw3ICszODcsNyBAQCBzdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLFxuIFx0Z290byBvdXQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxuK3N0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCBib29sIHRlYXJkb3duKVxuIHtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYgPSB2O1xuIFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG5AQCAtNDA1LDEzICs0MDUsMTQgQEAgc3RhdGljIGludCBfX3ZsYW5fZGVsKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXG4gXHRfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHYtXHUwMDNldmlkKTtcbiBcdGlmIChwKSB7XG4gXHRcdGVyciA9IF9fdmxhbl92aWRfZGVsKHAtXHUwMDNlZGV2LCBwLVx1MDAzZWJyLCB2KTtcbi1cdFx0aWYgKGVycilcbitcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgIXRlYXJkb3duKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gYnJfc3dpdGNoZGV2X3BvcnRfdmxhbl9kZWwodi1cdTAwM2Vici1cdTAwM2VkZXYsIHYtXHUwMDNldmlkKTtcbi1cdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZXJyICE9IC1FT1BOT1RTVVBQKVxuK1x0XHRpZiAoZXJyID09IC1FT1BOT1RTVVBQKVxuK1x0XHRcdGVyciA9IDA7XG4rXHRcdGVsc2UgaWYgKGVyciBcdTAwMjZcdTAwMjYgIXRlYXJkb3duKVxuIFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRlcnIgPSAwO1xuIFx0fVxuIFxuIFx0aWYgKGJyX3ZsYW5fc2hvdWxkX3VzZSh2KSkge1xuQEAgLTQ0OCw3ICs0NDksNyBAQCBzdGF0aWMgdm9pZCBfX3ZsYW5fZmx1c2goY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHRcdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcbiB7XG4gXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCAqdG1wO1xuLVx0dTE2IHZfc3RhcnQgPSAwLCB2X2VuZCA9IDA7XG4rXHR1MTYgdl9zdGFydCA9IDAsIHZfZW5kID0gMCwgdmlkO1xuIFx0aW50IGVycjtcbiBcbiBcdF9fdmxhbl9kZWxldGVfcHZpZCh2ZywgdmctXHUwMDNlcHZpZCk7XG5AQCAtNDYzLDEyICs0NjQsMTggQEAgc3RhdGljIHZvaWQgX192bGFuX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdFx0fVxuIFx0XHR2X2VuZCA9IHZsYW4tXHUwMDNldmlkO1xuIFxuLVx0XHRlcnIgPSBfX3ZsYW5fZGVsKHZsYW4pO1xuK1x0XHR2aWQgPSB2bGFuLVx1MDAzZXZpZDtcbitcdFx0ZXJyID0gX192bGFuX2RlbCh2bGFuLCB0cnVlKTtcbiBcdFx0aWYgKGVycikge1xuLVx0XHRcdGJyX2Vycihicixcbi1cdFx0XHQgICAgICAgXCJwb3J0ICV1KCVzKSBmYWlsZWQgdG8gZGVsZXRlIHZsYW4gJWQ6ICVwZVxcblwiLFxuLVx0XHRcdCAgICAgICAodW5zaWduZWQgaW50KSBwLVx1MDAzZXBvcnRfbm8sIHAtXHUwMDNlZGV2LVx1MDAzZW5hbWUsXG4tXHRcdFx0ICAgICAgIHZsYW4tXHUwMDNldmlkLCBFUlJfUFRSKGVycikpO1xuK1x0XHRcdGlmIChwKVxuK1x0XHRcdFx0YnJfZXJyKGJyLFxuK1x0XHRcdFx0ICAgICAgIFwicG9ydCAldSglcykgZmFpbGVkIHRvIGRlbGV0ZSB2bGFuICVkOiAlcGVcXG5cIixcbitcdFx0XHRcdCAgICAgICAodW5zaWduZWQgaW50KXAtXHUwMDNlcG9ydF9ubywgcC1cdTAwM2VkZXYtXHUwMDNlbmFtZSxcbitcdFx0XHRcdCAgICAgICB2aWQsIEVSUl9QVFIoZXJyKSk7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0YnJfZXJyKGJyLFxuK1x0XHRcdFx0ICAgICAgIFwiZmFpbGVkIHRvIGRlbGV0ZSBicmlkZ2UgdmxhbiAlZDogJXBlXFxuXCIsXG4rXHRcdFx0XHQgICAgICAgdmlkLCBFUlJfUFRSKGVycikpO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtODM4LDcgKzg0NSw3IEBAIGludCBicl92bGFuX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQpXG4gXG4gXHR2bGFuX3R1bm5lbF9pbmZvX2RlbCh2Zywgdik7XG4gXG4tXHRyZXR1cm4gX192bGFuX2RlbCh2KTtcbitcdHJldHVybiBfX3ZsYW5fZGVsKHYsIGZhbHNlKTtcbiB9XG4gXG4gdm9pZCBicl92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbkBAIC0xMzY5LDcgKzEzNzYsNyBAQCBpbnQgbmJwX3ZsYW5fZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQpXG4gXHRicl9mZGJfZmluZF9kZWxldGVfbG9jYWwocG9ydC1cdTAwM2ViciwgcG9ydCwgcG9ydC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIHZpZCk7XG4gXHRicl9mZGJfZGVsZXRlX2J5X3BvcnQocG9ydC1cdTAwM2ViciwgcG9ydCwgdmlkLCAwKTtcbiBcbi1cdHJldHVybiBfX3ZsYW5fZGVsKHYpO1xuK1x0cmV0dXJuIF9fdmxhbl9kZWwodiwgZmFsc2UpO1xuIH1cbiBcbiB2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMToxMi41MTYwMDM4MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTgwMDY0NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVkxBTiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJIHNlZSB0aGUgZm9jdXMgaXMgb24gYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCwgc3BlY2lmaWNhbGx5LiBUaGUgY2hhbmdlcyBzZWVtIGNlbnRlcmVkIGFyb3VuZCBWTEFOIGRlbGV0aW9uLCBhcyBpbmRpY2F0ZWQgYnkgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYF9fdmxhbl9kZWxgLCBgX192bGFuX2ZsdXNoYCwgYGJyX3ZsYW5fZGVsZXRlYCwgYW5kIGBuYnBfdmxhbl9kZWxldGVgLiBUaGlzIHN1Z2dlc3RzIHRoZXkncmUgbGlrZWx5IHR3ZWFraW5nIHRoZSBWTEFOIHJlbW92YWwgcHJvY2VzcyB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvZGUuXG5cbk5vdywgSSdsbCBuZWVkIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGJldHRlci4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IGNvZGUuIFRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvbnRlbnQgb2YgYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCBpdHNlbGYuIEknbGwgYWxzbyBuZWVkIHRvIGNoZWNrIGBuZXQvYnJpZGdlL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWF5IGluZmx1ZW5jZSB0aGlzIGNoYW5nZS4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIOKAkyB3aGF0ZXZlcidzIGZhc3Rlc3Qg4oCTIHRvIGdldCB0aGF0IHNvdXJjZSBjb2RlIHB1bGxlZCB1cC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGJlaGluZCB0aGVzZSBtb2RpZmljYXRpb25zIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyB0aGVpciBpbXBhY3QgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMToxOS40OTYwNzE3MjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzg1LFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzg1OlxcdFxcdH1cXG4gMzg2OlxcdFxcbiAzODc6XFx0XFx0Z290byBvdXQ7XFxuIDM4ODpcXHR9XFxuIDM4OTpcXHRcXG4gMzkwOlxcdHN0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCBib29sIHRlYXJkb3duKVxcbiAzOTE6XFx0e1xcbiAzOTI6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqbWFzdGVydiA9IHY7XFxuIDM5MzpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcXG4gMzk0OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAgPSBOVUxMO1xcbiAzOTU6XFx0XFx0aW50IGVyciA9IDA7XFxuIDM5NjpcXHRcXG4gMzk3OlxcdFxcdGlmIChicl92bGFuX2lzX21hc3Rlcih2KSkge1xcbiAzOTg6XFx0XFx0XFx0dmcgPSBicl92bGFuX2dyb3VwKHYtXFx1MDAzZWJyKTtcXG4gMzk5OlxcdFxcdH0gZWxzZSB7XFxuIDQwMDpcXHRcXHRcXHRwID0gdi1cXHUwMDNlcG9ydDtcXG4gNDAxOlxcdFxcdFxcdHZnID0gbmJwX3ZsYW5fZ3JvdXAodi1cXHUwMDNlcG9ydCk7XFxuIDQwMjpcXHRcXHRcXHRtYXN0ZXJ2ID0gdi1cXHUwMDNlYnJ2bGFuO1xcbiA0MDM6XFx0XFx0fVxcbiA0MDQ6XFx0XFxuIDQwNTpcXHRcXHRfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHYtXFx1MDAzZXZpZCk7XFxuIDQwNjpcXHRcXHRpZiAocCkge1xcbiA0MDc6XFx0XFx0XFx0ZXJyID0gX192bGFuX3ZpZF9kZWwocC1cXHUwMDNlZGV2LCBwLVxcdTAwM2Viciwgdik7XFxuIDQwODpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2ICF0ZWFyZG93bilcXG4gNDA5OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA0MTA6XFx0XFx0fSBlbHNlIHtcXG4gNDExOlxcdFxcdFxcdGVyciA9IGJyX3N3aXRjaGRldl9wb3J0X3ZsYW5fZGVsKHYtXFx1MDAzZWJyLVxcdTAwM2VkZXYsIHYtXFx1MDAzZXZpZCk7XFxuIDQxMjpcXHRcXHRcXHRpZiAoZXJyID09IC1FT1BOT1RTVVBQKVxcbiA0MTM6XFx0XFx0XFx0XFx0ZXJyID0gMDtcXG4gNDE0OlxcdFxcdFxcdGVsc2UgaWYgKGVyciBcXHUwMDI2XFx1MDAyNiAhdGVhcmRvd24pXFxuIDQxNTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNDE2OlxcdFxcdH1cXG4gNDE3OlxcdFxcbiA0MTg6XFx0XFx0aWYgKGJyX3ZsYW5fc2hvdWxkX3VzZSh2KSkge1xcbiA0MTk6XFx0XFx0XFx0di1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkJSSURHRV9WTEFOX0lORk9fQlJFTlRSWTtcXG4gNDIwOlxcdFxcdFxcdHZnLVxcdTAwM2VudW1fdmxhbnMtLTtcXG4gNDIxOlxcdFxcdH1cXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0aWYgKG1hc3RlcnYgIT0gdikge1xcbiA0MjQ6XFx0XFx0XFx0dmxhbl90dW5uZWxfaW5mb19kZWwodmcsIHYpO1xcbiA0MjU6XFx0XFx0XFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2dmctXFx1MDAzZXZsYW5faGFzaCwgXFx1MDAyNnYtXFx1MDAzZXZub2RlLFxcbiA0MjY6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGJyX3ZsYW5fcmh0X3BhcmFtcyk7XFxuIDQyNzpcXHRcXHRcXHRfX3ZsYW5fZGVsX2xpc3Qodik7XFxuIDQyODpcXHRcXHRcXHRuYnBfdmxhbl9zZXRfdmxhbl9kZXZfc3RhdGUocCwgdi1cXHUwMDNldmlkKTtcXG4gNDI5OlxcdFxcdFxcdGJyX211bHRpY2FzdF90b2dnbGVfb25lX3ZsYW4odiwgZmFsc2UpO1xcbiA0MzA6XFx0XFx0XFx0YnJfbXVsdGljYXN0X3BvcnRfY3R4X2RlaW5pdChcXHUwMDI2di1cXHUwMDNlcG9ydF9tY2FzdF9jdHgpO1xcbiA0MzE6XFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnYtXFx1MDAzZXJjdSwgbmJwX3ZsYW5fcmN1X2ZyZWUpO1xcbiA0MzI6XFx0XFx0fVxcbiA0MzM6XFx0XFxuIDQzNDpcXHRcXHRicl92bGFuX3B1dF9tYXN0ZXIobWFzdGVydik7XFxuIDQzNTpcXHRvdXQ6XFxuIDQzNjpcXHRcXHRyZXR1cm4gZXJyO1xcbiA0Mzc6XFx0fVxcbiA0Mzg6XFx0XFxuIDQzOTpcXHRzdGF0aWMgdm9pZCBfX3ZsYW5fZ3JvdXBfZnJlZShzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcXG4gNDQwOlxcdHtcXG4gNDQxOlxcdFxcdFdBUk5fT04oIWxpc3RfZW1wdHkoXFx1MDAyNnZnLVxcdTAwM2V2bGFuX2xpc3QpKTtcXG4gNDQyOlxcdFxcdHJoYXNodGFibGVfZGVzdHJveShcXHUwMDI2dmctXFx1MDAzZXZsYW5faGFzaCk7XFxuIDQ0MzpcXHRcXHR2bGFuX3R1bm5lbF9kZWluaXQodmcpO1xcbiA0NDQ6XFx0XFx0a2ZyZWUodmcpO1xcbiA0NDU6XFx0fVxcbiA0NDY6XFx0XFxuIDQ0NzpcXHRzdGF0aWMgdm9pZCBfX3ZsYW5fZmx1c2goY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbiA0NDg6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsXFxuIDQ0OTpcXHRcXHRcXHRcXHQgc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcpXFxuIDQ1MDpcXHR7XFxuIDQ1MTpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCAqdG1wO1xcbiA0NTI6XFx0XFx0dTE2IHZfc3RhcnQgPSAwLCB2X2VuZCA9IDAsIHZpZDtcXG4gNDUzOlxcdFxcdGludCBlcnI7XFxuIDQ1NDpcXHRcXG4gNDU1OlxcdFxcdF9fdmxhbl9kZWxldGVfcHZpZCh2ZywgdmctXFx1MDAzZXB2aWQpO1xcbiA0NTY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZsYW4sIHRtcCwgXFx1MDAyNnZnLVxcdTAwM2V2bGFuX2xpc3QsIHZsaXN0KSB7XFxuIDQ1NzpcXHRcXHRcXHQvKiB0YWtlIGNhcmUgb2YgZGlzam9pbnQgcmFuZ2VzICovXFxuIDQ1ODpcXHRcXHRcXHRpZiAoIXZfc3RhcnQpIHtcXG4gNDU5OlxcdFxcdFxcdFxcdHZfc3RhcnQgPSB2bGFuLVxcdTAwM2V2aWQ7XFxuIDQ2MDpcXHRcXHRcXHR9IGVsc2UgaWYgKHZsYW4tXFx1MDAzZXZpZCAtIHZfZW5kICE9IDEpIHtcXG4gNDYxOlxcdFxcdFxcdFxcdC8qIGZvdW5kIHJhbmdlIGVuZCwgbm90aWZ5IGFuZCBzdGFydCBuZXh0IG9uZSAqL1xcbiA0NjI6XFx0XFx0XFx0XFx0YnJfdmxhbl9ub3RpZnkoYnIsIHAsIHZfc3RhcnQsIHZfZW5kLCBSVE1fREVMVkxBTik7XFxuIDQ2MzpcXHRcXHRcXHRcXHR2X3N0YXJ0ID0gdmxhbi1cXHUwMDNldmlkO1xcbiA0NjQ6XFx0XFx0XFx0fVxcbiA0NjU6XFx0XFx0XFx0dl9lbmQgPSB2bGFuLVxcdTAwM2V2aWQ7XFxuIDQ2NjpcXHRcXG4gNDY3OlxcdFxcdFxcdHZpZCA9IHZsYW4tXFx1MDAzZXZpZDtcXG4gNDY4OlxcdFxcdFxcdGVyciA9IF9fdmxhbl9kZWwodmxhbiwgdHJ1ZSk7XFxuIDQ2OTpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuIDQ3MDpcXHRcXHRcXHRcXHRpZiAocClcXG4gNDcxOlxcdFxcdFxcdFxcdFxcdGJyX2VycihicixcXG4gNDcyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwicG9ydCAldSglcykgZmFpbGVkIHRvIGRlbGV0ZSB2bGFuICVkOiAlcGVcXFxcblxcXCIsXFxuIDQ3MzpcXHRcXHRcXHRcXHRcXHQgICAgICAgKHVuc2lnbmVkIGludClwLVxcdTAwM2Vwb3J0X25vLCBwLVxcdTAwM2VkZXYtXFx1MDAzZW5hbWUsXFxuIDQ3NDpcXHRcXHRcXHRcXHRcXHQgICAgICAgdmlkLCBFUlJfUFRSKGVycikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMToxOS40OTYyMTE3OTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTE3NDQ5NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFZMQU4gQ29uZmlndXJhdGlvbiBpbiBCcmlkZ2UgTmV0d29ya2luZyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gYG5ldC9icmlkZ2UvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBicmlkZ2luZyBmdW5jdGlvbmFsaXR5IHJlc2lkZSBpbiB0aGUga2VybmVsIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIFZMQU4gc3VwcG9ydCBvcHRpb25zLCBob3cgdGhleSdyZSBleHBvc2VkLCBhbmQgYW55IGRlcGVuZGVuY2llcyB0aGV5IG1pZ2h0IGhhdmUgd2l0aGluIHRoZSBicmlkZ2UgY29uZmlndXJhdGlvbi4gSSdtIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBgQ09ORklHX2AgZmxhZ3Mgb3Igb3RoZXIgc2V0dGluZ3MgdGhhdCBlbmFibGUsIGRpc2FibGUsIGFuZCBmaW5lLXR1bmUgVkxBTiBiZWhhdmlvciAqd2l0aGluKiB0aGUgY29udGV4dCBvZiBhIGJyaWRnZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIG9wdGlvbnMgcmVsYXRlZCB0byBWTEFOIGZpbHRlcmluZywgVkxBTi1hd2FyZSBicmlkZ2luZywgYW5kIHBvdGVudGlhbGx5IHNvbWUgZmluZXItZ3JhaW5lZCBjb250cm9scyBvdmVyIFZMQU4gdGFnZ2luZyBhbmQgdW50YWdnaW5nIGJlaGF2aW9yIG9uIGJyaWRnZSBwb3J0cy4gS25vd2luZyB0aGUgc3BlY2lmaWNzIG9mIHRoZSBLY29uZmlnIGZpbGUgd2lsbCBsZXQgbWUgdW5kZXJzdGFuZCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFuZCBtb2R1bGVzIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgVkxBTnMgdG8gZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjIyLjYxMzY2NDUzMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTc5MDA3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUklER0VfVkxBTl9GSUxURVJJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL0tjb25maWc9MzY9Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNDktXFxubmV0L2JyaWRnZS9LY29uZmlnOjUwOmNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiVkxBTiBmaWx0ZXJpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL01ha2VmaWxlPTIxPWJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgKz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cXG5uZXQvYnJpZGdlL01ha2VmaWxlOjIzOmJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yNC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjIzMz1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfdG9nZ2xlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgYm9vbCBvbilcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMzQte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjIzNTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjIzNi1cXHRpZiAoYnJfb3B0X2dldChwb3J0LVxcdTAwM2ViciwgQlJPUFRfTUNBU1RfVkxBTl9TTk9PUElOR19FTkFCTEVEKSkge1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00MzUyPXZvaWQgYnJfbXVsdGljYXN0X3VwZGF0ZV92bGFuX21jYXN0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1OCBzdGF0ZSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQzNTMte1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM1NDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM1NS1cXHRzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xMTk1PXN0YXRpYyBpbnQgYnJfdmFsaWRhdGUoc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTIwNy1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxMjA4OiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTIwOS1cXHRpZiAoZGF0YVtJRkxBX0JSX1ZMQU5fUFJPVE9DT0xdIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xMjk1PXN0YXRpYyBpbnQgYnJfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xMzY3LVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjEzNjg6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xMzY5LVxcdGlmIChkYXRhW0lGTEFfQlJfVkxBTl9QUk9UT0NPTF0pIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTE2MTk9c3RhdGljIHNpemVfdCBicl9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNjI3LVxcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSArICAgICAvKiBJRkxBX0JSX1ZMQU5fRklMVEVSSU5HICovXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTYyODojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE2MjktXFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMTYpKSArXFx0LyogSUZMQV9CUl9WTEFOX1BST1RPQ09MICovXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xNjc4PXN0YXRpYyBpbnQgYnJfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3MzAtXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTczMTojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3MzItXFx0aWYgKG5sYV9wdXRfYmUxNihza2IsIElGTEFfQlJfVkxBTl9QUk9UT0NPTCwgYnItXFx1MDAzZXZsYW5fcHJvdG8pIHx8XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0zOTI9c3RydWN0IG5ldF9icmlkZ2VfcG9ydCB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0zOTgtXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGZsYWdzO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjM5OTojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTQwMC1cXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwXFx0X19yY3UgKnZsZ3JwO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NTAyPXN0cnVjdCBuZXRfYnJpZGdlIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTUwNy1cXHQvKiBUaGVzZSBmaWVsZHMgYXJlIGFjY2Vzc2VkIG9uIGVhY2ggcGFja2V0ICovXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NTA4OiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTA5LVxcdF9fYmUxNlxcdFxcdFxcdFxcdHZsYW5fcHJvdG87XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD01OTg9c3RydWN0IGJyX2lucHV0X3NrYl9jYiB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC02MDktXFx0dTggZ3JhdF9hcnA6MTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDo2MTA6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC02MTEtXFx0dTggdmxhbl9maWx0ZXJlZDoxO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTU2NT1icl9tdWx0aWNhc3RfY3R4X29wdGlvbnNfZXF1YWwoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eDEsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTcyLS8qIGJyX3ZsYW4uYyAqL1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE1NzM6I2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTc0LWJvb2wgYnJfYWxsb3dlZF9pbmdyZXNzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE4Nzk9c3RhdGljIGlubGluZSB1MTYgYnJfdmxhbl9mbGFncyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgcHZpZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4ODYtLyogYnJfdmxhbl9vcHRpb25zLmMgKi9cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxODg3OiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTg4OC1ib29sIGJyX3ZsYW5fb3B0c19lcV9yYW5nZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2X2N1cnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xOTM0PXN0YXRpYyBpbmxpbmUgYm9vbCBicl92bGFuX3N0YXRlX2FsbG93ZWQodTggc3RhdGUsIGJvb2wgbGVhcm5fYWxsb3cpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xOTQ3LS8qIGJyX21zdC5jICovXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTk0ODojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE5NDktREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGJyX21zdF91c2VkKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaD0zMj1pbnQgYnJfdmxhbl90dW5uZWxfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBpbnQgY21kLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlX3R1bm5lbC5oLTM0LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaDozNTojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZV90dW5uZWwuaC0zNi0vKiBicl92bGFuX3R1bm5lbC5jICovXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9ODM5PXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhuZl9jYWxsX2FycHRhYmxlcyk7XFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTg0MC0jZW5kaWZcXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM6ODQxOiNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTg0Mi1zdGF0aWMgc3NpemVfdCB2bGFuX2ZpbHRlcmluZ19zaG93KHN0cnVjdCBkZXZpY2UgKmQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9OTM1PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpicmlkZ2VfYXR0cnNbXSA9IHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy05ODEtI2VuZGlmXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jOjk4MjojaWZkZWYgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR1xcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy05ODMtXFx0XFx1MDAyNmRldl9hdHRyX3ZsYW5fZmlsdGVyaW5nLmF0dHIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz05MDE9aW50IGJyX3ZsYW5fZmlsdGVyX3RvZ2dsZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtOTA1LVxcdFxcdC5vcmlnX2RldiA9IGJyLVxcdTAwM2VkZXYsXFxubmV0L2JyaWRnZS9icl92bGFuLmM6OTA2OlxcdFxcdC5pZCA9IFNXSVRDSERFVl9BVFRSX0lEX0JSSURHRV9WTEFOX0ZJTFRFUklORyxcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy05MDctXFx0XFx0LmZsYWdzID0gU1dJVENIREVWX0ZfU0tJUF9FT1BOT1RTVVBQLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MTI2ND1pbnQgbmJwX3ZsYW5faW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMjY3LVxcdFxcdC5vcmlnX2RldiA9IHAtXFx1MDAzZWJyLVxcdTAwM2VkZXYsXFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTI2ODpcXHRcXHQuaWQgPSBTV0lUQ0hERVZfQVRUUl9JRF9CUklER0VfVkxBTl9GSUxURVJJTkcsXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTI2OS1cXHRcXHQuZmxhZ3MgPSBTV0lUQ0hERVZfRl9TS0lQX0VPUE5PVFNVUFAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjIyLjY2MzQ2MDA2NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MTg4MTQwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWTEFOIEZpbHRlcmluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBsZXQncyBoZWFkIHN0cmFpZ2h0IGludG8gdGhlIGBuZXQvYnJpZGdlL0tjb25maWdgIGZpbGUuIEknbSBzcGVjaWZpY2FsbHkgemVyb2luZyBpbiBvbiB0aGUgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2Agb3B0aW9uLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBvZiBWTEFOIGZpbHRlcmluZyBjb25maWd1cmF0aW9uIGluIHRoZSBicmlkZ2luZyBjb2RlIGlzIGRlZmluZWQuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgb3B0aW9uIGlzIGV4cG9zZWQgdG8gdGhlIHVzZXIsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIChsaWtlIFZMQU4gc3VwcG9ydCBpbiBnZW5lcmFsKSwgYW5kIGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBLY29uZmlnIHN5bnRheCB1c2VkIHRoZXJlLCBhbnkgYXNzb2NpYXRlZCBkZWZhdWx0cywgaGVscCB0ZXh0LCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQuIEl0J3MgYSBrZXkgcGFydCBvZiBob3cgdGhlIGJyaWRnaW5nIGZ1bmN0aW9uYWxpdHkgaGFuZGxlcyBWTEFOIHRhZ2dlZCBmcmFtZXMsIHNvIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb25maWd1cmF0aW9uIGlzIGVzc2VudGlhbCBmb3IgYW55IGJyaWRnZS1yZWxhdGVkIGRlYnVnZ2luZyBvciBvcHRpbWl6YXRpb24gSSBtaWdodCBiZSB0YWNrbGluZy4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIHJlY2FsbCB0aGUgdW5kZXJseWluZyBjb25maWcgbG9naWMgb3IgdW5kZXJzdGFuZCBob3cgdGhpcyBhZmZlY3RzIHRoaW5ncyBmcm9tIGZpcnN0IHByaW5jaXBsZXMgaWYgSSBhbSBmZWVsaW5nIHJ1c3R5LCBiZWZvcmUgZGVsdmluZyBpbnRvIGFjdHVhbCBicmlkZ2UgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE3NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjI1LjE4MjI3NjU0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyA4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEJSSURHRVxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIjgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1xcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBMTENcXG4gICA5OlxcdFxcdHNlbGVjdCBTVFBcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBMaW51eCBib3ggd2lsbCBiZSBhYmxlIHRvIGFjdCBhcyBhblxcbiAgMTI6XFx0XFx0ICBFdGhlcm5ldCBicmlkZ2UsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRpZmZlcmVudCBFdGhlcm5ldCBzZWdtZW50cyBpdFxcbiAgMTM6XFx0XFx0ICBpcyBjb25uZWN0ZWQgdG8gd2lsbCBhcHBlYXIgYXMgb25lIEV0aGVybmV0IHRvIHRoZSBwYXJ0aWNpcGFudHMuXFxuICAxNDpcXHRcXHQgIFNldmVyYWwgc3VjaCBicmlkZ2VzIGNhbiB3b3JrIHRvZ2V0aGVyIHRvIGNyZWF0ZSBldmVuIGxhcmdlclxcbiAgMTU6XFx0XFx0ICBuZXR3b3JrcyBvZiBFdGhlcm5ldHMgdXNpbmcgdGhlIElFRUUgODAyLjEgc3Bhbm5pbmcgdHJlZSBhbGdvcml0aG0uXFxuICAxNjpcXHRcXHQgIEFzIHRoaXMgaXMgYSBzdGFuZGFyZCwgTGludXggYnJpZGdlcyB3aWxsIGNvb3BlcmF0ZSBwcm9wZXJseSB3aXRoXFxuICAxNzpcXHRcXHQgIG90aGVyIHRoaXJkIHBhcnR5IGJyaWRnZSBwcm9kdWN0cy5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBJbiBvcmRlciB0byB1c2UgdGhlIEV0aGVybmV0IGJyaWRnZSwgeW91J2xsIG5lZWQgdGhlIGJyaWRnZVxcbiAgMjA6XFx0XFx0ICBjb25maWd1cmF0aW9uIHRvb2xzOyBzZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RcXHUwMDNlXFxuICAyMTpcXHRcXHQgIGZvciBsb2NhdGlvbi4gUGxlYXNlIHJlYWQgdGhlIEJyaWRnZSBtaW5pLUhPV1RPIGZvciBtb3JlXFxuICAyMjpcXHRcXHQgIGluZm9ybWF0aW9uLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHlvdSBlbmFibGUgaXB0YWJsZXMgc3VwcG9ydCBhbG9uZyB3aXRoIHRoZSBicmlkZ2Ugc3VwcG9ydCB0aGVuIHlvdVxcbiAgMjU6XFx0XFx0ICB0dXJuIHlvdXIgYnJpZGdlIGludG8gYSBicmlkZ2luZyBJUCBmaXJld2FsbC5cXG4gIDI2OlxcdFxcdCAgaXB0YWJsZXMgd2lsbCB0aGVuIHNlZSB0aGUgSVAgcGFja2V0cyBiZWluZyBicmlkZ2VkLCBzbyB5b3UgbmVlZCB0b1xcbiAgMjc6XFx0XFx0ICB0YWtlIHRoaXMgaW50byBhY2NvdW50IHdoZW4gc2V0dGluZyB1cCB5b3VyIGZpcmV3YWxsIHJ1bGVzLlxcbiAgMjg6XFx0XFx0ICBFbmFibGluZyBhcnB0YWJsZXMgc3VwcG9ydCB3aGVuIGJyaWRnaW5nIHdpbGwgbGV0IGFycHRhYmxlcyBzZWVcXG4gIDI5OlxcdFxcdCAgYnJpZGdlZCBBUlAgdHJhZmZpYyBpbiB0aGUgYXJwdGFibGVzIEZPUldBUkQgY2hhaW4uXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDMyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgYnJpZGdlLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNTpcXHRcXG4gIDM2OlxcdGNvbmZpZyBCUklER0VfSUdNUF9TTk9PUElOR1xcbiAgMzc6XFx0XFx0Ym9vbCBcXFwiSUdNUC9NTEQgc25vb3BpbmdcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAgMzk6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICA0MDpcXHRcXHRkZWZhdWx0IHlcXG4gIDQxOlxcdFxcdGhlbHBcXG4gIDQyOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHlcXG4gIDQzOlxcdFxcdCAgZm9yd2FyZCBtdWx0aWNhc3QgdHJhZmZpYyBiYXNlZCBvbiBJR01QL01MRCB0cmFmZmljIHJlY2VpdmVkIGZyb21cXG4gIDQ0OlxcdFxcdCAgZWFjaCBwb3J0LlxcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICA0OTpcXHRcXG4gIDUwOlxcdGNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG4gIDUxOlxcdFxcdGJvb2wgXFxcIlZMQU4gZmlsdGVyaW5nXFxcIlxcbiAgNTI6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gIDUzOlxcdFxcdGRlcGVuZHMgb24gVkxBTl84MDIxUVxcbiAgNTQ6XFx0XFx0ZGVmYXVsdCBuXFxuICA1NTpcXHRcXHRoZWxwXFxuICA1NjpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHNlbGVjdGl2ZWx5XFxuICA1NzpcXHRcXHQgIHJlY2VpdmUgYW5kIGZvcndhcmQgdHJhZmZpYyBiYXNlZCBvbiBWTEFOIGluZm9ybWF0aW9uIGluIHRoZSBwYWNrZXRcXG4gIDU4OlxcdFxcdCAgYW55IFZMQU4gaW5mb3JtYXRpb24gY29uZmlndXJlZCBvbiB0aGUgYnJpZGdlIHBvcnQgb3IgYnJpZGdlIGRldmljZS5cXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgNjM6XFx0XFxuICA2NDpcXHRjb25maWcgQlJJREdFX01SUFxcbiAgNjU6XFx0XFx0Ym9vbCBcXFwiTVJQIHByb3RvY29sXFxcIlxcbiAgNjY6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0VcXG4gIDY3OlxcdFxcdGRlZmF1bHQgblxcbiAgNjg6XFx0XFx0aGVscFxcbiAgNjk6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSB0byBydW4gTVJQXFxuICA3MDpcXHRcXHQgIHByb3RvY29sIHRvIGRldGVjdCBsb29wc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMToyNS4xODIzNDcwNDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDg4Njg4MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVkxBTiBEZWxldGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBhdGNoIHRoYXQgcmVmYWN0b3JzIHRoZSBWTEFOIGRlbGV0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBicmlkZ2luZyBjb2RlLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYSBgdGVhcmRvd25gIGJvb2xlYW4gYXJndW1lbnQgdG8gdGhlIGBfX3ZsYW5fZGVsYCBmdW5jdGlvbi4gVGhpcyBpcyBzaWduaWZpY2FudCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBuZXcgcGFyYW1ldGVyLlxuXG5Mb29raW5nIGF0IHRoZSBgX192bGFuX2RlbGAgZnVuY3Rpb24gaXRzZWxmLCB0aGUgbG9naWMgbm93IHNlZW1zIHRvIGNvbmRpdGlvbmFsbHkgaGFuZGxlIGVycm9ycy4gQmVmb3JlLCBlcnJvcnMgd2VyZSBhbHdheXMgcHJvcGFnYXRlZC4gTm93LCBpdCBhcHBlYXJzIHRoZSBgdGVhcmRvd25gIGZsYWcgaW5mbHVlbmNlcyB0aGUgZXJyb3IgaGFuZGxpbmcuIElmIGB0ZWFyZG93bmAgaXMgdHJ1ZSwgY2VydGFpbiBlcnJvcnMgbWlnaHQgYmUgaWdub3JlZCwgcGFydGljdWxhcmx5IGluIHRoZSBgX192bGFuX2ZsdXNoYCBwYXRoLiBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHNwZWNpZmljIGVycm9yIGNvZGVzIGFyZSBub3cgYmVpbmcgaGFuZGxlZCBkaWZmZXJlbnRseSBiYXNlZCBvbiB0aGlzIG5ldyB0ZWFyZG93biBmbGFnLCBhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBkaWZmZXJlbnQgY2FsbGluZyBjb250ZXh0cy4gVGhlIGNvbmRpdGlvbmFsIGxvZ2ljIG5vdyBpbiBwbGFjZSBpbnNpZGUgdGhlIGBpZiAoZXJyIFx1MDAyNlx1MDAyNiAhdGVhcmRvd24pYCBibG9ja3MgYXJlIGNydWNpYWwuXG5cblRoZSBkaWZmIGFsc28gc2hvd3MgdGhhdCBgYnJfdmxhbl9kZWxldGVgIGFuZCBgbmJwX3ZsYW5fZGVsZXRlYCBub3cgY2FsbCBgX192bGFuX2RlbGAgd2l0aCBgdGVhcmRvd25gIHNldCB0byBgZmFsc2VgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlc2UgZnVuY3Rpb25zLCBpbiB0aGUgY3VycmVudCBjb250ZXh0LCBhcmUgKm5vdCogaW50ZW5kZWQgdG8gYmUgYSB0ZWFyZG93biwgb3IgbW9yZSBwZXJtYW5lbnQsIGNsZWFudXAsIGFuZCB0aHVzLCBlcnJvcnMgc2hvdWxkIGJlIGNoZWNrZWQuXG5cbkhvd2V2ZXIsIGBfX3ZsYW5fZmx1c2hgIG5vdyBjYWxscyBgX192bGFuX2RlbGAgd2l0aCBgdGVhcmRvd25gIHNldCB0byBgdHJ1ZWAuIFRoaXMgaW1wbGllcyB0aGF0IGluIHRoZSBjb250ZXh0IG9mIGZsdXNoaW5nIFZMQU5zLCBwZXJoYXBzIGR1cmluZyBicmlkZ2UgZGVzdHJ1Y3Rpb24gb3IgcmVjb25maWd1cmF0aW9uLCB0aGUgZXJyb3JzIHJlbGF0ZWQgdG8gVkxBTiBkZWxldGlvbiBhcmUgbm90IGFzIGNyaXRpY2FsLCBhbmQgcGVyaGFwcyBjYW4gYmUgaWdub3JlZC4gSSdsbCBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBwdXJwb3NlIG9mIGBfX3ZsYW5fZmx1c2hgIHRvIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzLiBUaGUgbG9nIG1lc3NhZ2UgZm9ybWF0dGluZyBkaWZmZXJlbmNlcyBiYXNlZCBvbiBgcGAgYXJlIGFsc28gbm90ZXdvcnRoeSAtIHRoaXMgYXBwZWFycyB0byBiZSBhIHJlZmluZW1lbnQgb2YgZXJyb3IgbWVzc2FnaW5nLlxuXG5VbHRpbWF0ZWx5LCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxzIHRvIGBicl92bGFuX2RlbGV0ZWAsIGBuYnBfdmxhbl9kZWxldGVgLCBhbmQgYF9fdmxhbl9mbHVzaGAgdG8gdW5kZXJzdGFuZCB0aGUgdmFyaW91cyBjb250ZXh0cyBpbiB3aGljaCBWTEFOIGRlbGV0aW9uIGlzIHBlcmZvcm1lZCwgYW5kIHRodXMsIHdoeSB0aGUgYHRlYXJkb3duYCBmbGFnIGlzIG5lZWRlZC4gSSdsbCBuZWVkIHRvIHVzZSB0aGVzZSBjYWxsIHBhdGhzIHRvIGZvcm0gYSBjb25jbHVzaXZlIGp1ZGdlbWVudCBvbiB3aGF0IHRoZSBwYXRjaCBpcyB0cnlpbmcgdG8gYWNoaWV2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM5NCwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjMwLjI3MTAzODc0OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MDQ2NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKGJyX3ZsYW5fZGVsZXRlfG5icF92bGFuX2RlbGV0ZXxicl92bGFuX2ZsdXNofG5icF92bGFuX2ZsdXNoKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MTE5PXN0YXRpYyBpbnQgYnJfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTQyLVxcdGlmIChlcnIpIHtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE0MzpcXHRcXHRicl92bGFuX2ZsdXNoKGJyKTtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE0NC1cXHRcXHRicl9tZGJfaGFzaF9maW5pKGJyKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MTUzPXN0YXRpYyB2b2lkIGJyX2Rldl91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTU4LVxcdGJyX211bHRpY2FzdF91bmluaXRfc3RhdHMoYnIpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MTU5OlxcdGJyX3ZsYW5fZmx1c2goYnIpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTYwLVxcdGJyX21kYl9oYXNoX2ZpbmkoYnIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jPTMzND1zdGF0aWMgdm9pZCBkZWxfbmJwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmMtMzU2LVxcbm5ldC9icmlkZ2UvYnJfaWYuYzozNTc6XFx0bmJwX3ZsYW5fZmx1c2gocCk7XFxubmV0L2JyaWRnZS9icl9pZi5jLTM1OC1cXHRicl9mZGJfZGVsZXRlX2J5X3BvcnQoYnIsIHAsIDAsIDEpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9Njk4PXN0YXRpYyBpbnQgYnJfdmxhbl9pbmZvKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTcyMy1cXHRcXHRpZiAocCkge1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjcyNDpcXHRcXHRcXHRpZiAoIW5icF92bGFuX2RlbGV0ZShwLCB2aW5mby1cXHUwMDNldmlkKSlcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy03MjUtXFx0XFx0XFx0XFx0KmNoYW5nZWQgPSB0cnVlO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtNzI3LVxcdFxcdFxcdGlmICgodmluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19NQVNURVIpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NzI4OlxcdFxcdFxcdCAgICAhYnJfdmxhbl9kZWxldGUocC1cXHUwMDNlYnIsIHZpbmZvLVxcdTAwM2V2aWQpKVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTcyOS1cXHRcXHRcXHRcXHQqY2hhbmdlZCA9IHRydWU7XFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6NzMwOlxcdFxcdH0gZWxzZSBpZiAoIWJyX3ZsYW5fZGVsZXRlKGJyLCB2aW5mby1cXHUwMDNldmlkKSkge1xcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTczMS1cXHRcXHRcXHQqY2hhbmdlZCA9IHRydWU7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xNTg1PWludCBicl92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQsIHUxNiBmbGFncyxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNTg2LVxcdFxcdGJvb2wgKmNoYW5nZWQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTU4NzppbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNTg4OnZvaWQgYnJfdmxhbl9mbHVzaChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE1ODktc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqYnJfdmxhbl9maW5kKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnLCB1MTYgdmlkKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE2MDQ9aW50IG5icF92bGFuX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkLCB1MTYgZmxhZ3MsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTYwNS1cXHRcXHQgYm9vbCAqY2hhbmdlZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNjA2OmludCBuYnBfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTYwNzp2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE2MDgtaW50IG5icF92bGFuX2luaXQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE3MjE9c3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNzI3LVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE3Mjg6c3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3Mjkte1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTczMi1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxNzMzOnN0YXRpYyBpbmxpbmUgdm9pZCBicl92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNzM0LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE3NDY9c3RhdGljIGlubGluZSBpbnQgbmJwX3ZsYW5fYWRkKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQsIHUxNiBmbGFncyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3NTItXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTc1MzpzdGF0aWMgaW5saW5lIGludCBuYnBfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZClcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNzU0LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE3NTctXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTc1ODpzdGF0aWMgaW5saW5lIHZvaWQgbmJwX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydClcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xNzU5LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTc4Nj1pbnQgYnJfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkLCB1MTYgZmxhZ3MsIGJvb2wgKmNoYW5nZWQsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04MzAtICovXFxubmV0L2JyaWRnZS9icl92bGFuLmM6ODMxOmludCBicl92bGFuX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQpXFxubmV0L2JyaWRnZS9icl92bGFuLmMtODMyLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTg1MC1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzo4NTE6dm9pZCBicl92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy04NTIte1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MTA4Nz1zdGF0aWMgdm9pZCBicl92bGFuX2Rpc2FibGVfZGVmYXVsdF9wdmlkKHN0cnVjdCBuZXRfYnJpZGdlICpicilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEwOTUtXFx0aWYgKHZsYW5fZGVmYXVsdF9wdmlkKGJyX3ZsYW5fZ3JvdXAoYnIpLCBwdmlkKSkge1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjEwOTY6XFx0XFx0aWYgKCFicl92bGFuX2RlbGV0ZShiciwgcHZpZCkpXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTA5Ny1cXHRcXHRcXHRicl92bGFuX25vdGlmeShiciwgTlVMTCwgcHZpZCwgMCwgUlRNX0RFTFZMQU4pO1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTEwMS1cXHRcXHRpZiAodmxhbl9kZWZhdWx0X3B2aWQobmJwX3ZsYW5fZ3JvdXAocCksIHB2aWQpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTEwMjpcXHRcXHQgICAgIW5icF92bGFuX2RlbGV0ZShwLCBwdmlkKSlcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTAzLVxcdFxcdFxcdGJyX3ZsYW5fbm90aWZ5KGJyLCBwLCBwdmlkLCAwLCBSVE1fREVMVkxBTik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMTA5PWludCBfX2JyX3ZsYW5fc2V0X2RlZmF1bHRfcHZpZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiBwdmlkLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTE0NS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMTQ2OlxcdFxcdGlmICghYnJfdmxhbl9kZWxldGUoYnIsIG9sZF9wdmlkKSlcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTQ3LVxcdFxcdFxcdGJyX3ZsYW5fbm90aWZ5KGJyLCBOVUxMLCBvbGRfcHZpZCwgMCwgUlRNX0RFTFZMQU4pO1xcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTE2Ny1cXHRcXHRcXHRnb3RvIGVycl9wb3J0O1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjExNjg6XFx0XFx0aWYgKCFuYnBfdmxhbl9kZWxldGUocCwgb2xkX3B2aWQpKVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTExNjktXFx0XFx0XFx0YnJfdmxhbl9ub3RpZnkoYnIsIHAsIG9sZF9wdmlkLCAwLCBSVE1fREVMVkxBTik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTkxLVxcdFxcdH1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMTkyOlxcdFxcdG5icF92bGFuX2RlbGV0ZShwLCBwdmlkKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMTkzLVxcdFxcdGJyX3ZsYW5fbm90aWZ5KGJyLCBwLCBwdmlkLCAwLCBSVE1fREVMVkxBTik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMjA0LVxcdFxcdH1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMjA1OlxcdFxcdGJyX3ZsYW5fZGVsZXRlKGJyLCBwdmlkKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMjA2LVxcdFxcdGJyX3ZsYW5fbm90aWZ5KGJyLCBOVUxMLCBwdmlkLCAwLCBSVE1fREVMVkxBTik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMzIyPWludCBuYnBfdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZCwgdTE2IGZsYWdzLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTM2Ni0gKi9cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxMzY3OmludCBuYnBfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZClcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xMzY4LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEzODEtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTM4Mjp2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTM4My17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xNzU0PWludCBicl92bGFuX2JyaWRnZV9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNzY5LVxcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTc3MDpcXHRcXHRjaGFuZ2VkID0gIWJyX3ZsYW5fZGVsZXRlKGJyLCBici1cXHUwMDNlZGVmYXVsdF9wdmlkKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xNzcxLVxcdFxcdHZsY21kID0gUlRNX0RFTFZMQU47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjMwLjMyMTk1MTUzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNDE1NTY4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpczogVkxBTiBEZWxldGlvbiBpbiBMaW51eCBCcmlkZ2UgU3Vic3lzdGVtKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgYnJfdmxhbl9kZWxldGVgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgYF9fdmxhbl9mbHVzaGAsIGFuZCBgX192bGFuX2RlbGAgd2l0aGluIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AuIFRoaXMgaXMgYWxsIHdpdGhpbiB0aGUgTGludXggYnJpZGdlIHN1YnN5c3RlbSwgd2hpY2gsIGNyaXRpY2FsbHksIGhhcyBWTEFOIGZpbHRlcmluZyBlbmFibGVkIChgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2ApLiBXZSdyZSB0YWxraW5nIHN0YW5kYXJkIG5ldHdvcmtpbmcgb3BlcmF0aW9ucyBoZXJlIOKAkyBicmlkZ2UgY3JlYXRpb24sIGFkZGluZyBwb3J0cywgY29uZmlndXJpbmcgVkxBTnMgdXNpbmcgTmV0bGluayAoUlRNX05FV1ZMQU4sIFJUTV9ERUxWTEFOLCBldGMuKSwgYW5kIGZsdXNoaW5nIFZMQU5zIG9uIHBvcnQgZGVsZXRpb24gb3IgYnJpZGdlIHVuaW5pdGlhbGl6YXRpb24vZmx1c2guIFRoZXNlIGFyZSBhbGwgdGhpbmdzIHRoYXQgYXJlICpkaXJlY3RseSogYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UsIGFuZCBzeXprYWxsZXIgaGFzIGFscmVhZHkgaGFtbWVyZWQgb24gdGhlc2UgaW50ZXJmYWNlcyB0aHJvdWdoIGBydG5sL25ldGxpbmtgLCBzbyB3ZSBrbm93IHRoZXJlJ3Mgc29tZSBleGlzdGluZyBjb3ZlcmFnZS5cblxuVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmcgKm5vdyo/XG5cblRoZSBjcml0ZXJpYSBzZWVtIHRvIGxpbmUgdXAuIFdlIGhhdmUgYSBjb3JlIHN1YnN5c3RlbSB0aGF0J3MgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgaW50ZXJmYWNlcyBsaWtlIG5ldGxpbmsgKHJ0bmV0bGluayksIGJyaWRnZSBkZXZpY2Ugb3BlcmF0aW9ucywgYW5kIHNvY2tldCBzeXNjYWxscy4gVGhhdCdzIGEgaHVnZSBwb3NpdGl2ZS5cblxuVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgZGVmaW5pdGVseSBpbXBhY3RpbmcgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiAgYF9fdmxhbl9kZWxgLCBgX192bGFuX2ZsdXNoYCwgYGJyX3ZsYW5fZGVsZXRlYCwgYW5kIGBuYnBfdmxhbl9kZWxldGVgLCB3aGljaCBpcyBncmVhdC4gIFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIGZpZGRsaW5nIHdpdGggZXJyb3IgaGFuZGxpbmcgZHVyaW5nIFZMQU4gZmx1c2gvdGVhcmRvd24gYW5kIHN0YW5kYXJkIFZMQU4gZGVsZXRpb24uICBJdCBzZWVtcyB0aGUga2V5IGNoYW5nZSBpcyBhYm91dCBob3cgZXJyb3JzIGFyZSBoYW5kbGVkIHdoZW4gdGVhcmluZyBkb3duIFZMQU5zLiAgSW4gYF9fdmxhbl9kZWxgLCBpZiBgdGVhcmRvd25gIGlzIGB0cnVlYCwgZXJyb3JzIGZyb20gaW50ZXJuYWwgY2FsbHMgKmRvbid0KiBhYm9ydCB0aGUgcHJvY2VzczsgaW5zdGVhZCwgaXQgY29udGludWVzIHRvIGNsZWFuIHVwIGRhdGEgc3RydWN0dXJlcyBhbmQgc2NoZWR1bGUgUkNVIGZyZWUuIEhvd2V2ZXIsIGlmIHRlYXJkb3duIGlzIGZhbHNlIChpbiBgYnJfdmxhbl9kZWxldGVgL2BuYnBfdmxhbl9kZWxldGVgKSwgZXJyb3JzIGFyZSBzdGlsbCBjYXVzaW5nIGVhcmx5IGV4aXQsIHdoaWNoIGlzIHRoZSBrZXkgZGlmZmVyZW5jZS4gIFRoZSBmaXggYWxzbyBpbmNsdWRlcyBhIGJ1ZyBmaXggdG8gcHJldmVudCBhY2Nlc3NpbmcgYSBWTEFOIElEIGFmdGVyIGl0IG1pZ2h0IGhhdmUgYmVlbiBmcmVlZCBpbiBgX192bGFuX2ZsdXNoYC5cblxuQWxsIG9mIHRoaXMgYWRkcyB1cCB0byBhIHNvbGlkIGNhc2UgZm9yIGZ1enppbmcuIFdlIGhhdmUgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpbiB0aGUga2VybmVsIG5ldHdvcmtpbmcgYnJpZGdlIHN1YnN5c3RlbSB0aGF0J3MgYmVlbiBtb2RpZmllZCwgZXNwZWNpYWxseSBpbiBob3cgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBkZWZpbml0ZWx5IGJlIGB0cnVlYCBoZXJlLlxuXG5Ob3csIGxldCdzIGVuc3VyZSB3ZSBoYXZlIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBXZSdsbCBuZWVkIGBDT05GSUdfQlJJREdFYCwgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLCBhbmQgYENPTkZJR19WTEFOXzgwMjFRYCAoc2luY2UgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AgZGVwZW5kcyBvbiBib3RoIGBWTEFOXzgwMjFRYCBhbmQgYEJSSURHRWApLiBXZSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBmb3IgYEJSSURHRWAgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgIHRvIGNvbmZpcm0gdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0LlxuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTQ3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjM1LjY2MzUxMDg5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjUxMzY0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgKEJSSURHRXxWTEFOXzgwMjFRKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0LzgwMjFxL0tjb25maWctNS1cXG5uZXQvODAyMXEvS2NvbmZpZzo2OmNvbmZpZyBWTEFOXzgwMjFRXFxubmV0LzgwMjFxL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XFxcIlxcbi0tXFxubmV0LzgwMjFxL0tjb25maWctMjEtXFxubmV0LzgwMjFxL0tjb25maWc6MjI6Y29uZmlnIFZMQU5fODAyMVFfR1ZSUFxcbm5ldC84MDIxcS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkdWUlAgKEdBUlAgVkxBTiBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvODAyMXEvS2NvbmZpZy0zMS1cXG5uZXQvODAyMXEvS2NvbmZpZzozMjpjb25maWcgVkxBTl84MDIxUV9NVlJQXFxubmV0LzgwMjFxL0tjb25maWctMzMtXFx0Ym9vbCBcXFwiTVZSUCAoTXVsdGlwbGUgVkxBTiBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvS2NvbmZpZz0yMjA9Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFxcbi0tXFxubmV0L0tjb25maWctMjMwLVxcbm5ldC9LY29uZmlnOjIzMTpjb25maWcgQlJJREdFX05FVEZJTFRFUlxcbm5ldC9LY29uZmlnLTIzMi1cXHR0cmlzdGF0ZSBcXFwiQnJpZGdlZCBJUC9BUlAgcGFja2V0cyBmaWx0ZXJpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNS1cXG5uZXQvYnJpZGdlL0tjb25maWc6Njpjb25maWcgQlJJREdFXFxubmV0L2JyaWRnZS9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIjgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1xcXCJcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy0zNS1cXG5uZXQvYnJpZGdlL0tjb25maWc6MzY6Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTM3LVxcdGJvb2wgXFxcIklHTVAvTUxEIHNub29waW5nXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTQ5LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo1MDpjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXFxubmV0L2JyaWRnZS9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIlZMQU4gZmlsdGVyaW5nXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTYzLVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo2NDpjb25maWcgQlJJREdFX01SUFxcbm5ldC9icmlkZ2UvS2NvbmZpZy02NS1cXHRib29sIFxcXCJNUlAgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNzUtXFxubmV0L2JyaWRnZS9LY29uZmlnOjc2OmNvbmZpZyBCUklER0VfQ0ZNXFxubmV0L2JyaWRnZS9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIkNGTSBwcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Mjg9Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0VcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDItIyBvbGQgc29ja29wdCBpbnRlcmZhY2UgYW5kIGV2YWwgbG9vcFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NDM6Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJMZWdhY3kgRUJUQUJMRVMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNTItXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo1MzptZW51Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNTQtXFx0dHJpc3RhdGUgXFxcIkV0aGVybmV0IEJyaWRnZSB0YWJsZXMgKGVidGFibGVzKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz02Mj1pZiBCUklER0VfTkZfRUJUQUJMRVNcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNjYtI1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6Njc6Y29uZmlnIEJSSURHRV9FQlRfQlJPVVRFXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy02OC1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBicm91dGUgdGFibGUgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNzctXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo3ODpjb25maWcgQlJJREdFX0VCVF9UX0ZJTFRFUlxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNzktXFx0dHJpc3RhdGUgXFxcImVidDogZmlsdGVyIHRhYmxlIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTg3LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6ODg6Y29uZmlnIEJSSURHRV9FQlRfVF9OQVRcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTg5LVxcdHRyaXN0YXRlIFxcXCJlYnQ6IG5hdCB0YWJsZSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy05OS0jXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxMDA6Y29uZmlnIEJSSURHRV9FQlRfODAyXzNcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEwMS1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiA4MDIuMyBmaWx0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTA2LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTA3OmNvbmZpZyBCUklER0VfRUJUX0FNT05HXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMDgtXFx0dHJpc3RhdGUgXFxcImVidDogYW1vbmcgZmlsdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTExNS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjExNjpjb25maWcgQlJJREdFX0VCVF9BUlBcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTExNy1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBBUlAgZmlsdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEyMy1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjEyNDpjb25maWcgQlJJREdFX0VCVF9JUFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTI1LVxcdHRyaXN0YXRlIFxcXCJlYnQ6IElQIGZpbHRlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMzEtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxMzI6Y29uZmlnIEJSSURHRV9FQlRfSVA2XFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMzMtXFx0dHJpc3RhdGUgXFxcImVidDogSVA2IGZpbHRlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNDAtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxNDE6Y29uZmlnIEJSSURHRV9FQlRfTElNSVRcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBsaW1pdCBtYXRjaCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNTAtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxNTE6Y29uZmlnIEJSSURHRV9FQlRfTUFSS1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTUyLVxcdHRyaXN0YXRlIFxcXCJlYnQ6IG1hcmsgZmlsdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE2MC1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE2MTpjb25maWcgQlJJREdFX0VCVF9QS1RUWVBFXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNjItXFx0dHJpc3RhdGUgXFxcImVidDogcGFja2V0IHR5cGUgZmlsdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE3MC1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE3MTpjb25maWcgQlJJREdFX0VCVF9TVFBcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE3Mi1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBTVFAgZmlsdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE3OC1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE3OTpjb25maWcgQlJJREdFX0VCVF9WTEFOXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xODAtXFx0dHJpc3RhdGUgXFxcImVidDogODAyLjFRIFZMQU4gZmlsdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE4OC0jXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxODk6Y29uZmlnIEJSSURHRV9FQlRfQVJQUkVQTFlcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE5MC1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBhcnAgcmVwbHkgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE5Ny1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE5ODpjb25maWcgQlJJREdFX0VCVF9ETkFUXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xOTktXFx0dHJpc3RhdGUgXFxcImVidDogZG5hdCB0YXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjA1LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MjA2OmNvbmZpZyBCUklER0VfRUJUX01BUktfVFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjA3LVxcdHRyaXN0YXRlIFxcXCJlYnQ6IG1hcmsgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTIxNS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjIxNjpjb25maWcgQlJJREdFX0VCVF9SRURJUkVDVFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjE3LVxcdHRyaXN0YXRlIFxcXCJlYnQ6IHJlZGlyZWN0IHRhcmdldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMjMtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyMjQ6Y29uZmlnIEJSSURHRV9FQlRfU05BVFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjI1LVxcdHRyaXN0YXRlIFxcXCJlYnQ6IHNuYXQgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTIzMy0jXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyMzQ6Y29uZmlnIEJSSURHRV9FQlRfTE9HXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMzUtXFx0dHJpc3RhdGUgXFxcImVidDogbG9nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTI0Mi1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjI0Mzpjb25maWcgQlJJREdFX0VCVF9ORkxPR1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjQ0LVxcdHRyaXN0YXRlIFxcXCJlYnQ6IG5mbG9nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjM1Ljc0MDAyOTkxN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDA2Mzg2NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWTEFOIEZpbHRlcmluZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBzdHVmZi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSBmb3VuZGF0aW9uYWwgcGllY2VzIGFyZSBpbiBwbGFjZS4gVGhlIHByZXJlcXVpc2l0ZXMgc2VlbSB0byBiZSB0aGUgYEJSSURHRWAgYW5kIGBWTEFOXzgwMjFRYCBtb2R1bGVzIOKAkyBtYWtlcyBzZW5zZSwgY2FuJ3QgZmlsdGVyIFZMQU5zIGlmIHdlIGRvbid0IGhhdmUgYnJpZGdlcyBhbmQgODAyLjFRIHRhZ2dpbmcuIE5vdywgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cbkkgd2FudCB0byBwaW5wb2ludCB0aGUgYXJlYXMgdGhpcyBmaWx0ZXJpbmcgbG9naWMgZGlyZWN0bHkgaW1wYWN0cy4gV2hhdCBzcGVjaWZpYywgbGVzcyBjb21tb24gZnVuY3Rpb25zIGhhdmUgYmVlbiB0b3VjaGVkIG9yIGRpcmVjdGx5IGNhbGwgdGhlIG1vZGlmaWVkIGNvZGU/IExldCdzIHNlZS4uLiBJJ3ZlIGdvdCBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zOiBgX192bGFuX2RlbGAsIGBfX3ZsYW5fZmx1c2hgIChib3RoIHN0YXRpYywgaW50ZXJlc3RpbmcpLCBhbmQgdGhlbiBgYnJfdmxhbl9kZWxldGVgLCBgbmJwX3ZsYW5fZGVsZXRlYCwgYGJyX3ZsYW5fZmx1c2hgLCBhbmQgYG5icF92bGFuX2ZsdXNoYC4gTG9va3MgbGlrZSB0aGVzZSBkZWxldGlvbnMgYW5kIGZsdXNoaW5nIG9wZXJhdGlvbnMgYXJlIHRoZSBjb3JlIG9mIHdoYXQncyBjaGFuZ2VkLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCBvdmVyIHRvIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AgYW5kIG1ldGljdWxvdXNseSBleGFtaW5lIHRoZSBkZWNsYXJhdGlvbnMgYW5kIHRoZSBjYWxsZXJzIG9mIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyBpcyB3aGVyZSBJJ2xsIGdldCB0aGUgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgYWN0dWFsbHkgd29ya2luZyB3aXRoaW4gdGhlIG92ZXJhbGwgYnJpZGdlIGFuZCBWTEFOIGNvbnRleHQuIEdvdHRhIHRyYWNlIHRob3NlIGNhbGwgcGF0aHMgdG8gc2VlIHRoZSBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDI5LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjM4Ljc0NjQxODczM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk1NTEwNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKGJyX3ZsYW5fZmx1c2h8bmJwX3ZsYW5fZmx1c2gpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jPTgzMT1pbnQgYnJfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MTYgdmlkKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtODUwLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjg1MTp2b2lkIGJyX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTg1Mi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0xMzY3PWludCBuYnBfdmxhbl9kZWxldGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTEzODEtXFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTM4Mjp2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTM4My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjM4Ljc5NTk3NjAyNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTQ0ODgyMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBhbmFseXNpcywgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYGJyX3ZsYW4uY2AgZm9yIFZMQU4gSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgYnJpZGdpbmcgY29kZSBoYW5kbGVzIFZMQU5zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gbGluZXMgODQwLTg2MCBhbmQgMTM3MC0xMzk1IHdpdGhpbiBgbmV0L2JyaWRnZS9icl92bGFuLmNgLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGVzZSBzZWN0aW9ucyBsaWtlbHkgdG91Y2ggdXBvbiBrZXkgYXNwZWN0cyBvZiBWTEFOIHRhZyBtYW5pcHVsYXRpb24sIGZvcndhcmRpbmcgZGVjaXNpb25zIGJhc2VkIG9uIFZMQU4gSURzLCBvciBwZXJoYXBzIGV2ZW4gVkxBTi1yZWxhdGVkIGNvbnRyb2wgcGxhbmUgb3BlcmF0aW9ucy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgc2NhbiB0aG9zZSBsaW5lIHJhbmdlcy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBsaWtlOlxuXG4qICAgKipEYXRhIFN0cnVjdHVyZXM6KiogV2hhdCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhY2Nlc3NlZCBvciBtb2RpZmllZD8gYGJyX3BvcnRgLCBgdmxhbl92aWRgLCBgc2tiX3ZsYW5fdGFnX3NldGAgKHdoaWNoIEkga25vdywgb2YgY291cnNlLCBmcm9tIHByaW9yIHdvcmsgb24gdGhpcykgd2lsbCBiZSBpbW1lZGlhdGVseSByZWxldmFudC4gQW55IG5ldywgdW5mYW1pbGlhciBzdHJ1Y3R1cmVzIGFyZSBhIHJlZCBmbGFnIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi5cbiogICAqKkZ1bmN0aW9uIENhbGxzOioqIEFtIEkgc2VlaW5nIGNhbGxzIHRvIGNvcmUgVkxBTiBoYW5kbGluZyBmdW5jdGlvbnM/IGB2bGFuX3ZpZF9hZGRgLCBgdmxhbl92aWRfZGVsYCwgYHZsYW5fZGV2X3J4X2tpbGxfdmxhbmAsIGV0Yy4gd2lsbCBiZSB0ZWxsaW5nLiBUaGVzZSBhcmUgdGhlIHdvcmtob3JzZXMuXG4qICAgKipDb250cm9sIEZsb3c6KiogSXMgdGhpcyB3aXRoaW4gYW4gYGlmYCBibG9jaz8gV2hhdCBhcmUgdGhlIGNvbmRpdGlvbnM/IEFyZSB0aGVyZSBjaGVja3MgZm9yIHNwZWNpZmljIFZMQU4gSURzLCBjb25maWd1cmF0aW9ucyAoZS5nLiwgdGFnZ2VkIHZzLiB1bnRhZ2dlZCksIG9yIHBvcnQgc3RhdGVzPyBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBsb2dpYy5cbiogICAqKkNvbnRleHQ6KiogV2hhdCdzIHRoZSBzdXJyb3VuZGluZyBjb2RlIGRvaW5nPyBJcyBpdCBoYW5kbGluZyBwYWNrZXQgcmVjZXB0aW9uLCB0cmFuc21pc3Npb24sIGJyaWRnZSBwb3J0IHNldHVwLCBvciBWTEFOIGNvbmZpZ3VyYXRpb24gY2hhbmdlcz8gVGhlIGNvbnRleHQgaXMgZXZlcnl0aGluZy5cblxuSSBleHBlY3QgdGhlIGZpcnN0IHJhbmdlLCA4NDAtODYwLCBpcyBtb3N0IGxpa2VseSBkZWFsaW5nIHdpdGggZWl0aGVyIGFkZGluZywgcmVtb3ZpbmcsIG9yIGRlYWxpbmcgd2l0aCB0aGUgaGFuZGxpbmcgb2YgVkxBTiB0YWdzIGFuZCBWSUQncyBvbiBlaXRoZXIgdGhlIGluY29taW5nIG9yIG91dGdvaW5nIHNpZGUgb2YgdGhlIGJyaWRnZS4gVGhlIHNlY29uZCByYW5nZSwgMTM3MC0xMzk1LCBjb3VsZCBiZSByZWxhdGVkIHRvIFZMQU4gZmlsdGVyaW5nLCBWTEFOLWF3YXJlIGZvcndhcmRpbmcgd2l0aGluIHRoZSBicmlkZ2UsIG9yIGhvdyBWTEFOIGluZm9ybWF0aW9uIGlzIHByb3BhZ2F0ZWQgYWNyb3NzIHRoZSBicmlkZ2VkIGludGVyZmFjZS5cblxuRXNzZW50aWFsbHksIEknbSBtZW50YWxseSBwYXJzaW5nIHRoZSBjb2RlLCBsb29raW5nIGZvciB0aGUgKndobyosIHRoZSAqd2hhdCosIHRoZSAqaG93KiwgYW5kIHRoZSAqd2h5KiBvZiB0aGUgVkxBTiBvcGVyYXRpb25zIHdpdGhpbiB0aGVzZSBzcGVjaWZpYyBjb2RlIHNlZ21lbnRzLiBGcm9tIHRoZXJlLCBJIGNhbiBjb25zdHJ1Y3QgYSBjb2hlc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY29kZSB3b3JrcyBhbmQgd2hlcmUgaW1wcm92ZW1lbnRzIGNhbiBiZSBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzEzMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjQzLjM0MDg2MTQwM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODQwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODQwOlxcdFxcdGlmICghdiB8fCAhYnJfdmxhbl9pc19icmVudHJ5KHYpKVxcbiA4NDE6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDg0MjpcXHRcXG4gODQzOlxcdFxcdGJyX2ZkYl9maW5kX2RlbGV0ZV9sb2NhbChiciwgTlVMTCwgYnItXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIHZpZCk7XFxuIDg0NDpcXHRcXHRicl9mZGJfZGVsZXRlX2J5X3BvcnQoYnIsIE5VTEwsIHZpZCwgMCk7XFxuIDg0NTpcXHRcXG4gODQ2OlxcdFxcdHZsYW5fdHVubmVsX2luZm9fZGVsKHZnLCB2KTtcXG4gODQ3OlxcdFxcbiA4NDg6XFx0XFx0cmV0dXJuIF9fdmxhbl9kZWwodiwgZmFsc2UpO1xcbiA4NDk6XFx0fVxcbiA4NTA6XFx0XFxuIDg1MTpcXHR2b2lkIGJyX3ZsYW5fZmx1c2goc3RydWN0IG5ldF9icmlkZ2UgKmJyKVxcbiA4NTI6XFx0e1xcbiA4NTM6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XFxuIDg1NDpcXHRcXG4gODU1OlxcdFxcdEFTU0VSVF9SVE5MKCk7XFxuIDg1NjpcXHRcXG4gODU3OlxcdFxcdHZnID0gYnJfdmxhbl9ncm91cChicik7XFxuIDg1ODpcXHRcXHRfX3ZsYW5fZmx1c2goYnIsIE5VTEwsIHZnKTtcXG4gODU5OlxcdFxcdFJDVV9JTklUX1BPSU5URVIoYnItXFx1MDAzZXZsZ3JwLCBOVUxMKTtcXG4gODYwOlxcdFxcdHN5bmNocm9uaXplX25ldCgpO1xcbiA4NjE6XFx0XFx0X192bGFuX2dyb3VwX2ZyZWUodmcpO1xcbiA4NjI6XFx0fVxcbiA4NjM6XFx0XFxuIDg2NDpcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICpicl92bGFuX2ZpbmQoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcsIHUxNiB2aWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjQzLjM0MDk4ODEyM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTk0NjEzMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIGFzc3VtaW5nIEknbSB0aGUgZXhwZXJ0IGFuZCByZWZsZWN0aW5nIG9uIHRoZSBwcm92aWRlZCB0ZXh0ICh3aGljaCBpcyBsaW5lcyAxMzcwLTEzOTUsIHRob3VnaCBJIGRvbid0IGhhdmUgdGhhdCBjb250ZXh0IHlldCkuIEknbGwgYWRvcHQgdGhlIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZSBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYW5kIFJlY29uc3RydWN0aW5nIHRoZSBBcmd1bWVudCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gTXkgaW5pdGlhbCByZWFkIG9mIHRoZXNlIGxpbmVzIHN1Z2dlc3RzIGEgZGV0YWlsZWQgZXhwbG9yYXRpb24sIHBvc3NpYmx5IGEgcmVidXR0YWwgb3IgYSBkZXZlbG9wbWVudCBvZiBhIHByZXZpb3VzIGFyZ3VtZW50LiBJJ20gZm9jdXNpbmcgb24gdGhlIGNvcmUgcmVhc29uaW5nIGhlcmUuIEkgbmVlZCB0byBicmVhayBkb3duIHRoZSBjbGFpbXMgYmVpbmcgbWFkZSBpbnRvIHRoZWlyIGNvbnN0aXR1ZW50IHBhcnRzIGFuZCB1bmRlcnN0YW5kIHRoZSBsaW5rYWdlcy5cblxuSXQgbG9va3MgbGlrZSB0aGUgbGluZXMgY2VudGVyIGFyb3VuZCBhIGNyaXRpY2FsIHBvaW50LCBtYXliZSBhIHJlZnV0YXRpb24sIG9yLCBwZXJoYXBzLCBhIG51YW5jZWQgcGVyc3BlY3RpdmUgb24gYSBwcmV2aW91c2x5IGhlbGQgYXNzdW1wdGlvbi4gVGhlIHdyaXRlciBzZWVtcyB0byBiZSB0cnlpbmcgdG8gZXN0YWJsaXNoIGEgaGllcmFyY2h5LCBtYXliZSBvZiBldmlkZW5jZSwgb3IgbWF5YmUgb2YgaW1wb3J0YW5jZSwgSSBjYW4ndCBiZSBzdXJlIHdpdGhvdXQgdGhlIHdob2xlIGNvbnRleHQuIEknbSBzZWVpbmcgYSBjYXJlZnVsIGRhbmNlIGFyb3VuZCBzcGVjaWZpYyB0ZXJtcywgYSBkZWxpYmVyYXRlIHNlbGVjdGlvbiBvZiB2b2NhYnVsYXJ5IHRoYXQgaW5kaWNhdGVzIHByZWNpc2lvbiBpcyBrZXkuIFRoaXMgbGlrZWx5IGluZGljYXRlcyB0aGF0IHRoZSB0b3BpYyBpcyBoaWdobHkgY29udGVzdGVkIG9yIHN1YmplY3QgdG8gbWlzaW50ZXJwcmV0YXRpb24uIEknbSBjb25zaWRlcmluZyB3aGF0IGFsdGVybmF0aXZlIGV4cGxhbmF0aW9ucyBvciBhcmd1bWVudHMgbWlnaHQgYXJpc2UgZnJvbSBhbnkgb2YgdGhlIHN0YXRlbWVudHMgaW4gdGhlIGxpbmVzLiBJIGFtIGxvb2tpbmcgZm9yIHRoZSB3cml0ZXIncyBnb2FsIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhlIGRpc2NvdXJzZSwgaXRzIHBvc3NpYmxlIHdlYWtuZXNzZXMsIGFuZCB3aGV0aGVyIGl0IGNvdWxkIGJlIGZ1cnRoZXIgZWxhYm9yYXRlZCBvbi4gSSBhbSBhbHNvIHBvbmRlcmluZyBpZiBJIHdvdWxkIGJlIGFibGUgdG8gZXhwYW5kLCBjbGFyaWZ5LCBvciBjcml0aXF1ZSB0aGlzIHNwZWNpZmljIGFyZ3VtZW50LiBUaGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYXBwZWFycyB0byBiZSBidWlsZGluZyB0b3dhcmRzIGEgc3BlY2lmaWMgY29uY2x1c2lvbiwgYW5kIEkgYW0gYXNzZXNzaW5nIHdoZXRoZXIgdGhhdCBjb25jbHVzaW9uIGlzIGp1c3RpZmllZCBieSB0aGUgbGluZSBvZiByZWFzb25pbmcuIEkgdGhpbmssIGJhc2VkIG9uIHdoYXQgSSBjYW4gc2VlIGhlcmUsIHRoYXQgdGhlcmUgaXMgYW4gdW5kZXJsYXlpbmcgYXNzdW1wdGlvbiB0aGF0IGlzIGVpdGhlciBhKSBjcnVjaWFsIHRvIGFjY2VwdGluZyB0aGUgYXJndW1lbnQgb3IgYikgYW4gYXJlYSBmb3IgZnVydGhlciBkZXZlbG9wbWVudC4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIGl0J3Mgc29tZXRoaW5nIEknZCB3YW50IHRvIHJlYWxseSBkaWcgaW50byBpZiBJIHdlcmUgZXhwbG9yaW5nIHRoaXMgbW9yZSBkZWVwbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTM1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMTo0Ny4zMzU2MDM0NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTEyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl92bGFuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM3MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM3MDpcXHRcXG4xMzcxOlxcdFxcdEFTU0VSVF9SVE5MKCk7XFxuMTM3MjpcXHRcXG4xMzczOlxcdFxcdHYgPSBicl92bGFuX2ZpbmQobmJwX3ZsYW5fZ3JvdXAocG9ydCksIHZpZCk7XFxuMTM3NDpcXHRcXHRpZiAoIXYpXFxuMTM3NTpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4xMzc2OlxcdFxcdGJyX2ZkYl9maW5kX2RlbGV0ZV9sb2NhbChwb3J0LVxcdTAwM2ViciwgcG9ydCwgcG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgdmlkKTtcXG4xMzc3OlxcdFxcdGJyX2ZkYl9kZWxldGVfYnlfcG9ydChwb3J0LVxcdTAwM2ViciwgcG9ydCwgdmlkLCAwKTtcXG4xMzc4OlxcdFxcbjEzNzk6XFx0XFx0cmV0dXJuIF9fdmxhbl9kZWwodiwgZmFsc2UpO1xcbjEzODA6XFx0fVxcbjEzODE6XFx0XFxuMTM4MjpcXHR2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxuMTM4MzpcXHR7XFxuMTM4NDpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZztcXG4xMzg1OlxcdFxcbjEzODY6XFx0XFx0QVNTRVJUX1JUTkwoKTtcXG4xMzg3OlxcdFxcbjEzODg6XFx0XFx0dmcgPSBuYnBfdmxhbl9ncm91cChwb3J0KTtcXG4xMzg5OlxcdFxcdF9fdmxhbl9mbHVzaChwb3J0LVxcdTAwM2ViciwgcG9ydCwgdmcpO1xcbjEzOTA6XFx0XFx0UkNVX0lOSVRfUE9JTlRFUihwb3J0LVxcdTAwM2V2bGdycCwgTlVMTCk7XFxuMTM5MTpcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4xMzkyOlxcdFxcdF9fdmxhbl9ncm91cF9mcmVlKHZnKTtcXG4xMzkzOlxcdH1cXG4xMzk0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMTo0Ny4zMzU3MTY3MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzM4NzQxMDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCcmlkZ2UgVkxBTiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIHRhcmdldHMgc3BlY2lmaWMgZm9jdXMgc3ltYm9scyByZWxhdGVkIHRvIFZMQU4gb3BlcmF0aW9uczogYF9fdmxhbl9kZWxgLCBgX192bGFuX2ZsdXNoYCwgYGJyX3ZsYW5fZGVsZXRlYCwgYG5icF92bGFuX2RlbGV0ZWAsIGBicl92bGFuX2ZsdXNoYCwgYW5kIGBuYnBfdmxhbl9mbHVzaGAuIExvb2tzIGxpa2UgdGhlIGtleSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgd2l0aGluIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AuIEV4Y2VsbGVudCwga2VlcGluZyB0aGUgc2NvcGUgbWFuYWdlYWJsZSBpcyBjcnVjaWFsLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBvbmx5IG1vZGlmaWVkIGZpbGUgaXMgaW5kZWVkIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AsIHdoaWNoIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGUgdGFyZ2V0IHN5bWJvbHMuIE5vdywgbGV0J3MgY29uc2lkZXIgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgQlJJREdFYCwgYEJSSURHRV9WTEFOX0ZJTFRFUklOR2AsIGFuZCBgVkxBTl84MDIxUWAgLSBtYWtlcyBzZW5zZS4gV2UgYXJlIGRlYWxpbmcgd2l0aCBicmlkZ2UgVkxBTiBmdW5jdGlvbmFsaXR5LlxuXG5UaGUgcGF0Y2gncyBpbXBhY3QgYXBwZWFycyB0byByZWZpbmUgaG93IFZMQU5zIGFyZSBkZWxldGVkIGFuZCBmbHVzaGVkIHdpdGhpbiB0aGUgYnJpZGdpbmcgY29udGV4dC4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGUgYHRlYXJkb3duYCBwYXJhbWV0ZXIgdG8gYF9fdmxhbl9kZWxgIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gSXQgc3VnZ2VzdHMgYSBtb3JlIHJlc2lsaWVudCBhcHByb2FjaCB0byBkZWxldGlvbiwgYWxsb3dpbmcgaXQgdG8gcHJvY2VlZCBldmVuIGlmIGRyaXZlciBvciBzd2l0Y2hkZXYgY2FsbHMgZW5jb3VudGVyIGVycm9ycyBkdXJpbmcgYSBmbHVzaC4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgaW1wb3J0YW50IGNvbnNpZGVyYXRpb24gZm9yIHJlbGlhYmlsaXR5LiBUaGUgZml4IGZvciB0aGUgdXNlLWFmdGVyLWZyZWUgaW4gYF9fdmxhbl9mbHVzaGAgZXJyb3IgcmVwb3J0aW5nIGlzIGEgY3JpdGljYWwgYnVnIGZpeCwgcHJldmVudGluZyBwb3RlbnRpYWwgY3Jhc2hlcyBvciBtZW1vcnkgY29ycnVwdGlvbiBkdXJpbmcgdGhlc2Ugb3BlcmF0aW9ucy4gRGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiBwb3J0IGFuZCBicmlkZ2UgVkxBTiBlcnJvciBsb2dnaW5nIGluZGljYXRlcyBhIG1vcmUgZ3JhbnVsYXIgYW5kIGluZm9ybWF0aXZlIGRlYnVnZ2luZyBzdHJhdGVneSwgd2hpY2ggaXMgYWx3YXlzIHdlbGNvbWUuIFdlJ3JlIGRlYWxpbmcgd2l0aCBuZXRsaW5rIG9wZXJhdGlvbnMgKGBSVE1fREVMVkxBTmAgYW5kIGxpZmVjeWNsZSBldmVudHMpLlxuXG5BbHJpZ2h0LCBJJ20gc2F0aXNmaWVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NDcsIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6MjE6NTMuNjc0NDU5NzQ4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc3MjEwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCIsXG4gICAgXCJWTEFOXzgwMjFRXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX192bGFuX2RlbFwiLFxuICAgIFwiX192bGFuX2ZsdXNoXCIsXG4gICAgXCJicl92bGFuX2RlbGV0ZVwiLFxuICAgIFwibmJwX3ZsYW5fZGVsZXRlXCIsXG4gICAgXCJicl92bGFuX2ZsdXNoXCIsXG4gICAgXCJuYnBfdmxhbl9mbHVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgYnJpZGdlIFZMQU4gZGVsZXRpb24gYW5kIGZsdXNoIGhhbmRsaW5nIGluIG5ldC9icmlkZ2UvYnJfdmxhbi5jLiBJdCBpbnRyb2R1Y2VzIGEgdGVhcmRvd24gZmxhZyB0byBlbnN1cmUgYnJpZGdlIGFuZCBwb3J0IFZMQU5zIGFyZSBjbGVhbmVkIHVwIG9uIHRlYXJkb3duL2ZsdXNoIGV2ZW4gaWYgdW5kZXJseWluZyBkZXZpY2Uvc3dpdGNoZGV2IG9wZXJhdGlvbnMgcmV0dXJuIGVycm9ycywgYW5kIGZpeGVzIGVycm9yIGxvZ2dpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBydG5ldGxpbmsgKFJUTV9ERUxWTEFOLCBicmlkZ2UgY29uZmlndXJhdGlvbikgYW5kIGJyaWRnZSBkZXZpY2UgdGVhcmRvd24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfVkxBTl9GSUxURVJJTkdcIixcbiAgICBcIlZMQU5fODAyMVFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3ZsYW5fZGVsXCIsXG4gICAgXCJfX3ZsYW5fZmx1c2hcIixcbiAgICBcImJyX3ZsYW5fZGVsZXRlXCIsXG4gICAgXCJuYnBfdmxhbl9kZWxldGVcIixcbiAgICBcImJyX3ZsYW5fZmx1c2hcIixcbiAgICBcIm5icF92bGFuX2ZsdXNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBicmlkZ2UgVkxBTiBkZWxldGlvbiBhbmQgZmx1c2ggaGFuZGxpbmcgaW4gbmV0L2JyaWRnZS9icl92bGFuLmMuIEl0IGludHJvZHVjZXMgYSB0ZWFyZG93biBmbGFnIHRvIGVuc3VyZSBicmlkZ2UgYW5kIHBvcnQgVkxBTnMgYXJlIGNsZWFuZWQgdXAgb24gdGVhcmRvd24vZmx1c2ggZXZlbiBpZiB1bmRlcmx5aW5nIGRldmljZS9zd2l0Y2hkZXYgb3BlcmF0aW9ucyByZXR1cm4gZXJyb3JzLCBhbmQgZml4ZXMgZXJyb3IgbG9nZ2luZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHJ0bmV0bGluayAoUlRNX0RFTFZMQU4sIGJyaWRnZSBjb25maWd1cmF0aW9uKSBhbmQgYnJpZGdlIGRldmljZSB0ZWFyZG93bi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6MjE6NTMuNzUyMTg4MDM2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjk5MDEwOTk2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEyOjIxOjUzLjc1MjYyNzM4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI2OTg5NjY1MzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBWTEFOIGRlbGV0aW9uIGFuZCBmbHVzaGluZyBsb2dpYyBpbiB0aGUgTGludXggYnJpZGdlIChgbmV0L2JyaWRnZS9icl92bGFuLmNgKS4gU3BlY2lmaWNhbGx5LCBpdCBhZGRzIGEgYHRlYXJkb3duYCBmbGFnIHRvIGBfX3ZsYW5fZGVsKClgIHRvIGVuc3VyZSByZXNvdXJjZSBjbGVhbnVwIGNvbnRpbnVlcyBldmVuIGlmIGRldmljZS9zd2l0Y2hkZXYgVkxBTiBkZWxldGlvbiByZXR1cm5zIGFuIGVycm9yIGR1cmluZyBmbHVzaCwgYXZvaWRzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9uIGBwYCBpbiBgX192bGFuX2ZsdXNoKClgLCBhbmQgc2F2ZXMgYHZsYW4tXFx1MDAzZXZpZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSB0byBwcmV2ZW50IGEgdXNlLWFmdGVyLWZyZWUgcmVhZCBhZnRlciBgX192bGFuX2RlbCgpYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGV4Y2x1c2l2ZWx5IHRvdWNoIGVycm9yIGhhbmRsaW5nLCBjb250cm9sIGZsb3csIGFuZCBvYmplY3QgbGlmZXRpbWUgKE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBhbmQgdXNlLWFmdGVyLWZyZWUgcmlza3MsIGJvdGggY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzIGFuZCBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb3B5IHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIHBhcnNpbmcgbG9naWMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzEzMGZiMjJhMTQwYzRmMmFhYTUxYzFiNGU5NWU2MWVjYjMxZmU2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDEyOjIxOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl92bGFuLmMgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xuaW5kZXggMWUwZTQzNjYyOWVjZS4uM2FhMGUxZmVkZWIyNiAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfdmxhbi5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xuQEAgLTM4Nyw3ICszODcsNyBAQCBzdGF0aWMgaW50IF9fdmxhbl9hZGQoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgdTE2IGZsYWdzLFxuIFx0Z290byBvdXQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2KVxuK3N0YXRpYyBpbnQgX192bGFuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCBib29sIHRlYXJkb3duKVxuIHtcbiBcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYgPSB2O1xuIFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XG5AQCAtNDA1LDEzICs0MDUsMTQgQEAgc3RhdGljIGludCBfX3ZsYW5fZGVsKHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYpXG4gXHRfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHYtXHUwMDNldmlkKTtcbiBcdGlmIChwKSB7XG4gXHRcdGVyciA9IF9fdmxhbl92aWRfZGVsKHAtXHUwMDNlZGV2LCBwLVx1MDAzZWJyLCB2KTtcbi1cdFx0aWYgKGVycilcbitcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgIXRlYXJkb3duKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gYnJfc3dpdGNoZGV2X3BvcnRfdmxhbl9kZWwodi1cdTAwM2Vici1cdTAwM2VkZXYsIHYtXHUwMDNldmlkKTtcbi1cdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZXJyICE9IC1FT1BOT1RTVVBQKVxuK1x0XHRpZiAoZXJyID09IC1FT1BOT1RTVVBQKVxuK1x0XHRcdGVyciA9IDA7XG4rXHRcdGVsc2UgaWYgKGVyciBcdTAwMjZcdTAwMjYgIXRlYXJkb3duKVxuIFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRlcnIgPSAwO1xuIFx0fVxuIFxuIFx0aWYgKGJyX3ZsYW5fc2hvdWxkX3VzZSh2KSkge1xuQEAgLTQ0OCw3ICs0NDksNyBAQCBzdGF0aWMgdm9pZCBfX3ZsYW5fZmx1c2goY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0XHRcdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZylcbiB7XG4gXHRzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2bGFuLCAqdG1wO1xuLVx0dTE2IHZfc3RhcnQgPSAwLCB2X2VuZCA9IDA7XG4rXHR1MTYgdl9zdGFydCA9IDAsIHZfZW5kID0gMCwgdmlkO1xuIFx0aW50IGVycjtcbiBcbiBcdF9fdmxhbl9kZWxldGVfcHZpZCh2ZywgdmctXHUwMDNlcHZpZCk7XG5AQCAtNDYzLDEyICs0NjQsMTggQEAgc3RhdGljIHZvaWQgX192bGFuX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdFx0fVxuIFx0XHR2X2VuZCA9IHZsYW4tXHUwMDNldmlkO1xuIFxuLVx0XHRlcnIgPSBfX3ZsYW5fZGVsKHZsYW4pO1xuK1x0XHR2aWQgPSB2bGFuLVx1MDAzZXZpZDtcbitcdFx0ZXJyID0gX192bGFuX2RlbCh2bGFuLCB0cnVlKTtcbiBcdFx0aWYgKGVycikge1xuLVx0XHRcdGJyX2Vycihicixcbi1cdFx0XHQgICAgICAgXCJwb3J0ICV1KCVzKSBmYWlsZWQgdG8gZGVsZXRlIHZsYW4gJWQ6ICVwZVxcblwiLFxuLVx0XHRcdCAgICAgICAodW5zaWduZWQgaW50KSBwLVx1MDAzZXBvcnRfbm8sIHAtXHUwMDNlZGV2LVx1MDAzZW5hbWUsXG4tXHRcdFx0ICAgICAgIHZsYW4tXHUwMDNldmlkLCBFUlJfUFRSKGVycikpO1xuK1x0XHRcdGlmIChwKVxuK1x0XHRcdFx0YnJfZXJyKGJyLFxuK1x0XHRcdFx0ICAgICAgIFwicG9ydCAldSglcykgZmFpbGVkIHRvIGRlbGV0ZSB2bGFuICVkOiAlcGVcXG5cIixcbitcdFx0XHRcdCAgICAgICAodW5zaWduZWQgaW50KXAtXHUwMDNlcG9ydF9ubywgcC1cdTAwM2VkZXYtXHUwMDNlbmFtZSxcbitcdFx0XHRcdCAgICAgICB2aWQsIEVSUl9QVFIoZXJyKSk7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0YnJfZXJyKGJyLFxuK1x0XHRcdFx0ICAgICAgIFwiZmFpbGVkIHRvIGRlbGV0ZSBicmlkZ2UgdmxhbiAlZDogJXBlXFxuXCIsXG4rXHRcdFx0XHQgICAgICAgdmlkLCBFUlJfUFRSKGVycikpO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtODM4LDcgKzg0NSw3IEBAIGludCBicl92bGFuX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHUxNiB2aWQpXG4gXG4gXHR2bGFuX3R1bm5lbF9pbmZvX2RlbCh2Zywgdik7XG4gXG4tXHRyZXR1cm4gX192bGFuX2RlbCh2KTtcbitcdHJldHVybiBfX3ZsYW5fZGVsKHYsIGZhbHNlKTtcbiB9XG4gXG4gdm9pZCBicl92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlICpicilcbkBAIC0xMzY5LDcgKzEzNzYsNyBAQCBpbnQgbmJwX3ZsYW5fZGVsZXRlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUxNiB2aWQpXG4gXHRicl9mZGJfZmluZF9kZWxldGVfbG9jYWwocG9ydC1cdTAwM2ViciwgcG9ydCwgcG9ydC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIHZpZCk7XG4gXHRicl9mZGJfZGVsZXRlX2J5X3BvcnQocG9ydC1cdTAwM2ViciwgcG9ydCwgdmlkLCAwKTtcbiBcbi1cdHJldHVybiBfX3ZsYW5fZGVsKHYpO1xuK1x0cmV0dXJuIF9fdmxhbl9kZWwodiwgZmFsc2UpO1xuIH1cbiBcbiB2b2lkIG5icF92bGFuX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMTo1My43NTI2Mjg0NjZaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk3MzM0MDczOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCcmlkZ2UgVkxBTiBDb2RlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIFZMQU4gZnVuY3Rpb25hbGl0eSB3aXRoaW4gYSBicmlkZ2Ugc2V0dXAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY2hhbmdlcyBhbmQgdGhlaXIgY29udGV4dC4gSSB3YW50IGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiAqd2h5KiB0aGlzIG1vZGlmaWNhdGlvbiBpcyBoYXBwZW5pbmcuIEkgbmVlZCB0byBzZWUgdGhlIFwiYmVmb3JlXCIgc3RhdGUgYW5kIHRoZSBcImFmdGVyXCIgc3RhdGUgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGFjdC5cblxuSSdtIHRoaW5raW5nIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgaXMgdG8gcHVsbCB1cCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgZmlsZS4gTGV0J3MgdXNlIGByZWFkLWZpbGVgIGFuZCB6ZXJvIGluIG9uIGxpbmVzIDM4MCB0aHJvdWdoIDQ4MCBvZiBgbmV0L2JyaWRnZS9icl92bGFuLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCB3aW5kb3cgaW50byB0aGUgYXJlYSBvZiBjb2RlIHRoZSBwYXRjaCBpcyB3b3JraW5nIHdpdGguIEZyb20gdGhlcmUsIEkgY2FuIGFzc2VzcyB0aGUgbG9naWMgYW5kIGRhdGEgc3RydWN0dXJlcyBhZmZlY3RlZCBhbmQgc2VlIHdoZXJlIHRoaXMgbW9kaWZpY2F0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBWTEFOIGhhbmRsaW5nIHdpdGhpbiB0aGUgYnJpZGdlLiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBmb3JtdWxhdGUgYSBzb3VuZCBvcGluaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMjoxMy40ODYwMzk1MzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfdmxhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODA6XFx0XFx0XFx0XFx0YnJfdmxhbl9wdXRfbWFzdGVyKG1hc3RlcnYpO1xcbiAzODE6XFx0XFx0XFx0XFx0di1cXHUwMDNlYnJ2bGFuID0gTlVMTDtcXG4gMzgyOlxcdFxcdFxcdH1cXG4gMzgzOlxcdFxcdH0gZWxzZSB7XFxuIDM4NDpcXHRcXHRcXHRicl9zd2l0Y2hkZXZfcG9ydF92bGFuX2RlbChkZXYsIHYtXFx1MDAzZXZpZCk7XFxuIDM4NTpcXHRcXHR9XFxuIDM4NjpcXHRcXG4gMzg3OlxcdFxcdGdvdG8gb3V0O1xcbiAzODg6XFx0fVxcbiAzODk6XFx0XFxuIDM5MDpcXHRzdGF0aWMgaW50IF9fdmxhbl9kZWwoc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdiwgYm9vbCB0ZWFyZG93bilcXG4gMzkxOlxcdHtcXG4gMzkyOlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKm1hc3RlcnYgPSB2O1xcbiAzOTM6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmc7XFxuIDM5NDpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwID0gTlVMTDtcXG4gMzk1OlxcdFxcdGludCBlcnIgPSAwO1xcbiAzOTY6XFx0XFxuIDM5NzpcXHRcXHRpZiAoYnJfdmxhbl9pc19tYXN0ZXIodikpIHtcXG4gMzk4OlxcdFxcdFxcdHZnID0gYnJfdmxhbl9ncm91cCh2LVxcdTAwM2Vicik7XFxuIDM5OTpcXHRcXHR9IGVsc2Uge1xcbiA0MDA6XFx0XFx0XFx0cCA9IHYtXFx1MDAzZXBvcnQ7XFxuIDQwMTpcXHRcXHRcXHR2ZyA9IG5icF92bGFuX2dyb3VwKHYtXFx1MDAzZXBvcnQpO1xcbiA0MDI6XFx0XFx0XFx0bWFzdGVydiA9IHYtXFx1MDAzZWJydmxhbjtcXG4gNDAzOlxcdFxcdH1cXG4gNDA0OlxcdFxcbiA0MDU6XFx0XFx0X192bGFuX2RlbGV0ZV9wdmlkKHZnLCB2LVxcdTAwM2V2aWQpO1xcbiA0MDY6XFx0XFx0aWYgKHApIHtcXG4gNDA3OlxcdFxcdFxcdGVyciA9IF9fdmxhbl92aWRfZGVsKHAtXFx1MDAzZWRldiwgcC1cXHUwMDNlYnIsIHYpO1xcbiA0MDg6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiAhdGVhcmRvd24pXFxuIDQwOTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNDEwOlxcdFxcdH0gZWxzZSB7XFxuIDQxMTpcXHRcXHRcXHRlcnIgPSBicl9zd2l0Y2hkZXZfcG9ydF92bGFuX2RlbCh2LVxcdTAwM2Vici1cXHUwMDNlZGV2LCB2LVxcdTAwM2V2aWQpO1xcbiA0MTI6XFx0XFx0XFx0aWYgKGVyciA9PSAtRU9QTk9UU1VQUClcXG4gNDEzOlxcdFxcdFxcdFxcdGVyciA9IDA7XFxuIDQxNDpcXHRcXHRcXHRlbHNlIGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgIXRlYXJkb3duKVxcbiA0MTU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQxNjpcXHRcXHR9XFxuIDQxNzpcXHRcXG4gNDE4OlxcdFxcdGlmIChicl92bGFuX3Nob3VsZF91c2UodikpIHtcXG4gNDE5OlxcdFxcdFxcdHYtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5CUklER0VfVkxBTl9JTkZPX0JSRU5UUlk7XFxuIDQyMDpcXHRcXHRcXHR2Zy1cXHUwMDNlbnVtX3ZsYW5zLS07XFxuIDQyMTpcXHRcXHR9XFxuIDQyMjpcXHRcXG4gNDIzOlxcdFxcdGlmIChtYXN0ZXJ2ICE9IHYpIHtcXG4gNDI0OlxcdFxcdFxcdHZsYW5fdHVubmVsX2luZm9fZGVsKHZnLCB2KTtcXG4gNDI1OlxcdFxcdFxcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXFx1MDAyNnZnLVxcdTAwM2V2bGFuX2hhc2gsIFxcdTAwMjZ2LVxcdTAwM2V2bm9kZSxcXG4gNDI2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBicl92bGFuX3JodF9wYXJhbXMpO1xcbiA0Mjc6XFx0XFx0XFx0X192bGFuX2RlbF9saXN0KHYpO1xcbiA0Mjg6XFx0XFx0XFx0bmJwX3ZsYW5fc2V0X3ZsYW5fZGV2X3N0YXRlKHAsIHYtXFx1MDAzZXZpZCk7XFxuIDQyOTpcXHRcXHRcXHRicl9tdWx0aWNhc3RfdG9nZ2xlX29uZV92bGFuKHYsIGZhbHNlKTtcXG4gNDMwOlxcdFxcdFxcdGJyX211bHRpY2FzdF9wb3J0X2N0eF9kZWluaXQoXFx1MDAyNnYtXFx1MDAzZXBvcnRfbWNhc3RfY3R4KTtcXG4gNDMxOlxcdFxcdFxcdGNhbGxfcmN1KFxcdTAwMjZ2LVxcdTAwM2VyY3UsIG5icF92bGFuX3JjdV9mcmVlKTtcXG4gNDMyOlxcdFxcdH1cXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0YnJfdmxhbl9wdXRfbWFzdGVyKG1hc3RlcnYpO1xcbiA0MzU6XFx0b3V0OlxcbiA0MzY6XFx0XFx0cmV0dXJuIGVycjtcXG4gNDM3OlxcdH1cXG4gNDM4OlxcdFxcbiA0Mzk6XFx0c3RhdGljIHZvaWQgX192bGFuX2dyb3VwX2ZyZWUoc3RydWN0IG5ldF9icmlkZ2Vfdmxhbl9ncm91cCAqdmcpXFxuIDQ0MDpcXHR7XFxuIDQ0MTpcXHRcXHRXQVJOX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0KSk7XFxuIDQ0MjpcXHRcXHRyaGFzaHRhYmxlX2Rlc3Ryb3koXFx1MDAyNnZnLVxcdTAwM2V2bGFuX2hhc2gpO1xcbiA0NDM6XFx0XFx0dmxhbl90dW5uZWxfZGVpbml0KHZnKTtcXG4gNDQ0OlxcdFxcdGtmcmVlKHZnKTtcXG4gNDQ1OlxcdH1cXG4gNDQ2OlxcdFxcbiA0NDc6XFx0c3RhdGljIHZvaWQgX192bGFuX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4gNDQ4OlxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLFxcbiA0NDk6XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW5fZ3JvdXAgKnZnKVxcbiA0NTA6XFx0e1xcbiA0NTE6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdmxhbiwgKnRtcDtcXG4gNDUyOlxcdFxcdHUxNiB2X3N0YXJ0ID0gMCwgdl9lbmQgPSAwLCB2aWQ7XFxuIDQ1MzpcXHRcXHRpbnQgZXJyO1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRfX3ZsYW5fZGVsZXRlX3B2aWQodmcsIHZnLVxcdTAwM2VwdmlkKTtcXG4gNDU2OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bGFuLCB0bXAsIFxcdTAwMjZ2Zy1cXHUwMDNldmxhbl9saXN0LCB2bGlzdCkge1xcbiA0NTc6XFx0XFx0XFx0LyogdGFrZSBjYXJlIG9mIGRpc2pvaW50IHJhbmdlcyAqL1xcbiA0NTg6XFx0XFx0XFx0aWYgKCF2X3N0YXJ0KSB7XFxuIDQ1OTpcXHRcXHRcXHRcXHR2X3N0YXJ0ID0gdmxhbi1cXHUwMDNldmlkO1xcbiA0NjA6XFx0XFx0XFx0fSBlbHNlIGlmICh2bGFuLVxcdTAwM2V2aWQgLSB2X2VuZCAhPSAxKSB7XFxuIDQ2MTpcXHRcXHRcXHRcXHQvKiBmb3VuZCByYW5nZSBlbmQsIG5vdGlmeSBhbmQgc3RhcnQgbmV4dCBvbmUgKi9cXG4gNDYyOlxcdFxcdFxcdFxcdGJyX3ZsYW5fbm90aWZ5KGJyLCBwLCB2X3N0YXJ0LCB2X2VuZCwgUlRNX0RFTFZMQU4pO1xcbiA0NjM6XFx0XFx0XFx0XFx0dl9zdGFydCA9IHZsYW4tXFx1MDAzZXZpZDtcXG4gNDY0OlxcdFxcdFxcdH1cXG4gNDY1OlxcdFxcdFxcdHZfZW5kID0gdmxhbi1cXHUwMDNldmlkO1xcbiA0NjY6XFx0XFxuIDQ2NzpcXHRcXHRcXHR2aWQgPSB2bGFuLVxcdTAwM2V2aWQ7XFxuIDQ2ODpcXHRcXHRcXHRlcnIgPSBfX3ZsYW5fZGVsKHZsYW4sIHRydWUpO1xcbiA0Njk6XFx0XFx0XFx0aWYgKGVycikge1xcbiA0NzA6XFx0XFx0XFx0XFx0aWYgKHApXFxuIDQ3MTpcXHRcXHRcXHRcXHRcXHRicl9lcnIoYnIsXFxuIDQ3MjpcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcInBvcnQgJXUoJXMpIGZhaWxlZCB0byBkZWxldGUgdmxhbiAlZDogJXBlXFxcXG5cXFwiLFxcbiA0NzM6XFx0XFx0XFx0XFx0XFx0ICAgICAgICh1bnNpZ25lZCBpbnQpcC1cXHUwMDNlcG9ydF9ubywgcC1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lLFxcbiA0NzQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTtcXG4gNDc1OlxcdFxcdFxcdFxcdGVsc2VcXG4gNDc2OlxcdFxcdFxcdFxcdFxcdGJyX2VycihicixcXG4gNDc3OlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwiZmFpbGVkIHRvIGRlbGV0ZSBicmlkZ2UgdmxhbiAlZDogJXBlXFxcXG5cXFwiLFxcbiA0Nzg6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHZpZCwgRVJSX1BUUihlcnIpKTtcXG4gNDc5OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTI6MjI6MTMuNDg2MjMwMjQ3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcyNTYwNDQxOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaW4gYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCBmb2N1c2VzIG9uIFZMQU4gZGVsZXRpb24gYW5kIGZsdXNoaW5nIHdpdGhpbiB0aGUgYnJpZGdpbmcgY29kZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBmb2N1c2VkIG9uIGltcHJvdmluZyBlcnJvciBoYW5kbGluZyBhbmQgcHJldmVudGluZyBzb21lIHN1YnRsZSBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYW5kIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMuXG5cblRoZSBjb3JlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgdGhlIGludHJvZHVjdGlvbiBvZiBhIGB0ZWFyZG93bmAgZmxhZyBpbiBgX192bGFuX2RlbGAuIFRoaXMgZmxhZyBzZWVtcyB0byBkaWN0YXRlIGhvdyBhZ2dyZXNzaXZlbHkgVkxBTiBlbnRyaWVzIGFyZSBjbGVhbmVkIHVwLCBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiBlcnJvcnMgZHVyaW5nIHRoZSBkZWxldGlvbiBvZiBWTEFOIElEcyAoYF9fdmxhbl92aWRfZGVsYCkgb3Igd2hlbiBpbnRlcmFjdGluZyB3aXRoIHN3aXRjaGRldiAoYGJyX3N3aXRjaGRldl9wb3J0X3ZsYW5fZGVsYCkuIFRoZSBoYW5kbGluZyBvZiB0aGUgYC1FT1BOT1RTVVBQYCBlcnJvciBpcyBhbHNvIHdvcnRoIG5vdGluZzsgaXQgbm9ybWFsaXplcyB0aGlzIGVycm9yIGZvciB0ZWFyZG93biBzaXR1YXRpb25zLiBUaGlzIGltcGxpZXMgYSBoaWdoZXIgdG9sZXJhbmNlIGZvciBjZXJ0YWluIGVycm9ycyBkdXJpbmcgYSBmdWxsIGJyaWRnZSB0ZWFyZG93biBjb21wYXJlZCB0byBzdGFuZGFyZCBWTEFOIGRlbGV0aW9uLlxuXG5UaGUgc2Vjb25kIGFyZWEgb2YgY29uY2VybiBpcyBpbiBgX192bGFuX2ZsdXNoYC4gSXQgbG9va3MgbGlrZSB0aGUgY29kZSB3YXMgYWNjZXNzaW5nIGBwLVx1MDAzZXBvcnRfbm9gIGFuZCBgdmxhbi1cdTAwM2V2aWRgIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byBwcm9ibGVtcy4gU3BlY2lmaWNhbGx5LCBgcGAgY2FuIGJlIGBOVUxMYCBpbiB0aGUgY2FzZSBvZiBmbHVzaGluZyB0aGUgYnJpZGdlJ3Mgb3duIFZMQU4gZ3JvdXAsIGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIEFuZCwgYHZsYW5gIGNvdWxkIGJlIGZyZWVkIGJ5IHRoZSBkZWxldGlvbiBwcm9jZXNzIGJlZm9yZSBpdHMgVklEIGlzIGFjY2Vzc2VkLCBsZWFkaW5nIHRvIGEgVXNlLUFmdGVyLUZyZWUuIFRoZSBmaXggaGVyZSBpcyB0byBzYXZlIHRoZSBWTEFOIElEIHRvIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIGNhbGxpbmcgYF9fdmxhbl9kZWxgIGFuZCBpbmNsdWRlIGFuIGBpZiAocClgIGNvbmRpdGlvbmFsLlxuXG5JJ3ZlIGV4YW1pbmVkIHRoZSBjb2RlIGNhcmVmdWxseSBhbmQgZGV0ZXJtaW5lZCB0aGF0IGl0IGRvZXNuJ3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgbmV3IGF2ZW51ZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBsZWFrYWdlLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgZGlyZWN0IG1vZGlmaWNhdGlvbnMgdG8ga2VybmVsIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGZpZWxkcyBiZWluZyBwYXNzZWQgYWxvbmcuIFRoZSBsb2dpYyBhcHBlYXJzIHNvdW5kLCB3aXRoIHBhcmFtZXRlcnMgaW5pdGlhbGl6ZWQgYnkgY2FsbGVycyBhbmQgaW50ZXJtZWRpYXRlIHZhcmlhYmxlcyBiZWluZyBjYXJlZnVsbHkgaW5pdGlhbGl6ZWQgdG8gYXZvaWQgdW5kZWZpbmVkIGJlaGF2aW9yLlxuXG5HaXZlbiB0aGF0IEtBU0FOLCBLTVNBTiwgTE9DS0RFUCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMsIGFuZCBjcmFzaCBoYW5kbGVycyBjb3ZlciB0aGUgaXNzdWVzIGJlaW5nIGFkZHJlc3NlZCBpbiB0aGUgcGF0Y2gsIHdoaWNoIGFyZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYW5kIFVBRiwgYW5kIG5vIG5ldyBtZWFucyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAuXG5cblNvLCBpbiBzaG9ydCwgdGhpcyBwYXRjaCB0aWdodGVucyB1cCB0aGUgVkxBTiBkZWxldGlvbiBsb2dpYyB0byBwcmV2ZW50IHNvbWUgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFuZCB0byBpbXByb3ZlIGNsZWFudXAsIGVzcGVjaWFsbHkgZHVyaW5nIGZ1bGwgYnJpZGdlIHRlYXJkb3duLiBUaGUgcHJpbWFyeSBjb25jZXJucyBzZWVtIHRvIGJlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYW5kIFVzZS1BZnRlci1GcmVlLCBidXQgdGhlIHBhdGNoIGFkZHJlc3NlcyB0aGVzZSBhbmQgdGhlcmUgYXJlIG5vIHZ1bG5lcmFiaWxpdGllcyByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIEFsbCB0aGUgY2hhbmdlcyBzZWVtIHRvIGJlIGNvcnJlY3QgYW5kIHRoaXMgcGF0Y2ggc2hvdWxkIGJlIG1hcmtlZCBgTmVlZHNLTVNBTiA9IGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4OCwiT3V0cHV0VG9rZW5zIjoyMTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMjoyMjoyMC43NDIyNzc3ODhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFZMQU4gZGVsZXRpb24gYW5kIGZsdXNoaW5nIGxvZ2ljIGluIHRoZSBMaW51eCBicmlkZ2UgKGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2ApLiBTcGVjaWZpY2FsbHksIGl0IGFkZHMgYSBgdGVhcmRvd25gIGZsYWcgdG8gYF9fdmxhbl9kZWwoKWAgdG8gZW5zdXJlIHJlc291cmNlIGNsZWFudXAgY29udGludWVzIGV2ZW4gaWYgZGV2aWNlL3N3aXRjaGRldiBWTEFOIGRlbGV0aW9uIHJldHVybnMgYW4gZXJyb3IgZHVyaW5nIGZsdXNoLCBhdm9pZHMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb24gYHBgIGluIGBfX3ZsYW5fZmx1c2goKWAsIGFuZCBzYXZlcyBgdmxhbi1cXHUwMDNldmlkYCB0byBhIGxvY2FsIHZhcmlhYmxlIHRvIHByZXZlbnQgYSB1c2UtYWZ0ZXItZnJlZSByZWFkIGFmdGVyIGBfX3ZsYW5fZGVsKClgLlxcblxcblRoZXNlIGNoYW5nZXMgZXhjbHVzaXZlbHkgdG91Y2ggZXJyb3IgaGFuZGxpbmcsIGNvbnRyb2wgZmxvdywgYW5kIG9iamVjdCBsaWZldGltZSAoTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCB1c2UtYWZ0ZXItZnJlZSByaXNrcywgYm90aCBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBjaGVja3MgYW5kIEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvcHkgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBidWZmZXIgcGFyc2luZyBsb2dpYy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBWTEFOIGRlbGV0aW9uIGFuZCBmbHVzaGluZyBsb2dpYyBpbiB0aGUgTGludXggYnJpZGdlIChgbmV0L2JyaWRnZS9icl92bGFuLmNgKS4gU3BlY2lmaWNhbGx5LCBpdCBhZGRzIGEgYHRlYXJkb3duYCBmbGFnIHRvIGBfX3ZsYW5fZGVsKClgIHRvIGVuc3VyZSByZXNvdXJjZSBjbGVhbnVwIGNvbnRpbnVlcyBldmVuIGlmIGRldmljZS9zd2l0Y2hkZXYgVkxBTiBkZWxldGlvbiByZXR1cm5zIGFuIGVycm9yIGR1cmluZyBmbHVzaCwgYXZvaWRzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9uIGBwYCBpbiBgX192bGFuX2ZsdXNoKClgLCBhbmQgc2F2ZXMgYHZsYW4tXFx1MDAzZXZpZGAgdG8gYSBsb2NhbCB2YXJpYWJsZSB0byBwcmV2ZW50IGEgdXNlLWFmdGVyLWZyZWUgcmVhZCBhZnRlciBgX192bGFuX2RlbCgpYC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGV4Y2x1c2l2ZWx5IHRvdWNoIGVycm9yIGhhbmRsaW5nLCBjb250cm9sIGZsb3csIGFuZCBvYmplY3QgbGlmZXRpbWUgKE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBhbmQgdXNlLWFmdGVyLWZyZWUgcmlza3MsIGJvdGggY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzIGFuZCBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb3B5IHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgYnVmZmVyIHBhcnNpbmcgbG9naWMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowchn4z[1] Phase: Succeeded StartedAt: 2026-09-11 12:22:32 +0000 UTC FinishedAt: 2026-09-11 12:22:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 12:22:32 +0000 UTC FinishedAt: 2026-09-11 12:22:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2] Phase: Succeeded StartedAt: 2026-09-11 12:22:32 +0000 UTC FinishedAt: 2026-09-11 16:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 12:22:32 +0000 UTC FinishedAt: 2026-09-11 16:02:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 12:22:32 +0000 UTC FinishedAt: 2026-09-11 12:22:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 12:22:32 +0000 UTC FinishedAt: 2026-09-11 12:22:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowchn4z/series-workflowchn4z-convert-artifact-1830467912/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 12:22:42 +0000 UTC FinishedAt: 2026-09-11 12:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 12:22:42 +0000 UTC FinishedAt: 2026-09-11 12:38:42 +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:*1067373f-c3a5-4e9a-84a0-3c0aaa98248c,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-workflowchn4z/series-workflowchn4z-convert-artifact-1830467912/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": "8e57b551-fe5b-4edc-ac46-1156736980bf", "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-workflowchn4z/series-workflowchn4z-build-action-3254298046/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 12:22:42 +0000 UTC FinishedAt: 2026-09-11 12:38:32 +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:*1067373f-c3a5-4e9a-84a0-3c0aaa98248c,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-workflowchn4z/series-workflowchn4z-convert-artifact-1830467912/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": "8e57b551-fe5b-4edc-ac46-1156736980bf", "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-workflowchn4z/series-workflowchn4z-build-action-3254298046/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 12:38:42 +0000 UTC FinishedAt: 2026-09-11 12:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 12:38:42 +0000 UTC FinishedAt: 2026-09-11 12:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 12:38:42 +0000 UTC FinishedAt: 2026-09-11 12:38:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 12:38:42 +0000 UTC FinishedAt: 2026-09-11 12:38:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowchn4z/series-workflowchn4z-convert-artifact-2040196399/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 12:38:53 +0000 UTC FinishedAt: 2026-09-11 12:40:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 12:38:53 +0000 UTC FinishedAt: 2026-09-11 12:40:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8e57b551-fe5b-4edc-ac46-1156736980bf,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-workflowchn4z/series-workflowchn4z-build-action-3254298046/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-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 12:40:41 +0000 UTC FinishedAt: 2026-09-11 12:40:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 12:40:41 +0000 UTC FinishedAt: 2026-09-11 12:40:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 12:40:41 +0000 UTC FinishedAt: 2026-09-11 12:59:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 12:40:41 +0000 UTC FinishedAt: 2026-09-11 12:59:00 +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:*1067373f-c3a5-4e9a-84a0-3c0aaa98248c,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-workflowchn4z/series-workflowchn4z-convert-artifact-2040196399/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": "c6d89aad-928d-4084-abd6-8c1c6752c6b7", "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-workflowchn4z/series-workflowchn4z-build-action-2477439171/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 12:40:41 +0000 UTC FinishedAt: 2026-09-11 12:58:50 +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:*1067373f-c3a5-4e9a-84a0-3c0aaa98248c,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-workflowchn4z/series-workflowchn4z-convert-artifact-2040196399/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": "c6d89aad-928d-4084-abd6-8c1c6752c6b7", "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-workflowchn4z/series-workflowchn4z-build-action-2477439171/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 12:59:00 +0000 UTC FinishedAt: 2026-09-11 12:59:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 12:59:00 +0000 UTC FinishedAt: 2026-09-11 12:59:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 12:59:00 +0000 UTC FinishedAt: 2026-09-11 13:00:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 12:59:00 +0000 UTC FinishedAt: 2026-09-11 13:00:46 +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:*c6d89aad-928d-4084-abd6-8c1c6752c6b7,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-workflowchn4z/series-workflowchn4z-build-action-2477439171/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-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 13:00:56 +0000 UTC FinishedAt: 2026-09-11 16:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 13:00:56 +0000 UTC FinishedAt: 2026-09-11 16:02:44 +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":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"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:*8e57b551-fe5b-4edc-ac46-1156736980bf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c6d89aad-928d-4084-abd6-8c1c6752c6b7,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-workflowchn4z/series-workflowchn4z-build-action-3254298046/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-workflowchn4z/series-workflowchn4z-build-action-2477439171/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 13:00:56 +0000 UTC FinishedAt: 2026-09-11 13:01:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 13:00:56 +0000 UTC FinishedAt: 2026-09-11 13:01:15 +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":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"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-workflowchn4z/series-workflowchn4z-convert-artifact-765908200/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 13:00:56 +0000 UTC FinishedAt: 2026-09-11 13:00:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 13:00:56 +0000 UTC FinishedAt: 2026-09-11 13:00:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 13:00:56 +0000 UTC FinishedAt: 2026-09-11 13:00:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 13:01:23 +0000 UTC FinishedAt: 2026-09-11 16:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowchn4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["__vlan_del","__vlan_flush","br_vlan_delete","nbp_vlan_delete","br_vlan_flush","nbp_vlan_flush"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_VLAN_FILTERING","VLAN_8021Q"],"series_id":"6eca8c6c-237c-456d-8ac2-8e4ae06e9683","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 13:01:23 +0000 UTC FinishedAt: 2026-09-11 16:02:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8e57b551-fe5b-4edc-ac46-1156736980bf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c6d89aad-928d-4084-abd6-8c1c6752c6b7,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-workflowchn4z/series-workflowchn4z-build-action-3254298046/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-workflowchn4z/series-workflowchn4z-build-action-2477439171/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-workflowchn4z/series-workflowchn4z-convert-artifact-765908200/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,}