Name: series-workflowxk5zp Phase: Succeeded StartedAt: 2026-08-08 19:56:13 +0000 UTC FinishedAt: 2026-08-08 23:44:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[0] Phase: Succeeded StartedAt: 2026-08-08 19:56:13 +0000 UTC FinishedAt: 2026-08-08 19:59:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[0].run-triage Phase: Succeeded StartedAt: 2026-08-08 19:56:13 +0000 UTC FinishedAt: 2026-08-08 19:59:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USBIP_VHCI_HCD", "USBIP_CORE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USBIP_VHCI_HCD", "USBIP_CORE" ], "series_id": "a7c4f078-e94a-4237-8154-32f56b030a82" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vhci_urb_dequeue", "vhci_rx_loop", "vhci_shutdown_connection" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQklQX1ZIQ0lfSENEJiMzNDssCiAgICAmIzM0O1VTQklQX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aGNpX3VyYl9kZXF1ZXVlJiMzNDssCiAgICAmIzM0O3ZoY2lfcnhfbG9vcCYjMzQ7LAogICAgJiMzNDt2aGNpX3NodXRkb3duX2Nvbm5lY3Rpb24mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzcGlubG9jayBvcGVyYXRpb25zIChgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZWAgdG8gYHNwaW5fdW5sb2NrYCBhbmQgYHNwaW5fbG9ja19pcnFzYXZlYCB0byBgc3Bpbl9sb2NrYCkgdG8gY2hhbmdlIGhvdyBJUlEgc3RhdGUgaXMgaGFuZGxlZCBhcm91bmQgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYC4gVGhpcyBpcyBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gZGVhZGxvY2tzLCBJUlEgc3RhdGUgY29ycnVwdGlvbiwgb3IgcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgYW5kIGluZm8tbGVha3MsIHdoaWNoIGFyZSBub3QgcmVsZXZhbnQgdG8gdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCB3YXMgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBlbmFibGVkIGluIHRoZSBgdXNiaXBgIGRyaXZlci4gSXQgbW9kaWZpZXMgY29yZSBVUkIgaGFuZGxpbmcgZnVuY3Rpb25zIChgdmhjaV91cmJfZGVxdWV1ZWAsIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAsIGB2aGNpX3JlY3ZfcmV0X3VubGlua2AsIGB2aGNpX2NsZWFudXBfdW5saW5rX2xpc3RgKSB0byBrZWVwIGludGVycnVwdHMgZGlzYWJsZWQgZHVyaW5nIHRoZSBnaXZlYmFjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgdmlydHVhbCBVU0IgY29udHJvbGxlciBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTVmNDNhNDQ0ZjE1YWY5N2I5MGUwYTgyODBjODlhOTIxZThhZmQyMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMTk6NTg6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmNcbmluZGV4IDM5ZThmYWY0YzE4Y2QuLmI0MTZkODI3MWFhN2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jXG5AQCAtOTQwLDkgJiM0Mzs5NDAsOSBAQCBzdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKVxuIFx0XHQgKi9cbiBcdFx0dXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaGNkLCB1cmIpO1xuIFxuLVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiBcdFx0dXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHVyYi1cdTAwM2VzdGF0dXMpO1xuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdHNwaW5fbG9jayhcdTAwMjZ2aGNpLVx1MDAzZWxvY2spO1xuIFxuIFx0fSBlbHNlIHtcbiBcdFx0LyogdGNwIGNvbm5lY3Rpb24gaXMgYWxpdmUgKi9cbkBAIC0xMDA4LDExICYjNDM7MTAwOCwxMSBAQCBzdGF0aWMgdm9pZCB2aGNpX2NsZWFudXBfdW5saW5rX2xpc3Qoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LFxuIFx0XHRsaXN0X2RlbChcdTAwMjZ1bmxpbmstXHUwMDNlbGlzdCk7XG4gXG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZkZXYtXHUwMDNlcHJpdl9sb2NrKTtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZoY2ktXHUwMDNlbG9jayk7XG4gXG4gXHRcdHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCB1cmItXHUwMDNlc3RhdHVzKTtcbiBcbi1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiBcdFx0c3Bpbl9sb2NrKFx1MDAyNnZkZXYtXHUwMDNlcHJpdl9sb2NrKTtcbiBcbiBcdFx0a2ZyZWUodW5saW5rKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMgYi9kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmNcbmluZGV4IGE2NzhlN2M4OTgzNzUuLjZkYjNhNWE3MzYwMDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguY1xuQEAgLTEwMiwxMCAmIzQzOzEwMiwxMyBAQCBzdGF0aWMgdm9pZCB2aGNpX3JlY3ZfcmV0X3N1Ym1pdChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYik7XG4tXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnZoY2ktXHUwMDNlbG9jayk7XG4gXG4gXHR1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIsIHVyYi1cdTAwM2VzdGF0dXMpO1xuIFxuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZ2aGNpLVx1MDAzZWxvY2spO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuIFx0dXNiaXBfZGJnX3ZoY2lfcngoXCYjMzQ7TGVhdmVcXG5cJiMzNDspO1xuIH1cbiBcbkBAIC0xNzMsOSAmIzQzOzE3NiwxMiBAQCBzdGF0aWMgdm9pZCB2aGNpX3JlY3ZfcmV0X3VubGluayhzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXG4gXG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHR1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCh2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIpO1xuLVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiBcbiBcdFx0dXNiX2hjZF9naXZlYmFja191cmIodmhjaV9oY2RfdG9faGNkKHZoY2lfaGNkKSwgdXJiLCB1cmItXHUwMDNlc3RhdHVzKTtcbiYjNDM7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHR9XG4gXG4gXHRrZnJlZSh1bmxpbmspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JJUF9WSENJX0hDRCYjMzQ7LAogICAgJiMzNDtVU0JJUF9DT1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhjaV91cmJfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDt2aGNpX3J4X2xvb3AmIzM0OywKICAgICYjMzQ7dmhjaV9zaHV0ZG93bl9jb25uZWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAgd2FzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBpbiB0aGUgYHVzYmlwYCBkcml2ZXIuIEl0IG1vZGlmaWVzIGNvcmUgVVJCIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYHZoY2lfdXJiX2RlcXVldWVgLCBgdmhjaV9yZWN2X3JldF9zdWJtaXRgLCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLCBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCkgdG8ga2VlcCBpbnRlcnJ1cHRzIGRpc2FibGVkIGR1cmluZyB0aGUgZ2l2ZWJhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHZpcnR1YWwgVVNCIGNvbnRyb2xsZXIgZHJpdmVyIHRoYXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk1ZjQzYTQ0NGYxNWFmOTdiOTBlMGE4MjgwYzg5YTkyMWU4YWZkMjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyA4IDE5OjU4OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMKaW5kZXggMzllOGZhZjRjMThjZC4uYjQxNmQ4MjcxYWE3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jCkBAIC05NDAsOSAmIzQzOzk0MCw5IEBAIHN0YXRpYyBpbnQgdmhjaV91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpCiAJCSAqLwogCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChoY2QsIHVyYik7CiAKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7dmhjaS0mZ3Q7bG9jayk7CiAJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCB1cmItJmd0O3N0YXR1cyk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7dmhjaS0mZ3Q7bG9jayk7CiAKIAl9IGVsc2UgewogCQkvKiB0Y3AgY29ubmVjdGlvbiBpcyBhbGl2ZSAqLwpAQCAtMTAwOCwxMSAmIzQzOzEwMDgsMTEgQEAgc3RhdGljIHZvaWQgdmhjaV9jbGVhbnVwX3VubGlua19saXN0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKIAkJbGlzdF9kZWwoJmFtcDt1bmxpbmstJmd0O2xpc3QpOwogCiAJCXNwaW5fdW5sb2NrKCZhbXA7dmRldi0mZ3Q7cHJpdl9sb2NrKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7dmhjaS0mZ3Q7bG9jayk7CiAKIAkJdXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHVyYi0mZ3Q7c3RhdHVzKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO3ZoY2ktJmd0O2xvY2spOwogCQlzcGluX2xvY2soJmFtcDt2ZGV2LSZndDtwcml2X2xvY2spOwogCiAJCWtmcmVlKHVubGluayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMgYi9kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMKaW5kZXggYTY3OGU3Yzg5ODM3NS4uNmRiM2E1YTczNjAwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYwpAQCAtMTAyLDEwICYjNDM7MTAyLDEzIEBAIHN0YXRpYyB2b2lkIHZoY2lfcmVjdl9yZXRfc3VibWl0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwogCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt2aGNpLSZndDtsb2NrKTsKIAogCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYiwgdXJiLSZndDtzdGF0dXMpOwogCiYjNDM7CXNwaW5fbG9jaygmYW1wO3ZoY2ktJmd0O2xvY2spOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwogCXVzYmlwX2RiZ192aGNpX3J4KCYjMzQ7TGVhdmVcbiYjMzQ7KTsKIH0KIApAQCAtMTczLDkgJiM0MzsxNzYsMTIgQEAgc3RhdGljIHZvaWQgdmhjaV9yZWN2X3JldF91bmxpbmsoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LAogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwogCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCh2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDt2aGNpLSZndDtsb2NrKTsKIAogCQl1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIsIHVyYi0mZ3Q7c3RhdHVzKTsKJiM0MzsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO3ZoY2ktJmd0O2xvY2spOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKIAl9CiAKIAlrZnJlZSh1bmxpbmspOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzUxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVTQi9JUCBWSENJIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFVTQi9JUCBWSENJIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGB2aGNpX2hjZC5jYCBhbmQgYHZoY2lfcnguY2AuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBzb21lb25lJiMzOTtzIG1hZGUgc29tZSBjaGFuZ2VzIHRvIHRoZSBzcGlubG9jay91bmxvY2sgb3BlcmF0aW9ucywgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIFRoZXkmIzM5O3ZlIHJlcGxhY2VkIGBzcGluX3VubG9ja19pcnFyZXN0b3JlYCB3aXRoIGp1c3QgYHNwaW5fdW5sb2NrYCBhbmQgYHNwaW5fbG9ja19pcnFzYXZlYCB3aXRoIGBzcGluX2xvY2tgIGluIGB2aGNpX3VyYl9kZXF1ZXVlYCBhbmQgYHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdGAuICBBbHNvIGluIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAgYW5kIGB2aGNpX3JlY3ZfcmV0X3VubGlua2AsIHRoZXkgYXJlIHBsYXlpbmcgd2l0aCB0aGUgb3JkZXIgb2YgYHNwaW5fdW5sb2NrYCwgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCBhbmQgYHNwaW5fbG9ja2AgYWdhaW4uCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHRoZXkgdHJ5aW5nIHRvIGF2b2lkIGEgc2NlbmFyaW8gd2hlcmUgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCBnZXRzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQ/IE9yLCBpcyB0aGlzIGZpeGluZyBhIGJ1ZyB3aGVyZSBpbnRlcnJ1cHRzIHdlcmUgaW5jb3JyZWN0bHkgcmVzdG9yZWQgYmVmb3JlIGEgZnVuY3Rpb24gdGhhdCBleHBlY3RzIHRoZW0gdG8gYmUgZGlzYWJsZWQ/ICBgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZWAgaXMgc3VwcG9zZWQgdG8gcmVzdG9yZSBpbnRlcnJ1cHRzIHRvIHRoZSBzdGF0ZSB0aGV5IHdlcmUgKmJlZm9yZSogdGhlIGNvcnJlc3BvbmRpbmcgYHNwaW5fbG9ja19pcnFzYXZlYCwgc28gaWYgd2UganVzdCBnbyB3aXRoIGBzcGluX3VubG9ja2Agd2UmIzM5O3JlIGxlYXZpbmcgaW50ZXJydXB0cyBkaXNhYmxlZCwgcmlnaHQ/CgpUaGlua2luZyBtb3JlIGRlZXBseSwgYHZoY2lfdXJiX2RlcXVldWVgIHN0YXJ0cyB3aXRoIGBzcGluX2xvY2tfaXJxc2F2ZWAsIHdoaWNoIGRpc2FibGVzIGludGVycnVwdHMuIElmIHdlIGNoYW5nZSBpdCB0byB1c2luZyBgc3Bpbl91bmxvY2tgIGxhdGVyLCB3ZSYjMzk7cmUgbGVhdmluZyBpbnRlcnJ1cHRzIGRpc2FibGVkLiBUaGVuIHdlJiMzOTtyZSBjYWxsaW5nIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAgd2l0aCBpbnRlcnJ1cHRzICpzdGlsbCogZGlzYWJsZWQuICBBbmQgKnRoZW4qIHdlIGNhbGwgYHNwaW5fbG9ja2AgYW5kLCBmaW5hbGx5LCBgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZWAgYmVmb3JlIHdlIGV4aXQgdGhlIGZ1bmN0aW9uLiAgU28gbm93IGl0JiMzOTtzIGNsZWFyOiBgdXNiX2hjZF9naXZlYmFja191cmJgICppcyogYmVpbmcgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCBiZWNhdXNlIG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2QgYmV0dGVyIGNvbmZpcm0gdGhpcyBieSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlIGZvciBgdmhjaV91cmJfZGVxdWV1ZWAgaW4gYHZoY2lfaGNkLmNgIHRvIG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyBubyBtaXN1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZoY2lfdXJiX2RlcXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM9Mzc9c3RhdGljIGludCB2aGNpX3VyYl9lbnF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYixcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMzgtXHRcdFx0ICAgIGdmcF90IG1lbV9mbGFncyk7XG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jOjM5OnN0YXRpYyBpbnQgdmhjaV91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpO1xuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy00MC1zdGF0aWMgaW50IHZoY2lfc3RhcnQoc3RydWN0IHVzYl9oY2QgKnZoY2lfaGNkKTtcbi0tXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTY5Nz1zdGF0aWMgaW50IHZoY2lfdXJiX2VucXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBnZnBfdCBtZW1fZmxhZ3MpXG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy04OTQtICovXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jOjg5NTpzdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy04OTYte1xuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM9MTM0MD1zdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciB2aGNpX2hjX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTEzNTEtXHQudXJiX2VucXVldWVcdD0gdmhjaV91cmJfZW5xdWV1ZSxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM6MTM1MjpcdC51cmJfZGVxdWV1ZVx0PSB2aGNpX3VyYl9kZXF1ZXVlLFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMzUzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNzkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSB2aGNpX3VyYl9kZXF1ZXVlIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBpdC4gSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gYHZoY2lfdXJiX2RlcXVldWVgLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmNgLiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIGludHJpY2FjaWVzIG9mIFVTQi9JUCYjMzk7cyB2aXJ0dWFsIGhvc3QgY29udHJvbGxlciBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBkZS1xdWV1aW5nLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBtYW5hZ2luZyB0aGUgbGlmZWN5Y2xlIG9mIHJlcXVlc3RzIG9uIHRoZSB2aXJ0dWFsIFVTQiBidXMuIE15IG1lbnRhbCBjaGVja2xpc3QgaW5jbHVkZXMgcXVlc3Rpb25zIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBVU0IgY29yZSwgaG93IGl0IGhhbmRsZXMgZXJyb3IgY29uZGl0aW9ucywgYW5kIGhvdyBpdCBlbnN1cmVzIHByb3BlciBzeW5jaHJvbml6YXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgYSBjcml0aWNhbCBwb2ludCBvZiBjb25jdXJyZW5jeSBjb250cm9sLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciByYWNlIGNvbmRpdGlvbnMgaGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg5NTpcdHN0YXRpYyBpbnQgdmhjaV91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpXG4gODk2Olx0e1xuIDg5NzpcdFx0c3RydWN0IHZoY2lfaGNkICp2aGNpX2hjZCA9IGhjZF90b192aGNpX2hjZChoY2QpO1xuIDg5ODpcdFx0c3RydWN0IHZoY2kgKnZoY2kgPSB2aGNpX2hjZC1cdTAwM2V2aGNpO1xuIDg5OTpcdFx0c3RydWN0IHZoY2lfcHJpdiAqcHJpdjtcbiA5MDA6XHRcdHN0cnVjdCB2aGNpX2RldmljZSAqdmRldjtcbiA5MDE6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gOTAyOlx0XG4gOTAzOlx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiA5MDQ6XHRcbiA5MDU6XHRcdHByaXYgPSB1cmItXHUwMDNlaGNwcml2O1xuIDkwNjpcdFx0aWYgKCFwcml2KSB7XG4gOTA3Olx0XHRcdC8qIFVSQiB3YXMgbmV2ZXIgbGlua2VkISBvciB3aWxsIGJlIHNvb24gZ2l2ZW4gYmFjayBieVxuIDkwODpcdFx0XHQgKiB2aGNpX3J4LiAqL1xuIDkwOTpcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuIDkxMDpcdFx0XHRyZXR1cm4gLUVJRFJNO1xuIDkxMTpcdFx0fVxuIDkxMjpcdFxuIDkxMzpcdFx0e1xuIDkxNDpcdFx0XHRpbnQgcmV0ID0gMDtcbiA5MTU6XHRcbiA5MTY6XHRcdFx0cmV0ID0gdXNiX2hjZF9jaGVja191bmxpbmtfdXJiKGhjZCwgdXJiLCBzdGF0dXMpO1xuIDkxNzpcdFx0XHRpZiAocmV0KSB7XG4gOTE4Olx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiA5MTk6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDkyMDpcdFx0XHR9XG4gOTIxOlx0XHR9XG4gOTIyOlx0XG4gOTIzOlx0XHQgLyogc2VuZCB1bmxpbmsgcmVxdWVzdCBoZXJlPyAqL1xuIDkyNDpcdFx0dmRldiA9IHByaXYtXHUwMDNldmRldjtcbiA5MjU6XHRcbiA5MjY6XHRcdGlmICghdmRldi1cdTAwM2V1ZC50Y3Bfc29ja2V0KSB7XG4gOTI3Olx0XHRcdC8qIHRjcCBjb25uZWN0aW9uIGlzIGNsb3NlZCAqL1xuIDkyODpcdFx0XHRzcGluX2xvY2soXHUwMDI2dmRldi1cdTAwM2Vwcml2X2xvY2spO1xuIDkyOTpcdFxuIDkzMDpcdFx0XHRsaXN0X2RlbChcdTAwMjZwcml2LVx1MDAzZWxpc3QpO1xuIDkzMTpcdFx0XHRrZnJlZShwcml2KTtcbiA5MzI6XHRcdFx0dXJiLVx1MDAzZWhjcHJpdiA9IE5VTEw7XG4gOTMzOlx0XG4gOTM0Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZkZXYtXHUwMDNlcHJpdl9sb2NrKTtcbiA5MzU6XHRcbiA5MzY6XHRcdFx0LypcbiA5Mzc6XHRcdFx0ICogSWYgdGNwIGNvbm5lY3Rpb24gaXMgYWxpdmUsIHdlIGhhdmUgc2VudCBDTURfVU5MSU5LLlxuIDkzODpcdFx0XHQgKiB2aGNpX3J4IHdpbGwgcmVjZWl2ZSBSRVRfVU5MSU5LIGFuZCBnaXZlIGJhY2sgdGhlIFVSQi5cbiA5Mzk6XHRcdFx0ICogT3RoZXJ3aXNlLCB3ZSBnaXZlIGJhY2sgaXQgaGVyZS5cbiA5NDA6XHRcdFx0ICovXG4gOTQxOlx0XHRcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTtcbiA5NDI6XHRcbiA5NDM6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiA5NDQ6XHRcdFx0dXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHVyYi1cdTAwM2VzdGF0dXMpO1xuIDk0NTpcdFx0XHRzcGluX2xvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiA5NDY6XHRcbiA5NDc6XHRcdH0gZWxzZSB7XG4gOTQ4Olx0XHRcdC8qIHRjcCBjb25uZWN0aW9uIGlzIGFsaXZlICovXG4gOTQ5Olx0XHRcdHN0cnVjdCB2aGNpX3VubGluayAqdW5saW5rO1xuIDk1MDpcdFxuIDk1MTpcdFx0XHRzcGluX2xvY2soXHUwMDI2dmRldi1cdTAwM2Vwcml2X2xvY2spO1xuIDk1MjpcdFxuIDk1MzpcdFx0XHQvKiBzZXR1cCBDTURfVU5MSU5LIHBkdSAqL1xuIDk1NDpcdFx0XHR1bmxpbmsgPSBremFsbG9jX29iaihzdHJ1Y3QgdmhjaV91bmxpbmssIEdGUF9BVE9NSUMpO1xuIDk1NTpcdFx0XHRpZiAoIXVubGluaykge1xuIDk1NjpcdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZkZXYtXHUwMDNlcHJpdl9sb2NrKTtcbiA5NTc6XHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuIDk1ODpcdFx0XHRcdHVzYmlwX2V2ZW50X2FkZChcdTAwMjZ2ZGV2LVx1MDAzZXVkLCBWREVWX0VWRU5UX0VSUk9SX01BTExPQyk7XG4gOTU5Olx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gOTYwOlx0XHRcdH1cbiA5NjE6XHRcbiA5NjI6XHRcdFx0dW5saW5rLVx1MDAzZXNlcW51bSA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNnZoY2lfaGNkLVx1MDAzZXNlcW51bSk7XG4gOTYzOlx0XHRcdGlmICh1bmxpbmstXHUwMDNlc2VxbnVtID09IDB4ZmZmZilcbiA5NjQ6XHRcdFx0XHRkZXZfaW5mbyhoY2RfZGV2KGhjZCksIFwmIzM0O3NlcW51bSBtYXhcXG5cJiMzNDspO1xuIDk2NTpcdFxuIDk2NjpcdFx0XHR1bmxpbmstXHUwMDNldW5saW5rX3NlcW51bSA9IHByaXYtXHUwMDNlc2VxbnVtO1xuIDk2NzpcdFxuIDk2ODpcdFx0XHQvKiBzZW5kIGNtZF91bmxpbmsgYW5kIHRyeSB0byBjYW5jZWwgdGhlIHBlbmRpbmcgVVJCIGluIHRoZVxuIDk2OTpcdFx0XHQgKiBwZWVyICovXG4gOTcwOlx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2dW5saW5rLVx1MDAzZWxpc3QsIFx1MDAyNnZkZXYtXHUwMDNldW5saW5rX3R4KTtcbiA5NzE6XHRcdFx0d2FrZV91cChcdTAwMjZ2ZGV2LVx1MDAzZXdhaXRxX3R4KTtcbiA5NzI6XHRcbiA5NzM6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2dmRldi1cdTAwM2Vwcml2X2xvY2spO1xuIDk3NDpcdFx0fVxuIDk3NTpcdFxuIDk3NjpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiA5Nzc6XHRcbiA5Nzg6XHRcdHVzYmlwX2RiZ192aGNpX2hjKFwmIzM0O2xlYXZlXFxuXCYjMzQ7KTtcbiA5Nzk6XHRcdHJldHVybiAwO1xuIDk4MDpcdH1cbiA5ODE6XHRcbiA5ODI6XHRzdGF0aWMgdm9pZCB2aGNpX2NsZWFudXBfdW5saW5rX2xpc3Qoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LFxuIDk4MzpcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp1bmxpbmtfbGlzdClcbiA5ODQ6XHR7XG4gOTg1Olx0XHRzdHJ1Y3QgdmhjaV9oY2QgKnZoY2lfaGNkID0gdmRldl90b192aGNpX2hjZCh2ZGV2KTtcbiA5ODY6XHRcdHN0cnVjdCB1c2JfaGNkICpoY2QgPSB2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpO1xuIDk4NzpcdFx0c3RydWN0IHZoY2kgKnZoY2kgPSB2aGNpX2hjZC1cdTAwM2V2aGNpO1xuIDk4ODpcdFx0c3RydWN0IHZoY2lfdW5saW5rICp1bmxpbmssICp0bXA7XG4gOTg5Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDk5MDpcdFxuIDk5MTpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gOTkyOlx0XHRzcGluX2xvY2soXHUwMDI2dmRldi1cdTAwM2Vwcml2X2xvY2spO1xuIDk5MzpcdFxuIDk5NDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCB1bmxpbmtfbGlzdCwgbGlzdCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5OTEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2aGNpX3VyYl9kZXF1ZXVlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgdmhjaV91cmJfZGVxdWV1ZWAgd2l0aGluIHRoZSBgdmhjaV9oY2RgIGRyaXZlci4gSXQmIzM5O3MgbWFraW5nIGEgY3J1Y2lhbCBjaGFuZ2UgYXJvdW5kIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAuIFNwZWNpZmljYWxseSwgaXQmIzM5O3Mgc3dhcHBpbmcgYHNwaW5fdW5sb2NrX2lycXJlc3RvcmVgIGFuZCBgc3Bpbl9sb2NrX2lycXNhdmVgIHdpdGggdGhlaXIgc2ltcGxlciBgc3Bpbl91bmxvY2tgIGFuZCBgc3Bpbl9sb2NrYCBjb3VudGVycGFydHMsIHJlc3BlY3RpdmVseS4gVGhlIGRpZmZlcmVuY2UgaXMgdGhlICYjMzQ7aXJxJiMzNDsgaGFuZGxpbmcg4oCTIHRoZXNlIG5ldyBjYWxscyBsZWF2ZSBpbnRlcnJ1cHRzIGRpc2FibGVkIGR1cmluZyB0aGUgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCBjYWxsLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBob3cgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCBpcyAqc3VwcG9zZWQqIHRvIGJlaGF2ZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIHNwZWNpZmljYWxseSB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gZXhwZWN0cyBpbnRlcnJ1cHRzIHRvIGJlIGRpc2FibGVkLiBPaCwgaG9sZCBvbi4uLiBsZXQgbWUgY2hlY2sgdGhlIGRvY3VtZW50YXRpb24hIEFoLCB0aGVyZSBpdCBpczogJiMzNDtUaGlzIGZ1bmN0aW9uICptdXN0KiBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLiYjMzQ7IEJpbmdvLgoKU28sIHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgZml4aW5nIGEgYnVnLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgcG90ZW50aWFsbHkgY2FsbGluZyBgdXNiX2hjZF9naXZlYmFja191cmJgIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLCB3aGljaCBjb3VsZCBsZWFkIHRvIGRlYWRsb2NrcyBvciBvdGhlciBuYXN0eSByYWNlIGNvbmRpdGlvbnMuIEkgY2FuIHNlZSBob3cgdGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYyBpbiB0aGUgYHVzYmlwYCBkcml2ZXIuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgYnVnIGZpeCByZWFsbHksIGJ1dCBhIG5lY2Vzc2FyeSBvbmUgdG8gZW5zdXJlIHRoZSBkcml2ZXImIzM5O3Mgcm9idXN0bmVzcy4KCkkgc2hvdWxkIHByb2JhYmx5IGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggYHZoY2lfcmVjdl9yZXRfc3VibWl0YCBpbiBgZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWxhdGVkIGludGVyYWN0aW9ucy4gSXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZmxvdyBvZiBjb250cm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5NTpcdFx0aWYgKHVzYmlwX2RiZ19mbGFnX3ZoY2lfcngpXG4gIDk2Olx0XHRcdHVzYmlwX2R1bXBfdXJiKHVyYik7XG4gIDk3Olx0XG4gIDk4Olx0XHRpZiAodXJiLVx1MDAzZW51bV9zZ3MpXG4gIDk5Olx0XHRcdHVyYi1cdTAwM2V0cmFuc2Zlcl9mbGFncyBcdTAwMjY9IH5VUkJfRE1BX01BUF9TRztcbiAxMDA6XHRcbiAxMDE6XHRcdHVzYmlwX2RiZ192aGNpX3J4KFwmIzM0O25vdyBnaXZlYmFjayB1cmIgJXVcXG5cJiMzNDssIHBkdS1cdTAwM2ViYXNlLnNlcW51bSk7XG4gMTAyOlx0XG4gMTAzOlx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiAxMDQ6XHRcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYik7XG4gMTA1Olx0XHRzcGluX3VubG9jayhcdTAwMjZ2aGNpLVx1MDAzZWxvY2spO1xuIDEwNjpcdFxuIDEwNzpcdFx0dXNiX2hjZF9naXZlYmFja191cmIodmhjaV9oY2RfdG9faGNkKHZoY2lfaGNkKSwgdXJiLCB1cmItXHUwMDNlc3RhdHVzKTtcbiAxMDg6XHRcbiAxMDk6XHRcdHNwaW5fbG9jayhcdTAwMjZ2aGNpLVx1MDAzZWxvY2spO1xuIDExMDpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiAxMTE6XHRcbiAxMTI6XHRcdHVzYmlwX2RiZ192aGNpX3J4KFwmIzM0O0xlYXZlXFxuXCYjMzQ7KTtcbiAxMTM6XHR9XG4gMTE0Olx0XG4gMTE1Olx0c3RhdGljIHN0cnVjdCB2aGNpX3VubGluayAqZGVxdWV1ZV9wZW5kaW5nX3VubGluayhzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXG4gMTE2Olx0XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUpXG4gMTE3Olx0e1xuIDExODpcdFx0c3RydWN0IHZoY2lfdW5saW5rICp1bmxpbmssICp0bXA7XG4gMTE5Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDEyMDpcdFxuIDEyMTpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmRldi1cdTAwM2Vwcml2X2xvY2ssIGZsYWdzKTtcbiAxMjI6XHRcbiAxMjM6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bmxpbmssIHRtcCwgXHUwMDI2dmRldi1cdTAwM2V1bmxpbmtfcngsIGxpc3QpIHtcbiAxMjQ6XHRcdFx0cHJfaW5mbyhcJiMzNDt1bmxpbmstXHUwMDNlc2VxbnVtICVsdVxcblwmIzM0OywgdW5saW5rLVx1MDAzZXNlcW51bSk7XG4gMTI1Olx0XHRcdGlmICh1bmxpbmstXHUwMDNlc2VxbnVtID09IHBkdS1cdTAwM2ViYXNlLnNlcW51bSkge1xuIDEyNjpcdFx0XHRcdHVzYmlwX2RiZ192aGNpX3J4KFwmIzM0O2ZvdW5kIHBlbmRpbmcgdW5saW5rLCAlbHVcXG5cJiMzNDssXG4gMTI3Olx0XHRcdFx0XHRcdCAgdW5saW5rLVx1MDAzZXNlcW51bSk7XG4gMTI4Olx0XHRcdFx0bGlzdF9kZWwoXHUwMDI2dW5saW5rLVx1MDAzZWxpc3QpO1xuIDEyOTpcdFxuIDEzMDpcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmRldi1cdTAwM2Vwcml2X2xvY2ssIGZsYWdzKTtcbiAxMzE6XHRcdFx0XHRyZXR1cm4gdW5saW5rO1xuIDEzMjpcdFx0XHR9XG4gMTMzOlx0XHR9XG4gMTM0Olx0XG4gMTM1Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZkZXYtXHUwMDNlcHJpdl9sb2NrLCBmbGFncyk7XG4gMTM2Olx0XG4gMTM3Olx0XHRyZXR1cm4gTlVMTDtcbiAxMzg6XHR9XG4gMTM5Olx0XG4gMTQwOlx0c3RhdGljIHZvaWQgdmhjaV9yZWN2X3JldF91bmxpbmsoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LFxuIDE0MTpcdFx0XHRcdFx0IHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSlcbiAxNDI6XHR7XG4gMTQzOlx0XHRzdHJ1Y3QgdmhjaV9oY2QgKnZoY2lfaGNkID0gdmRldl90b192aGNpX2hjZCh2ZGV2KTtcbiAxNDQ6XHRcdHN0cnVjdCB2aGNpICp2aGNpID0gdmhjaV9oY2QtXHUwMDNldmhjaTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDkwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzIGluIHRoZSBVU0JJUCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoZXNlIGNoYW5nZXMgdG8gYHZoY2lfcmVjdl9yZXRfc3VibWl0YCBhbmQgYHZoY2lfcmVjdl9yZXRfdW5saW5rYCwgYW5kIHRoZXkgc2VlbSB0byBpbnZvbHZlIGtlZXBpbmcgaW50ZXJydXB0cyBkaXNhYmxlZCBkdXJpbmcgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYC4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGNhdGNoZXMgbXkgZXllIGFzIGEgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0LiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYHVzYmlwYCBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgdmlydHVhbCBVU0IgY29udHJvbGxlciwgd2hpY2ggaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgcmVhY2hhYmxlIGluIHRob3NlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KClNpbmNlIHRoZSBmdW5jdGlvbnMgYHZoY2lfdXJiX2RlcXVldWVgLCBgdmhjaV9yZWN2X3JldF9zdWJtaXRgLCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLCBhbmQgYHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdGAgYXJlIGFsbCBwYXJ0IG9mIHRoYXQgYHVzYmlwYCBkcml2ZXIsIEkgdGhpbmsgYSB0aG9yb3VnaCBsb29rIHRocm91Z2ggdGhlc2Ugd291bGQgYmUgYSBnb29kIGlkZWEuCgpJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBgdXNiaXBgIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGNvbmZpZ3VyZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy4gVGhhdCBjb3VsZCBwcm92aWRlIG1vcmUgY29udGV4dCBvbiB0aGUgYXR0YWNrIHN1cmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JJUF9WSENJX0hDRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3VzYmlwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvdXNiaXAvS2NvbmZpZz0zPWNvbmZpZyBVU0JJUF9DT1JFXG4tLVxuZHJpdmVycy91c2IvdXNiaXAvS2NvbmZpZy0yMC1cbmRyaXZlcnMvdXNiL3VzYmlwL0tjb25maWc6MjE6Y29uZmlnIFVTQklQX1ZIQ0lfSENEXG5kcml2ZXJzL3VzYi91c2JpcC9LY29uZmlnLTIyLVx0dHJpc3RhdGUgXCYjMzQ7VkhDSSBoY2RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk5MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgVVNCL0lQIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIG92ZXIgdG8gdGhlIGBkcml2ZXJzL3VzYi91c2JpcC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjEuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIGNvbmZpZ3VyaW5nIHRoZSBVU0IvSVAgbW9kdWxlIHByb2JhYmx5IGxpZXMsIGdpdmVuIHRoZSBsb2NhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGVyZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugd2hldGhlciB0aGUgbW9kdWxlIGl0c2VsZiBpcyBlbmFibGVkLCBhbnkgc3BlY2lmaWMgZmVhdHVyZXMgb3IgbW9kZXMsIGFuZCBob3BlZnVsbHkgc29tZSBoZWxwIHRleHQgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGNsYXJpZnkgZXhhY3RseSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBVU0Igc3Vic3lzdGVtIGFuZCB0aGUgYnJvYWRlciBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGEgdXNlciBjb25maWd1cmVzIFVTQi9JUCBhbmQgd2hhdCBjaG9pY2VzIHRoZXkgY2FuIG1ha2UuIExpbmUgMjEsIGl0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3VzYmlwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIFVTQklQX0NPUkVcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQi9JUCBzdXBwb3J0XCYjMzQ7XG4gICA1Olx0XHRkZXBlbmRzIG9uIE5FVFxuICAgNjpcdFx0c2VsZWN0IFVTQl9DT01NT05cbiAgIDc6XHRcdHNlbGVjdCBTR0xfQUxMT0NcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhpcyBlbmFibGVzIHB1c2hpbmcgVVNCIHBhY2tldHMgb3ZlciBJUCB0byBhbGxvdyByZW1vdGVcbiAgMTA6XHRcdCAgbWFjaGluZXMgZGlyZWN0IGFjY2VzcyB0byBVU0IgZGV2aWNlcy4gSXQgcHJvdmlkZXMgdGhlXG4gIDExOlx0XHQgIFVTQi9JUCBjb3JlIHRoYXQgaXMgcmVxdWlyZWQgYnkgYm90aCBkcml2ZXJzLlxuICAxMjpcdFxuICAxMzpcdFx0ICBGb3IgbW9yZSBkZXRhaWxzLCBhbmQgdG8gZ2V0IHRoZSB1c2Vyc3BhY2UgdXRpbGl0eVxuICAxNDpcdFx0ICBwcm9ncmFtcywgcGxlYXNlIHNlZSBcdTAwM2NodHRwOi8vdXNiaXAuc291cmNlZm9yZ2UubmV0L1x1MDAzZS5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgMTc6XHRcdCAgYmUgY2FsbGVkIHVzYmlwLWNvcmUuXG4gIDE4Olx0XG4gIDE5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIFVTQklQX1ZIQ0lfSENEXG4gIDIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtWSENJIGhjZFwmIzM0O1xuICAyMzpcdFx0ZGVwZW5kcyBvbiBVU0JJUF9DT1JFIFx1MDAyNlx1MDAyNiBVU0JcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgVGhpcyBlbmFibGVzIHRoZSBVU0IvSVAgdmlydHVhbCBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLFxuICAyNjpcdFx0ICB3aGljaCBpcyBydW4gb24gdGhlIHJlbW90ZSBtYWNoaW5lLlxuICAyNzpcdFxuICAyODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMjk6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZoY2ktaGNkLlxuICAzMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjE0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgVVNCSVAgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgVVNCSVAgY29kZS4gQmFzZWQgb24gdGhlIGluaXRpYWwgcmVwb3J0cywgaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgemVyb2luZyBpbiBvbiBhIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBob3cgVVNCIG92ZXIgSVAgaXMgaGFuZGxlZC4gTXkgaW1tZWRpYXRlIGNoZWNrbGlzdCBzdGFydHMgd2l0aCBjb25maXJtaW5nIHRoZSBjcml0aWNhbCBtb2R1bGVzIHdlIG5lZWQgdG8gY29uc2lkZXI6IGBVU0JJUF9WSENJX0hDRGAsIGBVU0JJUF9DT1JFYCwgYFVTQmAsIGFuZCBgTkVUYC4gVGhlc2UgYXJlIHRoZSBmb3VuZGF0aW9uYWwgY29tcG9uZW50cyBmb3IgbWFuYWdpbmcgdGhlIHZpcnR1YWwgaG9zdCBjb250cm9sbGVyIGFuZCBuZXR3b3JrIGNvbW11bmljYXRpb24uCgpOb3csIG15IGluaXRpYWwgaHVuY2gsIGJhc2VkIG9uIGV4cGVyaWVuY2UsIGlzIHRoYXQgdGhlIHJlYWwgbWVhdCBvZiB0aGUgcHJvYmxlbSB3aWxsIGJlIGZvdW5kIGluIHRoZSBhY3R1YWwgZnVuY3Rpb24gY2FsbHMgZGVhbGluZyB3aXRoIFVSQiAoVVNCIFJlcXVlc3QgQmxvY2spIGhhbmRsaW5nIGFuZCB1bmxpbmtpbmcuIFRoZSBmdW5jdGlvbnMgdGhhdCBzdGFuZCBvdXQgYXMgYXJlYXMgb2YgY3JpdGljYWwgaW1wb3J0YW5jZSBhcmU6IGB2aGNpX3VyYl9kZXF1ZXVlYCwgYHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdGAsIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAsIGFuZCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLiBUaGVzZSBhcmUgYWxsIHByaW1lIHN1c3BlY3RzIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcsIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGZsYXdzLgoKSG9sZCBvbiBhIHNlY29uZC4uLiBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCBpcyBtYXJrZWQgYXMgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlZCBteSBpbnRlcmVzdC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gaW50ZXJuYWwgaGVscGVycy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgaXQmIzM5O3MgYW4gQVBJIGVudHJ5cG9pbnQgZXhwb3NlZCB0byBvdGhlciBtb2R1bGVzLCBvciBpZiBpdCYjMzk7cyBvbmx5IGNhbGxlZCBpbnRlcm5hbGx5IHdpdGhpbiB0aGUgYHZoY2lgIG1vZHVsZS4gVGhhdCB3aWxsIGdyZWF0bHkgYWZmZWN0IHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIgYW5kIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZoY2lfY2xlYW51cF91bmxpbmtfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3VzYmlwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTg5NT1zdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKVxuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtOTgxLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzo5ODI6c3RhdGljIHZvaWQgdmhjaV9jbGVhbnVwX3VubGlua19saXN0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldixcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtOTgzLVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp1bmxpbmtfbGlzdClcbi0tXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTEwMjU9c3RhdGljIHZvaWQgdmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXAoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMTAyNy1cdC8qIGdpdmUgYmFjayBVUkIgb2YgdW5zZW50IHVubGluayByZXF1ZXN0ICovXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jOjEwMjg6XHR2aGNpX2NsZWFudXBfdW5saW5rX2xpc3QodmRldiwgXHUwMDI2dmRldi1cdTAwM2V1bmxpbmtfdHgpO1xuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDI5LVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDMwLVx0LyogZ2l2ZSBiYWNrIFVSQiBvZiB1bmFuc3dlcmVkIHVubGluayByZXF1ZXN0ICovXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jOjEwMzE6XHR2aGNpX2NsZWFudXBfdW5saW5rX2xpc3QodmRldiwgXHUwMDI2dmRldi1cdTAwM2V1bmxpbmtfcngpO1xuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDMyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ1NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBWSENJIENsZWFudXAgUHJvY2VzcyoqCgpSaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBjbGVhbnVwIHNlcXVlbmNlIEkmIzM5O20gbG9va2luZyBhdCBvcmlnaW5hdGVzIGZyb20gYHZoY2lfZGV2aWNlX3VubGlua19jbGVhbnVwYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBjYWxsZWQgYnkgYHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbmAuIFNvLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB1bmxpbmtpbmcgb3Igc2h1dHRpbmcgZG93biBhIGNvbm5lY3Rpb24sIGFuZCB0aGUgY2xlYW51cCBwcm9jZXNzIGtpY2tzIGluLgoKTm93LCBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgVVJCcyBhcmUgbWFuYWdlZCBkdXJpbmcgdGhpcyBwcm9jZXNzLiBgdmhjaV91cmJfZGVxdWV1ZWAgaXMgd2hhdCBJJiMzOTttIGZvY3VzaW5nIG9uOyBpdCYjMzk7cyB0aGUgc3BlY2lmaWMgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB0aGUgSENEIHVzZXMgZm9yIHRoZSBgLnVyYl9kZXF1ZXVlYCBvcGVyYXRpb24uIFRoaXMgaXMgd2hlcmUgd2UgbmVlZCB0byBlbnN1cmUgdGhpbmdzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4KCkZ1cnRoZXIgZG93biB0aGUgbGluZSwgb24gdGhlIHJlY2VpdmUgcGF0aCwgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCBhbmQgYHZoY2lfcmVjdl9yZXRfdW5saW5rYCBhcmUgY2FsbGVkIGZyb20gYHZoY2lfcnhfcGR1YC4gVGhpcyBzdWdnZXN0cyB0aGVyZSYjMzk7cyBzb21lIGludGVyYWN0aW9uIHdpdGggVVJCIHN1Ym1pc3Npb25zIGFuZCB1bmxpbmtpbmcgaGFwcGVuaW5nIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZyBmcm9tIHRoZSByZWNlaXZlIHF1ZXVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aGNpX3JlY3ZfcmV0X3N1Ym1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3VzYmlwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmM9MTM9c3RydWN0IHVyYiAqcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwgX191MzIgc2VxbnVtKVxuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYy01NC1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYzo1NTpzdGF0aWMgdm9pZCB2aGNpX3JlY3ZfcmV0X3N1Ym1pdChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMtNTYtXHRcdFx0XHQgc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KVxuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYz0yMDM9c3RhdGljIHZvaWQgdmhjaV9yeF9wZHUoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpXG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jLTI0Ny1cdGNhc2UgVVNCSVBfUkVUX1NVQk1JVDpcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYzoyNDg6XHRcdHZoY2lfcmVjdl9yZXRfc3VibWl0KHZkZXYsIFx1MDAyNnBkdSk7XG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMtMjQ5LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNzEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdmhjaV9yeF9wZHVgIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgdmhjaV9yeF9wZHVgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB2aGNpX3J4X2xvb3BgLCB3aGljaCBpcywgaWYgSSYjMzk7bSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCBhIGtlcm5lbCB0aHJlYWQuIFRoYXQgZ2l2ZXMgbWUgYSBmZXcga2V5IGZ1bmN0aW9ucyB0byByZWFsbHkgZm9jdXMgb246IGB2aGNpX3VyYl9kZXF1ZXVlYCwgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCwgYW5kIGB2aGNpX3JlY3ZfcmV0X3VubGlua2AuIFRoZXNlIGFyZSBsaWtlbHkgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgdGhlIGNyaXRpY2FsIGludGVyYWN0aW9ucy4KCkhtbSwgYnV0IHdhaXQuLi5JIHNlZSBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCwgdGhhdCYjMzk7cyBzdGF0aWMuIFRoYXQmIzM5O3Mgbm90IGFzIGhlbHBmdWwuIE1heWJlIEkgc2hvdWxkIGxvb2sgYXQgYHZoY2lfZGV2aWNlX3VubGlua19jbGVhbnVwYCBvciBwZXJoYXBzIGV2ZW4gYHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbmA/IExldCBtZSBzaGlmdCBteSBmb2N1cyB0byBgdmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXBgIGFuZCBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGFib3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aGNpX2RldmljZV91bmxpbmtfY2xlYW51cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3VzYmlwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTk4Mj1zdGF0aWMgdm9pZCB2aGNpX2NsZWFudXBfdW5saW5rX2xpc3Qoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LFxuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMTAyNC1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM6MTAyNTpzdGF0aWMgdm9pZCB2aGNpX2RldmljZV91bmxpbmtfY2xlYW51cChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTEwMjYte1xuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM9MTAzOT1zdGF0aWMgdm9pZCB2aGNpX3NodXRkb3duX2Nvbm5lY3Rpb24oc3RydWN0IHVzYmlwX2RldmljZSAqdWQpXG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDY4LVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzoxMDY5Olx0dmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXAodmRldik7XG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTEwNzAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjgxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBVU0IvSVAgVmlydHVhbCBIb3N0IENvbnRyb2xsZXIgKFZIQ0kpIFNodXRkb3duIGFuZCBEYXRhIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbmAgZnVuY3Rpb24sIHdoaWNoIGlzLCBhcyBJIHJlY2FsbCwgdGhlIHNodXRkb3duIGNhbGxiYWNrIGZvciB0aGUgYHVzYmlwX2RldmljZWAgd2l0aGluIHRoZSBWSENJIGZyYW1ld29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cuIExldCBtZSB6ZXJvIGluIG9uIGB2aGNpX3VyYl9kZXF1ZXVlYCwgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCwgYW5kIGB2aGNpX3JlY3ZfcmV0X3VubGlua2AuIFRoZXNlIHNlZW0gY3JpdGljYWwgZm9yIGhhbmRsaW5nIFVSQiAoVVNCIFJlcXVlc3QgQmxvY2spIGRhdGEgZHVyaW5nIHRoZSBzaHV0ZG93biBwcm9jZXNzLgoKV2FpdCBhIHNlY29uZOKApiBgdmhjaV9yZWN2X3JldF9zdWJtaXRgIGFuZCBgdmhjaV9yZWN2X3JldF91bmxpbmtgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMuIEludGVyZXN0aW5nLiBBcmUgdGhleSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlcj8gR2l2ZW4gdGhlaXIgYXBwYXJlbnQgc2l6ZSwgdGhleSBhcmUgcHJvYmFibHkgbm90IGlubGluZWQuIFRvIGNvbmZpcm0gbXkgc3VzcGljaW9uLCBJIHNob3VsZCBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRoZXkgYXJlIGluZGVlZCBzdGF0aWMgZnVuY3Rpb25zLiBZZXAsIHRoZXkgYXJlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4KCk5vdywgY2FuIEkgbGV2ZXJhZ2UgYHZoY2lfcnhfcGR1YCBpbiB0aGlzIGNvbnRleHQ/IExldCBtZSBjaGVjayBpdHMgZGVjbGFyYXRpb27igKYgaG1tLCBpdCYjMzk7cyBhbHNvIHN0YXRpYy4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgcG90ZW50aWFsbHkgb2ZmZXJpbmcgc29tZSBzaGFyZWQgbG9naWMuCgpGaW5hbGx5LCBJ4oCZbGwgY2hlY2sgYHZoY2lfcnhfbG9vcGAsIHdoaWNoIGlzIHRoZSB0aHJlYWQgZnVuY3Rpb24uIE5vLCBpdOKAmXMgbm90IHN0YXRpYy4gT2theS4gVGhhdCBjbGFyaWZpZXMgdGhlIHNjb3BlIG9mIGVhY2ggZnVuY3Rpb24mIzM5O3MgYWNjZXNzaWJpbGl0eS4gSSB3aWxsIGtlZXAgdGhpcyBpbiBtaW5kIGFzIEkgY29udGludWUgdG8gYW5hbHl6ZSB0aGUgc2h1dGRvd24gc2VxdWVuY2UgYW5kIGhvdyBkYXRhIHRyYW5zZmVycyBhcmUgaGFuZGxlZCBpbiB0aGUgdmlydHVhbGl6ZWQgVVNCIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aGNpX3J4X2xvb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi91c2JpcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvdXNiaXAvdmhjaS5oPTEzMz1zdHJ1Y3QgdXJiICpwaWNrdXBfdXJiX2FuZF9mcmVlX3ByaXYoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LCBfX3UzMiBzZXFudW0pO1xuZHJpdmVycy91c2IvdXNiaXAvdmhjaS5oOjEzNDppbnQgdmhjaV9yeF9sb29wKHZvaWQgKmRhdGEpO1xuZHJpdmVycy91c2IvdXNiaXAvdmhjaS5oLTEzNS1cbi0tXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmM9MjAzPXN0YXRpYyB2b2lkIHZoY2lfcnhfcGR1KHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKVxuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYy0yNjEtXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmM6MjYyOmludCB2aGNpX3J4X2xvb3Aodm9pZCAqZGF0YSlcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYy0yNjMte1xuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfc3lzZnMuYz0zMTU9c3RhdGljIHNzaXplX3QgYXR0YWNoX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9zeXNmcy5jLTM4MS1cdC8qIGNyZWF0ZSB0aHJlYWRzIGJlZm9yZSBsb2NraW5nICovXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3N5c2ZzLmM6MzgyOlx0dGNwX3J4ID0ga3RocmVhZF9jcmVhdGUodmhjaV9yeF9sb29wLCBcdTAwMjZ2ZGV2LVx1MDAzZXVkLCBcJiMzNDt2aGNpX3J4XCYjMzQ7KTtcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfc3lzZnMuYy0zODMtXHRpZiAoSVNfRVJSKHRjcF9yeCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIGB2aGNpX3VyYl9kZXF1ZXVlYCoqCgpPa2F5LCBzbyBgdmhjaV91cmJfZGVxdWV1ZWAgaXMgYWxzbyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSW50ZXJlc3RpbmcuIFRoYXQgaW1tZWRpYXRlbHkgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQuIFRpbWUgdG8gaW52ZXN0aWdhdGUgdGhpcyBvbmUgZGlyZWN0bHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBWaXJ0dWFsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgY29kZS4gVGhpcyBjb3VsZCBiZSBhIGNyaXRpY2FsIHBvaW50IG9mIGNvbnRyb2wsIG9yIG1heWJlIGp1c3QgYSBoZWxwZnVsIGludGVybmFsIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhjaV91cmJfZGVxdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3VzYmlwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTM3PXN0YXRpYyBpbnQgdmhjaV91cmJfZW5xdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTM4LVx0XHRcdCAgICBnZnBfdCBtZW1fZmxhZ3MpO1xuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzozOTpzdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTtcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtNDAtc3RhdGljIGludCB2aGNpX3N0YXJ0KHN0cnVjdCB1c2JfaGNkICp2aGNpX2hjZCk7XG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYz02OTc9c3RhdGljIGludCB2aGNpX3VyYl9lbnF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgZ2ZwX3QgbWVtX2ZsYWdzKVxuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtODk0LSAqL1xuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzo4OTU6c3RhdGljIGludCB2aGNpX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cylcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtODk2LXtcbi0tXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTEzNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgdmhjaV9oY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMzUxLVx0LnVyYl9lbnF1ZXVlXHQ9IHZoY2lfdXJiX2VucXVldWUsXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jOjEzNTI6XHQudXJiX2RlcXVldWVcdD0gdmhjaV91cmJfZGVxdWV1ZSxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMTM1My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNzQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdW5jdGlvbiBJbmxpbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIGxpa2VseSB0byBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gU2luY2UgSSBrbm93IHRoZXNlIGFyZSBzdGF0aWMsIEkgc2hvdWxkIHN0YXJ0IGJ5IGV4cGxpY2l0bHkgbGlzdGluZyB0aGUgZnVuY3Rpb25zIHRoYXQgKm1pZ2h0IG5vdCogYmUuIEkmIzM5O20gdGhpbmtpbmcgb2YgYHZoY2lfcnhfbG9vcGAgYXMgYSBzdGFydGluZyBwb2ludCwgYW5kIG1heWJlIGB2aGNpX3VyYl9kZXF1ZXVlYCB0b28sIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYy4gVGhlIGFkZHJlc3Mgb2YgYHZoY2lfdXJiX2RlcXVldWVgIGlzIHRha2VuIHdoaWNoIG1lYW5zIGlubGluaW5nIGlzIGxlc3MgbGlrZWx5LiBBaCwgeWVhaCwgaXQmIzM5O3MgYXNzaWduZWQgdG8gdGhlIGAudXJiX2RlcXVldWVgIGZpZWxkIG9mIGEgc3RydWN0LCBzbyBkZWZpbml0ZWx5IG5vdCBnZXR0aW5nIGlubGluZWQuIEdvb2QgY2F0Y2guCgpOb3csIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAgYW5kIGB2aGNpX3JlY3ZfcmV0X3VubGlua2AgYXJlIGNhbGxlZCBmcm9tIHdpdGhpbiBgdmhjaV9yeF9wZHVgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGB2aGNpX3J4X2xvb3BgLiBMZXQmIzM5O3Mgc2VlIGlmIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAgaXMgYXNzaWduZWQgdG8gYW55dGhpbmcsIG9yIGlmIGl0JiMzOTtzIGp1c3QgY2FsbGVkIGRpcmVjdGx5LiBSaWdodCwgaXQmIzM5O3MgY2FsbGVkIGRpcmVjdGx5IHdpdGhpbiBhIHN3aXRjaCBzdGF0ZW1lbnQgaW5zaWRlIGB2aGNpX3J4X3BkdWAuIFRoYXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgY2FzZTsgaXQgKm1pZ2h0KiBiZSBpbmxpbmVkLgoKU28sIHRvIGJlIGNvbnNlcnZhdGl2ZSwgSSBzaG91bGQgYmFzZSBteSB3b3JrIGFyb3VuZCBgdmhjaV9yeF9sb29wYCBhbmQgYHZoY2lfdXJiX2RlcXVldWVgLiBMZXQmIzM5O3Mga2VlcCB0aG9zZSBhdCB0aGUgZm9yZWZyb250LgoKT2gsIGFuZCBgdmhjaV9zaHV0ZG93bl9jb25uZWN0aW9uYCBpcyBhc3NpZ25lZCB0byB0aGUgYC5zaHV0ZG93bmAgZmllbGQgaW4gdGhlIGB1c2JpcF9kZXZpY2VgIHN0cnVjdC4gSSBzaG91bGQgZGVmaW5pdGVseSBpbnZlc3RpZ2F0ZSB0aGF0IG9uZSBmdXJ0aGVyLCBzaW5jZSBpdCBsb29rcyB0byBiZSBhbiBpbXBvcnRhbnQgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhjaV9zaHV0ZG93bl9jb25uZWN0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvdXNiaXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM9MTAyNT1zdGF0aWMgdm9pZCB2aGNpX2RldmljZV91bmxpbmtfY2xlYW51cChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYpXG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDM4LSAqL1xuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzoxMDM5OnN0YXRpYyB2b2lkIHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbihzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZClcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMTA0MC17XG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDgzLVx0ICogTk9URTogdmhjaV9kZXF1ZXVlKCkgbXVzdCBiZSBjb25zaWRlcmVkIGNhcmVmdWxseS4gV2hlbiBzaHV0dGluZyBkb3duXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jOjEwODQ6XHQgKiBhIGNvbm5lY3Rpb24sIHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbigpIGV4cGVjdHMgdmhjaV9kZXF1ZXVlKClcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMTA4NS1cdCAqIGdpdmVzIGJhY2sgcHVzaGVkIHVyYnMgYW5kIGZyZWVzIHRoZWlyIHByaXZhdGUgZGF0YSBieSByZXF1ZXN0IG9mXG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYz0xMTI5PXN0YXRpYyB2b2lkIHZoY2lfZGV2aWNlX2luaXQoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMTE0NS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM6MTE0NjpcdHZkZXYtXHUwMDNldWQuZWhfb3BzLnNodXRkb3duID0gdmhjaV9zaHV0ZG93bl9jb25uZWN0aW9uO1xuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMTQ3LVx0dmRldi1cdTAwM2V1ZC5laF9vcHMucmVzZXQgPSB2aGNpX2RldmljZV9yZXNldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxOTcKCQkJCQkJCW91dHB1dDogMTc3CgkJCQkJCQl0aG91Z2h0czogNDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBVU0JJUCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGludG8gdGhpcyBgdXNiaXBgIGRyaXZlciBwYXRjaC4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGB2aGNpX3NodXRkb3duX2Nvbm5lY3Rpb25gIGlzIGFsc28gKm5vdCogaW5saW5lZC4gVGhhdCYjMzk7cyBhIHBvaW50IHRvIHJlbWVtYmVyLgoKVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZXF1aXJlZCBmb3IgdGhpcyBwYXRjaCBhcmU6IGBVU0JJUF9WSENJX0hDRGAsIGBVU0JJUF9DT1JFYCwgYFVTQmAsIGFuZCBgTkVUYC4gSG93ZXZlciwgdGhpbmtpbmcgYWJvdXQgaXQsIGBVU0JJUF9WSENJX0hDRGAgaGFzIGRlcGVuZGVuY2llcyBvbiBib3RoIGBVU0JJUF9DT1JFYCBhbmQgYFVTQmAuICBBbmQgZnVydGhlciBJIHJlbWVtYmVyIHRoYXQgYFVTQklQX0NPUkVgIGRlcGVuZHMgb24gYE5FVGAuIFNvLCByZWFsbHksIEkgY2FuIGp1c3Qgc3BlY2lmeSBgVVNCSVBfVkhDSV9IQ0RgIGFuZCBgVVNCSVBfQ09SRWAuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMuIE9rYXksIGl0IGxvb2tzIGxpa2UgdGhhdCBjb3ZlcnMgZXZlcnl0aGluZzogYFVTQklQX1ZIQ0lfSENEYCwgYFVTQklQX0NPUkVgLCBgVVNCYCwgYW5kIGBORVRgLgoKTGV0JiMzOTtzIHN1bW1hcml6ZSB0aGUga2V5IGFzcGVjdHMgb2YgdGhpcyBwYXRjaCBmb3Igb3VyIGZ1enppbmcgZWZmb3J0czoKCiogICAqKldvcnRoRnV6emluZzoqKiBZZXMsIGFic29sdXRlbHkuCiogICAqKlJlYXNvbmluZzoqKiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSBgdXNiX2hjZF9naXZlYmFja191cmJgIHdhcyBiZWluZyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgaW4gdGhlIGB1c2JpcGAgZHJpdmVyLiBJdCBtb2RpZmllcyBjb3JlIFVSQiBoYW5kbGluZyBmdW5jdGlvbnMgKGB2aGNpX3VyYl9kZXF1ZXVlYCwgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCwgYHZoY2lfcmVjdl9yZXRfdW5saW5rYCwgYHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdGApIHRvIGtlZXAgaW50ZXJydXB0cyBkaXNhYmxlZCBkdXJpbmcgdGhlIGdpdmViYWNrIHByb2Nlc3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYSB2aXJ0dWFsIFVTQiBjb250cm9sbGVyIGRyaXZlciwgYW5kIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBzaG91bGQgYmUgYWJsZSB0byByZWFjaCB0aGlzIGNvZGUuCiogICAqKkZvY3VzU3ltYm9sczoqKiBJJiMzOTttIHRoaW5raW5nIHdlIHNob3VsZCBmb2N1cyBvbiBgdmhjaV91cmJfZGVxdWV1ZWAsIGB2aGNpX3J4X2xvb3BgLCBhbmQgcG90ZW50aWFsbHkgYHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbmAuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFVTQklQX1ZIQ0lfSENEYCBhbmQgYFVTQklQX0NPUkVgLgoKTm93LCBhYm91dCB0aG9zZSBmb2N1cyBzeW1ib2xzLi4uIGB2aGNpX3J4X2xvb3BgIGlzIGxpa2VseSBhIGdvb2QgY2hvaWNlLiBJdCYjMzk7cyB0aGUgbWFpbiByZWNlaXZlIGxvb3AgZm9yIHRoZSB2aXJ0dWFsIFVTQiBjb250cm9sbGVyLCBzbyBpdCYjMzk7bGwgZ2V0IGEgbG90IG9mIGhpdHMgaWYgdGhlIGZ1enplciBpbnRlcmFjdHMgd2l0aCB0aGUgZHJpdmVyLiBCdXQgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdCwgdGhlIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb25zIGFmZmVjdGVkIGJ5IHRoZSBwYXRjaCBhcmUgYWN0dWFsbHkgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCBhbmQgYHZoY2lfcmVjdl9yZXRfdW5saW5rYC4gVGhlc2UgbWlnaHQgYmUgaW5saW5lZC4gU28sIGB2aGNpX3J4X2xvb3BgIGlzIHN0aWxsIHByb2JhYmx5IHRoZSBzYWZlc3QgYmV0IGZvciBtYXhpbXVtIGNvdmVyYWdlLiBCdXQgSSYjMzk7bGwgaW5jbHVkZSBgdmhjaV91cmJfZGVxdWV1ZWAgdG9vLCBqdXN0IGluIGNhc2UsIGJlY2F1c2UgdGhhdCBpcyBhbm90aGVyIGtleSBmdW5jdGlvbiByZWxhdGVkIHRvIFVSQiBoYW5kbGluZy4KCk9rYXksIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgc29saWQgcGxhbi4gTGV0JiMzOTtzIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JJUF9WSENJX0hDRCYjMzQ7LAogICAgJiMzNDtVU0JJUF9DT1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhjaV91cmJfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDt2aGNpX3J4X2xvb3AmIzM0OywKICAgICYjMzQ7dmhjaV9zaHV0ZG93bl9jb25uZWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAgd2FzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBpbiB0aGUgYHVzYmlwYCBkcml2ZXIuIEl0IG1vZGlmaWVzIGNvcmUgVVJCIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYHZoY2lfdXJiX2RlcXVldWVgLCBgdmhjaV9yZWN2X3JldF9zdWJtaXRgLCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLCBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCkgdG8ga2VlcCBpbnRlcnJ1cHRzIGRpc2FibGVkIGR1cmluZyB0aGUgZ2l2ZWJhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHZpcnR1YWwgVVNCIGNvbnRyb2xsZXIgZHJpdmVyIHRoYXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCSVBfVkhDSV9IQ0QmIzM0OywKICAgICYjMzQ7VVNCSVBfQ09SRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZoY2lfdXJiX2RlcXVldWUmIzM0OywKICAgICYjMzQ7dmhjaV9yeF9sb29wJiMzNDssCiAgICAmIzM0O3ZoY2lfc2h1dGRvd25fY29ubmVjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgdXNiX2hjZF9naXZlYmFja191cmJgIHdhcyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgaW4gdGhlIGB1c2JpcGAgZHJpdmVyLiBJdCBtb2RpZmllcyBjb3JlIFVSQiBoYW5kbGluZyBmdW5jdGlvbnMgKGB2aGNpX3VyYl9kZXF1ZXVlYCwgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCwgYHZoY2lfcmVjdl9yZXRfdW5saW5rYCwgYHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdGApIHRvIGtlZXAgaW50ZXJydXB0cyBkaXNhYmxlZCBkdXJpbmcgdGhlIGdpdmViYWNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSB2aXJ0dWFsIFVTQiBjb250cm9sbGVyIGRyaXZlciB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3BpbmxvY2sgb3BlcmF0aW9ucyAoYHNwaW5fdW5sb2NrX2lycXJlc3RvcmVgIHRvIGBzcGluX3VubG9ja2AgYW5kIGBzcGluX2xvY2tfaXJxc2F2ZWAgdG8gYHNwaW5fbG9ja2ApIHRvIGNoYW5nZSBob3cgSVJRIHN0YXRlIGlzIGhhbmRsZWQgYXJvdW5kIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAuIFRoaXMgaXMgYSBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBjaGFuZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGRlYWRsb2NrcywgSVJRIHN0YXRlIGNvcnJ1cHRpb24sIG9yIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGFuZCBpbmZvLWxlYWtzLCB3aGljaCBhcmUgbm90IHJlbGV2YW50IHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk1ZjQzYTQ0NGYxNWFmOTdiOTBlMGE4MjgwYzg5YTkyMWU4YWZkMjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyA4IDE5OjU4OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMKaW5kZXggMzllOGZhZjRjMThjZC4uYjQxNmQ4MjcxYWE3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jCkBAIC05NDAsOSAmIzQzOzk0MCw5IEBAIHN0YXRpYyBpbnQgdmhjaV91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpCiAJCSAqLwogCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChoY2QsIHVyYik7CiAKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7dmhjaS0mZ3Q7bG9jayk7CiAJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCB1cmItJmd0O3N0YXR1cyk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7dmhjaS0mZ3Q7bG9jayk7CiAKIAl9IGVsc2UgewogCQkvKiB0Y3AgY29ubmVjdGlvbiBpcyBhbGl2ZSAqLwpAQCAtMTAwOCwxMSAmIzQzOzEwMDgsMTEgQEAgc3RhdGljIHZvaWQgdmhjaV9jbGVhbnVwX3VubGlua19saXN0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKIAkJbGlzdF9kZWwoJmFtcDt1bmxpbmstJmd0O2xpc3QpOwogCiAJCXNwaW5fdW5sb2NrKCZhbXA7dmRldi0mZ3Q7cHJpdl9sb2NrKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7dmhjaS0mZ3Q7bG9jayk7CiAKIAkJdXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHVyYi0mZ3Q7c3RhdHVzKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO3ZoY2ktJmd0O2xvY2spOwogCQlzcGluX2xvY2soJmFtcDt2ZGV2LSZndDtwcml2X2xvY2spOwogCiAJCWtmcmVlKHVubGluayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMgYi9kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMKaW5kZXggYTY3OGU3Yzg5ODM3NS4uNmRiM2E1YTczNjAwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYwpAQCAtMTAyLDEwICYjNDM7MTAyLDEzIEBAIHN0YXRpYyB2b2lkIHZoY2lfcmVjdl9yZXRfc3VibWl0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwogCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt2aGNpLSZndDtsb2NrKTsKIAogCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYiwgdXJiLSZndDtzdGF0dXMpOwogCiYjNDM7CXNwaW5fbG9jaygmYW1wO3ZoY2ktJmd0O2xvY2spOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwogCXVzYmlwX2RiZ192aGNpX3J4KCYjMzQ7TGVhdmVcbiYjMzQ7KTsKIH0KIApAQCAtMTczLDkgJiM0MzsxNzYsMTIgQEAgc3RhdGljIHZvaWQgdmhjaV9yZWN2X3JldF91bmxpbmsoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LAogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwogCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCh2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDt2aGNpLSZndDtsb2NrKTsKIAogCQl1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIsIHVyYi0mZ3Q7c3RhdHVzKTsKJiM0MzsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO3ZoY2ktJmd0O2xvY2spOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKIAl9CiAKIAlrZnJlZSh1bmxpbmspOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0OAoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiA5NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMb2NraW5nIENoYW5nZXMgaW4gVVNCL0lQIFZpcnR1YWwgSG9zdCBDb250cm9sbGVyIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFVTQi9JUCB2aXJ0dWFsIGhvc3QgY29udHJvbGxlci4gSXQmIzM5O3MgdG91Y2hpbmcgYHZoY2lfaGNkLmNgIGFuZCBgdmhjaV9yeC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgbG9ja2luZyBtZWNoYW5pc21zLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHN3aXRjaGluZyBmcm9tIHRoZSBgc3Bpbl9sb2NrX2lycXNhdmVgL2BzcGluX3VubG9ja19pcnFyZXN0b3JlYCBwYWlyIHRvIHBsYWluIGBzcGluX2xvY2tgL2BzcGluX3VubG9ja2AgaW4gYSBmZXcgc3BvdHM6IGB2aGNpX3VyYl9kZXF1ZXVlYCwgYHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdGAsIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAsIGFuZCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIGEgY2hhbmdlIGluIGhvdyBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIHRoZSBzcGlubG9ja3MuCgpMZXQmIzM5O3MgZHJpbGwgZG93biBvbiBgdmhjaV91cmJfZGVxdWV1ZWAgYXMgYSByZXByZXNlbnRhdGl2ZSBleGFtcGxlLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIHRvIGRvOgpgYGBjCgkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKCQl1c2JfaGNkX2dpdmViYWNrX3VyYihoY2QsIHVyYiwgdXJiLSZndDtzdGF0dXMpOwoJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwpgYGAKClRoZSBwYXRjaCBjaGFuZ2VzIHRoaXMgdG86CmBgYGMKCQlzcGluX3VubG9jaygmYW1wO3ZoY2ktJmd0O2xvY2spOwoJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCB1cmItJmd0O3N0YXR1cyk7CgkJc3Bpbl9sb2NrKCZhbXA7dmhjaS0mZ3Q7bG9jayk7CmBgYAoKUmlnaHQsIHNvIGBzcGluX2xvY2tfaXJxc2F2ZWAgZGlzYWJsZXMgaW50ZXJydXB0cyBhbmQgc2F2ZXMgdGhlIHByZXZpb3VzIGludGVycnVwdCBzdGF0ZS4gIGBzcGluX3VubG9ja19pcnFyZXN0b3JlYCByZXN0b3JlcyB0aGUgaW50ZXJydXB0cyB0byB0aGUgc3RhdGUgdGhleSB3ZXJlIGluIGJlZm9yZSB0aGUgYHNwaW5fbG9ja19pcnFzYXZlYCBjYWxsLiAgVGhlIGNoYW5nZSBpcyBza2lwcGluZyB0aGUgSVJRIHN0YXRlIHNhdmluZyBhbmQgcmVzdG9yaW5nLiBUaGlzIGxpa2VseSBtZWFucyB0aGF0IGVpdGhlciB0aGUgY2FsbGluZyBmdW5jdGlvbiBpcyBhbHJlYWR5IG1hbmFnaW5nIHRoZSBJUlEgc3RhdGUsIG9yIHRoZSBpbnRlbnRpb24gaXMgdG8ga2VlcCBpbnRlcnJ1cHRzIGRpc2FibGVkIGFjcm9zcyB0aGUgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCBjYWxsLiAgSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgZGlzYWJsaW5nIGludGVycnVwdHMgZHVyaW5nIHRoZSBjYWxsIHRvIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAuIFRoZSBsb2NraW5nIG9yZGVyIGlzIHVuY2hhbmdlZC4gVGhlIElSUSBzdGF0ZSBjb3VsZCBiZSByZXN0b3JlZCBsYXRlciwgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBzbmlwcGV0LgoKVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCAqb25seSogbW9kaWZpZXMgdGhlIGxvY2tpbmcgcHJpbWl0aXZlcy4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBUaGVyZWZvcmUsIHRoaXMgaXMgc29sZWx5IGEgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgZml4LCBvciBwb3RlbnRpYWxseSBhIGJ1Zy4KClRoaXMgc2NyZWFtcyBMT0NLREVQIG9yIEtBU0FOIHRlcnJpdG9yeSwgbWF5YmUgYSByYWNlIGNvbmRpdGlvbiBvciBkZWFkbG9jay4gS01TQU4sIHdoaWNoIGlzIGZvY3VzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gVGhlIHBvdGVudGlhbCBwcm9ibGVtcyBoZXJlIGFyZSBhYm91dCBjb3JyZWN0IGxvY2tpbmcgYW5kIElSUSBtYW5hZ2VtZW50LCBub3QgdW5pbml0aWFsaXplZCBkYXRhIHVzYWdlLiBJIG5lZWQgdG8gbm90ZSB0aGF0IHRoaXMgY2hhbmdlcyBob3cgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCBpcyBjYWxsZWQgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgaW50ZXJydXB0cywgd2hpY2ggaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHdoZW4gYW5hbHl6aW5nIHRoZSBvdmVyYWxsIGNhbGwgY2hhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNwaW5sb2NrIG9wZXJhdGlvbnMgKGBzcGluX3VubG9ja19pcnFyZXN0b3JlYCB0byBgc3Bpbl91bmxvY2tgIGFuZCBgc3Bpbl9sb2NrX2lycXNhdmVgIHRvIGBzcGluX2xvY2tgKSB0byBjaGFuZ2UgaG93IElSUSBzdGF0ZSBpcyBoYW5kbGVkIGFyb3VuZCBgdXNiX2hjZF9naXZlYmFja191cmJgLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY2hhbmdlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBkZWFkbG9ja3MsIElSUSBzdGF0ZSBjb3JydXB0aW9uLCBvciByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBhbmQgaW5mby1sZWFrcywgd2hpY2ggYXJlIG5vdCByZWxldmFudCB0byB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3BpbmxvY2sgb3BlcmF0aW9ucyAoYHNwaW5fdW5sb2NrX2lycXJlc3RvcmVgIHRvIGBzcGluX3VubG9ja2AgYW5kIGBzcGluX2xvY2tfaXJxc2F2ZWAgdG8gYHNwaW5fbG9ja2ApIHRvIGNoYW5nZSBob3cgSVJRIHN0YXRlIGlzIGhhbmRsZWQgYXJvdW5kIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAuIFRoaXMgaXMgYSBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBjaGFuZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGRlYWRsb2NrcywgSVJRIHN0YXRlIGNvcnJ1cHRpb24sIG9yIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGFuZCBpbmZvLWxlYWtzLCB3aGljaCBhcmUgbm90IHJlbGV2YW50IHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE5OjU4OjE1LjE1NTg5NTc0M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NjI5NzgxNjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQklQX1ZIQ0lfSENEXCIsXG4gICAgXCJVU0JJUF9DT1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhjaV91cmJfZGVxdWV1ZVwiLFxuICAgIFwidmhjaV9yeF9sb29wXCIsXG4gICAgXCJ2aGNpX3NodXRkb3duX2Nvbm5lY3Rpb25cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNwaW5sb2NrIG9wZXJhdGlvbnMgKGBzcGluX3VubG9ja19pcnFyZXN0b3JlYCB0byBgc3Bpbl91bmxvY2tgIGFuZCBgc3Bpbl9sb2NrX2lycXNhdmVgIHRvIGBzcGluX2xvY2tgKSB0byBjaGFuZ2UgaG93IElSUSBzdGF0ZSBpcyBoYW5kbGVkIGFyb3VuZCBgdXNiX2hjZF9naXZlYmFja191cmJgLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY2hhbmdlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBkZWFkbG9ja3MsIElSUSBzdGF0ZSBjb3JydXB0aW9uLCBvciByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBhbmQgaW5mby1sZWFrcywgd2hpY2ggYXJlIG5vdCByZWxldmFudCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAgd2FzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBpbiB0aGUgYHVzYmlwYCBkcml2ZXIuIEl0IG1vZGlmaWVzIGNvcmUgVVJCIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYHZoY2lfdXJiX2RlcXVldWVgLCBgdmhjaV9yZWN2X3JldF9zdWJtaXRgLCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLCBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCkgdG8ga2VlcCBpbnRlcnJ1cHRzIGRpc2FibGVkIGR1cmluZyB0aGUgZ2l2ZWJhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHZpcnR1YWwgVVNCIGNvbnRyb2xsZXIgZHJpdmVyIHRoYXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTk6NTg6MTUuMTU1OTAxNTAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTA2NTMwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NWY0M2E0NDRmMTVhZjk3YjkwZTBhODI4MGM4OWE5MjFlOGFmZDIyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDggMTk6NTg6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmNcXG5pbmRleCAzOWU4ZmFmNGMxOGNkLi5iNDE2ZDgyNzFhYTdmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmNcXG4rKysgYi9kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jXFxuQEAgLTk0MCw5ICs5NDAsOSBAQCBzdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0dXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaGNkLCB1cmIpO1xcbiBcXG4tXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dmhjaS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dmhjaS1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCB1cmItXFx1MDAzZXN0YXR1cyk7XFxuLVxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2dmhjaS1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKiB0Y3AgY29ubmVjdGlvbiBpcyBhbGl2ZSAqL1xcbkBAIC0xMDA4LDExICsxMDA4LDExIEBAIHN0YXRpYyB2b2lkIHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXFxuIFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZ1bmxpbmstXFx1MDAzZWxpc3QpO1xcbiBcXG4gXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnZkZXYtXFx1MDAzZXByaXZfbG9jayk7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0XFx0dXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHVyYi1cXHUwMDNlc3RhdHVzKTtcXG4gXFxuLVxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2dmhjaS1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dmRldi1cXHUwMDNlcHJpdl9sb2NrKTtcXG4gXFxuIFxcdFxcdGtmcmVlKHVubGluayk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguY1xcbmluZGV4IGE2NzhlN2M4OTgzNzUuLjZkYjNhNWE3MzYwMDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jXFxuKysrIGIvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jXFxuQEAgLTEwMiwxMCArMTAyLDEzIEBAIHN0YXRpYyB2b2lkIHZoY2lfcmVjdl9yZXRfc3VibWl0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldixcXG4gXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYik7XFxuLVxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0dXNiX2hjZF9naXZlYmFja191cmIodmhjaV9oY2RfdG9faGNkKHZoY2lfaGNkKSwgdXJiLCB1cmItXFx1MDAzZXN0YXR1cyk7XFxuIFxcbitcXHRzcGluX2xvY2soXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2spO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbiBcXHR1c2JpcF9kYmdfdmhjaV9yeChcXFwiTGVhdmVcXFxcblxcXCIpO1xcbiB9XFxuIFxcbkBAIC0xNzMsOSArMTc2LDEyIEBAIHN0YXRpYyB2b2lkIHZoY2lfcmVjdl9yZXRfdW5saW5rKHN0cnVjdCB2aGNpX2RldmljZSAqdmRldixcXG4gXFxuIFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdFxcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYik7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0XFx0dXNiX2hjZF9naXZlYmFja191cmIodmhjaV9oY2RfdG9faGNkKHZoY2lfaGNkKSwgdXJiLCB1cmItXFx1MDAzZXN0YXR1cyk7XFxuK1xcbitcXHRcXHRzcGluX2xvY2soXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2spO1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdH1cXG4gXFxuIFxcdGtmcmVlKHVubGluayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE5OjU4OjE1LjY0NzM3MzM2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjkzMDQ4ODM4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCSVBfVkhDSV9IQ0RcIixcbiAgICBcIlVTQklQX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aGNpX3VyYl9kZXF1ZXVlXCIsXG4gICAgXCJ2aGNpX3J4X2xvb3BcIixcbiAgICBcInZoY2lfc2h1dGRvd25fY29ubmVjdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAgd2FzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBpbiB0aGUgYHVzYmlwYCBkcml2ZXIuIEl0IG1vZGlmaWVzIGNvcmUgVVJCIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYHZoY2lfdXJiX2RlcXVldWVgLCBgdmhjaV9yZWN2X3JldF9zdWJtaXRgLCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLCBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCkgdG8ga2VlcCBpbnRlcnJ1cHRzIGRpc2FibGVkIGR1cmluZyB0aGUgZ2l2ZWJhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHZpcnR1YWwgVVNCIGNvbnRyb2xsZXIgZHJpdmVyIHRoYXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTVmNDNhNDQ0ZjE1YWY5N2I5MGUwYTgyODBjODlhOTIxZThhZmQyMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMTk6NTg6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jIGIvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuY1xuaW5kZXggMzllOGZhZjRjMThjZC4uYjQxNmQ4MjcxYWE3ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmNcbisrKyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmNcbkBAIC05NDAsOSArOTQwLDkgQEAgc3RhdGljIGludCB2aGNpX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cylcbiBcdFx0ICovXG4gXHRcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTtcbiBcbi1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiBcdFx0dXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHVyYi1cdTAwM2VzdGF0dXMpO1xuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNnZoY2ktXHUwMDNlbG9jayk7XG4gXG4gXHR9IGVsc2Uge1xuIFx0XHQvKiB0Y3AgY29ubmVjdGlvbiBpcyBhbGl2ZSAqL1xuQEAgLTEwMDgsMTEgKzEwMDgsMTEgQEAgc3RhdGljIHZvaWQgdmhjaV9jbGVhbnVwX3VubGlua19saXN0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldixcbiBcdFx0bGlzdF9kZWwoXHUwMDI2dW5saW5rLVx1MDAzZWxpc3QpO1xuIFxuIFx0XHRzcGluX3VubG9jayhcdTAwMjZ2ZGV2LVx1MDAzZXByaXZfbG9jayk7XG4tXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZoY2ktXHUwMDNlbG9jayk7XG4gXG4gXHRcdHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCB1cmItXHUwMDNlc3RhdHVzKTtcbiBcbi1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdHNwaW5fbG9jayhcdTAwMjZ2aGNpLVx1MDAzZWxvY2spO1xuIFx0XHRzcGluX2xvY2soXHUwMDI2dmRldi1cdTAwM2Vwcml2X2xvY2spO1xuIFxuIFx0XHRrZnJlZSh1bmxpbmspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguY1xuaW5kZXggYTY3OGU3Yzg5ODM3NS4uNmRiM2E1YTczNjAwOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguY1xuKysrIGIvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jXG5AQCAtMTAyLDEwICsxMDIsMTMgQEAgc3RhdGljIHZvaWQgdmhjaV9yZWN2X3JldF9zdWJtaXQoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LFxuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHR1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCh2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIpO1xuLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnZoY2ktXHUwMDNlbG9jayk7XG4gXG4gXHR1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIsIHVyYi1cdTAwM2VzdGF0dXMpO1xuIFxuK1x0c3Bpbl9sb2NrKFx1MDAyNnZoY2ktXHUwMDNlbG9jayk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuIFx0dXNiaXBfZGJnX3ZoY2lfcngoXCJMZWF2ZVxcblwiKTtcbiB9XG4gXG5AQCAtMTczLDkgKzE3NiwxMiBAQCBzdGF0aWMgdm9pZCB2aGNpX3JlY3ZfcmV0X3VubGluayhzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXG4gXG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHR1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCh2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIpO1xuLVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZ2aGNpLVx1MDAzZWxvY2spO1xuIFxuIFx0XHR1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIsIHVyYi1cdTAwM2VzdGF0dXMpO1xuK1xuK1x0XHRzcGluX2xvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdH1cbiBcbiBcdGtmcmVlKHVubGluayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODoxNS42NDczNzUwN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4OTMyMTI1MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVVNCL0lQIFZIQ0kgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFVTQi9JUCBWSENJIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGB2aGNpX2hjZC5jYCBhbmQgYHZoY2lfcnguY2AuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBzb21lb25lJ3MgbWFkZSBzb21lIGNoYW5nZXMgdG8gdGhlIHNwaW5sb2NrL3VubG9jayBvcGVyYXRpb25zLCB3aGljaCBhbHdheXMgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gVGhleSd2ZSByZXBsYWNlZCBgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZWAgd2l0aCBqdXN0IGBzcGluX3VubG9ja2AgYW5kIGBzcGluX2xvY2tfaXJxc2F2ZWAgd2l0aCBgc3Bpbl9sb2NrYCBpbiBgdmhjaV91cmJfZGVxdWV1ZWAgYW5kIGB2aGNpX2NsZWFudXBfdW5saW5rX2xpc3RgLiAgQWxzbyBpbiBgdmhjaV9yZWN2X3JldF9zdWJtaXRgIGFuZCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLCB0aGV5IGFyZSBwbGF5aW5nIHdpdGggdGhlIG9yZGVyIG9mIGBzcGluX3VubG9ja2AsIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAgYW5kIGBzcGluX2xvY2tgIGFnYWluLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHRoZXkgdHJ5aW5nIHRvIGF2b2lkIGEgc2NlbmFyaW8gd2hlcmUgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCBnZXRzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQ/IE9yLCBpcyB0aGlzIGZpeGluZyBhIGJ1ZyB3aGVyZSBpbnRlcnJ1cHRzIHdlcmUgaW5jb3JyZWN0bHkgcmVzdG9yZWQgYmVmb3JlIGEgZnVuY3Rpb24gdGhhdCBleHBlY3RzIHRoZW0gdG8gYmUgZGlzYWJsZWQ/ICBgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZWAgaXMgc3VwcG9zZWQgdG8gcmVzdG9yZSBpbnRlcnJ1cHRzIHRvIHRoZSBzdGF0ZSB0aGV5IHdlcmUgKmJlZm9yZSogdGhlIGNvcnJlc3BvbmRpbmcgYHNwaW5fbG9ja19pcnFzYXZlYCwgc28gaWYgd2UganVzdCBnbyB3aXRoIGBzcGluX3VubG9ja2Agd2UncmUgbGVhdmluZyBpbnRlcnJ1cHRzIGRpc2FibGVkLCByaWdodD9cblxuVGhpbmtpbmcgbW9yZSBkZWVwbHksIGB2aGNpX3VyYl9kZXF1ZXVlYCBzdGFydHMgd2l0aCBgc3Bpbl9sb2NrX2lycXNhdmVgLCB3aGljaCBkaXNhYmxlcyBpbnRlcnJ1cHRzLiBJZiB3ZSBjaGFuZ2UgaXQgdG8gdXNpbmcgYHNwaW5fdW5sb2NrYCBsYXRlciwgd2UncmUgbGVhdmluZyBpbnRlcnJ1cHRzIGRpc2FibGVkLiBUaGVuIHdlJ3JlIGNhbGxpbmcgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCB3aXRoIGludGVycnVwdHMgKnN0aWxsKiBkaXNhYmxlZC4gIEFuZCAqdGhlbiogd2UgY2FsbCBgc3Bpbl9sb2NrYCBhbmQsIGZpbmFsbHksIGBzcGluX3VubG9ja19pcnFyZXN0b3JlYCBiZWZvcmUgd2UgZXhpdCB0aGUgZnVuY3Rpb24uICBTbyBub3cgaXQncyBjbGVhcjogYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCAqaXMqIGJlaW5nIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgYmVjYXVzZSBvZiB0aGVzZSBjaGFuZ2VzLiBJJ2QgYmV0dGVyIGNvbmZpcm0gdGhpcyBieSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlIGZvciBgdmhjaV91cmJfZGVxdWV1ZWAgaW4gYHZoY2lfaGNkLmNgIHRvIG1ha2Ugc3VyZSB0aGVyZSdzIG5vIG1pc3VuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODoyMy41NDA1OTA3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc2MDE0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aGNpX3VyYl9kZXF1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYz0zNz1zdGF0aWMgaW50IHZoY2lfdXJiX2VucXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLFxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMzgtXFx0XFx0XFx0ICAgIGdmcF90IG1lbV9mbGFncyk7XFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzozOTpzdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTtcXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTQwLXN0YXRpYyBpbnQgdmhjaV9zdGFydChzdHJ1Y3QgdXNiX2hjZCAqdmhjaV9oY2QpO1xcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYz02OTc9c3RhdGljIGludCB2aGNpX3VyYl9lbnF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgZ2ZwX3QgbWVtX2ZsYWdzKVxcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy04OTQtICovXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzo4OTU6c3RhdGljIGludCB2aGNpX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cylcXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTg5Ni17XFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTEzNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgdmhjaV9oY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTEzNTEtXFx0LnVyYl9lbnF1ZXVlXFx0PSB2aGNpX3VyYl9lbnF1ZXVlLFxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM6MTM1MjpcXHQudXJiX2RlcXVldWVcXHQ9IHZoY2lfdXJiX2RlcXVldWUsXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMzUzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODoyMy41ODgzNTY0N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDA3MjU0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIHZoY2lfdXJiX2RlcXVldWUgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gSSdtIGZvY3VzaW5nIG15IGF0dGVudGlvbiBvbiBgdmhjaV91cmJfZGVxdWV1ZWAsIHNwZWNpZmljYWxseSBpbiBgZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuY2AuIEknbSBjdXJpb3VzIGFib3V0IHRoZSBpbnRyaWNhY2llcyBvZiBVU0IvSVAncyB2aXJ0dWFsIGhvc3QgY29udHJvbGxlciBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBkZS1xdWV1aW5nLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIG1hbmFnaW5nIHRoZSBsaWZlY3ljbGUgb2YgcmVxdWVzdHMgb24gdGhlIHZpcnR1YWwgVVNCIGJ1cy4gTXkgbWVudGFsIGNoZWNrbGlzdCBpbmNsdWRlcyBxdWVzdGlvbnMgYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIFVTQiBjb3JlLCBob3cgaXQgaGFuZGxlcyBlcnJvciBjb25kaXRpb25zLCBhbmQgaG93IGl0IGVuc3VyZXMgcHJvcGVyIHN5bmNocm9uaXphdGlvbi4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGEgY3JpdGljYWwgcG9pbnQgb2YgY29uY3VycmVuY3kgY29udHJvbCwgZXNwZWNpYWxseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciByYWNlIGNvbmRpdGlvbnMgaGVyZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNzksIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODoyNy41MjkwODQzMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg5NSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4OTU6XFx0c3RhdGljIGludCB2aGNpX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cylcXG4gODk2OlxcdHtcXG4gODk3OlxcdFxcdHN0cnVjdCB2aGNpX2hjZCAqdmhjaV9oY2QgPSBoY2RfdG9fdmhjaV9oY2QoaGNkKTtcXG4gODk4OlxcdFxcdHN0cnVjdCB2aGNpICp2aGNpID0gdmhjaV9oY2QtXFx1MDAzZXZoY2k7XFxuIDg5OTpcXHRcXHRzdHJ1Y3QgdmhjaV9wcml2ICpwcml2O1xcbiA5MDA6XFx0XFx0c3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2O1xcbiA5MDE6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gOTAyOlxcdFxcbiA5MDM6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gOTA0OlxcdFxcbiA5MDU6XFx0XFx0cHJpdiA9IHVyYi1cXHUwMDNlaGNwcml2O1xcbiA5MDY6XFx0XFx0aWYgKCFwcml2KSB7XFxuIDkwNzpcXHRcXHRcXHQvKiBVUkIgd2FzIG5ldmVyIGxpbmtlZCEgb3Igd2lsbCBiZSBzb29uIGdpdmVuIGJhY2sgYnlcXG4gOTA4OlxcdFxcdFxcdCAqIHZoY2lfcnguICovXFxuIDkwOTpcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIDkxMDpcXHRcXHRcXHRyZXR1cm4gLUVJRFJNO1xcbiA5MTE6XFx0XFx0fVxcbiA5MTI6XFx0XFxuIDkxMzpcXHRcXHR7XFxuIDkxNDpcXHRcXHRcXHRpbnQgcmV0ID0gMDtcXG4gOTE1OlxcdFxcbiA5MTY6XFx0XFx0XFx0cmV0ID0gdXNiX2hjZF9jaGVja191bmxpbmtfdXJiKGhjZCwgdXJiLCBzdGF0dXMpO1xcbiA5MTc6XFx0XFx0XFx0aWYgKHJldCkge1xcbiA5MTg6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dmhjaS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiA5MTk6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gOTIwOlxcdFxcdFxcdH1cXG4gOTIxOlxcdFxcdH1cXG4gOTIyOlxcdFxcbiA5MjM6XFx0XFx0IC8qIHNlbmQgdW5saW5rIHJlcXVlc3QgaGVyZT8gKi9cXG4gOTI0OlxcdFxcdHZkZXYgPSBwcml2LVxcdTAwM2V2ZGV2O1xcbiA5MjU6XFx0XFxuIDkyNjpcXHRcXHRpZiAoIXZkZXYtXFx1MDAzZXVkLnRjcF9zb2NrZXQpIHtcXG4gOTI3OlxcdFxcdFxcdC8qIHRjcCBjb25uZWN0aW9uIGlzIGNsb3NlZCAqL1xcbiA5Mjg6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ2ZGV2LVxcdTAwM2Vwcml2X2xvY2spO1xcbiA5Mjk6XFx0XFxuIDkzMDpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2cHJpdi1cXHUwMDNlbGlzdCk7XFxuIDkzMTpcXHRcXHRcXHRrZnJlZShwcml2KTtcXG4gOTMyOlxcdFxcdFxcdHVyYi1cXHUwMDNlaGNwcml2ID0gTlVMTDtcXG4gOTMzOlxcdFxcbiA5MzQ6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnZkZXYtXFx1MDAzZXByaXZfbG9jayk7XFxuIDkzNTpcXHRcXG4gOTM2OlxcdFxcdFxcdC8qXFxuIDkzNzpcXHRcXHRcXHQgKiBJZiB0Y3AgY29ubmVjdGlvbiBpcyBhbGl2ZSwgd2UgaGF2ZSBzZW50IENNRF9VTkxJTksuXFxuIDkzODpcXHRcXHRcXHQgKiB2aGNpX3J4IHdpbGwgcmVjZWl2ZSBSRVRfVU5MSU5LIGFuZCBnaXZlIGJhY2sgdGhlIFVSQi5cXG4gOTM5OlxcdFxcdFxcdCAqIE90aGVyd2lzZSwgd2UgZ2l2ZSBiYWNrIGl0IGhlcmUuXFxuIDk0MDpcXHRcXHRcXHQgKi9cXG4gOTQxOlxcdFxcdFxcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTtcXG4gOTQyOlxcdFxcbiA5NDM6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2spO1xcbiA5NDQ6XFx0XFx0XFx0dXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHVyYi1cXHUwMDNlc3RhdHVzKTtcXG4gOTQ1OlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dmhjaS1cXHUwMDNlbG9jayk7XFxuIDk0NjpcXHRcXG4gOTQ3OlxcdFxcdH0gZWxzZSB7XFxuIDk0ODpcXHRcXHRcXHQvKiB0Y3AgY29ubmVjdGlvbiBpcyBhbGl2ZSAqL1xcbiA5NDk6XFx0XFx0XFx0c3RydWN0IHZoY2lfdW5saW5rICp1bmxpbms7XFxuIDk1MDpcXHRcXG4gOTUxOlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dmRldi1cXHUwMDNlcHJpdl9sb2NrKTtcXG4gOTUyOlxcdFxcbiA5NTM6XFx0XFx0XFx0Lyogc2V0dXAgQ01EX1VOTElOSyBwZHUgKi9cXG4gOTU0OlxcdFxcdFxcdHVubGluayA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2aGNpX3VubGluaywgR0ZQX0FUT01JQyk7XFxuIDk1NTpcXHRcXHRcXHRpZiAoIXVubGluaykge1xcbiA5NTY6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnZkZXYtXFx1MDAzZXByaXZfbG9jayk7XFxuIDk1NzpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIDk1ODpcXHRcXHRcXHRcXHR1c2JpcF9ldmVudF9hZGQoXFx1MDAyNnZkZXYtXFx1MDAzZXVkLCBWREVWX0VWRU5UX0VSUk9SX01BTExPQyk7XFxuIDk1OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gOTYwOlxcdFxcdFxcdH1cXG4gOTYxOlxcdFxcbiA5NjI6XFx0XFx0XFx0dW5saW5rLVxcdTAwM2VzZXFudW0gPSBhdG9taWNfaW5jX3JldHVybihcXHUwMDI2dmhjaV9oY2QtXFx1MDAzZXNlcW51bSk7XFxuIDk2MzpcXHRcXHRcXHRpZiAodW5saW5rLVxcdTAwM2VzZXFudW0gPT0gMHhmZmZmKVxcbiA5NjQ6XFx0XFx0XFx0XFx0ZGV2X2luZm8oaGNkX2RldihoY2QpLCBcXFwic2VxbnVtIG1heFxcXFxuXFxcIik7XFxuIDk2NTpcXHRcXG4gOTY2OlxcdFxcdFxcdHVubGluay1cXHUwMDNldW5saW5rX3NlcW51bSA9IHByaXYtXFx1MDAzZXNlcW51bTtcXG4gOTY3OlxcdFxcbiA5Njg6XFx0XFx0XFx0Lyogc2VuZCBjbWRfdW5saW5rIGFuZCB0cnkgdG8gY2FuY2VsIHRoZSBwZW5kaW5nIFVSQiBpbiB0aGVcXG4gOTY5OlxcdFxcdFxcdCAqIHBlZXIgKi9cXG4gOTcwOlxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnVubGluay1cXHUwMDNlbGlzdCwgXFx1MDAyNnZkZXYtXFx1MDAzZXVubGlua190eCk7XFxuIDk3MTpcXHRcXHRcXHR3YWtlX3VwKFxcdTAwMjZ2ZGV2LVxcdTAwM2V3YWl0cV90eCk7XFxuIDk3MjpcXHRcXG4gOTczOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2ZGV2LVxcdTAwM2Vwcml2X2xvY2spO1xcbiA5NzQ6XFx0XFx0fVxcbiA5NzU6XFx0XFxuIDk3NjpcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIDk3NzpcXHRcXG4gOTc4OlxcdFxcdHVzYmlwX2RiZ192aGNpX2hjKFxcXCJsZWF2ZVxcXFxuXFxcIik7XFxuIDk3OTpcXHRcXHRyZXR1cm4gMDtcXG4gOTgwOlxcdH1cXG4gOTgxOlxcdFxcbiA5ODI6XFx0c3RhdGljIHZvaWQgdmhjaV9jbGVhbnVwX3VubGlua19saXN0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldixcXG4gOTgzOlxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnVubGlua19saXN0KVxcbiA5ODQ6XFx0e1xcbiA5ODU6XFx0XFx0c3RydWN0IHZoY2lfaGNkICp2aGNpX2hjZCA9IHZkZXZfdG9fdmhjaV9oY2QodmRldik7XFxuIDk4NjpcXHRcXHRzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gdmhjaV9oY2RfdG9faGNkKHZoY2lfaGNkKTtcXG4gOTg3OlxcdFxcdHN0cnVjdCB2aGNpICp2aGNpID0gdmhjaV9oY2QtXFx1MDAzZXZoY2k7XFxuIDk4ODpcXHRcXHRzdHJ1Y3QgdmhjaV91bmxpbmsgKnVubGluaywgKnRtcDtcXG4gOTg5OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIDk5MDpcXHRcXG4gOTkxOlxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIDk5MjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnZkZXYtXFx1MDAzZXByaXZfbG9jayk7XFxuIDk5MzpcXHRcXG4gOTk0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bmxpbmssIHRtcCwgdW5saW5rX2xpc3QsIGxpc3QpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTk6NTg6MjcuNTI5MjExNTMxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODAzMjQyNDQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZoY2lfdXJiX2RlcXVldWUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgdmhjaV91cmJfZGVxdWV1ZWAgd2l0aGluIHRoZSBgdmhjaV9oY2RgIGRyaXZlci4gSXQncyBtYWtpbmcgYSBjcnVjaWFsIGNoYW5nZSBhcm91bmQgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYC4gU3BlY2lmaWNhbGx5LCBpdCdzIHN3YXBwaW5nIGBzcGluX3VubG9ja19pcnFyZXN0b3JlYCBhbmQgYHNwaW5fbG9ja19pcnFzYXZlYCB3aXRoIHRoZWlyIHNpbXBsZXIgYHNwaW5fdW5sb2NrYCBhbmQgYHNwaW5fbG9ja2AgY291bnRlcnBhcnRzLCByZXNwZWN0aXZlbHkuIFRoZSBkaWZmZXJlbmNlIGlzIHRoZSBcImlycVwiIGhhbmRsaW5nIOKAkyB0aGVzZSBuZXcgY2FsbHMgbGVhdmUgaW50ZXJydXB0cyBkaXNhYmxlZCBkdXJpbmcgdGhlIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAgY2FsbC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBob3cgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCBpcyAqc3VwcG9zZWQqIHRvIGJlaGF2ZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIHNwZWNpZmljYWxseSB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gZXhwZWN0cyBpbnRlcnJ1cHRzIHRvIGJlIGRpc2FibGVkLiBPaCwgaG9sZCBvbi4uLiBsZXQgbWUgY2hlY2sgdGhlIGRvY3VtZW50YXRpb24hIEFoLCB0aGVyZSBpdCBpczogXCJUaGlzIGZ1bmN0aW9uICptdXN0KiBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLlwiIEJpbmdvLlxuXG5TbywgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBmaXhpbmcgYSBidWcuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSBjYWxsaW5nIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQsIHdoaWNoIGNvdWxkIGxlYWQgdG8gZGVhZGxvY2tzIG9yIG90aGVyIG5hc3R5IHJhY2UgY29uZGl0aW9ucy4gSSBjYW4gc2VlIGhvdyB0aGF0IGNvdWxkIGJlIHByb2JsZW1hdGljIGluIHRoZSBgdXNiaXBgIGRyaXZlci4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXggcmVhbGx5LCBidXQgYSBuZWNlc3Nhcnkgb25lIHRvIGVuc3VyZSB0aGUgZHJpdmVyJ3Mgcm9idXN0bmVzcy5cblxuSSBzaG91bGQgcHJvYmFibHkgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCBgdmhjaV9yZWN2X3JldF9zdWJtaXRgIGluIGBkcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgaW50ZXJhY3Rpb25zLiBJdCdzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGZsb3cgb2YgY29udHJvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk5MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE5OjU4OjM1LjU2MTYzODc5NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTU6XFx0XFx0aWYgKHVzYmlwX2RiZ19mbGFnX3ZoY2lfcngpXFxuICA5NjpcXHRcXHRcXHR1c2JpcF9kdW1wX3VyYih1cmIpO1xcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHRpZiAodXJiLVxcdTAwM2VudW1fc2dzKVxcbiAgOTk6XFx0XFx0XFx0dXJiLVxcdTAwM2V0cmFuc2Zlcl9mbGFncyBcXHUwMDI2PSB+VVJCX0RNQV9NQVBfU0c7XFxuIDEwMDpcXHRcXG4gMTAxOlxcdFxcdHVzYmlwX2RiZ192aGNpX3J4KFxcXCJub3cgZ2l2ZWJhY2sgdXJiICV1XFxcXG5cXFwiLCBwZHUtXFx1MDAzZWJhc2Uuc2VxbnVtKTtcXG4gMTAyOlxcdFxcbiAxMDM6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gMTA0OlxcdFxcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYik7XFxuIDEwNTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dmhjaS1cXHUwMDNlbG9jayk7XFxuIDEwNjpcXHRcXG4gMTA3OlxcdFxcdHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYiwgdXJiLVxcdTAwM2VzdGF0dXMpO1xcbiAxMDg6XFx0XFxuIDEwOTpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2spO1xcbiAxMTA6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dmhjaS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiAxMTE6XFx0XFxuIDExMjpcXHRcXHR1c2JpcF9kYmdfdmhjaV9yeChcXFwiTGVhdmVcXFxcblxcXCIpO1xcbiAxMTM6XFx0fVxcbiAxMTQ6XFx0XFxuIDExNTpcXHRzdGF0aWMgc3RydWN0IHZoY2lfdW5saW5rICpkZXF1ZXVlX3BlbmRpbmdfdW5saW5rKHN0cnVjdCB2aGNpX2RldmljZSAqdmRldixcXG4gMTE2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KVxcbiAxMTc6XFx0e1xcbiAxMTg6XFx0XFx0c3RydWN0IHZoY2lfdW5saW5rICp1bmxpbmssICp0bXA7XFxuIDExOTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dmRldi1cXHUwMDNlcHJpdl9sb2NrLCBmbGFncyk7XFxuIDEyMjpcXHRcXG4gMTIzOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bmxpbmssIHRtcCwgXFx1MDAyNnZkZXYtXFx1MDAzZXVubGlua19yeCwgbGlzdCkge1xcbiAxMjQ6XFx0XFx0XFx0cHJfaW5mbyhcXFwidW5saW5rLVxcdTAwM2VzZXFudW0gJWx1XFxcXG5cXFwiLCB1bmxpbmstXFx1MDAzZXNlcW51bSk7XFxuIDEyNTpcXHRcXHRcXHRpZiAodW5saW5rLVxcdTAwM2VzZXFudW0gPT0gcGR1LVxcdTAwM2ViYXNlLnNlcW51bSkge1xcbiAxMjY6XFx0XFx0XFx0XFx0dXNiaXBfZGJnX3ZoY2lfcngoXFxcImZvdW5kIHBlbmRpbmcgdW5saW5rLCAlbHVcXFxcblxcXCIsXFxuIDEyNzpcXHRcXHRcXHRcXHRcXHRcXHQgIHVubGluay1cXHUwMDNlc2VxbnVtKTtcXG4gMTI4OlxcdFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZ1bmxpbmstXFx1MDAzZWxpc3QpO1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2ZGV2LVxcdTAwM2Vwcml2X2xvY2ssIGZsYWdzKTtcXG4gMTMxOlxcdFxcdFxcdFxcdHJldHVybiB1bmxpbms7XFxuIDEzMjpcXHRcXHRcXHR9XFxuIDEzMzpcXHRcXHR9XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZkZXYtXFx1MDAzZXByaXZfbG9jaywgZmxhZ3MpO1xcbiAxMzY6XFx0XFxuIDEzNzpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTM4OlxcdH1cXG4gMTM5OlxcdFxcbiAxNDA6XFx0c3RhdGljIHZvaWQgdmhjaV9yZWN2X3JldF91bmxpbmsoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LFxcbiAxNDE6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSlcXG4gMTQyOlxcdHtcXG4gMTQzOlxcdFxcdHN0cnVjdCB2aGNpX2hjZCAqdmhjaV9oY2QgPSB2ZGV2X3RvX3ZoY2lfaGNkKHZkZXYpO1xcbiAxNDQ6XFx0XFx0c3RydWN0IHZoY2kgKnZoY2kgPSB2aGNpX2hjZC1cXHUwMDNldmhjaTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTk6NTg6MzUuNTYxNzgyMTQ0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM3MTQ0MjQwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgVVNCSVAgRHJpdmVyKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcyB0byBgdmhjaV9yZWN2X3JldF9zdWJtaXRgIGFuZCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLCBhbmQgdGhleSBzZWVtIHRvIGludm9sdmUga2VlcGluZyBpbnRlcnJ1cHRzIGRpc2FibGVkIGR1cmluZyBgdXNiX2hjZF9naXZlYmFja191cmJgLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgY2F0Y2hlcyBteSBleWUgYXMgYSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXQuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGB1c2JpcGAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIHZpcnR1YWwgVVNCIGNvbnRyb2xsZXIsIHdoaWNoIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgcmVhY2hhYmxlIGluIHRob3NlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cblxuU2luY2UgdGhlIGZ1bmN0aW9ucyBgdmhjaV91cmJfZGVxdWV1ZWAsIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAsIGB2aGNpX3JlY3ZfcmV0X3VubGlua2AsIGFuZCBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCBhcmUgYWxsIHBhcnQgb2YgdGhhdCBgdXNiaXBgIGRyaXZlciwgSSB0aGluayBhIHRob3JvdWdoIGxvb2sgdGhyb3VnaCB0aGVzZSB3b3VsZCBiZSBhIGdvb2QgaWRlYS5cblxuSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYHVzYmlwYCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGNvbmZpZ3VyZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy4gVGhhdCBjb3VsZCBwcm92aWRlIG1vcmUgY29udGV4dCBvbiB0aGUgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0OTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODozOS45MzMyMjc4MzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTY1Nzc2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCSVBfVkhDSV9IQ0RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvdXNiaXAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi91c2JpcC9LY29uZmlnPTM9Y29uZmlnIFVTQklQX0NPUkVcXG4tLVxcbmRyaXZlcnMvdXNiL3VzYmlwL0tjb25maWctMjAtXFxuZHJpdmVycy91c2IvdXNiaXAvS2NvbmZpZzoyMTpjb25maWcgVVNCSVBfVkhDSV9IQ0RcXG5kcml2ZXJzL3VzYi91c2JpcC9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJWSENJIGhjZFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTk6NTg6NDAuMTIyODkwNzU3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjI1OTM4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVU0IvSVAgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgb3ZlciB0byB0aGUgYGRyaXZlcnMvdXNiL3VzYmlwL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMS4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiBjb25maWd1cmluZyB0aGUgVVNCL0lQIG1vZHVsZSBwcm9iYWJseSBsaWVzLCBnaXZlbiB0aGUgbG9jYXRpb24uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGVyZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB3aGV0aGVyIHRoZSBtb2R1bGUgaXRzZWxmIGlzIGVuYWJsZWQsIGFueSBzcGVjaWZpYyBmZWF0dXJlcyBvciBtb2RlcywgYW5kIGhvcGVmdWxseSBzb21lIGhlbHAgdGV4dCBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgY2xhcmlmeSBleGFjdGx5IGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFVTQiBzdWJzeXN0ZW0gYW5kIHRoZSBicm9hZGVyIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgYSB1c2VyIGNvbmZpZ3VyZXMgVVNCL0lQIGFuZCB3aGF0IGNob2ljZXMgdGhleSBjYW4gbWFrZS4gTGluZSAyMSwgaXQgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5OTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODo0My45NDU0ODY3NjhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvdXNiaXAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0Y29uZmlnIFVTQklQX0NPUkVcXG4gICA0OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IvSVAgc3VwcG9ydFxcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gTkVUXFxuICAgNjpcXHRcXHRzZWxlY3QgVVNCX0NPTU1PTlxcbiAgIDc6XFx0XFx0c2VsZWN0IFNHTF9BTExPQ1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGlzIGVuYWJsZXMgcHVzaGluZyBVU0IgcGFja2V0cyBvdmVyIElQIHRvIGFsbG93IHJlbW90ZVxcbiAgMTA6XFx0XFx0ICBtYWNoaW5lcyBkaXJlY3QgYWNjZXNzIHRvIFVTQiBkZXZpY2VzLiBJdCBwcm92aWRlcyB0aGVcXG4gIDExOlxcdFxcdCAgVVNCL0lQIGNvcmUgdGhhdCBpcyByZXF1aXJlZCBieSBib3RoIGRyaXZlcnMuXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgRm9yIG1vcmUgZGV0YWlscywgYW5kIHRvIGdldCB0aGUgdXNlcnNwYWNlIHV0aWxpdHlcXG4gIDE0OlxcdFxcdCAgcHJvZ3JhbXMsIHBsZWFzZSBzZWUgXFx1MDAzY2h0dHA6Ly91c2JpcC5zb3VyY2Vmb3JnZS5uZXQvXFx1MDAzZS5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiAgMTc6XFx0XFx0ICBiZSBjYWxsZWQgdXNiaXAtY29yZS5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgVVNCSVBfVkhDSV9IQ0RcXG4gIDIyOlxcdFxcdHRyaXN0YXRlIFxcXCJWSENJIGhjZFxcXCJcXG4gIDIzOlxcdFxcdGRlcGVuZHMgb24gVVNCSVBfQ09SRSBcXHUwMDI2XFx1MDAyNiBVU0JcXG4gIDI0OlxcdFxcdGhlbHBcXG4gIDI1OlxcdFxcdCAgVGhpcyBlbmFibGVzIHRoZSBVU0IvSVAgdmlydHVhbCBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLFxcbiAgMjY6XFx0XFx0ICB3aGljaCBpcyBydW4gb24gdGhlIHJlbW90ZSBtYWNoaW5lLlxcbiAgMjc6XFx0XFxuICAyODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMjk6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmhjaS1oY2QuXFxuICAzMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTk6NTg6NDMuOTQ1NTU2ODM4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MTY3MDE0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBVU0JJUCBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgVVNCSVAgY29kZS4gQmFzZWQgb24gdGhlIGluaXRpYWwgcmVwb3J0cywgaXQgbG9va3MgbGlrZSB3ZSdyZSB6ZXJvaW5nIGluIG9uIGEgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIGhvdyBVU0Igb3ZlciBJUCBpcyBoYW5kbGVkLiBNeSBpbW1lZGlhdGUgY2hlY2tsaXN0IHN0YXJ0cyB3aXRoIGNvbmZpcm1pbmcgdGhlIGNyaXRpY2FsIG1vZHVsZXMgd2UgbmVlZCB0byBjb25zaWRlcjogYFVTQklQX1ZIQ0lfSENEYCwgYFVTQklQX0NPUkVgLCBgVVNCYCwgYW5kIGBORVRgLiBUaGVzZSBhcmUgdGhlIGZvdW5kYXRpb25hbCBjb21wb25lbnRzIGZvciBtYW5hZ2luZyB0aGUgdmlydHVhbCBob3N0IGNvbnRyb2xsZXIgYW5kIG5ldHdvcmsgY29tbXVuaWNhdGlvbi5cblxuTm93LCBteSBpbml0aWFsIGh1bmNoLCBiYXNlZCBvbiBleHBlcmllbmNlLCBpcyB0aGF0IHRoZSByZWFsIG1lYXQgb2YgdGhlIHByb2JsZW0gd2lsbCBiZSBmb3VuZCBpbiB0aGUgYWN0dWFsIGZ1bmN0aW9uIGNhbGxzIGRlYWxpbmcgd2l0aCBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBoYW5kbGluZyBhbmQgdW5saW5raW5nLiBUaGUgZnVuY3Rpb25zIHRoYXQgc3RhbmQgb3V0IGFzIGFyZWFzIG9mIGNyaXRpY2FsIGltcG9ydGFuY2UgYXJlOiBgdmhjaV91cmJfZGVxdWV1ZWAsIGB2aGNpX2NsZWFudXBfdW5saW5rX2xpc3RgLCBgdmhjaV9yZWN2X3JldF9zdWJtaXRgLCBhbmQgYHZoY2lfcmVjdl9yZXRfdW5saW5rYC4gVGhlc2UgYXJlIGFsbCBwcmltZSBzdXNwZWN0cyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgaW5jb3JyZWN0IGVycm9yIGhhbmRsaW5nLCBvciBtZW1vcnkgbWFuYWdlbWVudCBmbGF3cy5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCBpcyBtYXJrZWQgYXMgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlZCBteSBpbnRlcmVzdC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gaW50ZXJuYWwgaGVscGVycy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgaXQncyBhbiBBUEkgZW50cnlwb2ludCBleHBvc2VkIHRvIG90aGVyIG1vZHVsZXMsIG9yIGlmIGl0J3Mgb25seSBjYWxsZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIGB2aGNpYCBtb2R1bGUuIFRoYXQgd2lsbCBncmVhdGx5IGFmZmVjdCB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS4gSXQncyB0aW1lIHRvIGRpZyBkZWVwZXIgYW5kIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODo0OC42NjIyNjExNjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDcyOTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZoY2lfY2xlYW51cF91bmxpbmtfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi91c2JpcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYz04OTU9c3RhdGljIGludCB2aGNpX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cylcXG4tLVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtOTgxLVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM6OTgyOnN0YXRpYyB2b2lkIHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy05ODMtXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqdW5saW5rX2xpc3QpXFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTEwMjU9c3RhdGljIHZvaWQgdmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXAoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDI3LVxcdC8qIGdpdmUgYmFjayBVUkIgb2YgdW5zZW50IHVubGluayByZXF1ZXN0ICovXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzoxMDI4OlxcdHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdCh2ZGV2LCBcXHUwMDI2dmRldi1cXHUwMDNldW5saW5rX3R4KTtcXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTEwMjktXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDMwLVxcdC8qIGdpdmUgYmFjayBVUkIgb2YgdW5hbnN3ZXJlZCB1bmxpbmsgcmVxdWVzdCAqL1xcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM6MTAzMTpcXHR2aGNpX2NsZWFudXBfdW5saW5rX2xpc3QodmRldiwgXFx1MDAyNnZkZXYtXFx1MDAzZXVubGlua19yeCk7XFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDMyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTk6NTg6NDguNzEyMzM3NDM0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTYwMzY3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBWSENJIENsZWFudXAgUHJvY2VzcyoqXG5cblJpZ2h0LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBUaGlzIGNsZWFudXAgc2VxdWVuY2UgSSdtIGxvb2tpbmcgYXQgb3JpZ2luYXRlcyBmcm9tIGB2aGNpX2RldmljZV91bmxpbmtfY2xlYW51cGAuIFRoYXQgZnVuY3Rpb24ncyBjYWxsZWQgYnkgYHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbmAuIFNvLCB3ZSdyZSB0YWxraW5nIGFib3V0IHVubGlua2luZyBvciBzaHV0dGluZyBkb3duIGEgY29ubmVjdGlvbiwgYW5kIHRoZSBjbGVhbnVwIHByb2Nlc3Mga2lja3MgaW4uXG5cbk5vdywgSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgVVJCcyBhcmUgbWFuYWdlZCBkdXJpbmcgdGhpcyBwcm9jZXNzLiBgdmhjaV91cmJfZGVxdWV1ZWAgaXMgd2hhdCBJJ20gZm9jdXNpbmcgb247IGl0J3MgdGhlIHNwZWNpZmljIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgdGhlIEhDRCB1c2VzIGZvciB0aGUgYC51cmJfZGVxdWV1ZWAgb3BlcmF0aW9uLiBUaGlzIGlzIHdoZXJlIHdlIG5lZWQgdG8gZW5zdXJlIHRoaW5ncyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuXG5cbkZ1cnRoZXIgZG93biB0aGUgbGluZSwgb24gdGhlIHJlY2VpdmUgcGF0aCwgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCBhbmQgYHZoY2lfcmVjdl9yZXRfdW5saW5rYCBhcmUgY2FsbGVkIGZyb20gYHZoY2lfcnhfcGR1YC4gVGhpcyBzdWdnZXN0cyB0aGVyZSdzIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCBVUkIgc3VibWlzc2lvbnMgYW5kIHVubGlua2luZyBoYXBwZW5pbmcgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nIGZyb20gdGhlIHJlY2VpdmUgcXVldWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODo1Mi4yMDgzNzcxMzZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxODg4NTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZoY2lfcmVjdl9yZXRfc3VibWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3VzYmlwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmM9MTM9c3RydWN0IHVyYiAqcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwgX191MzIgc2VxbnVtKVxcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jLTU0LVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYzo1NTpzdGF0aWMgdm9pZCB2aGNpX3JlY3ZfcmV0X3N1Ym1pdChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jLTU2LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUpXFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmM9MjAzPXN0YXRpYyB2b2lkIHZoY2lfcnhfcGR1KHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKVxcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jLTI0Ny1cXHRjYXNlIFVTQklQX1JFVF9TVUJNSVQ6XFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jOjI0ODpcXHRcXHR2aGNpX3JlY3ZfcmV0X3N1Ym1pdCh2ZGV2LCBcXHUwMDI2cGR1KTtcXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMtMjQ5LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODo1Mi4yNjAyNzEwMTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgwNzcxMjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB2aGNpX3J4X3BkdWAgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgdmhjaV9yeF9wZHVgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGZyb20gYHZoY2lfcnhfbG9vcGAsIHdoaWNoIGlzLCBpZiBJJ20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgYSBrZXJuZWwgdGhyZWFkLiBUaGF0IGdpdmVzIG1lIGEgZmV3IGtleSBmdW5jdGlvbnMgdG8gcmVhbGx5IGZvY3VzIG9uOiBgdmhjaV91cmJfZGVxdWV1ZWAsIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAsIGFuZCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLiBUaGVzZSBhcmUgbGlrZWx5IHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHRoZSBjcml0aWNhbCBpbnRlcmFjdGlvbnMuXG5cbkhtbSwgYnV0IHdhaXQuLi5JIHNlZSBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCwgdGhhdCdzIHN0YXRpYy4gVGhhdCdzIG5vdCBhcyBoZWxwZnVsLiBNYXliZSBJIHNob3VsZCBsb29rIGF0IGB2aGNpX2RldmljZV91bmxpbmtfY2xlYW51cGAgb3IgcGVyaGFwcyBldmVuIGB2aGNpX3NodXRkb3duX2Nvbm5lY3Rpb25gPyBMZXQgbWUgc2hpZnQgbXkgZm9jdXMgdG8gYHZoY2lfZGV2aWNlX3VubGlua19jbGVhbnVwYCBhbmQgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTk6NTg6NTguMDY3OTg3MDM0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc4NjA5MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvdXNiaXAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM9OTgyPXN0YXRpYyB2b2lkIHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTEwMjQtXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzoxMDI1OnN0YXRpYyB2b2lkIHZoY2lfZGV2aWNlX3VubGlua19jbGVhbnVwKHN0cnVjdCB2aGNpX2RldmljZSAqdmRldilcXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTEwMjYte1xcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYz0xMDM5PXN0YXRpYyB2b2lkIHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbihzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZClcXG4tLVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMTA2OC1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jOjEwNjk6XFx0dmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXAodmRldik7XFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDcwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODo1OC4yMjU4NTc5M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTM5MDI3MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBVU0IvSVAgVmlydHVhbCBIb3N0IENvbnRyb2xsZXIgKFZIQ0kpIFNodXRkb3duIGFuZCBEYXRhIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGB2aGNpX3NodXRkb3duX2Nvbm5lY3Rpb25gIGZ1bmN0aW9uLCB3aGljaCBpcywgYXMgSSByZWNhbGwsIHRoZSBzaHV0ZG93biBjYWxsYmFjayBmb3IgdGhlIGB1c2JpcF9kZXZpY2VgIHdpdGhpbiB0aGUgVkhDSSBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG92ZXJhbGwgZGF0YSBmbG93LiBMZXQgbWUgemVybyBpbiBvbiBgdmhjaV91cmJfZGVxdWV1ZWAsIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAsIGFuZCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLiBUaGVzZSBzZWVtIGNyaXRpY2FsIGZvciBoYW5kbGluZyBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBkYXRhIGR1cmluZyB0aGUgc2h1dGRvd24gcHJvY2Vzcy5cblxuV2FpdCBhIHNlY29uZOKApiBgdmhjaV9yZWN2X3JldF9zdWJtaXRgIGFuZCBgdmhjaV9yZWN2X3JldF91bmxpbmtgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMuIEludGVyZXN0aW5nLiBBcmUgdGhleSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlcj8gR2l2ZW4gdGhlaXIgYXBwYXJlbnQgc2l6ZSwgdGhleSBhcmUgcHJvYmFibHkgbm90IGlubGluZWQuIFRvIGNvbmZpcm0gbXkgc3VzcGljaW9uLCBJIHNob3VsZCBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRoZXkgYXJlIGluZGVlZCBzdGF0aWMgZnVuY3Rpb25zLiBZZXAsIHRoZXkgYXJlLiBUaGF0J3MgZ29vZCB0byBrbm93LlxuXG5Ob3csIGNhbiBJIGxldmVyYWdlIGB2aGNpX3J4X3BkdWAgaW4gdGhpcyBjb250ZXh0PyBMZXQgbWUgY2hlY2sgaXRzIGRlY2xhcmF0aW9u4oCmIGhtbSwgaXQncyBhbHNvIHN0YXRpYy4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgcG90ZW50aWFsbHkgb2ZmZXJpbmcgc29tZSBzaGFyZWQgbG9naWMuXG5cbkZpbmFsbHksIEnigJlsbCBjaGVjayBgdmhjaV9yeF9sb29wYCwgd2hpY2ggaXMgdGhlIHRocmVhZCBmdW5jdGlvbi4gTm8sIGl04oCZcyBub3Qgc3RhdGljLiBPa2F5LiBUaGF0IGNsYXJpZmllcyB0aGUgc2NvcGUgb2YgZWFjaCBmdW5jdGlvbidzIGFjY2Vzc2liaWxpdHkuIEkgd2lsbCBrZWVwIHRoaXMgaW4gbWluZCBhcyBJIGNvbnRpbnVlIHRvIGFuYWx5emUgdGhlIHNodXRkb3duIHNlcXVlbmNlIGFuZCBob3cgZGF0YSB0cmFuc2ZlcnMgYXJlIGhhbmRsZWQgaW4gdGhlIHZpcnR1YWxpemVkIFVTQiBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2ODEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTk6NTk6MDMuNzY0ODg3ODg3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzMzNzgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aGNpX3J4X2xvb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvdXNiaXAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL3VzYmlwL3ZoY2kuaD0xMzM9c3RydWN0IHVyYiAqcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwgX191MzIgc2VxbnVtKTtcXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpLmg6MTM0OmludCB2aGNpX3J4X2xvb3Aodm9pZCAqZGF0YSk7XFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaS5oLTEzNS1cXG4tLVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYz0yMDM9c3RhdGljIHZvaWQgdmhjaV9yeF9wZHUoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpXFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMtMjYxLVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYzoyNjI6aW50IHZoY2lfcnhfbG9vcCh2b2lkICpkYXRhKVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYy0yNjMte1xcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9zeXNmcy5jPTMxNT1zdGF0aWMgc3NpemVfdCBhdHRhY2hfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfc3lzZnMuYy0zODEtXFx0LyogY3JlYXRlIHRocmVhZHMgYmVmb3JlIGxvY2tpbmcgKi9cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3N5c2ZzLmM6MzgyOlxcdHRjcF9yeCA9IGt0aHJlYWRfY3JlYXRlKHZoY2lfcnhfbG9vcCwgXFx1MDAyNnZkZXYtXFx1MDAzZXVkLCBcXFwidmhjaV9yeFxcXCIpO1xcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfc3lzZnMuYy0zODMtXFx0aWYgKElTX0VSUih0Y3BfcngpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE5OjU5OjAzLjgxODIzMTQ0NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMxNjM1MzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIGB2aGNpX3VyYl9kZXF1ZXVlYCoqXG5cbk9rYXksIHNvIGB2aGNpX3VyYl9kZXF1ZXVlYCBpcyBhbHNvIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBJbnRlcmVzdGluZy4gVGhhdCBpbW1lZGlhdGVseSBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZC4gVGltZSB0byBpbnZlc3RpZ2F0ZSB0aGlzIG9uZSBkaXJlY3RseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFZpcnR1YWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBjb2RlLiBUaGlzIGNvdWxkIGJlIGEgY3JpdGljYWwgcG9pbnQgb2YgY29udHJvbCwgb3IgbWF5YmUganVzdCBhIGhlbHBmdWwgaW50ZXJuYWwgZnVuY3Rpb24uIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1OTowNy40NDk4NzAxNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxOTk3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhjaV91cmJfZGVxdWV1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi91c2JpcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYz0zNz1zdGF0aWMgaW50IHZoY2lfdXJiX2VucXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLFxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMzgtXFx0XFx0XFx0ICAgIGdmcF90IG1lbV9mbGFncyk7XFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzozOTpzdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTtcXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTQwLXN0YXRpYyBpbnQgdmhjaV9zdGFydChzdHJ1Y3QgdXNiX2hjZCAqdmhjaV9oY2QpO1xcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYz02OTc9c3RhdGljIGludCB2aGNpX3VyYl9lbnF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgZ2ZwX3QgbWVtX2ZsYWdzKVxcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy04OTQtICovXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzo4OTU6c3RhdGljIGludCB2aGNpX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cylcXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTg5Ni17XFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTEzNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgdmhjaV9oY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTEzNTEtXFx0LnVyYl9lbnF1ZXVlXFx0PSB2aGNpX3VyYl9lbnF1ZXVlLFxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM6MTM1MjpcXHQudXJiX2RlcXVldWVcXHQ9IHZoY2lfdXJiX2RlcXVldWUsXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMzUzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1OTowNy40OTcwNzYyNzlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg2NzI1MTE5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZ1bmN0aW9uIElubGluaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIGxpa2VseSB0byBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gU2luY2UgSSBrbm93IHRoZXNlIGFyZSBzdGF0aWMsIEkgc2hvdWxkIHN0YXJ0IGJ5IGV4cGxpY2l0bHkgbGlzdGluZyB0aGUgZnVuY3Rpb25zIHRoYXQgKm1pZ2h0IG5vdCogYmUuIEknbSB0aGlua2luZyBvZiBgdmhjaV9yeF9sb29wYCBhcyBhIHN0YXJ0aW5nIHBvaW50LCBhbmQgbWF5YmUgYHZoY2lfdXJiX2RlcXVldWVgIHRvbywgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWMuIFRoZSBhZGRyZXNzIG9mIGB2aGNpX3VyYl9kZXF1ZXVlYCBpcyB0YWtlbiB3aGljaCBtZWFucyBpbmxpbmluZyBpcyBsZXNzIGxpa2VseS4gQWgsIHllYWgsIGl0J3MgYXNzaWduZWQgdG8gdGhlIGAudXJiX2RlcXVldWVgIGZpZWxkIG9mIGEgc3RydWN0LCBzbyBkZWZpbml0ZWx5IG5vdCBnZXR0aW5nIGlubGluZWQuIEdvb2QgY2F0Y2guXG5cbk5vdywgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCBhbmQgYHZoY2lfcmVjdl9yZXRfdW5saW5rYCBhcmUgY2FsbGVkIGZyb20gd2l0aGluIGB2aGNpX3J4X3BkdWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYHZoY2lfcnhfbG9vcGAuIExldCdzIHNlZSBpZiBgdmhjaV9yZWN2X3JldF9zdWJtaXRgIGlzIGFzc2lnbmVkIHRvIGFueXRoaW5nLCBvciBpZiBpdCdzIGp1c3QgY2FsbGVkIGRpcmVjdGx5LiBSaWdodCwgaXQncyBjYWxsZWQgZGlyZWN0bHkgd2l0aGluIGEgc3dpdGNoIHN0YXRlbWVudCBpbnNpZGUgYHZoY2lfcnhfcGR1YC4gVGhhdCdzIGFuIGludGVyZXN0aW5nIGNhc2U7IGl0ICptaWdodCogYmUgaW5saW5lZC5cblxuU28sIHRvIGJlIGNvbnNlcnZhdGl2ZSwgSSBzaG91bGQgYmFzZSBteSB3b3JrIGFyb3VuZCBgdmhjaV9yeF9sb29wYCBhbmQgYHZoY2lfdXJiX2RlcXVldWVgLiBMZXQncyBrZWVwIHRob3NlIGF0IHRoZSBmb3JlZnJvbnQuXG5cbk9oLCBhbmQgYHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbmAgaXMgYXNzaWduZWQgdG8gdGhlIGAuc2h1dGRvd25gIGZpZWxkIGluIHRoZSBgdXNiaXBfZGV2aWNlYCBzdHJ1Y3QuIEkgc2hvdWxkIGRlZmluaXRlbHkgaW52ZXN0aWdhdGUgdGhhdCBvbmUgZnVydGhlciwgc2luY2UgaXQgbG9va3MgdG8gYmUgYW4gaW1wb3J0YW50IGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTc0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE5OjU5OjEzLjM2NDQ1ODA2N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2NDAwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhjaV9zaHV0ZG93bl9jb25uZWN0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3VzYmlwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTEwMjU9c3RhdGljIHZvaWQgdmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXAoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDM4LSAqL1xcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM6MTAzOTpzdGF0aWMgdm9pZCB2aGNpX3NodXRkb3duX2Nvbm5lY3Rpb24oc3RydWN0IHVzYmlwX2RldmljZSAqdWQpXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDQwLXtcXG4tLVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMTA4My1cXHQgKiBOT1RFOiB2aGNpX2RlcXVldWUoKSBtdXN0IGJlIGNvbnNpZGVyZWQgY2FyZWZ1bGx5LiBXaGVuIHNodXR0aW5nIGRvd25cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jOjEwODQ6XFx0ICogYSBjb25uZWN0aW9uLCB2aGNpX3NodXRkb3duX2Nvbm5lY3Rpb24oKSBleHBlY3RzIHZoY2lfZGVxdWV1ZSgpXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDg1LVxcdCAqIGdpdmVzIGJhY2sgcHVzaGVkIHVyYnMgYW5kIGZyZWVzIHRoZWlyIHByaXZhdGUgZGF0YSBieSByZXF1ZXN0IG9mXFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTExMjk9c3RhdGljIHZvaWQgdmhjaV9kZXZpY2VfaW5pdChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTExNDUtXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzoxMTQ2OlxcdHZkZXYtXFx1MDAzZXVkLmVoX29wcy5zaHV0ZG93biA9IHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbjtcXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTExNDctXFx0dmRldi1cXHUwMDNldWQuZWhfb3BzLnJlc2V0ID0gdmhjaV9kZXZpY2VfcmVzZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE5OjU5OjEzLjQxNDEwNDE4NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQ1NzUyNzU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVVNCSVAgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgaW50byB0aGlzIGB1c2JpcGAgZHJpdmVyIHBhdGNoLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbmAgaXMgYWxzbyAqbm90KiBpbmxpbmVkLiBUaGF0J3MgYSBwb2ludCB0byByZW1lbWJlci5cblxuVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZXF1aXJlZCBmb3IgdGhpcyBwYXRjaCBhcmU6IGBVU0JJUF9WSENJX0hDRGAsIGBVU0JJUF9DT1JFYCwgYFVTQmAsIGFuZCBgTkVUYC4gSG93ZXZlciwgdGhpbmtpbmcgYWJvdXQgaXQsIGBVU0JJUF9WSENJX0hDRGAgaGFzIGRlcGVuZGVuY2llcyBvbiBib3RoIGBVU0JJUF9DT1JFYCBhbmQgYFVTQmAuICBBbmQgZnVydGhlciBJIHJlbWVtYmVyIHRoYXQgYFVTQklQX0NPUkVgIGRlcGVuZHMgb24gYE5FVGAuIFNvLCByZWFsbHksIEkgY2FuIGp1c3Qgc3BlY2lmeSBgVVNCSVBfVkhDSV9IQ0RgIGFuZCBgVVNCSVBfQ09SRWAuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcy4gT2theSwgaXQgbG9va3MgbGlrZSB0aGF0IGNvdmVycyBldmVyeXRoaW5nOiBgVVNCSVBfVkhDSV9IQ0RgLCBgVVNCSVBfQ09SRWAsIGBVU0JgLCBhbmQgYE5FVGAuXG5cbkxldCdzIHN1bW1hcml6ZSB0aGUga2V5IGFzcGVjdHMgb2YgdGhpcyBwYXRjaCBmb3Igb3VyIGZ1enppbmcgZWZmb3J0czpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFllcywgYWJzb2x1dGVseS5cbiogICAqKlJlYXNvbmluZzoqKiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSBgdXNiX2hjZF9naXZlYmFja191cmJgIHdhcyBiZWluZyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgaW4gdGhlIGB1c2JpcGAgZHJpdmVyLiBJdCBtb2RpZmllcyBjb3JlIFVSQiBoYW5kbGluZyBmdW5jdGlvbnMgKGB2aGNpX3VyYl9kZXF1ZXVlYCwgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCwgYHZoY2lfcmVjdl9yZXRfdW5saW5rYCwgYHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdGApIHRvIGtlZXAgaW50ZXJydXB0cyBkaXNhYmxlZCBkdXJpbmcgdGhlIGdpdmViYWNrIHByb2Nlc3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYSB2aXJ0dWFsIFVTQiBjb250cm9sbGVyIGRyaXZlciwgYW5kIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBzaG91bGQgYmUgYWJsZSB0byByZWFjaCB0aGlzIGNvZGUuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogSSdtIHRoaW5raW5nIHdlIHNob3VsZCBmb2N1cyBvbiBgdmhjaV91cmJfZGVxdWV1ZWAsIGB2aGNpX3J4X2xvb3BgLCBhbmQgcG90ZW50aWFsbHkgYHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbmAuXG4qICAgKipFbmFibGVDb25maWdzOioqIGBVU0JJUF9WSENJX0hDRGAgYW5kIGBVU0JJUF9DT1JFYC5cblxuTm93LCBhYm91dCB0aG9zZSBmb2N1cyBzeW1ib2xzLi4uIGB2aGNpX3J4X2xvb3BgIGlzIGxpa2VseSBhIGdvb2QgY2hvaWNlLiBJdCdzIHRoZSBtYWluIHJlY2VpdmUgbG9vcCBmb3IgdGhlIHZpcnR1YWwgVVNCIGNvbnRyb2xsZXIsIHNvIGl0J2xsIGdldCBhIGxvdCBvZiBoaXRzIGlmIHRoZSBmdXp6ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGRyaXZlci4gQnV0IG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIHRoZSBtb3JlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZmZlY3RlZCBieSB0aGUgcGF0Y2ggYXJlIGFjdHVhbGx5IGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAgYW5kIGB2aGNpX3JlY3ZfcmV0X3VubGlua2AuIFRoZXNlIG1pZ2h0IGJlIGlubGluZWQuIFNvLCBgdmhjaV9yeF9sb29wYCBpcyBzdGlsbCBwcm9iYWJseSB0aGUgc2FmZXN0IGJldCBmb3IgbWF4aW11bSBjb3ZlcmFnZS4gQnV0IEknbGwgaW5jbHVkZSBgdmhjaV91cmJfZGVxdWV1ZWAgdG9vLCBqdXN0IGluIGNhc2UsIGJlY2F1c2UgdGhhdCBpcyBhbm90aGVyIGtleSBmdW5jdGlvbiByZWxhdGVkIHRvIFVSQiBoYW5kbGluZy5cblxuT2theSwgSSB0aGluayBJJ3ZlIGdvdCBhIHNvbGlkIHBsYW4uIExldCdzIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTk3LCJPdXRwdXRUb2tlbnMiOjE3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1OToyNC44NzE2MzUzMThaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDYxODcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCSVBfVkhDSV9IQ0RcIixcbiAgICBcIlVTQklQX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aGNpX3VyYl9kZXF1ZXVlXCIsXG4gICAgXCJ2aGNpX3J4X2xvb3BcIixcbiAgICBcInZoY2lfc2h1dGRvd25fY29ubmVjdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAgd2FzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBpbiB0aGUgYHVzYmlwYCBkcml2ZXIuIEl0IG1vZGlmaWVzIGNvcmUgVVJCIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYHZoY2lfdXJiX2RlcXVldWVgLCBgdmhjaV9yZWN2X3JldF9zdWJtaXRgLCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLCBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCkgdG8ga2VlcCBpbnRlcnJ1cHRzIGRpc2FibGVkIGR1cmluZyB0aGUgZ2l2ZWJhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHZpcnR1YWwgVVNCIGNvbnRyb2xsZXIgZHJpdmVyIHRoYXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JJUF9WSENJX0hDRFwiLFxuICAgIFwiVVNCSVBfQ09SRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZoY2lfdXJiX2RlcXVldWVcIixcbiAgICBcInZoY2lfcnhfbG9vcFwiLFxuICAgIFwidmhjaV9zaHV0ZG93bl9jb25uZWN0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCB3YXMgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBlbmFibGVkIGluIHRoZSBgdXNiaXBgIGRyaXZlci4gSXQgbW9kaWZpZXMgY29yZSBVUkIgaGFuZGxpbmcgZnVuY3Rpb25zIChgdmhjaV91cmJfZGVxdWV1ZWAsIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAsIGB2aGNpX3JlY3ZfcmV0X3VubGlua2AsIGB2aGNpX2NsZWFudXBfdW5saW5rX2xpc3RgKSB0byBrZWVwIGludGVycnVwdHMgZGlzYWJsZWQgZHVyaW5nIHRoZSBnaXZlYmFjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgdmlydHVhbCBVU0IgY29udHJvbGxlciBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1OToyNC45NTIyNjE0MzZaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODMzNDA1NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTk6NTk6MjQuOTUyOTA2MzQ2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1ODMyNzU3MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzcGlubG9jayBvcGVyYXRpb25zIChgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZWAgdG8gYHNwaW5fdW5sb2NrYCBhbmQgYHNwaW5fbG9ja19pcnFzYXZlYCB0byBgc3Bpbl9sb2NrYCkgdG8gY2hhbmdlIGhvdyBJUlEgc3RhdGUgaXMgaGFuZGxlZCBhcm91bmQgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYC4gVGhpcyBpcyBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gZGVhZGxvY2tzLCBJUlEgc3RhdGUgY29ycnVwdGlvbiwgb3IgcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgYW5kIGluZm8tbGVha3MsIHdoaWNoIGFyZSBub3QgcmVsZXZhbnQgdG8gdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NWY0M2E0NDRmMTVhZjk3YjkwZTBhODI4MGM4OWE5MjFlOGFmZDIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAxOTo1ODoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMgYi9kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jXG5pbmRleCAzOWU4ZmFmNGMxOGNkLi5iNDE2ZDgyNzFhYTdmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuY1xuKysrIGIvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuY1xuQEAgLTk0MCw5ICs5NDAsOSBAQCBzdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKVxuIFx0XHQgKi9cbiBcdFx0dXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaGNkLCB1cmIpO1xuIFxuLVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZ2aGNpLVx1MDAzZWxvY2spO1xuIFx0XHR1c2JfaGNkX2dpdmViYWNrX3VyYihoY2QsIHVyYiwgdXJiLVx1MDAzZXN0YXR1cyk7XG4tXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRzcGluX2xvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiBcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIHRjcCBjb25uZWN0aW9uIGlzIGFsaXZlICovXG5AQCAtMTAwOCwxMSArMTAwOCwxMSBAQCBzdGF0aWMgdm9pZCB2aGNpX2NsZWFudXBfdW5saW5rX2xpc3Qoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LFxuIFx0XHRsaXN0X2RlbChcdTAwMjZ1bmxpbmstXHUwMDNlbGlzdCk7XG4gXG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZkZXYtXHUwMDNlcHJpdl9sb2NrKTtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiBcbiBcdFx0dXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHVyYi1cdTAwM2VzdGF0dXMpO1xuIFxuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNnZoY2ktXHUwMDNlbG9jayk7XG4gXHRcdHNwaW5fbG9jayhcdTAwMjZ2ZGV2LVx1MDAzZXByaXZfbG9jayk7XG4gXG4gXHRcdGtmcmVlKHVubGluayk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jIGIvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jXG5pbmRleCBhNjc4ZTdjODk4Mzc1Li42ZGIzYTVhNzM2MDA5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jXG4rKysgYi9kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmNcbkBAIC0xMDIsMTAgKzEwMiwxMyBAQCBzdGF0aWMgdm9pZCB2aGNpX3JlY3ZfcmV0X3N1Ym1pdChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYik7XG4tXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiBcbiBcdHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYiwgdXJiLVx1MDAzZXN0YXR1cyk7XG4gXG4rXHRzcGluX2xvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4gXHR1c2JpcF9kYmdfdmhjaV9yeChcIkxlYXZlXFxuXCIpO1xuIH1cbiBcbkBAIC0xNzMsOSArMTc2LDEyIEBAIHN0YXRpYyB2b2lkIHZoY2lfcmVjdl9yZXRfdW5saW5rKHN0cnVjdCB2aGNpX2RldmljZSAqdmRldixcbiBcbiBcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYik7XG4tXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZoY2ktXHUwMDNlbG9jayk7XG4gXG4gXHRcdHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYiwgdXJiLVx1MDAzZXN0YXR1cyk7XG4rXG4rXHRcdHNwaW5fbG9jayhcdTAwMjZ2aGNpLVx1MDAzZWxvY2spO1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0fVxuIFxuIFx0a2ZyZWUodW5saW5rKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE5OjU5OjI0Ljk1MjkwOTIyNloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTgzMjczMTkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvY2tpbmcgQ2hhbmdlcyBpbiBVU0IvSVAgVmlydHVhbCBIb3N0IENvbnRyb2xsZXIgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFVTQi9JUCB2aXJ0dWFsIGhvc3QgY29udHJvbGxlci4gSXQncyB0b3VjaGluZyBgdmhjaV9oY2QuY2AgYW5kIGB2aGNpX3J4LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgc3dpdGNoaW5nIGZyb20gdGhlIGBzcGluX2xvY2tfaXJxc2F2ZWAvYHNwaW5fdW5sb2NrX2lycXJlc3RvcmVgIHBhaXIgdG8gcGxhaW4gYHNwaW5fbG9ja2AvYHNwaW5fdW5sb2NrYCBpbiBhIGZldyBzcG90czogYHZoY2lfdXJiX2RlcXVldWVgLCBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCwgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCwgYW5kIGB2aGNpX3JlY3ZfcmV0X3VubGlua2AuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgYSBjaGFuZ2UgaW4gaG93IGludGVycnVwdHMgYXJlIGhhbmRsZWQgaW4gcmVsYXRpb24gdG8gdGhlIHNwaW5sb2Nrcy5cblxuTGV0J3MgZHJpbGwgZG93biBvbiBgdmhjaV91cmJfZGVxdWV1ZWAgYXMgYSByZXByZXNlbnRhdGl2ZSBleGFtcGxlLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIHRvIGRvOlxuYGBgY1xuXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG5cdFx0dXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHVyYi1cdTAwM2VzdGF0dXMpO1xuXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuYGBgXG5cblRoZSBwYXRjaCBjaGFuZ2VzIHRoaXMgdG86XG5gYGBjXG5cdFx0c3Bpbl91bmxvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcblx0XHR1c2JfaGNkX2dpdmViYWNrX3VyYihoY2QsIHVyYiwgdXJiLVx1MDAzZXN0YXR1cyk7XG5cdFx0c3Bpbl9sb2NrKFx1MDAyNnZoY2ktXHUwMDNlbG9jayk7XG5gYGBcblxuUmlnaHQsIHNvIGBzcGluX2xvY2tfaXJxc2F2ZWAgZGlzYWJsZXMgaW50ZXJydXB0cyBhbmQgc2F2ZXMgdGhlIHByZXZpb3VzIGludGVycnVwdCBzdGF0ZS4gIGBzcGluX3VubG9ja19pcnFyZXN0b3JlYCByZXN0b3JlcyB0aGUgaW50ZXJydXB0cyB0byB0aGUgc3RhdGUgdGhleSB3ZXJlIGluIGJlZm9yZSB0aGUgYHNwaW5fbG9ja19pcnFzYXZlYCBjYWxsLiAgVGhlIGNoYW5nZSBpcyBza2lwcGluZyB0aGUgSVJRIHN0YXRlIHNhdmluZyBhbmQgcmVzdG9yaW5nLiBUaGlzIGxpa2VseSBtZWFucyB0aGF0IGVpdGhlciB0aGUgY2FsbGluZyBmdW5jdGlvbiBpcyBhbHJlYWR5IG1hbmFnaW5nIHRoZSBJUlEgc3RhdGUsIG9yIHRoZSBpbnRlbnRpb24gaXMgdG8ga2VlcCBpbnRlcnJ1cHRzIGRpc2FibGVkIGFjcm9zcyB0aGUgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCBjYWxsLiAgSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgZGlzYWJsaW5nIGludGVycnVwdHMgZHVyaW5nIHRoZSBjYWxsIHRvIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAuIFRoZSBsb2NraW5nIG9yZGVyIGlzIHVuY2hhbmdlZC4gVGhlIElSUSBzdGF0ZSBjb3VsZCBiZSByZXN0b3JlZCBsYXRlciwgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBzbmlwcGV0LlxuXG5UaGUgY3JpdGljYWwgdGhpbmcgaXMgdGhhdCB0aGlzIHBhdGNoICpvbmx5KiBtb2RpZmllcyB0aGUgbG9ja2luZyBwcmltaXRpdmVzLiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZC4gVGhlcmVmb3JlLCB0aGlzIGlzIHNvbGVseSBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGZpeCwgb3IgcG90ZW50aWFsbHkgYSBidWcuXG5cblRoaXMgc2NyZWFtcyBMT0NLREVQIG9yIEtBU0FOIHRlcnJpdG9yeSwgbWF5YmUgYSByYWNlIGNvbmRpdGlvbiBvciBkZWFkbG9jay4gS01TQU4sIHdoaWNoIGlzIGZvY3VzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgcG90ZW50aWFsIHByb2JsZW1zIGhlcmUgYXJlIGFib3V0IGNvcnJlY3QgbG9ja2luZyBhbmQgSVJRIG1hbmFnZW1lbnQsIG5vdCB1bmluaXRpYWxpemVkIGRhdGEgdXNhZ2UuIEkgbmVlZCB0byBub3RlIHRoYXQgdGhpcyBjaGFuZ2VzIGhvdyBgdXNiX2hjZF9naXZlYmFja191cmJgIGlzIGNhbGxlZCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBpbnRlcnJ1cHRzLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgd2hlbiBhbmFseXppbmcgdGhlIG92ZXJhbGwgY2FsbCBjaGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0OCwiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1OTo0MC43ODU2NDM1NjdaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNwaW5sb2NrIG9wZXJhdGlvbnMgKGBzcGluX3VubG9ja19pcnFyZXN0b3JlYCB0byBgc3Bpbl91bmxvY2tgIGFuZCBgc3Bpbl9sb2NrX2lycXNhdmVgIHRvIGBzcGluX2xvY2tgKSB0byBjaGFuZ2UgaG93IElSUSBzdGF0ZSBpcyBoYW5kbGVkIGFyb3VuZCBgdXNiX2hjZF9naXZlYmFja191cmJgLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY2hhbmdlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBkZWFkbG9ja3MsIElSUSBzdGF0ZSBjb3JydXB0aW9uLCBvciByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBhbmQgaW5mby1sZWFrcywgd2hpY2ggYXJlIG5vdCByZWxldmFudCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNwaW5sb2NrIG9wZXJhdGlvbnMgKGBzcGluX3VubG9ja19pcnFyZXN0b3JlYCB0byBgc3Bpbl91bmxvY2tgIGFuZCBgc3Bpbl9sb2NrX2lycXNhdmVgIHRvIGBzcGluX2xvY2tgKSB0byBjaGFuZ2UgaG93IElSUSBzdGF0ZSBpcyBoYW5kbGVkIGFyb3VuZCBgdXNiX2hjZF9naXZlYmFja191cmJgLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY2hhbmdlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBkZWFkbG9ja3MsIElSUSBzdGF0ZSBjb3JydXB0aW9uLCBvciByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBhbmQgaW5mby1sZWFrcywgd2hpY2ggYXJlIG5vdCByZWxldmFudCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxk5zp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-08 19:56:13 +0000 UTC FinishedAt: 2026-08-08 19:59:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USBIP_VHCI_HCD", "USBIP_CORE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USBIP_VHCI_HCD", "USBIP_CORE" ], "series_id": "a7c4f078-e94a-4237-8154-32f56b030a82" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vhci_urb_dequeue", "vhci_rx_loop", "vhci_shutdown_connection" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQklQX1ZIQ0lfSENEJiMzNDssCiAgICAmIzM0O1VTQklQX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aGNpX3VyYl9kZXF1ZXVlJiMzNDssCiAgICAmIzM0O3ZoY2lfcnhfbG9vcCYjMzQ7LAogICAgJiMzNDt2aGNpX3NodXRkb3duX2Nvbm5lY3Rpb24mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzcGlubG9jayBvcGVyYXRpb25zIChgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZWAgdG8gYHNwaW5fdW5sb2NrYCBhbmQgYHNwaW5fbG9ja19pcnFzYXZlYCB0byBgc3Bpbl9sb2NrYCkgdG8gY2hhbmdlIGhvdyBJUlEgc3RhdGUgaXMgaGFuZGxlZCBhcm91bmQgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYC4gVGhpcyBpcyBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gZGVhZGxvY2tzLCBJUlEgc3RhdGUgY29ycnVwdGlvbiwgb3IgcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgYW5kIGluZm8tbGVha3MsIHdoaWNoIGFyZSBub3QgcmVsZXZhbnQgdG8gdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCB3YXMgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBlbmFibGVkIGluIHRoZSBgdXNiaXBgIGRyaXZlci4gSXQgbW9kaWZpZXMgY29yZSBVUkIgaGFuZGxpbmcgZnVuY3Rpb25zIChgdmhjaV91cmJfZGVxdWV1ZWAsIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAsIGB2aGNpX3JlY3ZfcmV0X3VubGlua2AsIGB2aGNpX2NsZWFudXBfdW5saW5rX2xpc3RgKSB0byBrZWVwIGludGVycnVwdHMgZGlzYWJsZWQgZHVyaW5nIHRoZSBnaXZlYmFjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgdmlydHVhbCBVU0IgY29udHJvbGxlciBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTVmNDNhNDQ0ZjE1YWY5N2I5MGUwYTgyODBjODlhOTIxZThhZmQyMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMTk6NTg6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmNcbmluZGV4IDM5ZThmYWY0YzE4Y2QuLmI0MTZkODI3MWFhN2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jXG5AQCAtOTQwLDkgJiM0Mzs5NDAsOSBAQCBzdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKVxuIFx0XHQgKi9cbiBcdFx0dXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaGNkLCB1cmIpO1xuIFxuLVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiBcdFx0dXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHVyYi1cdTAwM2VzdGF0dXMpO1xuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdHNwaW5fbG9jayhcdTAwMjZ2aGNpLVx1MDAzZWxvY2spO1xuIFxuIFx0fSBlbHNlIHtcbiBcdFx0LyogdGNwIGNvbm5lY3Rpb24gaXMgYWxpdmUgKi9cbkBAIC0xMDA4LDExICYjNDM7MTAwOCwxMSBAQCBzdGF0aWMgdm9pZCB2aGNpX2NsZWFudXBfdW5saW5rX2xpc3Qoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LFxuIFx0XHRsaXN0X2RlbChcdTAwMjZ1bmxpbmstXHUwMDNlbGlzdCk7XG4gXG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZkZXYtXHUwMDNlcHJpdl9sb2NrKTtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZoY2ktXHUwMDNlbG9jayk7XG4gXG4gXHRcdHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCB1cmItXHUwMDNlc3RhdHVzKTtcbiBcbi1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiBcdFx0c3Bpbl9sb2NrKFx1MDAyNnZkZXYtXHUwMDNlcHJpdl9sb2NrKTtcbiBcbiBcdFx0a2ZyZWUodW5saW5rKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMgYi9kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmNcbmluZGV4IGE2NzhlN2M4OTgzNzUuLjZkYjNhNWE3MzYwMDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguY1xuQEAgLTEwMiwxMCAmIzQzOzEwMiwxMyBAQCBzdGF0aWMgdm9pZCB2aGNpX3JlY3ZfcmV0X3N1Ym1pdChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYik7XG4tXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnZoY2ktXHUwMDNlbG9jayk7XG4gXG4gXHR1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIsIHVyYi1cdTAwM2VzdGF0dXMpO1xuIFxuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZ2aGNpLVx1MDAzZWxvY2spO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuIFx0dXNiaXBfZGJnX3ZoY2lfcngoXCYjMzQ7TGVhdmVcXG5cJiMzNDspO1xuIH1cbiBcbkBAIC0xNzMsOSAmIzQzOzE3NiwxMiBAQCBzdGF0aWMgdm9pZCB2aGNpX3JlY3ZfcmV0X3VubGluayhzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXG4gXG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHR1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCh2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIpO1xuLVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiBcbiBcdFx0dXNiX2hjZF9naXZlYmFja191cmIodmhjaV9oY2RfdG9faGNkKHZoY2lfaGNkKSwgdXJiLCB1cmItXHUwMDNlc3RhdHVzKTtcbiYjNDM7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHR9XG4gXG4gXHRrZnJlZSh1bmxpbmspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JJUF9WSENJX0hDRCYjMzQ7LAogICAgJiMzNDtVU0JJUF9DT1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhjaV91cmJfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDt2aGNpX3J4X2xvb3AmIzM0OywKICAgICYjMzQ7dmhjaV9zaHV0ZG93bl9jb25uZWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAgd2FzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBpbiB0aGUgYHVzYmlwYCBkcml2ZXIuIEl0IG1vZGlmaWVzIGNvcmUgVVJCIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYHZoY2lfdXJiX2RlcXVldWVgLCBgdmhjaV9yZWN2X3JldF9zdWJtaXRgLCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLCBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCkgdG8ga2VlcCBpbnRlcnJ1cHRzIGRpc2FibGVkIGR1cmluZyB0aGUgZ2l2ZWJhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHZpcnR1YWwgVVNCIGNvbnRyb2xsZXIgZHJpdmVyIHRoYXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk1ZjQzYTQ0NGYxNWFmOTdiOTBlMGE4MjgwYzg5YTkyMWU4YWZkMjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyA4IDE5OjU4OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMKaW5kZXggMzllOGZhZjRjMThjZC4uYjQxNmQ4MjcxYWE3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jCkBAIC05NDAsOSAmIzQzOzk0MCw5IEBAIHN0YXRpYyBpbnQgdmhjaV91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpCiAJCSAqLwogCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChoY2QsIHVyYik7CiAKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7dmhjaS0mZ3Q7bG9jayk7CiAJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCB1cmItJmd0O3N0YXR1cyk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7dmhjaS0mZ3Q7bG9jayk7CiAKIAl9IGVsc2UgewogCQkvKiB0Y3AgY29ubmVjdGlvbiBpcyBhbGl2ZSAqLwpAQCAtMTAwOCwxMSAmIzQzOzEwMDgsMTEgQEAgc3RhdGljIHZvaWQgdmhjaV9jbGVhbnVwX3VubGlua19saXN0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKIAkJbGlzdF9kZWwoJmFtcDt1bmxpbmstJmd0O2xpc3QpOwogCiAJCXNwaW5fdW5sb2NrKCZhbXA7dmRldi0mZ3Q7cHJpdl9sb2NrKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7dmhjaS0mZ3Q7bG9jayk7CiAKIAkJdXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHVyYi0mZ3Q7c3RhdHVzKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO3ZoY2ktJmd0O2xvY2spOwogCQlzcGluX2xvY2soJmFtcDt2ZGV2LSZndDtwcml2X2xvY2spOwogCiAJCWtmcmVlKHVubGluayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMgYi9kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMKaW5kZXggYTY3OGU3Yzg5ODM3NS4uNmRiM2E1YTczNjAwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYwpAQCAtMTAyLDEwICYjNDM7MTAyLDEzIEBAIHN0YXRpYyB2b2lkIHZoY2lfcmVjdl9yZXRfc3VibWl0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwogCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt2aGNpLSZndDtsb2NrKTsKIAogCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYiwgdXJiLSZndDtzdGF0dXMpOwogCiYjNDM7CXNwaW5fbG9jaygmYW1wO3ZoY2ktJmd0O2xvY2spOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwogCXVzYmlwX2RiZ192aGNpX3J4KCYjMzQ7TGVhdmVcbiYjMzQ7KTsKIH0KIApAQCAtMTczLDkgJiM0MzsxNzYsMTIgQEAgc3RhdGljIHZvaWQgdmhjaV9yZWN2X3JldF91bmxpbmsoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LAogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwogCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCh2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDt2aGNpLSZndDtsb2NrKTsKIAogCQl1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIsIHVyYi0mZ3Q7c3RhdHVzKTsKJiM0MzsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO3ZoY2ktJmd0O2xvY2spOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKIAl9CiAKIAlrZnJlZSh1bmxpbmspOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzUxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVTQi9JUCBWSENJIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFVTQi9JUCBWSENJIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGB2aGNpX2hjZC5jYCBhbmQgYHZoY2lfcnguY2AuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBzb21lb25lJiMzOTtzIG1hZGUgc29tZSBjaGFuZ2VzIHRvIHRoZSBzcGlubG9jay91bmxvY2sgb3BlcmF0aW9ucywgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIFRoZXkmIzM5O3ZlIHJlcGxhY2VkIGBzcGluX3VubG9ja19pcnFyZXN0b3JlYCB3aXRoIGp1c3QgYHNwaW5fdW5sb2NrYCBhbmQgYHNwaW5fbG9ja19pcnFzYXZlYCB3aXRoIGBzcGluX2xvY2tgIGluIGB2aGNpX3VyYl9kZXF1ZXVlYCBhbmQgYHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdGAuICBBbHNvIGluIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAgYW5kIGB2aGNpX3JlY3ZfcmV0X3VubGlua2AsIHRoZXkgYXJlIHBsYXlpbmcgd2l0aCB0aGUgb3JkZXIgb2YgYHNwaW5fdW5sb2NrYCwgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCBhbmQgYHNwaW5fbG9ja2AgYWdhaW4uCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHRoZXkgdHJ5aW5nIHRvIGF2b2lkIGEgc2NlbmFyaW8gd2hlcmUgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCBnZXRzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQ/IE9yLCBpcyB0aGlzIGZpeGluZyBhIGJ1ZyB3aGVyZSBpbnRlcnJ1cHRzIHdlcmUgaW5jb3JyZWN0bHkgcmVzdG9yZWQgYmVmb3JlIGEgZnVuY3Rpb24gdGhhdCBleHBlY3RzIHRoZW0gdG8gYmUgZGlzYWJsZWQ/ICBgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZWAgaXMgc3VwcG9zZWQgdG8gcmVzdG9yZSBpbnRlcnJ1cHRzIHRvIHRoZSBzdGF0ZSB0aGV5IHdlcmUgKmJlZm9yZSogdGhlIGNvcnJlc3BvbmRpbmcgYHNwaW5fbG9ja19pcnFzYXZlYCwgc28gaWYgd2UganVzdCBnbyB3aXRoIGBzcGluX3VubG9ja2Agd2UmIzM5O3JlIGxlYXZpbmcgaW50ZXJydXB0cyBkaXNhYmxlZCwgcmlnaHQ/CgpUaGlua2luZyBtb3JlIGRlZXBseSwgYHZoY2lfdXJiX2RlcXVldWVgIHN0YXJ0cyB3aXRoIGBzcGluX2xvY2tfaXJxc2F2ZWAsIHdoaWNoIGRpc2FibGVzIGludGVycnVwdHMuIElmIHdlIGNoYW5nZSBpdCB0byB1c2luZyBgc3Bpbl91bmxvY2tgIGxhdGVyLCB3ZSYjMzk7cmUgbGVhdmluZyBpbnRlcnJ1cHRzIGRpc2FibGVkLiBUaGVuIHdlJiMzOTtyZSBjYWxsaW5nIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAgd2l0aCBpbnRlcnJ1cHRzICpzdGlsbCogZGlzYWJsZWQuICBBbmQgKnRoZW4qIHdlIGNhbGwgYHNwaW5fbG9ja2AgYW5kLCBmaW5hbGx5LCBgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZWAgYmVmb3JlIHdlIGV4aXQgdGhlIGZ1bmN0aW9uLiAgU28gbm93IGl0JiMzOTtzIGNsZWFyOiBgdXNiX2hjZF9naXZlYmFja191cmJgICppcyogYmVpbmcgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCBiZWNhdXNlIG9mIHRoZXNlIGNoYW5nZXMuIEkmIzM5O2QgYmV0dGVyIGNvbmZpcm0gdGhpcyBieSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlIGZvciBgdmhjaV91cmJfZGVxdWV1ZWAgaW4gYHZoY2lfaGNkLmNgIHRvIG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyBubyBtaXN1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZoY2lfdXJiX2RlcXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM9Mzc9c3RhdGljIGludCB2aGNpX3VyYl9lbnF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYixcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMzgtXHRcdFx0ICAgIGdmcF90IG1lbV9mbGFncyk7XG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jOjM5OnN0YXRpYyBpbnQgdmhjaV91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpO1xuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy00MC1zdGF0aWMgaW50IHZoY2lfc3RhcnQoc3RydWN0IHVzYl9oY2QgKnZoY2lfaGNkKTtcbi0tXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTY5Nz1zdGF0aWMgaW50IHZoY2lfdXJiX2VucXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBnZnBfdCBtZW1fZmxhZ3MpXG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy04OTQtICovXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jOjg5NTpzdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy04OTYte1xuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM9MTM0MD1zdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciB2aGNpX2hjX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTEzNTEtXHQudXJiX2VucXVldWVcdD0gdmhjaV91cmJfZW5xdWV1ZSxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM6MTM1MjpcdC51cmJfZGVxdWV1ZVx0PSB2aGNpX3VyYl9kZXF1ZXVlLFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMzUzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNzkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSB2aGNpX3VyYl9kZXF1ZXVlIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBpdC4gSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gYHZoY2lfdXJiX2RlcXVldWVgLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmNgLiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIGludHJpY2FjaWVzIG9mIFVTQi9JUCYjMzk7cyB2aXJ0dWFsIGhvc3QgY29udHJvbGxlciBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBkZS1xdWV1aW5nLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBtYW5hZ2luZyB0aGUgbGlmZWN5Y2xlIG9mIHJlcXVlc3RzIG9uIHRoZSB2aXJ0dWFsIFVTQiBidXMuIE15IG1lbnRhbCBjaGVja2xpc3QgaW5jbHVkZXMgcXVlc3Rpb25zIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBVU0IgY29yZSwgaG93IGl0IGhhbmRsZXMgZXJyb3IgY29uZGl0aW9ucywgYW5kIGhvdyBpdCBlbnN1cmVzIHByb3BlciBzeW5jaHJvbml6YXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgYSBjcml0aWNhbCBwb2ludCBvZiBjb25jdXJyZW5jeSBjb250cm9sLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciByYWNlIGNvbmRpdGlvbnMgaGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg5NTpcdHN0YXRpYyBpbnQgdmhjaV91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpXG4gODk2Olx0e1xuIDg5NzpcdFx0c3RydWN0IHZoY2lfaGNkICp2aGNpX2hjZCA9IGhjZF90b192aGNpX2hjZChoY2QpO1xuIDg5ODpcdFx0c3RydWN0IHZoY2kgKnZoY2kgPSB2aGNpX2hjZC1cdTAwM2V2aGNpO1xuIDg5OTpcdFx0c3RydWN0IHZoY2lfcHJpdiAqcHJpdjtcbiA5MDA6XHRcdHN0cnVjdCB2aGNpX2RldmljZSAqdmRldjtcbiA5MDE6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gOTAyOlx0XG4gOTAzOlx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiA5MDQ6XHRcbiA5MDU6XHRcdHByaXYgPSB1cmItXHUwMDNlaGNwcml2O1xuIDkwNjpcdFx0aWYgKCFwcml2KSB7XG4gOTA3Olx0XHRcdC8qIFVSQiB3YXMgbmV2ZXIgbGlua2VkISBvciB3aWxsIGJlIHNvb24gZ2l2ZW4gYmFjayBieVxuIDkwODpcdFx0XHQgKiB2aGNpX3J4LiAqL1xuIDkwOTpcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuIDkxMDpcdFx0XHRyZXR1cm4gLUVJRFJNO1xuIDkxMTpcdFx0fVxuIDkxMjpcdFxuIDkxMzpcdFx0e1xuIDkxNDpcdFx0XHRpbnQgcmV0ID0gMDtcbiA5MTU6XHRcbiA5MTY6XHRcdFx0cmV0ID0gdXNiX2hjZF9jaGVja191bmxpbmtfdXJiKGhjZCwgdXJiLCBzdGF0dXMpO1xuIDkxNzpcdFx0XHRpZiAocmV0KSB7XG4gOTE4Olx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiA5MTk6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDkyMDpcdFx0XHR9XG4gOTIxOlx0XHR9XG4gOTIyOlx0XG4gOTIzOlx0XHQgLyogc2VuZCB1bmxpbmsgcmVxdWVzdCBoZXJlPyAqL1xuIDkyNDpcdFx0dmRldiA9IHByaXYtXHUwMDNldmRldjtcbiA5MjU6XHRcbiA5MjY6XHRcdGlmICghdmRldi1cdTAwM2V1ZC50Y3Bfc29ja2V0KSB7XG4gOTI3Olx0XHRcdC8qIHRjcCBjb25uZWN0aW9uIGlzIGNsb3NlZCAqL1xuIDkyODpcdFx0XHRzcGluX2xvY2soXHUwMDI2dmRldi1cdTAwM2Vwcml2X2xvY2spO1xuIDkyOTpcdFxuIDkzMDpcdFx0XHRsaXN0X2RlbChcdTAwMjZwcml2LVx1MDAzZWxpc3QpO1xuIDkzMTpcdFx0XHRrZnJlZShwcml2KTtcbiA5MzI6XHRcdFx0dXJiLVx1MDAzZWhjcHJpdiA9IE5VTEw7XG4gOTMzOlx0XG4gOTM0Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZkZXYtXHUwMDNlcHJpdl9sb2NrKTtcbiA5MzU6XHRcbiA5MzY6XHRcdFx0LypcbiA5Mzc6XHRcdFx0ICogSWYgdGNwIGNvbm5lY3Rpb24gaXMgYWxpdmUsIHdlIGhhdmUgc2VudCBDTURfVU5MSU5LLlxuIDkzODpcdFx0XHQgKiB2aGNpX3J4IHdpbGwgcmVjZWl2ZSBSRVRfVU5MSU5LIGFuZCBnaXZlIGJhY2sgdGhlIFVSQi5cbiA5Mzk6XHRcdFx0ICogT3RoZXJ3aXNlLCB3ZSBnaXZlIGJhY2sgaXQgaGVyZS5cbiA5NDA6XHRcdFx0ICovXG4gOTQxOlx0XHRcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTtcbiA5NDI6XHRcbiA5NDM6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiA5NDQ6XHRcdFx0dXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHVyYi1cdTAwM2VzdGF0dXMpO1xuIDk0NTpcdFx0XHRzcGluX2xvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiA5NDY6XHRcbiA5NDc6XHRcdH0gZWxzZSB7XG4gOTQ4Olx0XHRcdC8qIHRjcCBjb25uZWN0aW9uIGlzIGFsaXZlICovXG4gOTQ5Olx0XHRcdHN0cnVjdCB2aGNpX3VubGluayAqdW5saW5rO1xuIDk1MDpcdFxuIDk1MTpcdFx0XHRzcGluX2xvY2soXHUwMDI2dmRldi1cdTAwM2Vwcml2X2xvY2spO1xuIDk1MjpcdFxuIDk1MzpcdFx0XHQvKiBzZXR1cCBDTURfVU5MSU5LIHBkdSAqL1xuIDk1NDpcdFx0XHR1bmxpbmsgPSBremFsbG9jX29iaihzdHJ1Y3QgdmhjaV91bmxpbmssIEdGUF9BVE9NSUMpO1xuIDk1NTpcdFx0XHRpZiAoIXVubGluaykge1xuIDk1NjpcdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZkZXYtXHUwMDNlcHJpdl9sb2NrKTtcbiA5NTc6XHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuIDk1ODpcdFx0XHRcdHVzYmlwX2V2ZW50X2FkZChcdTAwMjZ2ZGV2LVx1MDAzZXVkLCBWREVWX0VWRU5UX0VSUk9SX01BTExPQyk7XG4gOTU5Olx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gOTYwOlx0XHRcdH1cbiA5NjE6XHRcbiA5NjI6XHRcdFx0dW5saW5rLVx1MDAzZXNlcW51bSA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNnZoY2lfaGNkLVx1MDAzZXNlcW51bSk7XG4gOTYzOlx0XHRcdGlmICh1bmxpbmstXHUwMDNlc2VxbnVtID09IDB4ZmZmZilcbiA5NjQ6XHRcdFx0XHRkZXZfaW5mbyhoY2RfZGV2KGhjZCksIFwmIzM0O3NlcW51bSBtYXhcXG5cJiMzNDspO1xuIDk2NTpcdFxuIDk2NjpcdFx0XHR1bmxpbmstXHUwMDNldW5saW5rX3NlcW51bSA9IHByaXYtXHUwMDNlc2VxbnVtO1xuIDk2NzpcdFxuIDk2ODpcdFx0XHQvKiBzZW5kIGNtZF91bmxpbmsgYW5kIHRyeSB0byBjYW5jZWwgdGhlIHBlbmRpbmcgVVJCIGluIHRoZVxuIDk2OTpcdFx0XHQgKiBwZWVyICovXG4gOTcwOlx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2dW5saW5rLVx1MDAzZWxpc3QsIFx1MDAyNnZkZXYtXHUwMDNldW5saW5rX3R4KTtcbiA5NzE6XHRcdFx0d2FrZV91cChcdTAwMjZ2ZGV2LVx1MDAzZXdhaXRxX3R4KTtcbiA5NzI6XHRcbiA5NzM6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2dmRldi1cdTAwM2Vwcml2X2xvY2spO1xuIDk3NDpcdFx0fVxuIDk3NTpcdFxuIDk3NjpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiA5Nzc6XHRcbiA5Nzg6XHRcdHVzYmlwX2RiZ192aGNpX2hjKFwmIzM0O2xlYXZlXFxuXCYjMzQ7KTtcbiA5Nzk6XHRcdHJldHVybiAwO1xuIDk4MDpcdH1cbiA5ODE6XHRcbiA5ODI6XHRzdGF0aWMgdm9pZCB2aGNpX2NsZWFudXBfdW5saW5rX2xpc3Qoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LFxuIDk4MzpcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp1bmxpbmtfbGlzdClcbiA5ODQ6XHR7XG4gOTg1Olx0XHRzdHJ1Y3QgdmhjaV9oY2QgKnZoY2lfaGNkID0gdmRldl90b192aGNpX2hjZCh2ZGV2KTtcbiA5ODY6XHRcdHN0cnVjdCB1c2JfaGNkICpoY2QgPSB2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpO1xuIDk4NzpcdFx0c3RydWN0IHZoY2kgKnZoY2kgPSB2aGNpX2hjZC1cdTAwM2V2aGNpO1xuIDk4ODpcdFx0c3RydWN0IHZoY2lfdW5saW5rICp1bmxpbmssICp0bXA7XG4gOTg5Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDk5MDpcdFxuIDk5MTpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gOTkyOlx0XHRzcGluX2xvY2soXHUwMDI2dmRldi1cdTAwM2Vwcml2X2xvY2spO1xuIDk5MzpcdFxuIDk5NDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCB1bmxpbmtfbGlzdCwgbGlzdCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5OTEKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2aGNpX3VyYl9kZXF1ZXVlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgdmhjaV91cmJfZGVxdWV1ZWAgd2l0aGluIHRoZSBgdmhjaV9oY2RgIGRyaXZlci4gSXQmIzM5O3MgbWFraW5nIGEgY3J1Y2lhbCBjaGFuZ2UgYXJvdW5kIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAuIFNwZWNpZmljYWxseSwgaXQmIzM5O3Mgc3dhcHBpbmcgYHNwaW5fdW5sb2NrX2lycXJlc3RvcmVgIGFuZCBgc3Bpbl9sb2NrX2lycXNhdmVgIHdpdGggdGhlaXIgc2ltcGxlciBgc3Bpbl91bmxvY2tgIGFuZCBgc3Bpbl9sb2NrYCBjb3VudGVycGFydHMsIHJlc3BlY3RpdmVseS4gVGhlIGRpZmZlcmVuY2UgaXMgdGhlICYjMzQ7aXJxJiMzNDsgaGFuZGxpbmcg4oCTIHRoZXNlIG5ldyBjYWxscyBsZWF2ZSBpbnRlcnJ1cHRzIGRpc2FibGVkIGR1cmluZyB0aGUgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCBjYWxsLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBob3cgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCBpcyAqc3VwcG9zZWQqIHRvIGJlaGF2ZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIHNwZWNpZmljYWxseSB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gZXhwZWN0cyBpbnRlcnJ1cHRzIHRvIGJlIGRpc2FibGVkLiBPaCwgaG9sZCBvbi4uLiBsZXQgbWUgY2hlY2sgdGhlIGRvY3VtZW50YXRpb24hIEFoLCB0aGVyZSBpdCBpczogJiMzNDtUaGlzIGZ1bmN0aW9uICptdXN0KiBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLiYjMzQ7IEJpbmdvLgoKU28sIHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgZml4aW5nIGEgYnVnLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgcG90ZW50aWFsbHkgY2FsbGluZyBgdXNiX2hjZF9naXZlYmFja191cmJgIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLCB3aGljaCBjb3VsZCBsZWFkIHRvIGRlYWRsb2NrcyBvciBvdGhlciBuYXN0eSByYWNlIGNvbmRpdGlvbnMuIEkgY2FuIHNlZSBob3cgdGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYyBpbiB0aGUgYHVzYmlwYCBkcml2ZXIuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgYnVnIGZpeCByZWFsbHksIGJ1dCBhIG5lY2Vzc2FyeSBvbmUgdG8gZW5zdXJlIHRoZSBkcml2ZXImIzM5O3Mgcm9idXN0bmVzcy4KCkkgc2hvdWxkIHByb2JhYmx5IGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggYHZoY2lfcmVjdl9yZXRfc3VibWl0YCBpbiBgZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWxhdGVkIGludGVyYWN0aW9ucy4gSXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZmxvdyBvZiBjb250cm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5NTpcdFx0aWYgKHVzYmlwX2RiZ19mbGFnX3ZoY2lfcngpXG4gIDk2Olx0XHRcdHVzYmlwX2R1bXBfdXJiKHVyYik7XG4gIDk3Olx0XG4gIDk4Olx0XHRpZiAodXJiLVx1MDAzZW51bV9zZ3MpXG4gIDk5Olx0XHRcdHVyYi1cdTAwM2V0cmFuc2Zlcl9mbGFncyBcdTAwMjY9IH5VUkJfRE1BX01BUF9TRztcbiAxMDA6XHRcbiAxMDE6XHRcdHVzYmlwX2RiZ192aGNpX3J4KFwmIzM0O25vdyBnaXZlYmFjayB1cmIgJXVcXG5cJiMzNDssIHBkdS1cdTAwM2ViYXNlLnNlcW51bSk7XG4gMTAyOlx0XG4gMTAzOlx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiAxMDQ6XHRcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYik7XG4gMTA1Olx0XHRzcGluX3VubG9jayhcdTAwMjZ2aGNpLVx1MDAzZWxvY2spO1xuIDEwNjpcdFxuIDEwNzpcdFx0dXNiX2hjZF9naXZlYmFja191cmIodmhjaV9oY2RfdG9faGNkKHZoY2lfaGNkKSwgdXJiLCB1cmItXHUwMDNlc3RhdHVzKTtcbiAxMDg6XHRcbiAxMDk6XHRcdHNwaW5fbG9jayhcdTAwMjZ2aGNpLVx1MDAzZWxvY2spO1xuIDExMDpcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiAxMTE6XHRcbiAxMTI6XHRcdHVzYmlwX2RiZ192aGNpX3J4KFwmIzM0O0xlYXZlXFxuXCYjMzQ7KTtcbiAxMTM6XHR9XG4gMTE0Olx0XG4gMTE1Olx0c3RhdGljIHN0cnVjdCB2aGNpX3VubGluayAqZGVxdWV1ZV9wZW5kaW5nX3VubGluayhzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXG4gMTE2Olx0XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUpXG4gMTE3Olx0e1xuIDExODpcdFx0c3RydWN0IHZoY2lfdW5saW5rICp1bmxpbmssICp0bXA7XG4gMTE5Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIDEyMDpcdFxuIDEyMTpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmRldi1cdTAwM2Vwcml2X2xvY2ssIGZsYWdzKTtcbiAxMjI6XHRcbiAxMjM6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bmxpbmssIHRtcCwgXHUwMDI2dmRldi1cdTAwM2V1bmxpbmtfcngsIGxpc3QpIHtcbiAxMjQ6XHRcdFx0cHJfaW5mbyhcJiMzNDt1bmxpbmstXHUwMDNlc2VxbnVtICVsdVxcblwmIzM0OywgdW5saW5rLVx1MDAzZXNlcW51bSk7XG4gMTI1Olx0XHRcdGlmICh1bmxpbmstXHUwMDNlc2VxbnVtID09IHBkdS1cdTAwM2ViYXNlLnNlcW51bSkge1xuIDEyNjpcdFx0XHRcdHVzYmlwX2RiZ192aGNpX3J4KFwmIzM0O2ZvdW5kIHBlbmRpbmcgdW5saW5rLCAlbHVcXG5cJiMzNDssXG4gMTI3Olx0XHRcdFx0XHRcdCAgdW5saW5rLVx1MDAzZXNlcW51bSk7XG4gMTI4Olx0XHRcdFx0bGlzdF9kZWwoXHUwMDI2dW5saW5rLVx1MDAzZWxpc3QpO1xuIDEyOTpcdFxuIDEzMDpcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmRldi1cdTAwM2Vwcml2X2xvY2ssIGZsYWdzKTtcbiAxMzE6XHRcdFx0XHRyZXR1cm4gdW5saW5rO1xuIDEzMjpcdFx0XHR9XG4gMTMzOlx0XHR9XG4gMTM0Olx0XG4gMTM1Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZkZXYtXHUwMDNlcHJpdl9sb2NrLCBmbGFncyk7XG4gMTM2Olx0XG4gMTM3Olx0XHRyZXR1cm4gTlVMTDtcbiAxMzg6XHR9XG4gMTM5Olx0XG4gMTQwOlx0c3RhdGljIHZvaWQgdmhjaV9yZWN2X3JldF91bmxpbmsoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LFxuIDE0MTpcdFx0XHRcdFx0IHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSlcbiAxNDI6XHR7XG4gMTQzOlx0XHRzdHJ1Y3QgdmhjaV9oY2QgKnZoY2lfaGNkID0gdmRldl90b192aGNpX2hjZCh2ZGV2KTtcbiAxNDQ6XHRcdHN0cnVjdCB2aGNpICp2aGNpID0gdmhjaV9oY2QtXHUwMDNldmhjaTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDkwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzIGluIHRoZSBVU0JJUCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoZXNlIGNoYW5nZXMgdG8gYHZoY2lfcmVjdl9yZXRfc3VibWl0YCBhbmQgYHZoY2lfcmVjdl9yZXRfdW5saW5rYCwgYW5kIHRoZXkgc2VlbSB0byBpbnZvbHZlIGtlZXBpbmcgaW50ZXJydXB0cyBkaXNhYmxlZCBkdXJpbmcgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYC4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGNhdGNoZXMgbXkgZXllIGFzIGEgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0LiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgYHVzYmlwYCBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgdmlydHVhbCBVU0IgY29udHJvbGxlciwgd2hpY2ggaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgcmVhY2hhYmxlIGluIHRob3NlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KClNpbmNlIHRoZSBmdW5jdGlvbnMgYHZoY2lfdXJiX2RlcXVldWVgLCBgdmhjaV9yZWN2X3JldF9zdWJtaXRgLCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLCBhbmQgYHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdGAgYXJlIGFsbCBwYXJ0IG9mIHRoYXQgYHVzYmlwYCBkcml2ZXIsIEkgdGhpbmsgYSB0aG9yb3VnaCBsb29rIHRocm91Z2ggdGhlc2Ugd291bGQgYmUgYSBnb29kIGlkZWEuCgpJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBgdXNiaXBgIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGNvbmZpZ3VyZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy4gVGhhdCBjb3VsZCBwcm92aWRlIG1vcmUgY29udGV4dCBvbiB0aGUgYXR0YWNrIHN1cmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JJUF9WSENJX0hDRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3VzYmlwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvdXNiaXAvS2NvbmZpZz0zPWNvbmZpZyBVU0JJUF9DT1JFXG4tLVxuZHJpdmVycy91c2IvdXNiaXAvS2NvbmZpZy0yMC1cbmRyaXZlcnMvdXNiL3VzYmlwL0tjb25maWc6MjE6Y29uZmlnIFVTQklQX1ZIQ0lfSENEXG5kcml2ZXJzL3VzYi91c2JpcC9LY29uZmlnLTIyLVx0dHJpc3RhdGUgXCYjMzQ7VkhDSSBoY2RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk5MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgVVNCL0lQIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIG92ZXIgdG8gdGhlIGBkcml2ZXJzL3VzYi91c2JpcC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjEuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIGNvbmZpZ3VyaW5nIHRoZSBVU0IvSVAgbW9kdWxlIHByb2JhYmx5IGxpZXMsIGdpdmVuIHRoZSBsb2NhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGVyZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugd2hldGhlciB0aGUgbW9kdWxlIGl0c2VsZiBpcyBlbmFibGVkLCBhbnkgc3BlY2lmaWMgZmVhdHVyZXMgb3IgbW9kZXMsIGFuZCBob3BlZnVsbHkgc29tZSBoZWxwIHRleHQgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGNsYXJpZnkgZXhhY3RseSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBVU0Igc3Vic3lzdGVtIGFuZCB0aGUgYnJvYWRlciBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGEgdXNlciBjb25maWd1cmVzIFVTQi9JUCBhbmQgd2hhdCBjaG9pY2VzIHRoZXkgY2FuIG1ha2UuIExpbmUgMjEsIGl0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3VzYmlwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIFVTQklQX0NPUkVcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQi9JUCBzdXBwb3J0XCYjMzQ7XG4gICA1Olx0XHRkZXBlbmRzIG9uIE5FVFxuICAgNjpcdFx0c2VsZWN0IFVTQl9DT01NT05cbiAgIDc6XHRcdHNlbGVjdCBTR0xfQUxMT0NcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhpcyBlbmFibGVzIHB1c2hpbmcgVVNCIHBhY2tldHMgb3ZlciBJUCB0byBhbGxvdyByZW1vdGVcbiAgMTA6XHRcdCAgbWFjaGluZXMgZGlyZWN0IGFjY2VzcyB0byBVU0IgZGV2aWNlcy4gSXQgcHJvdmlkZXMgdGhlXG4gIDExOlx0XHQgIFVTQi9JUCBjb3JlIHRoYXQgaXMgcmVxdWlyZWQgYnkgYm90aCBkcml2ZXJzLlxuICAxMjpcdFxuICAxMzpcdFx0ICBGb3IgbW9yZSBkZXRhaWxzLCBhbmQgdG8gZ2V0IHRoZSB1c2Vyc3BhY2UgdXRpbGl0eVxuICAxNDpcdFx0ICBwcm9ncmFtcywgcGxlYXNlIHNlZSBcdTAwM2NodHRwOi8vdXNiaXAuc291cmNlZm9yZ2UubmV0L1x1MDAzZS5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgMTc6XHRcdCAgYmUgY2FsbGVkIHVzYmlwLWNvcmUuXG4gIDE4Olx0XG4gIDE5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIFVTQklQX1ZIQ0lfSENEXG4gIDIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtWSENJIGhjZFwmIzM0O1xuICAyMzpcdFx0ZGVwZW5kcyBvbiBVU0JJUF9DT1JFIFx1MDAyNlx1MDAyNiBVU0JcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgVGhpcyBlbmFibGVzIHRoZSBVU0IvSVAgdmlydHVhbCBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLFxuICAyNjpcdFx0ICB3aGljaCBpcyBydW4gb24gdGhlIHJlbW90ZSBtYWNoaW5lLlxuICAyNzpcdFxuICAyODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMjk6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZoY2ktaGNkLlxuICAzMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjE0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgVVNCSVAgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgVVNCSVAgY29kZS4gQmFzZWQgb24gdGhlIGluaXRpYWwgcmVwb3J0cywgaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgemVyb2luZyBpbiBvbiBhIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byBob3cgVVNCIG92ZXIgSVAgaXMgaGFuZGxlZC4gTXkgaW1tZWRpYXRlIGNoZWNrbGlzdCBzdGFydHMgd2l0aCBjb25maXJtaW5nIHRoZSBjcml0aWNhbCBtb2R1bGVzIHdlIG5lZWQgdG8gY29uc2lkZXI6IGBVU0JJUF9WSENJX0hDRGAsIGBVU0JJUF9DT1JFYCwgYFVTQmAsIGFuZCBgTkVUYC4gVGhlc2UgYXJlIHRoZSBmb3VuZGF0aW9uYWwgY29tcG9uZW50cyBmb3IgbWFuYWdpbmcgdGhlIHZpcnR1YWwgaG9zdCBjb250cm9sbGVyIGFuZCBuZXR3b3JrIGNvbW11bmljYXRpb24uCgpOb3csIG15IGluaXRpYWwgaHVuY2gsIGJhc2VkIG9uIGV4cGVyaWVuY2UsIGlzIHRoYXQgdGhlIHJlYWwgbWVhdCBvZiB0aGUgcHJvYmxlbSB3aWxsIGJlIGZvdW5kIGluIHRoZSBhY3R1YWwgZnVuY3Rpb24gY2FsbHMgZGVhbGluZyB3aXRoIFVSQiAoVVNCIFJlcXVlc3QgQmxvY2spIGhhbmRsaW5nIGFuZCB1bmxpbmtpbmcuIFRoZSBmdW5jdGlvbnMgdGhhdCBzdGFuZCBvdXQgYXMgYXJlYXMgb2YgY3JpdGljYWwgaW1wb3J0YW5jZSBhcmU6IGB2aGNpX3VyYl9kZXF1ZXVlYCwgYHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdGAsIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAsIGFuZCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLiBUaGVzZSBhcmUgYWxsIHByaW1lIHN1c3BlY3RzIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBpbmNvcnJlY3QgZXJyb3IgaGFuZGxpbmcsIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGZsYXdzLgoKSG9sZCBvbiBhIHNlY29uZC4uLiBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCBpcyBtYXJrZWQgYXMgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlZCBteSBpbnRlcmVzdC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gaW50ZXJuYWwgaGVscGVycy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgaXQmIzM5O3MgYW4gQVBJIGVudHJ5cG9pbnQgZXhwb3NlZCB0byBvdGhlciBtb2R1bGVzLCBvciBpZiBpdCYjMzk7cyBvbmx5IGNhbGxlZCBpbnRlcm5hbGx5IHdpdGhpbiB0aGUgYHZoY2lgIG1vZHVsZS4gVGhhdCB3aWxsIGdyZWF0bHkgYWZmZWN0IHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIgYW5kIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZoY2lfY2xlYW51cF91bmxpbmtfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3VzYmlwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTg5NT1zdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKVxuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtOTgxLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzo5ODI6c3RhdGljIHZvaWQgdmhjaV9jbGVhbnVwX3VubGlua19saXN0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldixcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtOTgzLVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICp1bmxpbmtfbGlzdClcbi0tXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTEwMjU9c3RhdGljIHZvaWQgdmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXAoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMTAyNy1cdC8qIGdpdmUgYmFjayBVUkIgb2YgdW5zZW50IHVubGluayByZXF1ZXN0ICovXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jOjEwMjg6XHR2aGNpX2NsZWFudXBfdW5saW5rX2xpc3QodmRldiwgXHUwMDI2dmRldi1cdTAwM2V1bmxpbmtfdHgpO1xuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDI5LVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDMwLVx0LyogZ2l2ZSBiYWNrIFVSQiBvZiB1bmFuc3dlcmVkIHVubGluayByZXF1ZXN0ICovXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jOjEwMzE6XHR2aGNpX2NsZWFudXBfdW5saW5rX2xpc3QodmRldiwgXHUwMDI2dmRldi1cdTAwM2V1bmxpbmtfcngpO1xuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDMyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ1NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBWSENJIENsZWFudXAgUHJvY2VzcyoqCgpSaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBjbGVhbnVwIHNlcXVlbmNlIEkmIzM5O20gbG9va2luZyBhdCBvcmlnaW5hdGVzIGZyb20gYHZoY2lfZGV2aWNlX3VubGlua19jbGVhbnVwYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBjYWxsZWQgYnkgYHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbmAuIFNvLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB1bmxpbmtpbmcgb3Igc2h1dHRpbmcgZG93biBhIGNvbm5lY3Rpb24sIGFuZCB0aGUgY2xlYW51cCBwcm9jZXNzIGtpY2tzIGluLgoKTm93LCBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgVVJCcyBhcmUgbWFuYWdlZCBkdXJpbmcgdGhpcyBwcm9jZXNzLiBgdmhjaV91cmJfZGVxdWV1ZWAgaXMgd2hhdCBJJiMzOTttIGZvY3VzaW5nIG9uOyBpdCYjMzk7cyB0aGUgc3BlY2lmaWMgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB0aGUgSENEIHVzZXMgZm9yIHRoZSBgLnVyYl9kZXF1ZXVlYCBvcGVyYXRpb24uIFRoaXMgaXMgd2hlcmUgd2UgbmVlZCB0byBlbnN1cmUgdGhpbmdzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4KCkZ1cnRoZXIgZG93biB0aGUgbGluZSwgb24gdGhlIHJlY2VpdmUgcGF0aCwgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCBhbmQgYHZoY2lfcmVjdl9yZXRfdW5saW5rYCBhcmUgY2FsbGVkIGZyb20gYHZoY2lfcnhfcGR1YC4gVGhpcyBzdWdnZXN0cyB0aGVyZSYjMzk7cyBzb21lIGludGVyYWN0aW9uIHdpdGggVVJCIHN1Ym1pc3Npb25zIGFuZCB1bmxpbmtpbmcgaGFwcGVuaW5nIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZyBmcm9tIHRoZSByZWNlaXZlIHF1ZXVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aGNpX3JlY3ZfcmV0X3N1Ym1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3VzYmlwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmM9MTM9c3RydWN0IHVyYiAqcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwgX191MzIgc2VxbnVtKVxuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYy01NC1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYzo1NTpzdGF0aWMgdm9pZCB2aGNpX3JlY3ZfcmV0X3N1Ym1pdChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMtNTYtXHRcdFx0XHQgc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KVxuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYz0yMDM9c3RhdGljIHZvaWQgdmhjaV9yeF9wZHUoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpXG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jLTI0Ny1cdGNhc2UgVVNCSVBfUkVUX1NVQk1JVDpcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYzoyNDg6XHRcdHZoY2lfcmVjdl9yZXRfc3VibWl0KHZkZXYsIFx1MDAyNnBkdSk7XG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMtMjQ5LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNzEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdmhjaV9yeF9wZHVgIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgdmhjaV9yeF9wZHVgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB2aGNpX3J4X2xvb3BgLCB3aGljaCBpcywgaWYgSSYjMzk7bSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCBhIGtlcm5lbCB0aHJlYWQuIFRoYXQgZ2l2ZXMgbWUgYSBmZXcga2V5IGZ1bmN0aW9ucyB0byByZWFsbHkgZm9jdXMgb246IGB2aGNpX3VyYl9kZXF1ZXVlYCwgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCwgYW5kIGB2aGNpX3JlY3ZfcmV0X3VubGlua2AuIFRoZXNlIGFyZSBsaWtlbHkgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgdGhlIGNyaXRpY2FsIGludGVyYWN0aW9ucy4KCkhtbSwgYnV0IHdhaXQuLi5JIHNlZSBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCwgdGhhdCYjMzk7cyBzdGF0aWMuIFRoYXQmIzM5O3Mgbm90IGFzIGhlbHBmdWwuIE1heWJlIEkgc2hvdWxkIGxvb2sgYXQgYHZoY2lfZGV2aWNlX3VubGlua19jbGVhbnVwYCBvciBwZXJoYXBzIGV2ZW4gYHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbmA/IExldCBtZSBzaGlmdCBteSBmb2N1cyB0byBgdmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXBgIGFuZCBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIGFib3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aGNpX2RldmljZV91bmxpbmtfY2xlYW51cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3VzYmlwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTk4Mj1zdGF0aWMgdm9pZCB2aGNpX2NsZWFudXBfdW5saW5rX2xpc3Qoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LFxuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMTAyNC1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM6MTAyNTpzdGF0aWMgdm9pZCB2aGNpX2RldmljZV91bmxpbmtfY2xlYW51cChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTEwMjYte1xuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM9MTAzOT1zdGF0aWMgdm9pZCB2aGNpX3NodXRkb3duX2Nvbm5lY3Rpb24oc3RydWN0IHVzYmlwX2RldmljZSAqdWQpXG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDY4LVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzoxMDY5Olx0dmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXAodmRldik7XG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTEwNzAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjgxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBVU0IvSVAgVmlydHVhbCBIb3N0IENvbnRyb2xsZXIgKFZIQ0kpIFNodXRkb3duIGFuZCBEYXRhIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbmAgZnVuY3Rpb24sIHdoaWNoIGlzLCBhcyBJIHJlY2FsbCwgdGhlIHNodXRkb3duIGNhbGxiYWNrIGZvciB0aGUgYHVzYmlwX2RldmljZWAgd2l0aGluIHRoZSBWSENJIGZyYW1ld29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cuIExldCBtZSB6ZXJvIGluIG9uIGB2aGNpX3VyYl9kZXF1ZXVlYCwgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCwgYW5kIGB2aGNpX3JlY3ZfcmV0X3VubGlua2AuIFRoZXNlIHNlZW0gY3JpdGljYWwgZm9yIGhhbmRsaW5nIFVSQiAoVVNCIFJlcXVlc3QgQmxvY2spIGRhdGEgZHVyaW5nIHRoZSBzaHV0ZG93biBwcm9jZXNzLgoKV2FpdCBhIHNlY29uZOKApiBgdmhjaV9yZWN2X3JldF9zdWJtaXRgIGFuZCBgdmhjaV9yZWN2X3JldF91bmxpbmtgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMuIEludGVyZXN0aW5nLiBBcmUgdGhleSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlcj8gR2l2ZW4gdGhlaXIgYXBwYXJlbnQgc2l6ZSwgdGhleSBhcmUgcHJvYmFibHkgbm90IGlubGluZWQuIFRvIGNvbmZpcm0gbXkgc3VzcGljaW9uLCBJIHNob3VsZCBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRoZXkgYXJlIGluZGVlZCBzdGF0aWMgZnVuY3Rpb25zLiBZZXAsIHRoZXkgYXJlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4KCk5vdywgY2FuIEkgbGV2ZXJhZ2UgYHZoY2lfcnhfcGR1YCBpbiB0aGlzIGNvbnRleHQ/IExldCBtZSBjaGVjayBpdHMgZGVjbGFyYXRpb27igKYgaG1tLCBpdCYjMzk7cyBhbHNvIHN0YXRpYy4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgcG90ZW50aWFsbHkgb2ZmZXJpbmcgc29tZSBzaGFyZWQgbG9naWMuCgpGaW5hbGx5LCBJ4oCZbGwgY2hlY2sgYHZoY2lfcnhfbG9vcGAsIHdoaWNoIGlzIHRoZSB0aHJlYWQgZnVuY3Rpb24uIE5vLCBpdOKAmXMgbm90IHN0YXRpYy4gT2theS4gVGhhdCBjbGFyaWZpZXMgdGhlIHNjb3BlIG9mIGVhY2ggZnVuY3Rpb24mIzM5O3MgYWNjZXNzaWJpbGl0eS4gSSB3aWxsIGtlZXAgdGhpcyBpbiBtaW5kIGFzIEkgY29udGludWUgdG8gYW5hbHl6ZSB0aGUgc2h1dGRvd24gc2VxdWVuY2UgYW5kIGhvdyBkYXRhIHRyYW5zZmVycyBhcmUgaGFuZGxlZCBpbiB0aGUgdmlydHVhbGl6ZWQgVVNCIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAxOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aGNpX3J4X2xvb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi91c2JpcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvdXNiaXAvdmhjaS5oPTEzMz1zdHJ1Y3QgdXJiICpwaWNrdXBfdXJiX2FuZF9mcmVlX3ByaXYoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LCBfX3UzMiBzZXFudW0pO1xuZHJpdmVycy91c2IvdXNiaXAvdmhjaS5oOjEzNDppbnQgdmhjaV9yeF9sb29wKHZvaWQgKmRhdGEpO1xuZHJpdmVycy91c2IvdXNiaXAvdmhjaS5oLTEzNS1cbi0tXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmM9MjAzPXN0YXRpYyB2b2lkIHZoY2lfcnhfcGR1KHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKVxuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYy0yNjEtXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmM6MjYyOmludCB2aGNpX3J4X2xvb3Aodm9pZCAqZGF0YSlcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYy0yNjMte1xuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfc3lzZnMuYz0zMTU9c3RhdGljIHNzaXplX3QgYXR0YWNoX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9zeXNmcy5jLTM4MS1cdC8qIGNyZWF0ZSB0aHJlYWRzIGJlZm9yZSBsb2NraW5nICovXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3N5c2ZzLmM6MzgyOlx0dGNwX3J4ID0ga3RocmVhZF9jcmVhdGUodmhjaV9yeF9sb29wLCBcdTAwMjZ2ZGV2LVx1MDAzZXVkLCBcJiMzNDt2aGNpX3J4XCYjMzQ7KTtcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfc3lzZnMuYy0zODMtXHRpZiAoSVNfRVJSKHRjcF9yeCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIGB2aGNpX3VyYl9kZXF1ZXVlYCoqCgpPa2F5LCBzbyBgdmhjaV91cmJfZGVxdWV1ZWAgaXMgYWxzbyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSW50ZXJlc3RpbmcuIFRoYXQgaW1tZWRpYXRlbHkgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQuIFRpbWUgdG8gaW52ZXN0aWdhdGUgdGhpcyBvbmUgZGlyZWN0bHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBWaXJ0dWFsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgY29kZS4gVGhpcyBjb3VsZCBiZSBhIGNyaXRpY2FsIHBvaW50IG9mIGNvbnRyb2wsIG9yIG1heWJlIGp1c3QgYSBoZWxwZnVsIGludGVybmFsIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhjaV91cmJfZGVxdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3VzYmlwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTM3PXN0YXRpYyBpbnQgdmhjaV91cmJfZW5xdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTM4LVx0XHRcdCAgICBnZnBfdCBtZW1fZmxhZ3MpO1xuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzozOTpzdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTtcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtNDAtc3RhdGljIGludCB2aGNpX3N0YXJ0KHN0cnVjdCB1c2JfaGNkICp2aGNpX2hjZCk7XG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYz02OTc9c3RhdGljIGludCB2aGNpX3VyYl9lbnF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgZ2ZwX3QgbWVtX2ZsYWdzKVxuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtODk0LSAqL1xuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzo4OTU6c3RhdGljIGludCB2aGNpX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cylcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtODk2LXtcbi0tXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTEzNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgdmhjaV9oY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMzUxLVx0LnVyYl9lbnF1ZXVlXHQ9IHZoY2lfdXJiX2VucXVldWUsXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jOjEzNTI6XHQudXJiX2RlcXVldWVcdD0gdmhjaV91cmJfZGVxdWV1ZSxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMTM1My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNzQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdW5jdGlvbiBJbmxpbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIGxpa2VseSB0byBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gU2luY2UgSSBrbm93IHRoZXNlIGFyZSBzdGF0aWMsIEkgc2hvdWxkIHN0YXJ0IGJ5IGV4cGxpY2l0bHkgbGlzdGluZyB0aGUgZnVuY3Rpb25zIHRoYXQgKm1pZ2h0IG5vdCogYmUuIEkmIzM5O20gdGhpbmtpbmcgb2YgYHZoY2lfcnhfbG9vcGAgYXMgYSBzdGFydGluZyBwb2ludCwgYW5kIG1heWJlIGB2aGNpX3VyYl9kZXF1ZXVlYCB0b28sIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYy4gVGhlIGFkZHJlc3Mgb2YgYHZoY2lfdXJiX2RlcXVldWVgIGlzIHRha2VuIHdoaWNoIG1lYW5zIGlubGluaW5nIGlzIGxlc3MgbGlrZWx5LiBBaCwgeWVhaCwgaXQmIzM5O3MgYXNzaWduZWQgdG8gdGhlIGAudXJiX2RlcXVldWVgIGZpZWxkIG9mIGEgc3RydWN0LCBzbyBkZWZpbml0ZWx5IG5vdCBnZXR0aW5nIGlubGluZWQuIEdvb2QgY2F0Y2guCgpOb3csIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAgYW5kIGB2aGNpX3JlY3ZfcmV0X3VubGlua2AgYXJlIGNhbGxlZCBmcm9tIHdpdGhpbiBgdmhjaV9yeF9wZHVgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGB2aGNpX3J4X2xvb3BgLiBMZXQmIzM5O3Mgc2VlIGlmIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAgaXMgYXNzaWduZWQgdG8gYW55dGhpbmcsIG9yIGlmIGl0JiMzOTtzIGp1c3QgY2FsbGVkIGRpcmVjdGx5LiBSaWdodCwgaXQmIzM5O3MgY2FsbGVkIGRpcmVjdGx5IHdpdGhpbiBhIHN3aXRjaCBzdGF0ZW1lbnQgaW5zaWRlIGB2aGNpX3J4X3BkdWAuIFRoYXQmIzM5O3MgYW4gaW50ZXJlc3RpbmcgY2FzZTsgaXQgKm1pZ2h0KiBiZSBpbmxpbmVkLgoKU28sIHRvIGJlIGNvbnNlcnZhdGl2ZSwgSSBzaG91bGQgYmFzZSBteSB3b3JrIGFyb3VuZCBgdmhjaV9yeF9sb29wYCBhbmQgYHZoY2lfdXJiX2RlcXVldWVgLiBMZXQmIzM5O3Mga2VlcCB0aG9zZSBhdCB0aGUgZm9yZWZyb250LgoKT2gsIGFuZCBgdmhjaV9zaHV0ZG93bl9jb25uZWN0aW9uYCBpcyBhc3NpZ25lZCB0byB0aGUgYC5zaHV0ZG93bmAgZmllbGQgaW4gdGhlIGB1c2JpcF9kZXZpY2VgIHN0cnVjdC4gSSBzaG91bGQgZGVmaW5pdGVseSBpbnZlc3RpZ2F0ZSB0aGF0IG9uZSBmdXJ0aGVyLCBzaW5jZSBpdCBsb29rcyB0byBiZSBhbiBpbXBvcnRhbnQgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhjaV9zaHV0ZG93bl9jb25uZWN0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvdXNiaXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM9MTAyNT1zdGF0aWMgdm9pZCB2aGNpX2RldmljZV91bmxpbmtfY2xlYW51cChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYpXG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDM4LSAqL1xuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzoxMDM5OnN0YXRpYyB2b2lkIHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbihzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZClcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMTA0MC17XG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDgzLVx0ICogTk9URTogdmhjaV9kZXF1ZXVlKCkgbXVzdCBiZSBjb25zaWRlcmVkIGNhcmVmdWxseS4gV2hlbiBzaHV0dGluZyBkb3duXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jOjEwODQ6XHQgKiBhIGNvbm5lY3Rpb24sIHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbigpIGV4cGVjdHMgdmhjaV9kZXF1ZXVlKClcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMTA4NS1cdCAqIGdpdmVzIGJhY2sgcHVzaGVkIHVyYnMgYW5kIGZyZWVzIHRoZWlyIHByaXZhdGUgZGF0YSBieSByZXF1ZXN0IG9mXG4tLVxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYz0xMTI5PXN0YXRpYyB2b2lkIHZoY2lfZGV2aWNlX2luaXQoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMTE0NS1cbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM6MTE0NjpcdHZkZXYtXHUwMDNldWQuZWhfb3BzLnNodXRkb3duID0gdmhjaV9zaHV0ZG93bl9jb25uZWN0aW9uO1xuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMTQ3LVx0dmRldi1cdTAwM2V1ZC5laF9vcHMucmVzZXQgPSB2aGNpX2RldmljZV9yZXNldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxOTcKCQkJCQkJCW91dHB1dDogMTc3CgkJCQkJCQl0aG91Z2h0czogNDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBVU0JJUCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGludG8gdGhpcyBgdXNiaXBgIGRyaXZlciBwYXRjaC4gRmlyc3QsIEkgbm90aWNlZCB0aGF0IGB2aGNpX3NodXRkb3duX2Nvbm5lY3Rpb25gIGlzIGFsc28gKm5vdCogaW5saW5lZC4gVGhhdCYjMzk7cyBhIHBvaW50IHRvIHJlbWVtYmVyLgoKVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZXF1aXJlZCBmb3IgdGhpcyBwYXRjaCBhcmU6IGBVU0JJUF9WSENJX0hDRGAsIGBVU0JJUF9DT1JFYCwgYFVTQmAsIGFuZCBgTkVUYC4gSG93ZXZlciwgdGhpbmtpbmcgYWJvdXQgaXQsIGBVU0JJUF9WSENJX0hDRGAgaGFzIGRlcGVuZGVuY2llcyBvbiBib3RoIGBVU0JJUF9DT1JFYCBhbmQgYFVTQmAuICBBbmQgZnVydGhlciBJIHJlbWVtYmVyIHRoYXQgYFVTQklQX0NPUkVgIGRlcGVuZHMgb24gYE5FVGAuIFNvLCByZWFsbHksIEkgY2FuIGp1c3Qgc3BlY2lmeSBgVVNCSVBfVkhDSV9IQ0RgIGFuZCBgVVNCSVBfQ09SRWAuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMuIE9rYXksIGl0IGxvb2tzIGxpa2UgdGhhdCBjb3ZlcnMgZXZlcnl0aGluZzogYFVTQklQX1ZIQ0lfSENEYCwgYFVTQklQX0NPUkVgLCBgVVNCYCwgYW5kIGBORVRgLgoKTGV0JiMzOTtzIHN1bW1hcml6ZSB0aGUga2V5IGFzcGVjdHMgb2YgdGhpcyBwYXRjaCBmb3Igb3VyIGZ1enppbmcgZWZmb3J0czoKCiogICAqKldvcnRoRnV6emluZzoqKiBZZXMsIGFic29sdXRlbHkuCiogICAqKlJlYXNvbmluZzoqKiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSBgdXNiX2hjZF9naXZlYmFja191cmJgIHdhcyBiZWluZyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgaW4gdGhlIGB1c2JpcGAgZHJpdmVyLiBJdCBtb2RpZmllcyBjb3JlIFVSQiBoYW5kbGluZyBmdW5jdGlvbnMgKGB2aGNpX3VyYl9kZXF1ZXVlYCwgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCwgYHZoY2lfcmVjdl9yZXRfdW5saW5rYCwgYHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdGApIHRvIGtlZXAgaW50ZXJydXB0cyBkaXNhYmxlZCBkdXJpbmcgdGhlIGdpdmViYWNrIHByb2Nlc3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYSB2aXJ0dWFsIFVTQiBjb250cm9sbGVyIGRyaXZlciwgYW5kIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBzaG91bGQgYmUgYWJsZSB0byByZWFjaCB0aGlzIGNvZGUuCiogICAqKkZvY3VzU3ltYm9sczoqKiBJJiMzOTttIHRoaW5raW5nIHdlIHNob3VsZCBmb2N1cyBvbiBgdmhjaV91cmJfZGVxdWV1ZWAsIGB2aGNpX3J4X2xvb3BgLCBhbmQgcG90ZW50aWFsbHkgYHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbmAuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFVTQklQX1ZIQ0lfSENEYCBhbmQgYFVTQklQX0NPUkVgLgoKTm93LCBhYm91dCB0aG9zZSBmb2N1cyBzeW1ib2xzLi4uIGB2aGNpX3J4X2xvb3BgIGlzIGxpa2VseSBhIGdvb2QgY2hvaWNlLiBJdCYjMzk7cyB0aGUgbWFpbiByZWNlaXZlIGxvb3AgZm9yIHRoZSB2aXJ0dWFsIFVTQiBjb250cm9sbGVyLCBzbyBpdCYjMzk7bGwgZ2V0IGEgbG90IG9mIGhpdHMgaWYgdGhlIGZ1enplciBpbnRlcmFjdHMgd2l0aCB0aGUgZHJpdmVyLiBCdXQgbm93IHRoYXQgSSB0aGluayBhYm91dCBpdCwgdGhlIG1vcmUgc3BlY2lmaWMgZnVuY3Rpb25zIGFmZmVjdGVkIGJ5IHRoZSBwYXRjaCBhcmUgYWN0dWFsbHkgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCBhbmQgYHZoY2lfcmVjdl9yZXRfdW5saW5rYC4gVGhlc2UgbWlnaHQgYmUgaW5saW5lZC4gU28sIGB2aGNpX3J4X2xvb3BgIGlzIHN0aWxsIHByb2JhYmx5IHRoZSBzYWZlc3QgYmV0IGZvciBtYXhpbXVtIGNvdmVyYWdlLiBCdXQgSSYjMzk7bGwgaW5jbHVkZSBgdmhjaV91cmJfZGVxdWV1ZWAgdG9vLCBqdXN0IGluIGNhc2UsIGJlY2F1c2UgdGhhdCBpcyBhbm90aGVyIGtleSBmdW5jdGlvbiByZWxhdGVkIHRvIFVSQiBoYW5kbGluZy4KCk9rYXksIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgc29saWQgcGxhbi4gTGV0JiMzOTtzIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JJUF9WSENJX0hDRCYjMzQ7LAogICAgJiMzNDtVU0JJUF9DT1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhjaV91cmJfZGVxdWV1ZSYjMzQ7LAogICAgJiMzNDt2aGNpX3J4X2xvb3AmIzM0OywKICAgICYjMzQ7dmhjaV9zaHV0ZG93bl9jb25uZWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAgd2FzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBpbiB0aGUgYHVzYmlwYCBkcml2ZXIuIEl0IG1vZGlmaWVzIGNvcmUgVVJCIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYHZoY2lfdXJiX2RlcXVldWVgLCBgdmhjaV9yZWN2X3JldF9zdWJtaXRgLCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLCBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCkgdG8ga2VlcCBpbnRlcnJ1cHRzIGRpc2FibGVkIGR1cmluZyB0aGUgZ2l2ZWJhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHZpcnR1YWwgVVNCIGNvbnRyb2xsZXIgZHJpdmVyIHRoYXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCSVBfVkhDSV9IQ0QmIzM0OywKICAgICYjMzQ7VVNCSVBfQ09SRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZoY2lfdXJiX2RlcXVldWUmIzM0OywKICAgICYjMzQ7dmhjaV9yeF9sb29wJiMzNDssCiAgICAmIzM0O3ZoY2lfc2h1dGRvd25fY29ubmVjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgdXNiX2hjZF9naXZlYmFja191cmJgIHdhcyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgaW4gdGhlIGB1c2JpcGAgZHJpdmVyLiBJdCBtb2RpZmllcyBjb3JlIFVSQiBoYW5kbGluZyBmdW5jdGlvbnMgKGB2aGNpX3VyYl9kZXF1ZXVlYCwgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCwgYHZoY2lfcmVjdl9yZXRfdW5saW5rYCwgYHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdGApIHRvIGtlZXAgaW50ZXJydXB0cyBkaXNhYmxlZCBkdXJpbmcgdGhlIGdpdmViYWNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSB2aXJ0dWFsIFVTQiBjb250cm9sbGVyIGRyaXZlciB0aGF0IGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3BpbmxvY2sgb3BlcmF0aW9ucyAoYHNwaW5fdW5sb2NrX2lycXJlc3RvcmVgIHRvIGBzcGluX3VubG9ja2AgYW5kIGBzcGluX2xvY2tfaXJxc2F2ZWAgdG8gYHNwaW5fbG9ja2ApIHRvIGNoYW5nZSBob3cgSVJRIHN0YXRlIGlzIGhhbmRsZWQgYXJvdW5kIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAuIFRoaXMgaXMgYSBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBjaGFuZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGRlYWRsb2NrcywgSVJRIHN0YXRlIGNvcnJ1cHRpb24sIG9yIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGFuZCBpbmZvLWxlYWtzLCB3aGljaCBhcmUgbm90IHJlbGV2YW50IHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk1ZjQzYTQ0NGYxNWFmOTdiOTBlMGE4MjgwYzg5YTkyMWU4YWZkMjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyA4IDE5OjU4OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMKaW5kZXggMzllOGZhZjRjMThjZC4uYjQxNmQ4MjcxYWE3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jCkBAIC05NDAsOSAmIzQzOzk0MCw5IEBAIHN0YXRpYyBpbnQgdmhjaV91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpCiAJCSAqLwogCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChoY2QsIHVyYik7CiAKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7dmhjaS0mZ3Q7bG9jayk7CiAJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCB1cmItJmd0O3N0YXR1cyk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7dmhjaS0mZ3Q7bG9jayk7CiAKIAl9IGVsc2UgewogCQkvKiB0Y3AgY29ubmVjdGlvbiBpcyBhbGl2ZSAqLwpAQCAtMTAwOCwxMSAmIzQzOzEwMDgsMTEgQEAgc3RhdGljIHZvaWQgdmhjaV9jbGVhbnVwX3VubGlua19saXN0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKIAkJbGlzdF9kZWwoJmFtcDt1bmxpbmstJmd0O2xpc3QpOwogCiAJCXNwaW5fdW5sb2NrKCZhbXA7dmRldi0mZ3Q7cHJpdl9sb2NrKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7dmhjaS0mZ3Q7bG9jayk7CiAKIAkJdXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHVyYi0mZ3Q7c3RhdHVzKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO3ZoY2ktJmd0O2xvY2spOwogCQlzcGluX2xvY2soJmFtcDt2ZGV2LSZndDtwcml2X2xvY2spOwogCiAJCWtmcmVlKHVubGluayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMgYi9kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMKaW5kZXggYTY3OGU3Yzg5ODM3NS4uNmRiM2E1YTczNjAwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYwpAQCAtMTAyLDEwICYjNDM7MTAyLDEzIEBAIHN0YXRpYyB2b2lkIHZoY2lfcmVjdl9yZXRfc3VibWl0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwogCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt2aGNpLSZndDtsb2NrKTsKIAogCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYiwgdXJiLSZndDtzdGF0dXMpOwogCiYjNDM7CXNwaW5fbG9jaygmYW1wO3ZoY2ktJmd0O2xvY2spOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwogCXVzYmlwX2RiZ192aGNpX3J4KCYjMzQ7TGVhdmVcbiYjMzQ7KTsKIH0KIApAQCAtMTczLDkgJiM0MzsxNzYsMTIgQEAgc3RhdGljIHZvaWQgdmhjaV9yZWN2X3JldF91bmxpbmsoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LAogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwogCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCh2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDt2aGNpLSZndDtsb2NrKTsKIAogCQl1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIsIHVyYi0mZ3Q7c3RhdHVzKTsKJiM0MzsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO3ZoY2ktJmd0O2xvY2spOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKIAl9CiAKIAlrZnJlZSh1bmxpbmspOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMTk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0OAoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiA5NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMb2NraW5nIENoYW5nZXMgaW4gVVNCL0lQIFZpcnR1YWwgSG9zdCBDb250cm9sbGVyIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFVTQi9JUCB2aXJ0dWFsIGhvc3QgY29udHJvbGxlci4gSXQmIzM5O3MgdG91Y2hpbmcgYHZoY2lfaGNkLmNgIGFuZCBgdmhjaV9yeC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgbG9ja2luZyBtZWNoYW5pc21zLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHN3aXRjaGluZyBmcm9tIHRoZSBgc3Bpbl9sb2NrX2lycXNhdmVgL2BzcGluX3VubG9ja19pcnFyZXN0b3JlYCBwYWlyIHRvIHBsYWluIGBzcGluX2xvY2tgL2BzcGluX3VubG9ja2AgaW4gYSBmZXcgc3BvdHM6IGB2aGNpX3VyYl9kZXF1ZXVlYCwgYHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdGAsIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAsIGFuZCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIGEgY2hhbmdlIGluIGhvdyBpbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIHRoZSBzcGlubG9ja3MuCgpMZXQmIzM5O3MgZHJpbGwgZG93biBvbiBgdmhjaV91cmJfZGVxdWV1ZWAgYXMgYSByZXByZXNlbnRhdGl2ZSBleGFtcGxlLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIHRvIGRvOgpgYGBjCgkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ZoY2ktJmd0O2xvY2ssIGZsYWdzKTsKCQl1c2JfaGNkX2dpdmViYWNrX3VyYihoY2QsIHVyYiwgdXJiLSZndDtzdGF0dXMpOwoJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7dmhjaS0mZ3Q7bG9jaywgZmxhZ3MpOwpgYGAKClRoZSBwYXRjaCBjaGFuZ2VzIHRoaXMgdG86CmBgYGMKCQlzcGluX3VubG9jaygmYW1wO3ZoY2ktJmd0O2xvY2spOwoJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCB1cmItJmd0O3N0YXR1cyk7CgkJc3Bpbl9sb2NrKCZhbXA7dmhjaS0mZ3Q7bG9jayk7CmBgYAoKUmlnaHQsIHNvIGBzcGluX2xvY2tfaXJxc2F2ZWAgZGlzYWJsZXMgaW50ZXJydXB0cyBhbmQgc2F2ZXMgdGhlIHByZXZpb3VzIGludGVycnVwdCBzdGF0ZS4gIGBzcGluX3VubG9ja19pcnFyZXN0b3JlYCByZXN0b3JlcyB0aGUgaW50ZXJydXB0cyB0byB0aGUgc3RhdGUgdGhleSB3ZXJlIGluIGJlZm9yZSB0aGUgYHNwaW5fbG9ja19pcnFzYXZlYCBjYWxsLiAgVGhlIGNoYW5nZSBpcyBza2lwcGluZyB0aGUgSVJRIHN0YXRlIHNhdmluZyBhbmQgcmVzdG9yaW5nLiBUaGlzIGxpa2VseSBtZWFucyB0aGF0IGVpdGhlciB0aGUgY2FsbGluZyBmdW5jdGlvbiBpcyBhbHJlYWR5IG1hbmFnaW5nIHRoZSBJUlEgc3RhdGUsIG9yIHRoZSBpbnRlbnRpb24gaXMgdG8ga2VlcCBpbnRlcnJ1cHRzIGRpc2FibGVkIGFjcm9zcyB0aGUgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCBjYWxsLiAgSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgZGlzYWJsaW5nIGludGVycnVwdHMgZHVyaW5nIHRoZSBjYWxsIHRvIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAuIFRoZSBsb2NraW5nIG9yZGVyIGlzIHVuY2hhbmdlZC4gVGhlIElSUSBzdGF0ZSBjb3VsZCBiZSByZXN0b3JlZCBsYXRlciwgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBzbmlwcGV0LgoKVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCAqb25seSogbW9kaWZpZXMgdGhlIGxvY2tpbmcgcHJpbWl0aXZlcy4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBUaGVyZWZvcmUsIHRoaXMgaXMgc29sZWx5IGEgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgZml4LCBvciBwb3RlbnRpYWxseSBhIGJ1Zy4KClRoaXMgc2NyZWFtcyBMT0NLREVQIG9yIEtBU0FOIHRlcnJpdG9yeSwgbWF5YmUgYSByYWNlIGNvbmRpdGlvbiBvciBkZWFkbG9jay4gS01TQU4sIHdoaWNoIGlzIGZvY3VzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gVGhlIHBvdGVudGlhbCBwcm9ibGVtcyBoZXJlIGFyZSBhYm91dCBjb3JyZWN0IGxvY2tpbmcgYW5kIElSUSBtYW5hZ2VtZW50LCBub3QgdW5pbml0aWFsaXplZCBkYXRhIHVzYWdlLiBJIG5lZWQgdG8gbm90ZSB0aGF0IHRoaXMgY2hhbmdlcyBob3cgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCBpcyBjYWxsZWQgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgaW50ZXJydXB0cywgd2hpY2ggaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHdoZW4gYW5hbHl6aW5nIHRoZSBvdmVyYWxsIGNhbGwgY2hhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDE5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNwaW5sb2NrIG9wZXJhdGlvbnMgKGBzcGluX3VubG9ja19pcnFyZXN0b3JlYCB0byBgc3Bpbl91bmxvY2tgIGFuZCBgc3Bpbl9sb2NrX2lycXNhdmVgIHRvIGBzcGluX2xvY2tgKSB0byBjaGFuZ2UgaG93IElSUSBzdGF0ZSBpcyBoYW5kbGVkIGFyb3VuZCBgdXNiX2hjZF9naXZlYmFja191cmJgLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY2hhbmdlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBkZWFkbG9ja3MsIElSUSBzdGF0ZSBjb3JydXB0aW9uLCBvciByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBhbmQgaW5mby1sZWFrcywgd2hpY2ggYXJlIG5vdCByZWxldmFudCB0byB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3BpbmxvY2sgb3BlcmF0aW9ucyAoYHNwaW5fdW5sb2NrX2lycXJlc3RvcmVgIHRvIGBzcGluX3VubG9ja2AgYW5kIGBzcGluX2xvY2tfaXJxc2F2ZWAgdG8gYHNwaW5fbG9ja2ApIHRvIGNoYW5nZSBob3cgSVJRIHN0YXRlIGlzIGhhbmRsZWQgYXJvdW5kIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAuIFRoaXMgaXMgYSBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBjaGFuZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGRlYWRsb2NrcywgSVJRIHN0YXRlIGNvcnJ1cHRpb24sIG9yIHJhY2UgY29uZGl0aW9ucywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGFuZCBpbmZvLWxlYWtzLCB3aGljaCBhcmUgbm90IHJlbGV2YW50IHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE5OjU4OjE1LjE1NTg5NTc0M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NjI5NzgxNjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQklQX1ZIQ0lfSENEXCIsXG4gICAgXCJVU0JJUF9DT1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhjaV91cmJfZGVxdWV1ZVwiLFxuICAgIFwidmhjaV9yeF9sb29wXCIsXG4gICAgXCJ2aGNpX3NodXRkb3duX2Nvbm5lY3Rpb25cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNwaW5sb2NrIG9wZXJhdGlvbnMgKGBzcGluX3VubG9ja19pcnFyZXN0b3JlYCB0byBgc3Bpbl91bmxvY2tgIGFuZCBgc3Bpbl9sb2NrX2lycXNhdmVgIHRvIGBzcGluX2xvY2tgKSB0byBjaGFuZ2UgaG93IElSUSBzdGF0ZSBpcyBoYW5kbGVkIGFyb3VuZCBgdXNiX2hjZF9naXZlYmFja191cmJgLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY2hhbmdlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBkZWFkbG9ja3MsIElSUSBzdGF0ZSBjb3JydXB0aW9uLCBvciByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBhbmQgaW5mby1sZWFrcywgd2hpY2ggYXJlIG5vdCByZWxldmFudCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAgd2FzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBpbiB0aGUgYHVzYmlwYCBkcml2ZXIuIEl0IG1vZGlmaWVzIGNvcmUgVVJCIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYHZoY2lfdXJiX2RlcXVldWVgLCBgdmhjaV9yZWN2X3JldF9zdWJtaXRgLCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLCBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCkgdG8ga2VlcCBpbnRlcnJ1cHRzIGRpc2FibGVkIGR1cmluZyB0aGUgZ2l2ZWJhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHZpcnR1YWwgVVNCIGNvbnRyb2xsZXIgZHJpdmVyIHRoYXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTk6NTg6MTUuMTU1OTAxNTAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTA2NTMwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NWY0M2E0NDRmMTVhZjk3YjkwZTBhODI4MGM4OWE5MjFlOGFmZDIyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDggMTk6NTg6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmNcXG5pbmRleCAzOWU4ZmFmNGMxOGNkLi5iNDE2ZDgyNzFhYTdmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmNcXG4rKysgYi9kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jXFxuQEAgLTk0MCw5ICs5NDAsOSBAQCBzdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0dXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaGNkLCB1cmIpO1xcbiBcXG4tXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dmhjaS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dmhjaS1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCB1cmItXFx1MDAzZXN0YXR1cyk7XFxuLVxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2dmhjaS1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKiB0Y3AgY29ubmVjdGlvbiBpcyBhbGl2ZSAqL1xcbkBAIC0xMDA4LDExICsxMDA4LDExIEBAIHN0YXRpYyB2b2lkIHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXFxuIFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZ1bmxpbmstXFx1MDAzZWxpc3QpO1xcbiBcXG4gXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnZkZXYtXFx1MDAzZXByaXZfbG9jayk7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0XFx0dXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHVyYi1cXHUwMDNlc3RhdHVzKTtcXG4gXFxuLVxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2dmhjaS1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dmRldi1cXHUwMDNlcHJpdl9sb2NrKTtcXG4gXFxuIFxcdFxcdGtmcmVlKHVubGluayk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguY1xcbmluZGV4IGE2NzhlN2M4OTgzNzUuLjZkYjNhNWE3MzYwMDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jXFxuKysrIGIvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jXFxuQEAgLTEwMiwxMCArMTAyLDEzIEBAIHN0YXRpYyB2b2lkIHZoY2lfcmVjdl9yZXRfc3VibWl0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldixcXG4gXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYik7XFxuLVxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0dXNiX2hjZF9naXZlYmFja191cmIodmhjaV9oY2RfdG9faGNkKHZoY2lfaGNkKSwgdXJiLCB1cmItXFx1MDAzZXN0YXR1cyk7XFxuIFxcbitcXHRzcGluX2xvY2soXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2spO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbiBcXHR1c2JpcF9kYmdfdmhjaV9yeChcXFwiTGVhdmVcXFxcblxcXCIpO1xcbiB9XFxuIFxcbkBAIC0xNzMsOSArMTc2LDEyIEBAIHN0YXRpYyB2b2lkIHZoY2lfcmVjdl9yZXRfdW5saW5rKHN0cnVjdCB2aGNpX2RldmljZSAqdmRldixcXG4gXFxuIFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdFxcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYik7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0XFx0dXNiX2hjZF9naXZlYmFja191cmIodmhjaV9oY2RfdG9faGNkKHZoY2lfaGNkKSwgdXJiLCB1cmItXFx1MDAzZXN0YXR1cyk7XFxuK1xcbitcXHRcXHRzcGluX2xvY2soXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2spO1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdH1cXG4gXFxuIFxcdGtmcmVlKHVubGluayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE5OjU4OjE1LjY0NzM3MzM2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjkzMDQ4ODM4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCSVBfVkhDSV9IQ0RcIixcbiAgICBcIlVTQklQX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aGNpX3VyYl9kZXF1ZXVlXCIsXG4gICAgXCJ2aGNpX3J4X2xvb3BcIixcbiAgICBcInZoY2lfc2h1dGRvd25fY29ubmVjdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAgd2FzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBpbiB0aGUgYHVzYmlwYCBkcml2ZXIuIEl0IG1vZGlmaWVzIGNvcmUgVVJCIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYHZoY2lfdXJiX2RlcXVldWVgLCBgdmhjaV9yZWN2X3JldF9zdWJtaXRgLCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLCBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCkgdG8ga2VlcCBpbnRlcnJ1cHRzIGRpc2FibGVkIGR1cmluZyB0aGUgZ2l2ZWJhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHZpcnR1YWwgVVNCIGNvbnRyb2xsZXIgZHJpdmVyIHRoYXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTVmNDNhNDQ0ZjE1YWY5N2I5MGUwYTgyODBjODlhOTIxZThhZmQyMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMTk6NTg6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jIGIvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuY1xuaW5kZXggMzllOGZhZjRjMThjZC4uYjQxNmQ4MjcxYWE3ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmNcbisrKyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmNcbkBAIC05NDAsOSArOTQwLDkgQEAgc3RhdGljIGludCB2aGNpX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cylcbiBcdFx0ICovXG4gXHRcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTtcbiBcbi1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiBcdFx0dXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHVyYi1cdTAwM2VzdGF0dXMpO1xuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNnZoY2ktXHUwMDNlbG9jayk7XG4gXG4gXHR9IGVsc2Uge1xuIFx0XHQvKiB0Y3AgY29ubmVjdGlvbiBpcyBhbGl2ZSAqL1xuQEAgLTEwMDgsMTEgKzEwMDgsMTEgQEAgc3RhdGljIHZvaWQgdmhjaV9jbGVhbnVwX3VubGlua19saXN0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldixcbiBcdFx0bGlzdF9kZWwoXHUwMDI2dW5saW5rLVx1MDAzZWxpc3QpO1xuIFxuIFx0XHRzcGluX3VubG9jayhcdTAwMjZ2ZGV2LVx1MDAzZXByaXZfbG9jayk7XG4tXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZoY2ktXHUwMDNlbG9jayk7XG4gXG4gXHRcdHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCB1cmItXHUwMDNlc3RhdHVzKTtcbiBcbi1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdHNwaW5fbG9jayhcdTAwMjZ2aGNpLVx1MDAzZWxvY2spO1xuIFx0XHRzcGluX2xvY2soXHUwMDI2dmRldi1cdTAwM2Vwcml2X2xvY2spO1xuIFxuIFx0XHRrZnJlZSh1bmxpbmspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYyBiL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguY1xuaW5kZXggYTY3OGU3Yzg5ODM3NS4uNmRiM2E1YTczNjAwOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguY1xuKysrIGIvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jXG5AQCAtMTAyLDEwICsxMDIsMTMgQEAgc3RhdGljIHZvaWQgdmhjaV9yZWN2X3JldF9zdWJtaXQoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LFxuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHR1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCh2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIpO1xuLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnZoY2ktXHUwMDNlbG9jayk7XG4gXG4gXHR1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIsIHVyYi1cdTAwM2VzdGF0dXMpO1xuIFxuK1x0c3Bpbl9sb2NrKFx1MDAyNnZoY2ktXHUwMDNlbG9jayk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuIFx0dXNiaXBfZGJnX3ZoY2lfcngoXCJMZWF2ZVxcblwiKTtcbiB9XG4gXG5AQCAtMTczLDkgKzE3NiwxMiBAQCBzdGF0aWMgdm9pZCB2aGNpX3JlY3ZfcmV0X3VubGluayhzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXG4gXG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHR1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCh2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIpO1xuLVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZ2aGNpLVx1MDAzZWxvY2spO1xuIFxuIFx0XHR1c2JfaGNkX2dpdmViYWNrX3VyYih2aGNpX2hjZF90b19oY2QodmhjaV9oY2QpLCB1cmIsIHVyYi1cdTAwM2VzdGF0dXMpO1xuK1xuK1x0XHRzcGluX2xvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdH1cbiBcbiBcdGtmcmVlKHVubGluayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODoxNS42NDczNzUwN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4OTMyMTI1MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVVNCL0lQIFZIQ0kgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFVTQi9JUCBWSENJIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGB2aGNpX2hjZC5jYCBhbmQgYHZoY2lfcnguY2AuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBzb21lb25lJ3MgbWFkZSBzb21lIGNoYW5nZXMgdG8gdGhlIHNwaW5sb2NrL3VubG9jayBvcGVyYXRpb25zLCB3aGljaCBhbHdheXMgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gVGhleSd2ZSByZXBsYWNlZCBgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZWAgd2l0aCBqdXN0IGBzcGluX3VubG9ja2AgYW5kIGBzcGluX2xvY2tfaXJxc2F2ZWAgd2l0aCBgc3Bpbl9sb2NrYCBpbiBgdmhjaV91cmJfZGVxdWV1ZWAgYW5kIGB2aGNpX2NsZWFudXBfdW5saW5rX2xpc3RgLiAgQWxzbyBpbiBgdmhjaV9yZWN2X3JldF9zdWJtaXRgIGFuZCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLCB0aGV5IGFyZSBwbGF5aW5nIHdpdGggdGhlIG9yZGVyIG9mIGBzcGluX3VubG9ja2AsIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAgYW5kIGBzcGluX2xvY2tgIGFnYWluLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHRoZXkgdHJ5aW5nIHRvIGF2b2lkIGEgc2NlbmFyaW8gd2hlcmUgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCBnZXRzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQ/IE9yLCBpcyB0aGlzIGZpeGluZyBhIGJ1ZyB3aGVyZSBpbnRlcnJ1cHRzIHdlcmUgaW5jb3JyZWN0bHkgcmVzdG9yZWQgYmVmb3JlIGEgZnVuY3Rpb24gdGhhdCBleHBlY3RzIHRoZW0gdG8gYmUgZGlzYWJsZWQ/ICBgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZWAgaXMgc3VwcG9zZWQgdG8gcmVzdG9yZSBpbnRlcnJ1cHRzIHRvIHRoZSBzdGF0ZSB0aGV5IHdlcmUgKmJlZm9yZSogdGhlIGNvcnJlc3BvbmRpbmcgYHNwaW5fbG9ja19pcnFzYXZlYCwgc28gaWYgd2UganVzdCBnbyB3aXRoIGBzcGluX3VubG9ja2Agd2UncmUgbGVhdmluZyBpbnRlcnJ1cHRzIGRpc2FibGVkLCByaWdodD9cblxuVGhpbmtpbmcgbW9yZSBkZWVwbHksIGB2aGNpX3VyYl9kZXF1ZXVlYCBzdGFydHMgd2l0aCBgc3Bpbl9sb2NrX2lycXNhdmVgLCB3aGljaCBkaXNhYmxlcyBpbnRlcnJ1cHRzLiBJZiB3ZSBjaGFuZ2UgaXQgdG8gdXNpbmcgYHNwaW5fdW5sb2NrYCBsYXRlciwgd2UncmUgbGVhdmluZyBpbnRlcnJ1cHRzIGRpc2FibGVkLiBUaGVuIHdlJ3JlIGNhbGxpbmcgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCB3aXRoIGludGVycnVwdHMgKnN0aWxsKiBkaXNhYmxlZC4gIEFuZCAqdGhlbiogd2UgY2FsbCBgc3Bpbl9sb2NrYCBhbmQsIGZpbmFsbHksIGBzcGluX3VubG9ja19pcnFyZXN0b3JlYCBiZWZvcmUgd2UgZXhpdCB0aGUgZnVuY3Rpb24uICBTbyBub3cgaXQncyBjbGVhcjogYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCAqaXMqIGJlaW5nIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgYmVjYXVzZSBvZiB0aGVzZSBjaGFuZ2VzLiBJJ2QgYmV0dGVyIGNvbmZpcm0gdGhpcyBieSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlIGZvciBgdmhjaV91cmJfZGVxdWV1ZWAgaW4gYHZoY2lfaGNkLmNgIHRvIG1ha2Ugc3VyZSB0aGVyZSdzIG5vIG1pc3VuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODoyMy41NDA1OTA3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc2MDE0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aGNpX3VyYl9kZXF1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYz0zNz1zdGF0aWMgaW50IHZoY2lfdXJiX2VucXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLFxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMzgtXFx0XFx0XFx0ICAgIGdmcF90IG1lbV9mbGFncyk7XFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzozOTpzdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTtcXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTQwLXN0YXRpYyBpbnQgdmhjaV9zdGFydChzdHJ1Y3QgdXNiX2hjZCAqdmhjaV9oY2QpO1xcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYz02OTc9c3RhdGljIGludCB2aGNpX3VyYl9lbnF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgZ2ZwX3QgbWVtX2ZsYWdzKVxcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy04OTQtICovXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzo4OTU6c3RhdGljIGludCB2aGNpX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cylcXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTg5Ni17XFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTEzNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgdmhjaV9oY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTEzNTEtXFx0LnVyYl9lbnF1ZXVlXFx0PSB2aGNpX3VyYl9lbnF1ZXVlLFxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM6MTM1MjpcXHQudXJiX2RlcXVldWVcXHQ9IHZoY2lfdXJiX2RlcXVldWUsXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMzUzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODoyMy41ODgzNTY0N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDA3MjU0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIHZoY2lfdXJiX2RlcXVldWUgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gSSdtIGZvY3VzaW5nIG15IGF0dGVudGlvbiBvbiBgdmhjaV91cmJfZGVxdWV1ZWAsIHNwZWNpZmljYWxseSBpbiBgZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuY2AuIEknbSBjdXJpb3VzIGFib3V0IHRoZSBpbnRyaWNhY2llcyBvZiBVU0IvSVAncyB2aXJ0dWFsIGhvc3QgY29udHJvbGxlciBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBkZS1xdWV1aW5nLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIG1hbmFnaW5nIHRoZSBsaWZlY3ljbGUgb2YgcmVxdWVzdHMgb24gdGhlIHZpcnR1YWwgVVNCIGJ1cy4gTXkgbWVudGFsIGNoZWNrbGlzdCBpbmNsdWRlcyBxdWVzdGlvbnMgYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIFVTQiBjb3JlLCBob3cgaXQgaGFuZGxlcyBlcnJvciBjb25kaXRpb25zLCBhbmQgaG93IGl0IGVuc3VyZXMgcHJvcGVyIHN5bmNocm9uaXphdGlvbi4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGEgY3JpdGljYWwgcG9pbnQgb2YgY29uY3VycmVuY3kgY29udHJvbCwgZXNwZWNpYWxseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciByYWNlIGNvbmRpdGlvbnMgaGVyZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNzksIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODoyNy41MjkwODQzMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg5NSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4OTU6XFx0c3RhdGljIGludCB2aGNpX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cylcXG4gODk2OlxcdHtcXG4gODk3OlxcdFxcdHN0cnVjdCB2aGNpX2hjZCAqdmhjaV9oY2QgPSBoY2RfdG9fdmhjaV9oY2QoaGNkKTtcXG4gODk4OlxcdFxcdHN0cnVjdCB2aGNpICp2aGNpID0gdmhjaV9oY2QtXFx1MDAzZXZoY2k7XFxuIDg5OTpcXHRcXHRzdHJ1Y3QgdmhjaV9wcml2ICpwcml2O1xcbiA5MDA6XFx0XFx0c3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2O1xcbiA5MDE6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gOTAyOlxcdFxcbiA5MDM6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gOTA0OlxcdFxcbiA5MDU6XFx0XFx0cHJpdiA9IHVyYi1cXHUwMDNlaGNwcml2O1xcbiA5MDY6XFx0XFx0aWYgKCFwcml2KSB7XFxuIDkwNzpcXHRcXHRcXHQvKiBVUkIgd2FzIG5ldmVyIGxpbmtlZCEgb3Igd2lsbCBiZSBzb29uIGdpdmVuIGJhY2sgYnlcXG4gOTA4OlxcdFxcdFxcdCAqIHZoY2lfcnguICovXFxuIDkwOTpcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIDkxMDpcXHRcXHRcXHRyZXR1cm4gLUVJRFJNO1xcbiA5MTE6XFx0XFx0fVxcbiA5MTI6XFx0XFxuIDkxMzpcXHRcXHR7XFxuIDkxNDpcXHRcXHRcXHRpbnQgcmV0ID0gMDtcXG4gOTE1OlxcdFxcbiA5MTY6XFx0XFx0XFx0cmV0ID0gdXNiX2hjZF9jaGVja191bmxpbmtfdXJiKGhjZCwgdXJiLCBzdGF0dXMpO1xcbiA5MTc6XFx0XFx0XFx0aWYgKHJldCkge1xcbiA5MTg6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dmhjaS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiA5MTk6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gOTIwOlxcdFxcdFxcdH1cXG4gOTIxOlxcdFxcdH1cXG4gOTIyOlxcdFxcbiA5MjM6XFx0XFx0IC8qIHNlbmQgdW5saW5rIHJlcXVlc3QgaGVyZT8gKi9cXG4gOTI0OlxcdFxcdHZkZXYgPSBwcml2LVxcdTAwM2V2ZGV2O1xcbiA5MjU6XFx0XFxuIDkyNjpcXHRcXHRpZiAoIXZkZXYtXFx1MDAzZXVkLnRjcF9zb2NrZXQpIHtcXG4gOTI3OlxcdFxcdFxcdC8qIHRjcCBjb25uZWN0aW9uIGlzIGNsb3NlZCAqL1xcbiA5Mjg6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ2ZGV2LVxcdTAwM2Vwcml2X2xvY2spO1xcbiA5Mjk6XFx0XFxuIDkzMDpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2cHJpdi1cXHUwMDNlbGlzdCk7XFxuIDkzMTpcXHRcXHRcXHRrZnJlZShwcml2KTtcXG4gOTMyOlxcdFxcdFxcdHVyYi1cXHUwMDNlaGNwcml2ID0gTlVMTDtcXG4gOTMzOlxcdFxcbiA5MzQ6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnZkZXYtXFx1MDAzZXByaXZfbG9jayk7XFxuIDkzNTpcXHRcXG4gOTM2OlxcdFxcdFxcdC8qXFxuIDkzNzpcXHRcXHRcXHQgKiBJZiB0Y3AgY29ubmVjdGlvbiBpcyBhbGl2ZSwgd2UgaGF2ZSBzZW50IENNRF9VTkxJTksuXFxuIDkzODpcXHRcXHRcXHQgKiB2aGNpX3J4IHdpbGwgcmVjZWl2ZSBSRVRfVU5MSU5LIGFuZCBnaXZlIGJhY2sgdGhlIFVSQi5cXG4gOTM5OlxcdFxcdFxcdCAqIE90aGVyd2lzZSwgd2UgZ2l2ZSBiYWNrIGl0IGhlcmUuXFxuIDk0MDpcXHRcXHRcXHQgKi9cXG4gOTQxOlxcdFxcdFxcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTtcXG4gOTQyOlxcdFxcbiA5NDM6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2spO1xcbiA5NDQ6XFx0XFx0XFx0dXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHVyYi1cXHUwMDNlc3RhdHVzKTtcXG4gOTQ1OlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dmhjaS1cXHUwMDNlbG9jayk7XFxuIDk0NjpcXHRcXG4gOTQ3OlxcdFxcdH0gZWxzZSB7XFxuIDk0ODpcXHRcXHRcXHQvKiB0Y3AgY29ubmVjdGlvbiBpcyBhbGl2ZSAqL1xcbiA5NDk6XFx0XFx0XFx0c3RydWN0IHZoY2lfdW5saW5rICp1bmxpbms7XFxuIDk1MDpcXHRcXG4gOTUxOlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2dmRldi1cXHUwMDNlcHJpdl9sb2NrKTtcXG4gOTUyOlxcdFxcbiA5NTM6XFx0XFx0XFx0Lyogc2V0dXAgQ01EX1VOTElOSyBwZHUgKi9cXG4gOTU0OlxcdFxcdFxcdHVubGluayA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2aGNpX3VubGluaywgR0ZQX0FUT01JQyk7XFxuIDk1NTpcXHRcXHRcXHRpZiAoIXVubGluaykge1xcbiA5NTY6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnZkZXYtXFx1MDAzZXByaXZfbG9jayk7XFxuIDk1NzpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIDk1ODpcXHRcXHRcXHRcXHR1c2JpcF9ldmVudF9hZGQoXFx1MDAyNnZkZXYtXFx1MDAzZXVkLCBWREVWX0VWRU5UX0VSUk9SX01BTExPQyk7XFxuIDk1OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gOTYwOlxcdFxcdFxcdH1cXG4gOTYxOlxcdFxcbiA5NjI6XFx0XFx0XFx0dW5saW5rLVxcdTAwM2VzZXFudW0gPSBhdG9taWNfaW5jX3JldHVybihcXHUwMDI2dmhjaV9oY2QtXFx1MDAzZXNlcW51bSk7XFxuIDk2MzpcXHRcXHRcXHRpZiAodW5saW5rLVxcdTAwM2VzZXFudW0gPT0gMHhmZmZmKVxcbiA5NjQ6XFx0XFx0XFx0XFx0ZGV2X2luZm8oaGNkX2RldihoY2QpLCBcXFwic2VxbnVtIG1heFxcXFxuXFxcIik7XFxuIDk2NTpcXHRcXG4gOTY2OlxcdFxcdFxcdHVubGluay1cXHUwMDNldW5saW5rX3NlcW51bSA9IHByaXYtXFx1MDAzZXNlcW51bTtcXG4gOTY3OlxcdFxcbiA5Njg6XFx0XFx0XFx0Lyogc2VuZCBjbWRfdW5saW5rIGFuZCB0cnkgdG8gY2FuY2VsIHRoZSBwZW5kaW5nIFVSQiBpbiB0aGVcXG4gOTY5OlxcdFxcdFxcdCAqIHBlZXIgKi9cXG4gOTcwOlxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnVubGluay1cXHUwMDNlbGlzdCwgXFx1MDAyNnZkZXYtXFx1MDAzZXVubGlua190eCk7XFxuIDk3MTpcXHRcXHRcXHR3YWtlX3VwKFxcdTAwMjZ2ZGV2LVxcdTAwM2V3YWl0cV90eCk7XFxuIDk3MjpcXHRcXG4gOTczOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ2ZGV2LVxcdTAwM2Vwcml2X2xvY2spO1xcbiA5NzQ6XFx0XFx0fVxcbiA5NzU6XFx0XFxuIDk3NjpcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIDk3NzpcXHRcXG4gOTc4OlxcdFxcdHVzYmlwX2RiZ192aGNpX2hjKFxcXCJsZWF2ZVxcXFxuXFxcIik7XFxuIDk3OTpcXHRcXHRyZXR1cm4gMDtcXG4gOTgwOlxcdH1cXG4gOTgxOlxcdFxcbiA5ODI6XFx0c3RhdGljIHZvaWQgdmhjaV9jbGVhbnVwX3VubGlua19saXN0KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldixcXG4gOTgzOlxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnVubGlua19saXN0KVxcbiA5ODQ6XFx0e1xcbiA5ODU6XFx0XFx0c3RydWN0IHZoY2lfaGNkICp2aGNpX2hjZCA9IHZkZXZfdG9fdmhjaV9oY2QodmRldik7XFxuIDk4NjpcXHRcXHRzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gdmhjaV9oY2RfdG9faGNkKHZoY2lfaGNkKTtcXG4gOTg3OlxcdFxcdHN0cnVjdCB2aGNpICp2aGNpID0gdmhjaV9oY2QtXFx1MDAzZXZoY2k7XFxuIDk4ODpcXHRcXHRzdHJ1Y3QgdmhjaV91bmxpbmsgKnVubGluaywgKnRtcDtcXG4gOTg5OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIDk5MDpcXHRcXG4gOTkxOlxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ2aGNpLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIDk5MjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnZkZXYtXFx1MDAzZXByaXZfbG9jayk7XFxuIDk5MzpcXHRcXG4gOTk0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bmxpbmssIHRtcCwgdW5saW5rX2xpc3QsIGxpc3QpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTk6NTg6MjcuNTI5MjExNTMxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODAzMjQyNDQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZoY2lfdXJiX2RlcXVldWUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgdmhjaV91cmJfZGVxdWV1ZWAgd2l0aGluIHRoZSBgdmhjaV9oY2RgIGRyaXZlci4gSXQncyBtYWtpbmcgYSBjcnVjaWFsIGNoYW5nZSBhcm91bmQgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYC4gU3BlY2lmaWNhbGx5LCBpdCdzIHN3YXBwaW5nIGBzcGluX3VubG9ja19pcnFyZXN0b3JlYCBhbmQgYHNwaW5fbG9ja19pcnFzYXZlYCB3aXRoIHRoZWlyIHNpbXBsZXIgYHNwaW5fdW5sb2NrYCBhbmQgYHNwaW5fbG9ja2AgY291bnRlcnBhcnRzLCByZXNwZWN0aXZlbHkuIFRoZSBkaWZmZXJlbmNlIGlzIHRoZSBcImlycVwiIGhhbmRsaW5nIOKAkyB0aGVzZSBuZXcgY2FsbHMgbGVhdmUgaW50ZXJydXB0cyBkaXNhYmxlZCBkdXJpbmcgdGhlIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAgY2FsbC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBob3cgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCBpcyAqc3VwcG9zZWQqIHRvIGJlaGF2ZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIHNwZWNpZmljYWxseSB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gZXhwZWN0cyBpbnRlcnJ1cHRzIHRvIGJlIGRpc2FibGVkLiBPaCwgaG9sZCBvbi4uLiBsZXQgbWUgY2hlY2sgdGhlIGRvY3VtZW50YXRpb24hIEFoLCB0aGVyZSBpdCBpczogXCJUaGlzIGZ1bmN0aW9uICptdXN0KiBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLlwiIEJpbmdvLlxuXG5TbywgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBmaXhpbmcgYSBidWcuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSBjYWxsaW5nIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQsIHdoaWNoIGNvdWxkIGxlYWQgdG8gZGVhZGxvY2tzIG9yIG90aGVyIG5hc3R5IHJhY2UgY29uZGl0aW9ucy4gSSBjYW4gc2VlIGhvdyB0aGF0IGNvdWxkIGJlIHByb2JsZW1hdGljIGluIHRoZSBgdXNiaXBgIGRyaXZlci4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXggcmVhbGx5LCBidXQgYSBuZWNlc3Nhcnkgb25lIHRvIGVuc3VyZSB0aGUgZHJpdmVyJ3Mgcm9idXN0bmVzcy5cblxuSSBzaG91bGQgcHJvYmFibHkgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCBgdmhjaV9yZWN2X3JldF9zdWJtaXRgIGluIGBkcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgaW50ZXJhY3Rpb25zLiBJdCdzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGZsb3cgb2YgY29udHJvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk5MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE5OjU4OjM1LjU2MTYzODc5NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTU6XFx0XFx0aWYgKHVzYmlwX2RiZ19mbGFnX3ZoY2lfcngpXFxuICA5NjpcXHRcXHRcXHR1c2JpcF9kdW1wX3VyYih1cmIpO1xcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHRpZiAodXJiLVxcdTAwM2VudW1fc2dzKVxcbiAgOTk6XFx0XFx0XFx0dXJiLVxcdTAwM2V0cmFuc2Zlcl9mbGFncyBcXHUwMDI2PSB+VVJCX0RNQV9NQVBfU0c7XFxuIDEwMDpcXHRcXG4gMTAxOlxcdFxcdHVzYmlwX2RiZ192aGNpX3J4KFxcXCJub3cgZ2l2ZWJhY2sgdXJiICV1XFxcXG5cXFwiLCBwZHUtXFx1MDAzZWJhc2Uuc2VxbnVtKTtcXG4gMTAyOlxcdFxcbiAxMDM6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gMTA0OlxcdFxcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYik7XFxuIDEwNTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dmhjaS1cXHUwMDNlbG9jayk7XFxuIDEwNjpcXHRcXG4gMTA3OlxcdFxcdHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYiwgdXJiLVxcdTAwM2VzdGF0dXMpO1xcbiAxMDg6XFx0XFxuIDEwOTpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnZoY2ktXFx1MDAzZWxvY2spO1xcbiAxMTA6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dmhjaS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiAxMTE6XFx0XFxuIDExMjpcXHRcXHR1c2JpcF9kYmdfdmhjaV9yeChcXFwiTGVhdmVcXFxcblxcXCIpO1xcbiAxMTM6XFx0fVxcbiAxMTQ6XFx0XFxuIDExNTpcXHRzdGF0aWMgc3RydWN0IHZoY2lfdW5saW5rICpkZXF1ZXVlX3BlbmRpbmdfdW5saW5rKHN0cnVjdCB2aGNpX2RldmljZSAqdmRldixcXG4gMTE2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KVxcbiAxMTc6XFx0e1xcbiAxMTg6XFx0XFx0c3RydWN0IHZoY2lfdW5saW5rICp1bmxpbmssICp0bXA7XFxuIDExOTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dmRldi1cXHUwMDNlcHJpdl9sb2NrLCBmbGFncyk7XFxuIDEyMjpcXHRcXG4gMTIzOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bmxpbmssIHRtcCwgXFx1MDAyNnZkZXYtXFx1MDAzZXVubGlua19yeCwgbGlzdCkge1xcbiAxMjQ6XFx0XFx0XFx0cHJfaW5mbyhcXFwidW5saW5rLVxcdTAwM2VzZXFudW0gJWx1XFxcXG5cXFwiLCB1bmxpbmstXFx1MDAzZXNlcW51bSk7XFxuIDEyNTpcXHRcXHRcXHRpZiAodW5saW5rLVxcdTAwM2VzZXFudW0gPT0gcGR1LVxcdTAwM2ViYXNlLnNlcW51bSkge1xcbiAxMjY6XFx0XFx0XFx0XFx0dXNiaXBfZGJnX3ZoY2lfcngoXFxcImZvdW5kIHBlbmRpbmcgdW5saW5rLCAlbHVcXFxcblxcXCIsXFxuIDEyNzpcXHRcXHRcXHRcXHRcXHRcXHQgIHVubGluay1cXHUwMDNlc2VxbnVtKTtcXG4gMTI4OlxcdFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZ1bmxpbmstXFx1MDAzZWxpc3QpO1xcbiAxMjk6XFx0XFxuIDEzMDpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2ZGV2LVxcdTAwM2Vwcml2X2xvY2ssIGZsYWdzKTtcXG4gMTMxOlxcdFxcdFxcdFxcdHJldHVybiB1bmxpbms7XFxuIDEzMjpcXHRcXHRcXHR9XFxuIDEzMzpcXHRcXHR9XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnZkZXYtXFx1MDAzZXByaXZfbG9jaywgZmxhZ3MpO1xcbiAxMzY6XFx0XFxuIDEzNzpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTM4OlxcdH1cXG4gMTM5OlxcdFxcbiAxNDA6XFx0c3RhdGljIHZvaWQgdmhjaV9yZWN2X3JldF91bmxpbmsoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LFxcbiAxNDE6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCB1c2JpcF9oZWFkZXIgKnBkdSlcXG4gMTQyOlxcdHtcXG4gMTQzOlxcdFxcdHN0cnVjdCB2aGNpX2hjZCAqdmhjaV9oY2QgPSB2ZGV2X3RvX3ZoY2lfaGNkKHZkZXYpO1xcbiAxNDQ6XFx0XFx0c3RydWN0IHZoY2kgKnZoY2kgPSB2aGNpX2hjZC1cXHUwMDNldmhjaTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTk6NTg6MzUuNTYxNzgyMTQ0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM3MTQ0MjQwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgVVNCSVAgRHJpdmVyKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcyB0byBgdmhjaV9yZWN2X3JldF9zdWJtaXRgIGFuZCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLCBhbmQgdGhleSBzZWVtIHRvIGludm9sdmUga2VlcGluZyBpbnRlcnJ1cHRzIGRpc2FibGVkIGR1cmluZyBgdXNiX2hjZF9naXZlYmFja191cmJgLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgY2F0Y2hlcyBteSBleWUgYXMgYSBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXQuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGB1c2JpcGAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIHZpcnR1YWwgVVNCIGNvbnRyb2xsZXIsIHdoaWNoIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgcmVhY2hhYmxlIGluIHRob3NlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cblxuU2luY2UgdGhlIGZ1bmN0aW9ucyBgdmhjaV91cmJfZGVxdWV1ZWAsIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAsIGB2aGNpX3JlY3ZfcmV0X3VubGlua2AsIGFuZCBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCBhcmUgYWxsIHBhcnQgb2YgdGhhdCBgdXNiaXBgIGRyaXZlciwgSSB0aGluayBhIHRob3JvdWdoIGxvb2sgdGhyb3VnaCB0aGVzZSB3b3VsZCBiZSBhIGdvb2QgaWRlYS5cblxuSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYHVzYmlwYCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGNvbmZpZ3VyZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy4gVGhhdCBjb3VsZCBwcm92aWRlIG1vcmUgY29udGV4dCBvbiB0aGUgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0OTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODozOS45MzMyMjc4MzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTY1Nzc2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCSVBfVkhDSV9IQ0RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvdXNiaXAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi91c2JpcC9LY29uZmlnPTM9Y29uZmlnIFVTQklQX0NPUkVcXG4tLVxcbmRyaXZlcnMvdXNiL3VzYmlwL0tjb25maWctMjAtXFxuZHJpdmVycy91c2IvdXNiaXAvS2NvbmZpZzoyMTpjb25maWcgVVNCSVBfVkhDSV9IQ0RcXG5kcml2ZXJzL3VzYi91c2JpcC9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJWSENJIGhjZFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTk6NTg6NDAuMTIyODkwNzU3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjI1OTM4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVU0IvSVAgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgb3ZlciB0byB0aGUgYGRyaXZlcnMvdXNiL3VzYmlwL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMS4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiBjb25maWd1cmluZyB0aGUgVVNCL0lQIG1vZHVsZSBwcm9iYWJseSBsaWVzLCBnaXZlbiB0aGUgbG9jYXRpb24uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGVyZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB3aGV0aGVyIHRoZSBtb2R1bGUgaXRzZWxmIGlzIGVuYWJsZWQsIGFueSBzcGVjaWZpYyBmZWF0dXJlcyBvciBtb2RlcywgYW5kIGhvcGVmdWxseSBzb21lIGhlbHAgdGV4dCBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgY2xhcmlmeSBleGFjdGx5IGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFVTQiBzdWJzeXN0ZW0gYW5kIHRoZSBicm9hZGVyIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgYSB1c2VyIGNvbmZpZ3VyZXMgVVNCL0lQIGFuZCB3aGF0IGNob2ljZXMgdGhleSBjYW4gbWFrZS4gTGluZSAyMSwgaXQgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5OTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODo0My45NDU0ODY3NjhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvdXNiaXAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdFxcbiAgIDM6XFx0Y29uZmlnIFVTQklQX0NPUkVcXG4gICA0OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IvSVAgc3VwcG9ydFxcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gTkVUXFxuICAgNjpcXHRcXHRzZWxlY3QgVVNCX0NPTU1PTlxcbiAgIDc6XFx0XFx0c2VsZWN0IFNHTF9BTExPQ1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGlzIGVuYWJsZXMgcHVzaGluZyBVU0IgcGFja2V0cyBvdmVyIElQIHRvIGFsbG93IHJlbW90ZVxcbiAgMTA6XFx0XFx0ICBtYWNoaW5lcyBkaXJlY3QgYWNjZXNzIHRvIFVTQiBkZXZpY2VzLiBJdCBwcm92aWRlcyB0aGVcXG4gIDExOlxcdFxcdCAgVVNCL0lQIGNvcmUgdGhhdCBpcyByZXF1aXJlZCBieSBib3RoIGRyaXZlcnMuXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgRm9yIG1vcmUgZGV0YWlscywgYW5kIHRvIGdldCB0aGUgdXNlcnNwYWNlIHV0aWxpdHlcXG4gIDE0OlxcdFxcdCAgcHJvZ3JhbXMsIHBsZWFzZSBzZWUgXFx1MDAzY2h0dHA6Ly91c2JpcC5zb3VyY2Vmb3JnZS5uZXQvXFx1MDAzZS5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxcbiAgMTc6XFx0XFx0ICBiZSBjYWxsZWQgdXNiaXAtY29yZS5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgVVNCSVBfVkhDSV9IQ0RcXG4gIDIyOlxcdFxcdHRyaXN0YXRlIFxcXCJWSENJIGhjZFxcXCJcXG4gIDIzOlxcdFxcdGRlcGVuZHMgb24gVVNCSVBfQ09SRSBcXHUwMDI2XFx1MDAyNiBVU0JcXG4gIDI0OlxcdFxcdGhlbHBcXG4gIDI1OlxcdFxcdCAgVGhpcyBlbmFibGVzIHRoZSBVU0IvSVAgdmlydHVhbCBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLFxcbiAgMjY6XFx0XFx0ICB3aGljaCBpcyBydW4gb24gdGhlIHJlbW90ZSBtYWNoaW5lLlxcbiAgMjc6XFx0XFxuICAyODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMjk6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmhjaS1oY2QuXFxuICAzMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTk6NTg6NDMuOTQ1NTU2ODM4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MTY3MDE0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBVU0JJUCBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgVVNCSVAgY29kZS4gQmFzZWQgb24gdGhlIGluaXRpYWwgcmVwb3J0cywgaXQgbG9va3MgbGlrZSB3ZSdyZSB6ZXJvaW5nIGluIG9uIGEgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIGhvdyBVU0Igb3ZlciBJUCBpcyBoYW5kbGVkLiBNeSBpbW1lZGlhdGUgY2hlY2tsaXN0IHN0YXJ0cyB3aXRoIGNvbmZpcm1pbmcgdGhlIGNyaXRpY2FsIG1vZHVsZXMgd2UgbmVlZCB0byBjb25zaWRlcjogYFVTQklQX1ZIQ0lfSENEYCwgYFVTQklQX0NPUkVgLCBgVVNCYCwgYW5kIGBORVRgLiBUaGVzZSBhcmUgdGhlIGZvdW5kYXRpb25hbCBjb21wb25lbnRzIGZvciBtYW5hZ2luZyB0aGUgdmlydHVhbCBob3N0IGNvbnRyb2xsZXIgYW5kIG5ldHdvcmsgY29tbXVuaWNhdGlvbi5cblxuTm93LCBteSBpbml0aWFsIGh1bmNoLCBiYXNlZCBvbiBleHBlcmllbmNlLCBpcyB0aGF0IHRoZSByZWFsIG1lYXQgb2YgdGhlIHByb2JsZW0gd2lsbCBiZSBmb3VuZCBpbiB0aGUgYWN0dWFsIGZ1bmN0aW9uIGNhbGxzIGRlYWxpbmcgd2l0aCBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBoYW5kbGluZyBhbmQgdW5saW5raW5nLiBUaGUgZnVuY3Rpb25zIHRoYXQgc3RhbmQgb3V0IGFzIGFyZWFzIG9mIGNyaXRpY2FsIGltcG9ydGFuY2UgYXJlOiBgdmhjaV91cmJfZGVxdWV1ZWAsIGB2aGNpX2NsZWFudXBfdW5saW5rX2xpc3RgLCBgdmhjaV9yZWN2X3JldF9zdWJtaXRgLCBhbmQgYHZoY2lfcmVjdl9yZXRfdW5saW5rYC4gVGhlc2UgYXJlIGFsbCBwcmltZSBzdXNwZWN0cyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgaW5jb3JyZWN0IGVycm9yIGhhbmRsaW5nLCBvciBtZW1vcnkgbWFuYWdlbWVudCBmbGF3cy5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCBpcyBtYXJrZWQgYXMgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlZCBteSBpbnRlcmVzdC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gaW50ZXJuYWwgaGVscGVycy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgaXQncyBhbiBBUEkgZW50cnlwb2ludCBleHBvc2VkIHRvIG90aGVyIG1vZHVsZXMsIG9yIGlmIGl0J3Mgb25seSBjYWxsZWQgaW50ZXJuYWxseSB3aXRoaW4gdGhlIGB2aGNpYCBtb2R1bGUuIFRoYXQgd2lsbCBncmVhdGx5IGFmZmVjdCB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS4gSXQncyB0aW1lIHRvIGRpZyBkZWVwZXIgYW5kIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODo0OC42NjIyNjExNjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDcyOTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZoY2lfY2xlYW51cF91bmxpbmtfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi91c2JpcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYz04OTU9c3RhdGljIGludCB2aGNpX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cylcXG4tLVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtOTgxLVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM6OTgyOnN0YXRpYyB2b2lkIHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy05ODMtXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqdW5saW5rX2xpc3QpXFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTEwMjU9c3RhdGljIHZvaWQgdmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXAoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDI3LVxcdC8qIGdpdmUgYmFjayBVUkIgb2YgdW5zZW50IHVubGluayByZXF1ZXN0ICovXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzoxMDI4OlxcdHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdCh2ZGV2LCBcXHUwMDI2dmRldi1cXHUwMDNldW5saW5rX3R4KTtcXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTEwMjktXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDMwLVxcdC8qIGdpdmUgYmFjayBVUkIgb2YgdW5hbnN3ZXJlZCB1bmxpbmsgcmVxdWVzdCAqL1xcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM6MTAzMTpcXHR2aGNpX2NsZWFudXBfdW5saW5rX2xpc3QodmRldiwgXFx1MDAyNnZkZXYtXFx1MDAzZXVubGlua19yeCk7XFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDMyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTk6NTg6NDguNzEyMzM3NDM0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTYwMzY3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBWSENJIENsZWFudXAgUHJvY2VzcyoqXG5cblJpZ2h0LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBUaGlzIGNsZWFudXAgc2VxdWVuY2UgSSdtIGxvb2tpbmcgYXQgb3JpZ2luYXRlcyBmcm9tIGB2aGNpX2RldmljZV91bmxpbmtfY2xlYW51cGAuIFRoYXQgZnVuY3Rpb24ncyBjYWxsZWQgYnkgYHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbmAuIFNvLCB3ZSdyZSB0YWxraW5nIGFib3V0IHVubGlua2luZyBvciBzaHV0dGluZyBkb3duIGEgY29ubmVjdGlvbiwgYW5kIHRoZSBjbGVhbnVwIHByb2Nlc3Mga2lja3MgaW4uXG5cbk5vdywgSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgVVJCcyBhcmUgbWFuYWdlZCBkdXJpbmcgdGhpcyBwcm9jZXNzLiBgdmhjaV91cmJfZGVxdWV1ZWAgaXMgd2hhdCBJJ20gZm9jdXNpbmcgb247IGl0J3MgdGhlIHNwZWNpZmljIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgdGhlIEhDRCB1c2VzIGZvciB0aGUgYC51cmJfZGVxdWV1ZWAgb3BlcmF0aW9uLiBUaGlzIGlzIHdoZXJlIHdlIG5lZWQgdG8gZW5zdXJlIHRoaW5ncyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuXG5cbkZ1cnRoZXIgZG93biB0aGUgbGluZSwgb24gdGhlIHJlY2VpdmUgcGF0aCwgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCBhbmQgYHZoY2lfcmVjdl9yZXRfdW5saW5rYCBhcmUgY2FsbGVkIGZyb20gYHZoY2lfcnhfcGR1YC4gVGhpcyBzdWdnZXN0cyB0aGVyZSdzIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCBVUkIgc3VibWlzc2lvbnMgYW5kIHVubGlua2luZyBoYXBwZW5pbmcgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nIGZyb20gdGhlIHJlY2VpdmUgcXVldWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODo1Mi4yMDgzNzcxMzZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxODg4NTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZoY2lfcmVjdl9yZXRfc3VibWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3VzYmlwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmM9MTM9c3RydWN0IHVyYiAqcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwgX191MzIgc2VxbnVtKVxcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jLTU0LVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYzo1NTpzdGF0aWMgdm9pZCB2aGNpX3JlY3ZfcmV0X3N1Ym1pdChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jLTU2LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgdXNiaXBfaGVhZGVyICpwZHUpXFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmM9MjAzPXN0YXRpYyB2b2lkIHZoY2lfcnhfcGR1KHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKVxcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jLTI0Ny1cXHRjYXNlIFVTQklQX1JFVF9TVUJNSVQ6XFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jOjI0ODpcXHRcXHR2aGNpX3JlY3ZfcmV0X3N1Ym1pdCh2ZGV2LCBcXHUwMDI2cGR1KTtcXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMtMjQ5LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODo1Mi4yNjAyNzEwMTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgwNzcxMjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB2aGNpX3J4X3BkdWAgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgdmhjaV9yeF9wZHVgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGZyb20gYHZoY2lfcnhfbG9vcGAsIHdoaWNoIGlzLCBpZiBJJ20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgYSBrZXJuZWwgdGhyZWFkLiBUaGF0IGdpdmVzIG1lIGEgZmV3IGtleSBmdW5jdGlvbnMgdG8gcmVhbGx5IGZvY3VzIG9uOiBgdmhjaV91cmJfZGVxdWV1ZWAsIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAsIGFuZCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLiBUaGVzZSBhcmUgbGlrZWx5IHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHRoZSBjcml0aWNhbCBpbnRlcmFjdGlvbnMuXG5cbkhtbSwgYnV0IHdhaXQuLi5JIHNlZSBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCwgdGhhdCdzIHN0YXRpYy4gVGhhdCdzIG5vdCBhcyBoZWxwZnVsLiBNYXliZSBJIHNob3VsZCBsb29rIGF0IGB2aGNpX2RldmljZV91bmxpbmtfY2xlYW51cGAgb3IgcGVyaGFwcyBldmVuIGB2aGNpX3NodXRkb3duX2Nvbm5lY3Rpb25gPyBMZXQgbWUgc2hpZnQgbXkgZm9jdXMgdG8gYHZoY2lfZGV2aWNlX3VubGlua19jbGVhbnVwYCBhbmQgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTk6NTg6NTguMDY3OTg3MDM0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc4NjA5MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvdXNiaXAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM9OTgyPXN0YXRpYyB2b2lkIHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTEwMjQtXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzoxMDI1OnN0YXRpYyB2b2lkIHZoY2lfZGV2aWNlX3VubGlua19jbGVhbnVwKHN0cnVjdCB2aGNpX2RldmljZSAqdmRldilcXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTEwMjYte1xcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYz0xMDM5PXN0YXRpYyB2b2lkIHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbihzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZClcXG4tLVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMTA2OC1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jOjEwNjk6XFx0dmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXAodmRldik7XFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDcwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1ODo1OC4yMjU4NTc5M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTM5MDI3MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBVU0IvSVAgVmlydHVhbCBIb3N0IENvbnRyb2xsZXIgKFZIQ0kpIFNodXRkb3duIGFuZCBEYXRhIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGB2aGNpX3NodXRkb3duX2Nvbm5lY3Rpb25gIGZ1bmN0aW9uLCB3aGljaCBpcywgYXMgSSByZWNhbGwsIHRoZSBzaHV0ZG93biBjYWxsYmFjayBmb3IgdGhlIGB1c2JpcF9kZXZpY2VgIHdpdGhpbiB0aGUgVkhDSSBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG92ZXJhbGwgZGF0YSBmbG93LiBMZXQgbWUgemVybyBpbiBvbiBgdmhjaV91cmJfZGVxdWV1ZWAsIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAsIGFuZCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLiBUaGVzZSBzZWVtIGNyaXRpY2FsIGZvciBoYW5kbGluZyBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBkYXRhIGR1cmluZyB0aGUgc2h1dGRvd24gcHJvY2Vzcy5cblxuV2FpdCBhIHNlY29uZOKApiBgdmhjaV9yZWN2X3JldF9zdWJtaXRgIGFuZCBgdmhjaV9yZWN2X3JldF91bmxpbmtgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMuIEludGVyZXN0aW5nLiBBcmUgdGhleSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlcj8gR2l2ZW4gdGhlaXIgYXBwYXJlbnQgc2l6ZSwgdGhleSBhcmUgcHJvYmFibHkgbm90IGlubGluZWQuIFRvIGNvbmZpcm0gbXkgc3VzcGljaW9uLCBJIHNob3VsZCBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRoZXkgYXJlIGluZGVlZCBzdGF0aWMgZnVuY3Rpb25zLiBZZXAsIHRoZXkgYXJlLiBUaGF0J3MgZ29vZCB0byBrbm93LlxuXG5Ob3csIGNhbiBJIGxldmVyYWdlIGB2aGNpX3J4X3BkdWAgaW4gdGhpcyBjb250ZXh0PyBMZXQgbWUgY2hlY2sgaXRzIGRlY2xhcmF0aW9u4oCmIGhtbSwgaXQncyBhbHNvIHN0YXRpYy4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncywgcG90ZW50aWFsbHkgb2ZmZXJpbmcgc29tZSBzaGFyZWQgbG9naWMuXG5cbkZpbmFsbHksIEnigJlsbCBjaGVjayBgdmhjaV9yeF9sb29wYCwgd2hpY2ggaXMgdGhlIHRocmVhZCBmdW5jdGlvbi4gTm8sIGl04oCZcyBub3Qgc3RhdGljLiBPa2F5LiBUaGF0IGNsYXJpZmllcyB0aGUgc2NvcGUgb2YgZWFjaCBmdW5jdGlvbidzIGFjY2Vzc2liaWxpdHkuIEkgd2lsbCBrZWVwIHRoaXMgaW4gbWluZCBhcyBJIGNvbnRpbnVlIHRvIGFuYWx5emUgdGhlIHNodXRkb3duIHNlcXVlbmNlIGFuZCBob3cgZGF0YSB0cmFuc2ZlcnMgYXJlIGhhbmRsZWQgaW4gdGhlIHZpcnR1YWxpemVkIFVTQiBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2ODEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTk6NTk6MDMuNzY0ODg3ODg3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzMzNzgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aGNpX3J4X2xvb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvdXNiaXAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL3VzYmlwL3ZoY2kuaD0xMzM9c3RydWN0IHVyYiAqcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwgX191MzIgc2VxbnVtKTtcXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpLmg6MTM0OmludCB2aGNpX3J4X2xvb3Aodm9pZCAqZGF0YSk7XFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaS5oLTEzNS1cXG4tLVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYz0yMDM9c3RhdGljIHZvaWQgdmhjaV9yeF9wZHUoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpXFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmMtMjYxLVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYzoyNjI6aW50IHZoY2lfcnhfbG9vcCh2b2lkICpkYXRhKVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfcnguYy0yNjMte1xcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9zeXNmcy5jPTMxNT1zdGF0aWMgc3NpemVfdCBhdHRhY2hfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfc3lzZnMuYy0zODEtXFx0LyogY3JlYXRlIHRocmVhZHMgYmVmb3JlIGxvY2tpbmcgKi9cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX3N5c2ZzLmM6MzgyOlxcdHRjcF9yeCA9IGt0aHJlYWRfY3JlYXRlKHZoY2lfcnhfbG9vcCwgXFx1MDAyNnZkZXYtXFx1MDAzZXVkLCBcXFwidmhjaV9yeFxcXCIpO1xcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfc3lzZnMuYy0zODMtXFx0aWYgKElTX0VSUih0Y3BfcngpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE5OjU5OjAzLjgxODIzMTQ0NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMxNjM1MzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIGB2aGNpX3VyYl9kZXF1ZXVlYCoqXG5cbk9rYXksIHNvIGB2aGNpX3VyYl9kZXF1ZXVlYCBpcyBhbHNvIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBJbnRlcmVzdGluZy4gVGhhdCBpbW1lZGlhdGVseSBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZC4gVGltZSB0byBpbnZlc3RpZ2F0ZSB0aGlzIG9uZSBkaXJlY3RseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFZpcnR1YWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBjb2RlLiBUaGlzIGNvdWxkIGJlIGEgY3JpdGljYWwgcG9pbnQgb2YgY29udHJvbCwgb3IgbWF5YmUganVzdCBhIGhlbHBmdWwgaW50ZXJuYWwgZnVuY3Rpb24uIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1OTowNy40NDk4NzAxNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxOTk3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhjaV91cmJfZGVxdWV1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi91c2JpcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYz0zNz1zdGF0aWMgaW50IHZoY2lfdXJiX2VucXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLFxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMzgtXFx0XFx0XFx0ICAgIGdmcF90IG1lbV9mbGFncyk7XFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzozOTpzdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTtcXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTQwLXN0YXRpYyBpbnQgdmhjaV9zdGFydChzdHJ1Y3QgdXNiX2hjZCAqdmhjaV9oY2QpO1xcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYz02OTc9c3RhdGljIGludCB2aGNpX3VyYl9lbnF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgZ2ZwX3QgbWVtX2ZsYWdzKVxcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy04OTQtICovXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzo4OTU6c3RhdGljIGludCB2aGNpX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cylcXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTg5Ni17XFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTEzNDA9c3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgdmhjaV9oY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTEzNTEtXFx0LnVyYl9lbnF1ZXVlXFx0PSB2aGNpX3VyYl9lbnF1ZXVlLFxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM6MTM1MjpcXHQudXJiX2RlcXVldWVcXHQ9IHZoY2lfdXJiX2RlcXVldWUsXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMzUzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1OTowNy40OTcwNzYyNzlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg2NzI1MTE5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZ1bmN0aW9uIElubGluaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIGxpa2VseSB0byBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gU2luY2UgSSBrbm93IHRoZXNlIGFyZSBzdGF0aWMsIEkgc2hvdWxkIHN0YXJ0IGJ5IGV4cGxpY2l0bHkgbGlzdGluZyB0aGUgZnVuY3Rpb25zIHRoYXQgKm1pZ2h0IG5vdCogYmUuIEknbSB0aGlua2luZyBvZiBgdmhjaV9yeF9sb29wYCBhcyBhIHN0YXJ0aW5nIHBvaW50LCBhbmQgbWF5YmUgYHZoY2lfdXJiX2RlcXVldWVgIHRvbywgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWMuIFRoZSBhZGRyZXNzIG9mIGB2aGNpX3VyYl9kZXF1ZXVlYCBpcyB0YWtlbiB3aGljaCBtZWFucyBpbmxpbmluZyBpcyBsZXNzIGxpa2VseS4gQWgsIHllYWgsIGl0J3MgYXNzaWduZWQgdG8gdGhlIGAudXJiX2RlcXVldWVgIGZpZWxkIG9mIGEgc3RydWN0LCBzbyBkZWZpbml0ZWx5IG5vdCBnZXR0aW5nIGlubGluZWQuIEdvb2QgY2F0Y2guXG5cbk5vdywgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCBhbmQgYHZoY2lfcmVjdl9yZXRfdW5saW5rYCBhcmUgY2FsbGVkIGZyb20gd2l0aGluIGB2aGNpX3J4X3BkdWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYHZoY2lfcnhfbG9vcGAuIExldCdzIHNlZSBpZiBgdmhjaV9yZWN2X3JldF9zdWJtaXRgIGlzIGFzc2lnbmVkIHRvIGFueXRoaW5nLCBvciBpZiBpdCdzIGp1c3QgY2FsbGVkIGRpcmVjdGx5LiBSaWdodCwgaXQncyBjYWxsZWQgZGlyZWN0bHkgd2l0aGluIGEgc3dpdGNoIHN0YXRlbWVudCBpbnNpZGUgYHZoY2lfcnhfcGR1YC4gVGhhdCdzIGFuIGludGVyZXN0aW5nIGNhc2U7IGl0ICptaWdodCogYmUgaW5saW5lZC5cblxuU28sIHRvIGJlIGNvbnNlcnZhdGl2ZSwgSSBzaG91bGQgYmFzZSBteSB3b3JrIGFyb3VuZCBgdmhjaV9yeF9sb29wYCBhbmQgYHZoY2lfdXJiX2RlcXVldWVgLiBMZXQncyBrZWVwIHRob3NlIGF0IHRoZSBmb3JlZnJvbnQuXG5cbk9oLCBhbmQgYHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbmAgaXMgYXNzaWduZWQgdG8gdGhlIGAuc2h1dGRvd25gIGZpZWxkIGluIHRoZSBgdXNiaXBfZGV2aWNlYCBzdHJ1Y3QuIEkgc2hvdWxkIGRlZmluaXRlbHkgaW52ZXN0aWdhdGUgdGhhdCBvbmUgZnVydGhlciwgc2luY2UgaXQgbG9va3MgdG8gYmUgYW4gaW1wb3J0YW50IGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTc0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE5OjU5OjEzLjM2NDQ1ODA2N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2NDAwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhjaV9zaHV0ZG93bl9jb25uZWN0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3VzYmlwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTEwMjU9c3RhdGljIHZvaWQgdmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXAoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDM4LSAqL1xcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmM6MTAzOTpzdGF0aWMgdm9pZCB2aGNpX3NodXRkb3duX2Nvbm5lY3Rpb24oc3RydWN0IHVzYmlwX2RldmljZSAqdWQpXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDQwLXtcXG4tLVxcbmRyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMtMTA4My1cXHQgKiBOT1RFOiB2aGNpX2RlcXVldWUoKSBtdXN0IGJlIGNvbnNpZGVyZWQgY2FyZWZ1bGx5LiBXaGVuIHNodXR0aW5nIGRvd25cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jOjEwODQ6XFx0ICogYSBjb25uZWN0aW9uLCB2aGNpX3NodXRkb3duX2Nvbm5lY3Rpb24oKSBleHBlY3RzIHZoY2lfZGVxdWV1ZSgpXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYy0xMDg1LVxcdCAqIGdpdmVzIGJhY2sgcHVzaGVkIHVyYnMgYW5kIGZyZWVzIHRoZWlyIHByaXZhdGUgZGF0YSBieSByZXF1ZXN0IG9mXFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jPTExMjk9c3RhdGljIHZvaWQgdmhjaV9kZXZpY2VfaW5pdChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTExNDUtXFxuZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuYzoxMTQ2OlxcdHZkZXYtXFx1MDAzZXVkLmVoX29wcy5zaHV0ZG93biA9IHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbjtcXG5kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jLTExNDctXFx0dmRldi1cXHUwMDNldWQuZWhfb3BzLnJlc2V0ID0gdmhjaV9kZXZpY2VfcmVzZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE5OjU5OjEzLjQxNDEwNDE4NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQ1NzUyNzU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVVNCSVAgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgaW50byB0aGlzIGB1c2JpcGAgZHJpdmVyIHBhdGNoLiBGaXJzdCwgSSBub3RpY2VkIHRoYXQgYHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbmAgaXMgYWxzbyAqbm90KiBpbmxpbmVkLiBUaGF0J3MgYSBwb2ludCB0byByZW1lbWJlci5cblxuVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZXF1aXJlZCBmb3IgdGhpcyBwYXRjaCBhcmU6IGBVU0JJUF9WSENJX0hDRGAsIGBVU0JJUF9DT1JFYCwgYFVTQmAsIGFuZCBgTkVUYC4gSG93ZXZlciwgdGhpbmtpbmcgYWJvdXQgaXQsIGBVU0JJUF9WSENJX0hDRGAgaGFzIGRlcGVuZGVuY2llcyBvbiBib3RoIGBVU0JJUF9DT1JFYCBhbmQgYFVTQmAuICBBbmQgZnVydGhlciBJIHJlbWVtYmVyIHRoYXQgYFVTQklQX0NPUkVgIGRlcGVuZHMgb24gYE5FVGAuIFNvLCByZWFsbHksIEkgY2FuIGp1c3Qgc3BlY2lmeSBgVVNCSVBfVkhDSV9IQ0RgIGFuZCBgVVNCSVBfQ09SRWAuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgaGlkZGVuIGRlcGVuZGVuY2llcy4gT2theSwgaXQgbG9va3MgbGlrZSB0aGF0IGNvdmVycyBldmVyeXRoaW5nOiBgVVNCSVBfVkhDSV9IQ0RgLCBgVVNCSVBfQ09SRWAsIGBVU0JgLCBhbmQgYE5FVGAuXG5cbkxldCdzIHN1bW1hcml6ZSB0aGUga2V5IGFzcGVjdHMgb2YgdGhpcyBwYXRjaCBmb3Igb3VyIGZ1enppbmcgZWZmb3J0czpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFllcywgYWJzb2x1dGVseS5cbiogICAqKlJlYXNvbmluZzoqKiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyB3aGVyZSBgdXNiX2hjZF9naXZlYmFja191cmJgIHdhcyBiZWluZyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgaW4gdGhlIGB1c2JpcGAgZHJpdmVyLiBJdCBtb2RpZmllcyBjb3JlIFVSQiBoYW5kbGluZyBmdW5jdGlvbnMgKGB2aGNpX3VyYl9kZXF1ZXVlYCwgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCwgYHZoY2lfcmVjdl9yZXRfdW5saW5rYCwgYHZoY2lfY2xlYW51cF91bmxpbmtfbGlzdGApIHRvIGtlZXAgaW50ZXJydXB0cyBkaXNhYmxlZCBkdXJpbmcgdGhlIGdpdmViYWNrIHByb2Nlc3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYSB2aXJ0dWFsIFVTQiBjb250cm9sbGVyIGRyaXZlciwgYW5kIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBzaG91bGQgYmUgYWJsZSB0byByZWFjaCB0aGlzIGNvZGUuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogSSdtIHRoaW5raW5nIHdlIHNob3VsZCBmb2N1cyBvbiBgdmhjaV91cmJfZGVxdWV1ZWAsIGB2aGNpX3J4X2xvb3BgLCBhbmQgcG90ZW50aWFsbHkgYHZoY2lfc2h1dGRvd25fY29ubmVjdGlvbmAuXG4qICAgKipFbmFibGVDb25maWdzOioqIGBVU0JJUF9WSENJX0hDRGAgYW5kIGBVU0JJUF9DT1JFYC5cblxuTm93LCBhYm91dCB0aG9zZSBmb2N1cyBzeW1ib2xzLi4uIGB2aGNpX3J4X2xvb3BgIGlzIGxpa2VseSBhIGdvb2QgY2hvaWNlLiBJdCdzIHRoZSBtYWluIHJlY2VpdmUgbG9vcCBmb3IgdGhlIHZpcnR1YWwgVVNCIGNvbnRyb2xsZXIsIHNvIGl0J2xsIGdldCBhIGxvdCBvZiBoaXRzIGlmIHRoZSBmdXp6ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGRyaXZlci4gQnV0IG5vdyB0aGF0IEkgdGhpbmsgYWJvdXQgaXQsIHRoZSBtb3JlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZmZlY3RlZCBieSB0aGUgcGF0Y2ggYXJlIGFjdHVhbGx5IGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAgYW5kIGB2aGNpX3JlY3ZfcmV0X3VubGlua2AuIFRoZXNlIG1pZ2h0IGJlIGlubGluZWQuIFNvLCBgdmhjaV9yeF9sb29wYCBpcyBzdGlsbCBwcm9iYWJseSB0aGUgc2FmZXN0IGJldCBmb3IgbWF4aW11bSBjb3ZlcmFnZS4gQnV0IEknbGwgaW5jbHVkZSBgdmhjaV91cmJfZGVxdWV1ZWAgdG9vLCBqdXN0IGluIGNhc2UsIGJlY2F1c2UgdGhhdCBpcyBhbm90aGVyIGtleSBmdW5jdGlvbiByZWxhdGVkIHRvIFVSQiBoYW5kbGluZy5cblxuT2theSwgSSB0aGluayBJJ3ZlIGdvdCBhIHNvbGlkIHBsYW4uIExldCdzIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTk3LCJPdXRwdXRUb2tlbnMiOjE3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1OToyNC44NzE2MzUzMThaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDYxODcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCSVBfVkhDSV9IQ0RcIixcbiAgICBcIlVTQklQX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aGNpX3VyYl9kZXF1ZXVlXCIsXG4gICAgXCJ2aGNpX3J4X2xvb3BcIixcbiAgICBcInZoY2lfc2h1dGRvd25fY29ubmVjdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAgd2FzIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBpbiB0aGUgYHVzYmlwYCBkcml2ZXIuIEl0IG1vZGlmaWVzIGNvcmUgVVJCIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYHZoY2lfdXJiX2RlcXVldWVgLCBgdmhjaV9yZWN2X3JldF9zdWJtaXRgLCBgdmhjaV9yZWN2X3JldF91bmxpbmtgLCBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCkgdG8ga2VlcCBpbnRlcnJ1cHRzIGRpc2FibGVkIGR1cmluZyB0aGUgZ2l2ZWJhY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHZpcnR1YWwgVVNCIGNvbnRyb2xsZXIgZHJpdmVyIHRoYXQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JJUF9WSENJX0hDRFwiLFxuICAgIFwiVVNCSVBfQ09SRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZoY2lfdXJiX2RlcXVldWVcIixcbiAgICBcInZoY2lfcnhfbG9vcFwiLFxuICAgIFwidmhjaV9zaHV0ZG93bl9jb25uZWN0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCB3YXMgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBlbmFibGVkIGluIHRoZSBgdXNiaXBgIGRyaXZlci4gSXQgbW9kaWZpZXMgY29yZSBVUkIgaGFuZGxpbmcgZnVuY3Rpb25zIChgdmhjaV91cmJfZGVxdWV1ZWAsIGB2aGNpX3JlY3ZfcmV0X3N1Ym1pdGAsIGB2aGNpX3JlY3ZfcmV0X3VubGlua2AsIGB2aGNpX2NsZWFudXBfdW5saW5rX2xpc3RgKSB0byBrZWVwIGludGVycnVwdHMgZGlzYWJsZWQgZHVyaW5nIHRoZSBnaXZlYmFjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgdmlydHVhbCBVU0IgY29udHJvbGxlciBkcml2ZXIgdGhhdCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1OToyNC45NTIyNjE0MzZaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODMzNDA1NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMTk6NTk6MjQuOTUyOTA2MzQ2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1ODMyNzU3MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzcGlubG9jayBvcGVyYXRpb25zIChgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZWAgdG8gYHNwaW5fdW5sb2NrYCBhbmQgYHNwaW5fbG9ja19pcnFzYXZlYCB0byBgc3Bpbl9sb2NrYCkgdG8gY2hhbmdlIGhvdyBJUlEgc3RhdGUgaXMgaGFuZGxlZCBhcm91bmQgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYC4gVGhpcyBpcyBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gZGVhZGxvY2tzLCBJUlEgc3RhdGUgY29ycnVwdGlvbiwgb3IgcmFjZSBjb25kaXRpb25zLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgYW5kIGluZm8tbGVha3MsIHdoaWNoIGFyZSBub3QgcmVsZXZhbnQgdG8gdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NWY0M2E0NDRmMTVhZjk3YjkwZTBhODI4MGM4OWE5MjFlOGFmZDIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAxOTo1ODoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3VzYmlwL3ZoY2lfaGNkLmMgYi9kcml2ZXJzL3VzYi91c2JpcC92aGNpX2hjZC5jXG5pbmRleCAzOWU4ZmFmNGMxOGNkLi5iNDE2ZDgyNzFhYTdmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuY1xuKysrIGIvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9oY2QuY1xuQEAgLTk0MCw5ICs5NDAsOSBAQCBzdGF0aWMgaW50IHZoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKVxuIFx0XHQgKi9cbiBcdFx0dXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaGNkLCB1cmIpO1xuIFxuLVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZ2aGNpLVx1MDAzZWxvY2spO1xuIFx0XHR1c2JfaGNkX2dpdmViYWNrX3VyYihoY2QsIHVyYiwgdXJiLVx1MDAzZXN0YXR1cyk7XG4tXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRzcGluX2xvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiBcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIHRjcCBjb25uZWN0aW9uIGlzIGFsaXZlICovXG5AQCAtMTAwOCwxMSArMTAwOCwxMSBAQCBzdGF0aWMgdm9pZCB2aGNpX2NsZWFudXBfdW5saW5rX2xpc3Qoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LFxuIFx0XHRsaXN0X2RlbChcdTAwMjZ1bmxpbmstXHUwMDNlbGlzdCk7XG4gXG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZkZXYtXHUwMDNlcHJpdl9sb2NrKTtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiBcbiBcdFx0dXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHVyYi1cdTAwM2VzdGF0dXMpO1xuIFxuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNnZoY2ktXHUwMDNlbG9jayk7XG4gXHRcdHNwaW5fbG9jayhcdTAwMjZ2ZGV2LVx1MDAzZXByaXZfbG9jayk7XG4gXG4gXHRcdGtmcmVlKHVubGluayk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jIGIvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jXG5pbmRleCBhNjc4ZTdjODk4Mzc1Li42ZGIzYTVhNzM2MDA5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvdXNiaXAvdmhjaV9yeC5jXG4rKysgYi9kcml2ZXJzL3VzYi91c2JpcC92aGNpX3J4LmNcbkBAIC0xMDIsMTAgKzEwMiwxMyBAQCBzdGF0aWMgdm9pZCB2aGNpX3JlY3ZfcmV0X3N1Ym1pdChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsXG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ2aGNpLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYik7XG4tXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbiBcbiBcdHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYiwgdXJiLVx1MDAzZXN0YXR1cyk7XG4gXG4rXHRzcGluX2xvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4gXHR1c2JpcF9kYmdfdmhjaV9yeChcIkxlYXZlXFxuXCIpO1xuIH1cbiBcbkBAIC0xNzMsOSArMTc2LDEyIEBAIHN0YXRpYyB2b2lkIHZoY2lfcmVjdl9yZXRfdW5saW5rKHN0cnVjdCB2aGNpX2RldmljZSAqdmRldixcbiBcbiBcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdHVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYik7XG4tXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZoY2ktXHUwMDNlbG9jayk7XG4gXG4gXHRcdHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHZoY2lfaGNkX3RvX2hjZCh2aGNpX2hjZCksIHVyYiwgdXJiLVx1MDAzZXN0YXR1cyk7XG4rXG4rXHRcdHNwaW5fbG9jayhcdTAwMjZ2aGNpLVx1MDAzZWxvY2spO1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0fVxuIFxuIFx0a2ZyZWUodW5saW5rKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDE5OjU5OjI0Ljk1MjkwOTIyNloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTgzMjczMTkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvY2tpbmcgQ2hhbmdlcyBpbiBVU0IvSVAgVmlydHVhbCBIb3N0IENvbnRyb2xsZXIgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIFVTQi9JUCB2aXJ0dWFsIGhvc3QgY29udHJvbGxlci4gSXQncyB0b3VjaGluZyBgdmhjaV9oY2QuY2AgYW5kIGB2aGNpX3J4LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgc3dpdGNoaW5nIGZyb20gdGhlIGBzcGluX2xvY2tfaXJxc2F2ZWAvYHNwaW5fdW5sb2NrX2lycXJlc3RvcmVgIHBhaXIgdG8gcGxhaW4gYHNwaW5fbG9ja2AvYHNwaW5fdW5sb2NrYCBpbiBhIGZldyBzcG90czogYHZoY2lfdXJiX2RlcXVldWVgLCBgdmhjaV9jbGVhbnVwX3VubGlua19saXN0YCwgYHZoY2lfcmVjdl9yZXRfc3VibWl0YCwgYW5kIGB2aGNpX3JlY3ZfcmV0X3VubGlua2AuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgYSBjaGFuZ2UgaW4gaG93IGludGVycnVwdHMgYXJlIGhhbmRsZWQgaW4gcmVsYXRpb24gdG8gdGhlIHNwaW5sb2Nrcy5cblxuTGV0J3MgZHJpbGwgZG93biBvbiBgdmhjaV91cmJfZGVxdWV1ZWAgYXMgYSByZXByZXNlbnRhdGl2ZSBleGFtcGxlLiBUaGUgb3JpZ2luYWwgY29kZSB1c2VkIHRvIGRvOlxuYGBgY1xuXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dmhjaS1cdTAwM2Vsb2NrLCBmbGFncyk7XG5cdFx0dXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHVyYi1cdTAwM2VzdGF0dXMpO1xuXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnZoY2ktXHUwMDNlbG9jaywgZmxhZ3MpO1xuYGBgXG5cblRoZSBwYXRjaCBjaGFuZ2VzIHRoaXMgdG86XG5gYGBjXG5cdFx0c3Bpbl91bmxvY2soXHUwMDI2dmhjaS1cdTAwM2Vsb2NrKTtcblx0XHR1c2JfaGNkX2dpdmViYWNrX3VyYihoY2QsIHVyYiwgdXJiLVx1MDAzZXN0YXR1cyk7XG5cdFx0c3Bpbl9sb2NrKFx1MDAyNnZoY2ktXHUwMDNlbG9jayk7XG5gYGBcblxuUmlnaHQsIHNvIGBzcGluX2xvY2tfaXJxc2F2ZWAgZGlzYWJsZXMgaW50ZXJydXB0cyBhbmQgc2F2ZXMgdGhlIHByZXZpb3VzIGludGVycnVwdCBzdGF0ZS4gIGBzcGluX3VubG9ja19pcnFyZXN0b3JlYCByZXN0b3JlcyB0aGUgaW50ZXJydXB0cyB0byB0aGUgc3RhdGUgdGhleSB3ZXJlIGluIGJlZm9yZSB0aGUgYHNwaW5fbG9ja19pcnFzYXZlYCBjYWxsLiAgVGhlIGNoYW5nZSBpcyBza2lwcGluZyB0aGUgSVJRIHN0YXRlIHNhdmluZyBhbmQgcmVzdG9yaW5nLiBUaGlzIGxpa2VseSBtZWFucyB0aGF0IGVpdGhlciB0aGUgY2FsbGluZyBmdW5jdGlvbiBpcyBhbHJlYWR5IG1hbmFnaW5nIHRoZSBJUlEgc3RhdGUsIG9yIHRoZSBpbnRlbnRpb24gaXMgdG8ga2VlcCBpbnRlcnJ1cHRzIGRpc2FibGVkIGFjcm9zcyB0aGUgYHVzYl9oY2RfZ2l2ZWJhY2tfdXJiYCBjYWxsLiAgSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgZGlzYWJsaW5nIGludGVycnVwdHMgZHVyaW5nIHRoZSBjYWxsIHRvIGB1c2JfaGNkX2dpdmViYWNrX3VyYmAuIFRoZSBsb2NraW5nIG9yZGVyIGlzIHVuY2hhbmdlZC4gVGhlIElSUSBzdGF0ZSBjb3VsZCBiZSByZXN0b3JlZCBsYXRlciwgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBzbmlwcGV0LlxuXG5UaGUgY3JpdGljYWwgdGhpbmcgaXMgdGhhdCB0aGlzIHBhdGNoICpvbmx5KiBtb2RpZmllcyB0aGUgbG9ja2luZyBwcmltaXRpdmVzLiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZC4gVGhlcmVmb3JlLCB0aGlzIGlzIHNvbGVseSBhIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGZpeCwgb3IgcG90ZW50aWFsbHkgYSBidWcuXG5cblRoaXMgc2NyZWFtcyBMT0NLREVQIG9yIEtBU0FOIHRlcnJpdG9yeSwgbWF5YmUgYSByYWNlIGNvbmRpdGlvbiBvciBkZWFkbG9jay4gS01TQU4sIHdoaWNoIGlzIGZvY3VzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgcG90ZW50aWFsIHByb2JsZW1zIGhlcmUgYXJlIGFib3V0IGNvcnJlY3QgbG9ja2luZyBhbmQgSVJRIG1hbmFnZW1lbnQsIG5vdCB1bmluaXRpYWxpemVkIGRhdGEgdXNhZ2UuIEkgbmVlZCB0byBub3RlIHRoYXQgdGhpcyBjaGFuZ2VzIGhvdyBgdXNiX2hjZF9naXZlYmFja191cmJgIGlzIGNhbGxlZCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBpbnRlcnJ1cHRzLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgd2hlbiBhbmFseXppbmcgdGhlIG92ZXJhbGwgY2FsbCBjaGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0OCwiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQxOTo1OTo0MC43ODU2NDM1NjdaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNwaW5sb2NrIG9wZXJhdGlvbnMgKGBzcGluX3VubG9ja19pcnFyZXN0b3JlYCB0byBgc3Bpbl91bmxvY2tgIGFuZCBgc3Bpbl9sb2NrX2lycXNhdmVgIHRvIGBzcGluX2xvY2tgKSB0byBjaGFuZ2UgaG93IElSUSBzdGF0ZSBpcyBoYW5kbGVkIGFyb3VuZCBgdXNiX2hjZF9naXZlYmFja191cmJgLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY2hhbmdlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBkZWFkbG9ja3MsIElSUSBzdGF0ZSBjb3JydXB0aW9uLCBvciByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBhbmQgaW5mby1sZWFrcywgd2hpY2ggYXJlIG5vdCByZWxldmFudCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNwaW5sb2NrIG9wZXJhdGlvbnMgKGBzcGluX3VubG9ja19pcnFyZXN0b3JlYCB0byBgc3Bpbl91bmxvY2tgIGFuZCBgc3Bpbl9sb2NrX2lycXNhdmVgIHRvIGBzcGluX2xvY2tgKSB0byBjaGFuZ2UgaG93IElSUSBzdGF0ZSBpcyBoYW5kbGVkIGFyb3VuZCBgdXNiX2hjZF9naXZlYmFja191cmJgLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgY2hhbmdlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBkZWFkbG9ja3MsIElSUSBzdGF0ZSBjb3JydXB0aW9uLCBvciByYWNlIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBhbmQgaW5mby1sZWFrcywgd2hpY2ggYXJlIG5vdCByZWxldmFudCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxk5zp[1] Phase: Succeeded StartedAt: 2026-08-08 19:59:51 +0000 UTC FinishedAt: 2026-08-08 19:59:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-08 19:59:51 +0000 UTC FinishedAt: 2026-08-08 19:59:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2] Phase: Succeeded StartedAt: 2026-08-08 19:59:51 +0000 UTC FinishedAt: 2026-08-08 23:44:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-08 19:59:51 +0000 UTC FinishedAt: 2026-08-08 23:44:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-08 19:59:51 +0000 UTC FinishedAt: 2026-08-08 20:00:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-08 19:59:51 +0000 UTC FinishedAt: 2026-08-08 19:59:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxk5zp/series-workflowxk5zp-convert-artifact-615438982/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-08 20:00:02 +0000 UTC FinishedAt: 2026-08-08 20:16:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-08 20:00:02 +0000 UTC FinishedAt: 2026-08-08 20:16:45 +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:*7de4530a-92f8-4c75-b468-898cab7f17f0,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-workflowxk5zp/series-workflowxk5zp-convert-artifact-615438982/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": "7c62d50a-b361-4793-aa14-9e4d2647ab56", "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-workflowxk5zp/series-workflowxk5zp-build-action-1693457948/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-08 20:00:02 +0000 UTC FinishedAt: 2026-08-08 20:16:35 +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:*7de4530a-92f8-4c75-b468-898cab7f17f0,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-workflowxk5zp/series-workflowxk5zp-convert-artifact-615438982/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": "7c62d50a-b361-4793-aa14-9e4d2647ab56", "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-workflowxk5zp/series-workflowxk5zp-build-action-1693457948/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-08 20:16:45 +0000 UTC FinishedAt: 2026-08-08 20:16:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-08 20:16:45 +0000 UTC FinishedAt: 2026-08-08 20:16:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-08 20:16:45 +0000 UTC FinishedAt: 2026-08-08 20:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-08 20:16:45 +0000 UTC FinishedAt: 2026-08-08 20:16:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxk5zp/series-workflowxk5zp-convert-artifact-1243189721/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-08 20:16:55 +0000 UTC FinishedAt: 2026-08-08 20:18:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-08 20:16:55 +0000 UTC FinishedAt: 2026-08-08 20:18:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7c62d50a-b361-4793-aa14-9e4d2647ab56,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-workflowxk5zp/series-workflowxk5zp-build-action-1693457948/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-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-08 20:18:54 +0000 UTC FinishedAt: 2026-08-08 20:18:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-08 20:18:54 +0000 UTC FinishedAt: 2026-08-08 20:18:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-08 20:18:54 +0000 UTC FinishedAt: 2026-08-08 20:35:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-08 20:18:54 +0000 UTC FinishedAt: 2026-08-08 20:35:26 +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:*7de4530a-92f8-4c75-b468-898cab7f17f0,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-workflowxk5zp/series-workflowxk5zp-convert-artifact-1243189721/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": "fc268cc7-1a25-4893-9855-e0b6c7d18c3e", "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-workflowxk5zp/series-workflowxk5zp-build-action-3606099509/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-08 20:18:54 +0000 UTC FinishedAt: 2026-08-08 20:35:16 +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:*7de4530a-92f8-4c75-b468-898cab7f17f0,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-workflowxk5zp/series-workflowxk5zp-convert-artifact-1243189721/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": "fc268cc7-1a25-4893-9855-e0b6c7d18c3e", "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-workflowxk5zp/series-workflowxk5zp-build-action-3606099509/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-08 20:35:26 +0000 UTC FinishedAt: 2026-08-08 20:35:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-08 20:35:26 +0000 UTC FinishedAt: 2026-08-08 20:35:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-08 20:35:26 +0000 UTC FinishedAt: 2026-08-08 20:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-08 20:35:26 +0000 UTC FinishedAt: 2026-08-08 20:37:20 +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:*fc268cc7-1a25-4893-9855-e0b6c7d18c3e,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-workflowxk5zp/series-workflowxk5zp-build-action-3606099509/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-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-08 20:37:30 +0000 UTC FinishedAt: 2026-08-08 23:44:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-08 20:37:30 +0000 UTC FinishedAt: 2026-08-08 23:44:09 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"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:*7c62d50a-b361-4793-aa14-9e4d2647ab56,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fc268cc7-1a25-4893-9855-e0b6c7d18c3e,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-workflowxk5zp/series-workflowxk5zp-build-action-1693457948/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-workflowxk5zp/series-workflowxk5zp-build-action-3606099509/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-08 20:37:30 +0000 UTC FinishedAt: 2026-08-08 20:37:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-08 20:37:30 +0000 UTC FinishedAt: 2026-08-08 20:37:35 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"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-workflowxk5zp/series-workflowxk5zp-convert-artifact-4089652942/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-08 20:37:30 +0000 UTC FinishedAt: 2026-08-08 20:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-08 20:37:30 +0000 UTC FinishedAt: 2026-08-08 20:37:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-08 20:37:31 +0000 UTC FinishedAt: 2026-08-08 20:37:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-08 20:37:41 +0000 UTC FinishedAt: 2026-08-08 23:44:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxk5zp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vhci_urb_dequeue","vhci_rx_loop","vhci_shutdown_connection"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USBIP_VHCI_HCD","USBIP_CORE"],"series_id":"a7c4f078-e94a-4237-8154-32f56b030a82","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-08 20:37:41 +0000 UTC FinishedAt: 2026-08-08 23:44:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7c62d50a-b361-4793-aa14-9e4d2647ab56,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fc268cc7-1a25-4893-9855-e0b6c7d18c3e,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-workflowxk5zp/series-workflowxk5zp-build-action-1693457948/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-workflowxk5zp/series-workflowxk5zp-build-action-3606099509/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-workflowxk5zp/series-workflowxk5zp-convert-artifact-4089652942/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,}