Name: series-workflowlkk2s Phase: Succeeded StartedAt: 2026-08-18 14:21:39 +0000 UTC FinishedAt: 2026-08-18 18:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[0] Phase: Succeeded StartedAt: 2026-08-18 14:21:39 +0000 UTC FinishedAt: 2026-08-18 14:42:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 14:21:39 +0000 UTC FinishedAt: 2026-08-18 14:42:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_XT_TARGET_CT", "NETFILTER_XT_TARGET_IDLETIMER", "NF_CONNTRACK", "IP_NF_RAW", "NETFILTER_ADVANCED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_XT_TARGET_CT", "NETFILTER_XT_TARGET_IDLETIMER", "NF_CONNTRACK", "IP_NF_RAW", "NETFILTER_ADVANCED" ], "series_id": "a5e13ed6-9ed0-4c77-a101-4d738c809f3e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xt_ct_tg_check", "idletimer_tg_checkentry", "idletimer_tg_checkentry_v1" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9YVF9UQVJHRVRfQ1QmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVImIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O0lQX05GX1JBVyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4dF9jdF90Z19jaGVjayYjMzQ7LAogICAgJiMzNDtpZGxldGltZXJfdGdfY2hlY2tlbnRyeSYjMzQ7LAogICAgJiMzNDtpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgcmVtb3ZlcyBgcHJfZGVidWdgIHN0YXRlbWVudHMgYW5kIGNvbnZlcnRzIHNvbWUgdG8gYHByX2luZm9fcmF0ZWxpbWl0ZWRgIGFjcm9zcyB2YXJpb3VzIG5ldGZpbHRlciBtb2R1bGVzLiBUaGVyZSBpcyBhbHNvIGEgbG9naWNhbCBjaGFuZ2UgaW4gYHh0X0NULmNgIHJlZ2FyZGluZyB0aGUgdmFsaWRhdGlvbiBvZiBgaW5mby1cdTAwM2VoZWxwZXJgIGFuZCBgaW5mby1cdTAwM2V0aW1lb3V0YCBzdHJpbmdzLCB3aGljaCBpbnRyb2R1Y2VzIGRlYWQgY29kZSBhbmQgYWx0ZXJzIHRoZSBlcnJvciBoYW5kbGluZyBmb3Igbm9uLW51bGwtdGVybWluYXRlZCBzdHJpbmdzLiBIb3dldmVyLCB0aGUgYGluZm9gIHN0cnVjdHVyZSAoYHBhci1cdTAwM2V0YXJnaW5mb2ApIGlzIHBvcHVsYXRlZCB2aWEgYGNvcHlfZnJvbV91c2VyYCB3aXRoIGRhdGEgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUga2VybmVsJiMzOTtzIHBlcnNwZWN0aXZlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHRoZSBsb2dpYyBmbGF3IGluIGB4dF9DVC5jYCkgYXJlIGZ1bmN0aW9uYWwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgeHRfQ1QuY2AgdG8gY2hhbmdlIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgaW5mby1cdTAwM2VoZWxwZXJgIGFuZCBgaW5mby1cdTAwM2V0aW1lb3V0YC4gSWYgdGhleSBhcmUgbm90IG51bGwtdGVybWluYXRlZCwgdGhlIG5ldyBjb2RlIHNraXBzIHNldHRpbmcgdGhlbSBpbnN0ZWFkIG9mIHJldHVybmluZyBgLUVOQU1FVE9PTE9OR2AsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHRhcmdldCBpbml0aWFsaXphdGlvbiBsb2dpYy4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYHh0X0lETEVUSU1FUi5jYCB0byByZWxlYXNlIGEgbXV0ZXggYmVmb3JlIGxvZ2dpbmcsIHdoaWNoIGlzIGEgbWlub3IgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDkzMzhhZWM1NWNlMWVkMGZlZjAxOGIwYzg3YTZhZTM0MWI2YTZhNzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxNDozOToyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FoLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FoLmNcbmluZGV4IDE2MWJhNDEyY2IwOGIuLjcxMzFmMjk3YWRhMmUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfYWguY1xuQEAgLTE5LDEyICYjNDM7MTksNyBAQCBNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7WHRhYmxlczogSVB2NCBJUHNlYy1BSCBTUEkgbWF0Y2hcJiMzNDspO1xuIHN0YXRpYyBpbmxpbmUgYm9vbFxuIHNwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBib29sIGludmVydClcbiB7XG4tXHRib29sIHI7XG4tXHRwcl9kZWJ1ZyhcJiMzNDtzcGlfbWF0Y2g6JWMgMHgleCBcdTAwM2M9IDB4JXggXHUwMDNjPSAweCV4XFxuXCYjMzQ7LFxuLVx0XHQgaW52ZXJ0ID8gJiMzOTshJiMzOTsgOiAmIzM5OyAmIzM5OywgbWluLCBzcGksIG1heCk7XG4tXHRyID0gKHNwaSBcdTAwM2U9IG1pbiBcdTAwMjZcdTAwMjYgc3BpIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbi1cdHByX2RlYnVnKFwmIzM0OyByZXN1bHQgJXNcXG5cJiMzNDssIHIgPyBcJiMzNDtQQVNTXCYjMzQ7IDogXCYjMzQ7RkFJTEVEXCYjMzQ7KTtcbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiAoc3BpIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBzcGkgXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBhaF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG5AQCAtNDIsNyAmIzQzOzM3LDYgQEAgc3RhdGljIGJvb2wgYWhfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHQvKiBXZSYjMzk7dmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2VcbiBcdFx0ICogY2FuJiMzOTt0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC5cbiBcdFx0ICovXG4tXHRcdHByX2RlYnVnKFwmIzM0O0Ryb3BwaW5nIGV2aWwgQUggdGlueWdyYW0uXFxuXCYjMzQ7KTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5AQCAtNTgsNyAmIzQzOzUyLDcgQEAgc3RhdGljIGludCBhaF9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcbiBcdC8qIE11c3Qgc3BlY2lmeSBubyB1bmtub3duIGludmZsYWdzICovXG4gXHRpZiAoYWhpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiB+SVBUX0FIX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O3Vua25vd24gZmxhZ3MgJVhcXG5cJiMzNDssIGFoaW5mby1cdTAwM2VpbnZmbGFncyk7XG4mIzQzO1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O3Vua25vd24gZmxhZ3MgJVhcXG5cJiMzNDssIGFoaW5mby1cdTAwM2VpbnZmbGFncyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ycGZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ycGZpbHRlci5jXG5pbmRleCA2ZDliZjUxMDY4Njg0Li4yYzM4ZmQ2NjI0YWExIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ycGZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JwZmlsdGVyLmNcbkBAIC05NSw4ICYjNDM7OTUsNyBAQCBzdGF0aWMgaW50IHJwZmlsdGVyX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFxuIFx0aWYgKHN0cmNtcChwYXItXHUwMDNldGFibGUsIFwmIzM0O21hbmdsZVwmIzM0OykgIT0gMCBcdTAwMjZcdTAwMjZcbiBcdCAgICBzdHJjbXAocGFyLVx1MDAzZXRhYmxlLCBcJiMzNDtyYXdcJiMzNDspICE9IDApIHtcbi1cdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtvbmx5IHZhbGlkIGluIFxcJiMzOTtyYXdcXCYjMzk7IG9yIFxcJiMzOTttYW5nbGVcXCYjMzk7IHRhYmxlLCBub3QgXFwmIzM5OyVzXFwmIzM5O1xcblwmIzM0Oyxcbi1cdFx0XHRcdCAgICBwYXItXHUwMDNldGFibGUpO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtvbmx5IHZhbGlkIGluIFxcJiMzOTtyYXdcXCYjMzk7IG9yIFxcJiMzOTttYW5nbGVcXCYjMzk7IHRhYmxlXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmNcbmluZGV4IDEyNTg3ODNlZDg3NjIuLmRhYjdkYmM2YTY3NWMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jXG5AQCAtMjQsMTMgJiM0MzsyNCw3IEBAIE1PRFVMRV9BVVRIT1IoXCYjMzQ7QW5kcmFzIEtpcy1TemFibyBcdTAwM2NraXN6YUBzY2guYm1lLmh1XHUwMDNlXCYjMzQ7KTtcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpXG4ge1xuLVx0Ym9vbCByO1xuLVxuLVx0cHJfZGVidWcoXCYjMzQ7c3BpX21hdGNoOiVjIDB4JXggXHUwMDNjPSAweCV4IFx1MDAzYz0gMHgleFxcblwmIzM0Oyxcbi1cdFx0IGludmVydCA/ICYjMzk7ISYjMzk7IDogJiMzOTsgJiMzOTssIG1pbiwgc3BpLCBtYXgpO1xuLVx0ciA9IChzcGkgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IHNwaSBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4tXHRwcl9kZWJ1ZyhcJiMzNDsgcmVzdWx0ICVzXFxuXCYjMzQ7LCByID8gXCYjMzQ7UEFTU1wmIzM0OyA6IFwmIzM0O0ZBSUxFRFwmIzM0Oyk7XG4tXHRyZXR1cm4gcjtcbiYjNDM7XHRyZXR1cm4gKHNwaSBcdTAwM2U9IG1pbiBcdTAwMjZcdTAwMjYgc3BpIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgYWhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbkBAIC02MiwyMyAmIzQzOzU2LDYgQEAgc3RhdGljIGJvb2wgYWhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuLVx0cHJfZGVidWcoXCYjMzQ7SVB2NiBBSCBMRU4gJXUgJXUgXCYjMzQ7LCBoZHJsZW4sIGFoLVx1MDAzZWhkcmxlbik7XG4tXHRwcl9kZWJ1ZyhcJiMzNDtSRVMgJTA0WCBcJiMzNDssIGFoLVx1MDAzZXJlc2VydmVkKTtcbi1cdHByX2RlYnVnKFwmIzM0O1NQSSAldSAlMDhYXFxuXCYjMzQ7LCBudG9obChhaC1cdTAwM2VzcGkpLCBudG9obChhaC1cdTAwM2VzcGkpKTtcbi1cbi1cdHByX2RlYnVnKFwmIzM0O0lQdjYgQUggc3BpICUwMlggXCYjMzQ7LFxuLVx0XHQgc3BpX21hdGNoKGFoaW5mby1cdTAwM2VzcGlzWzBdLCBhaGluZm8tXHUwMDNlc3Bpc1sxXSxcbi1cdFx0XHQgICBudG9obChhaC1cdTAwM2VzcGkpLFxuLVx0XHRcdCAgICEhKGFoaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgSVA2VF9BSF9JTlZfU1BJKSkpO1xuLVx0cHJfZGVidWcoXCYjMzQ7bGVuICUwMlggJTA0WCAlMDJYIFwmIzM0Oyxcbi1cdFx0IGFoaW5mby1cdTAwM2VoZHJsZW4sIGhkcmxlbixcbi1cdFx0ICghYWhpbmZvLVx1MDAzZWhkcmxlbiB8fFxuLVx0XHQgIChhaGluZm8tXHUwMDNlaGRybGVuID09IGhkcmxlbikgXlxuLVx0XHQgICEhKGFoaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgSVA2VF9BSF9JTlZfTEVOKSkpO1xuLVx0cHJfZGVidWcoXCYjMzQ7cmVzICUwMlggJTA0WCAlMDJYXFxuXCYjMzQ7LFxuLVx0XHQgYWhpbmZvLVx1MDAzZWhkcnJlcywgYWgtXHUwMDNlcmVzZXJ2ZWQsXG4tXHRcdCAhKGFoaW5mby1cdTAwM2VoZHJyZXMgXHUwMDI2XHUwMDI2IGFoLVx1MDAzZXJlc2VydmVkKSk7XG4tXG4gXHRyZXR1cm4gc3BpX21hdGNoKGFoaW5mby1cdTAwM2VzcGlzWzBdLCBhaGluZm8tXHUwMDNlc3Bpc1sxXSxcbiBcdFx0XHQgIG50b2hsKGFoLVx1MDAzZXNwaSksXG4gXHRcdFx0ICAhIShhaGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IElQNlRfQUhfSU5WX1NQSSkpIFx1MDAyNlx1MDAyNlxuQEAgLTkzLDcgJiM0Mzs3MCw3IEBAIHN0YXRpYyBpbnQgYWhfbXQ2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IGlwNnRfYWggKmFoaW5mbyA9IHBhci1cdTAwM2VtYXRjaGluZm87XG4gXG4gXHRpZiAoYWhpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiB+SVA2VF9BSF9JTlZfTUFTSykge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDt1bmtub3duIGZsYWdzICVYXFxuXCYjMzQ7LCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDt1bmtub3duIGZsYWdzICVYXFxuXCYjMzQ7LCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuY1xuaW5kZXggM2FhZDY0MzkzODZiMS4uZjVmM2NmYjg3MDRjZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jXG5AQCAtMjMsMTIgJiM0MzsyMyw3IEBAIE1PRFVMRV9BVVRIT1IoXCYjMzQ7QW5kcmFzIEtpcy1TemFibyBcdTAwM2NraXN6YUBzY2guYm1lLmh1XHUwMDNlXCYjMzQ7KTtcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBpZF9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3QgaWQsIGJvb2wgaW52ZXJ0KVxuIHtcbi1cdGJvb2wgcjtcbi1cdHByX2RlYnVnKFwmIzM0O2lkX21hdGNoOiVjIDB4JXggXHUwMDNjPSAweCV4IFx1MDAzYz0gMHgleFxcblwmIzM0OywgaW52ZXJ0ID8gJiMzOTshJiMzOTsgOiAmIzM5OyAmIzM5Oyxcbi1cdFx0IG1pbiwgaWQsIG1heCk7XG4tXHRyID0gKGlkIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBpZCBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4tXHRwcl9kZWJ1ZyhcJiMzNDsgcmVzdWx0ICVzXFxuXCYjMzQ7LCByID8gXCYjMzQ7UEFTU1wmIzM0OyA6IFwmIzM0O0ZBSUxFRFwmIzM0Oyk7XG4tXHRyZXR1cm4gcjtcbiYjNDM7XHRyZXR1cm4gKGlkIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBpZCBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4gfVxuIFxuIHN0YXRpYyBib29sXG5AQCAtNTMsMzggJiM0Mzs0OCw2IEBAIGZyYWdfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuLVx0cHJfZGVidWcoXCYjMzQ7SU5GTyAlMDRYIFwmIzM0OywgZmgtXHUwMDNlZnJhZ19vZmYpO1xuLVx0cHJfZGVidWcoXCYjMzQ7T0ZGU0VUICUwNFggXCYjMzQ7LCBudG9ocyhmaC1cdTAwM2VmcmFnX29mZikgXHUwMDI2IH4weDcpO1xuLVx0cHJfZGVidWcoXCYjMzQ7UkVTICUwMlggJTA0WFwmIzM0OywgZmgtXHUwMDNlcmVzZXJ2ZWQsIG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgMHg2KTtcbi1cdHByX2RlYnVnKFwmIzM0O01GICUwNFggXCYjMzQ7LCBmaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVA2X01GKSk7XG4tXHRwcl9kZWJ1ZyhcJiMzNDtJRCAldSAlMDhYXFxuXCYjMzQ7LCBudG9obChmaC1cdTAwM2VpZGVudGlmaWNhdGlvbiksXG4tXHRcdCBudG9obChmaC1cdTAwM2VpZGVudGlmaWNhdGlvbikpO1xuLVxuLVx0cHJfZGVidWcoXCYjMzQ7SVB2NiBGUkFHIGlkICUwMlggXCYjMzQ7LFxuLVx0XHQgaWRfbWF0Y2goZnJhZ2luZm8tXHUwMDNlaWRzWzBdLCBmcmFnaW5mby1cdTAwM2VpZHNbMV0sXG4tXHRcdFx0ICBudG9obChmaC1cdTAwM2VpZGVudGlmaWNhdGlvbiksXG4tXHRcdFx0ICAhIShmcmFnaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgSVA2VF9GUkFHX0lOVl9JRFMpKSk7XG4tXHRwcl9kZWJ1ZyhcJiMzNDtyZXMgJTAyWCAlMDJYJTA0WCAlMDJYIFwmIzM0Oyxcbi1cdFx0IGZyYWdpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZUX0ZSQUdfUkVTLCBmaC1cdTAwM2VyZXNlcnZlZCxcbi1cdFx0IG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgMHg2LFxuLVx0XHQgISgoZnJhZ2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19SRVMpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAoZmgtXHUwMDNlcmVzZXJ2ZWQgfHwgKG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgMHgwNikpKSk7XG4tXHRwcl9kZWJ1ZyhcJiMzNDtmaXJzdCAlMDJYICUwMlggJTAyWCBcJiMzNDssXG4tXHRcdCBmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX0ZTVCxcbi1cdFx0IG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgfjB4Nyxcbi1cdFx0ICEoKGZyYWdpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZUX0ZSQUdfRlNUKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgKG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgfjB4NykpKTtcbi1cdHByX2RlYnVnKFwmIzM0O21mICUwMlggJTAyWCAlMDJYIFwmIzM0Oyxcbi1cdFx0IGZyYWdpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZUX0ZSQUdfTUYsXG4tXHRcdCBudG9ocyhmaC1cdTAwM2VmcmFnX29mZikgXHUwMDI2IElQNl9NRixcbi1cdFx0ICEoKGZyYWdpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZUX0ZSQUdfTUYpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAhKChudG9ocyhmaC1cdTAwM2VmcmFnX29mZikgXHUwMDI2IElQNl9NRikpKSk7XG4tXHRwcl9kZWJ1ZyhcJiMzNDtsYXN0ICUwMlggJTAyWCAlMDJYXFxuXCYjMzQ7LFxuLVx0XHQgZnJhZ2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19OTUYsXG4tXHRcdCBudG9ocyhmaC1cdTAwM2VmcmFnX29mZikgXHUwMDI2IElQNl9NRixcbi1cdFx0ICEoKGZyYWdpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZUX0ZSQUdfTk1GKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgKG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgSVA2X01GKSkpO1xuLVxuIFx0cmV0dXJuIGlkX21hdGNoKGZyYWdpbmZvLVx1MDAzZWlkc1swXSwgZnJhZ2luZm8tXHUwMDNlaWRzWzFdLFxuIFx0XHRcdCBudG9obChmaC1cdTAwM2VpZGVudGlmaWNhdGlvbiksXG4gXHRcdFx0ICEhKGZyYWdpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiBJUDZUX0ZSQUdfSU5WX0lEUykpIFx1MDAyNlx1MDAyNlxuQEAgLTEwMyw3ICYjNDM7NjYsNyBAQCBzdGF0aWMgaW50IGZyYWdfbXQ2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IGlwNnRfZnJhZyAqZnJhZ2luZm8gPSBwYXItXHUwMDNlbWF0Y2hpbmZvO1xuIFxuIFx0aWYgKGZyYWdpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiB+SVA2VF9GUkFHX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O3Vua25vd24gZmxhZ3MgJVhcXG5cJiMzNDssIGZyYWdpbmZvLVx1MDAzZWludmZsYWdzKTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7dW5rbm93biBmbGFncyAlWFxcblwmIzM0OywgZnJhZ2luZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmNcbmluZGV4IDZkMWE1ZDIwMjZhNjcuLjM3YzIwN2QzMTUyYTQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmNcbkBAIC03OSwxNCAmIzQzOzc5LDYgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbi1cdHByX2RlYnVnKFwmIzM0O0lQdjYgT1BUUyBMRU4gJXUgJXUgXCYjMzQ7LCBoZHJsZW4sIG9oLVx1MDAzZWhkcmxlbik7XG4tXG4tXHRwcl9kZWJ1ZyhcJiMzNDtsZW4gJTAyWCAlMDRYICUwMlggXCYjMzQ7LFxuLVx0XHQgb3B0aW5mby1cdTAwM2VoZHJsZW4sIGhkcmxlbixcbi1cdFx0ICghKG9wdGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfT1BUU19MRU4pIHx8XG4tXHRcdCAgKChvcHRpbmZvLVx1MDAzZWhkcmxlbiA9PSBoZHJsZW4pIF5cbi1cdFx0ICAgISEob3B0aW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgSVA2VF9PUFRTX0lOVl9MRU4pKSkpO1xuLVxuIFx0cmV0ID0gKCEob3B0aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9PUFRTX0xFTikgfHxcbiBcdCAgICAgICAoKG9wdGluZm8tXHUwMDNlaGRybGVuID09IGhkcmxlbikgXlxuIFx0XHQhIShvcHRpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiBJUDZUX09QVFNfSU5WX0xFTikpKTtcbkBAIC05Niw4ICYjNDM7ODgsNiBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdGlmICghKG9wdGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfT1BUU19PUFRTKSkge1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fSBlbHNlIHtcbi1cdFx0cHJfZGVidWcoXCYjMzQ7U3RyaWN0IFwmIzM0Oyk7XG4tXHRcdHByX2RlYnVnKFwmIzM0OyMlZCBcJiMzNDssIG9wdGluZm8tXHUwMDNlb3B0c25yKTtcbiBcdFx0Zm9yICh0ZW1wID0gMDsgdGVtcCBcdTAwM2Mgb3B0aW5mby1cdTAwM2VvcHRzbnI7IHRlbXAmIzQzOyYjNDM7KSB7XG4gXHRcdFx0LyogdHlwZSBmaWVsZCBleGlzdHMgPyAqL1xuIFx0XHRcdGlmIChoZHJsZW4gXHUwMDNjIDEpXG5AQCAtMTA4LDEzICYjNDM7OTgsOSBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRcdC8qIFR5cGUgY2hlY2sgKi9cbi1cdFx0XHRpZiAoKnRwICE9IChvcHRpbmZvLVx1MDAzZW9wdHNbdGVtcF0gXHUwMDI2IDB4RkYwMCkgXHUwMDNlXHUwMDNlIDgpIHtcbi1cdFx0XHRcdHByX2RlYnVnKFwmIzM0O1RiYWQgJTAyWCAlMDJYXFxuXCYjMzQ7LCAqdHAsXG4tXHRcdFx0XHRcdCAob3B0aW5mby1cdTAwM2VvcHRzW3RlbXBdIFx1MDAyNiAweEZGMDApIFx1MDAzZVx1MDAzZSA4KTtcbiYjNDM7XHRcdFx0aWYgKCp0cCAhPSAob3B0aW5mby1cdTAwM2VvcHRzW3RlbXBdIFx1MDAyNiAweEZGMDApIFx1MDAzZVx1MDAzZSA4KVxuIFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtUb2sgXCYjMzQ7KTtcbi1cdFx0XHR9XG4mIzQzO1xuIFx0XHRcdC8qIExlbmd0aCBjaGVjayAqL1xuIFx0XHRcdGlmICgqdHApIHtcbiBcdFx0XHRcdHUxNiBzcGVjX2xlbjtcbkBAIC0xMjksMjYgJiM0MzsxMTUsMTggQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0c3BlY19sZW4gPSBvcHRpbmZvLVx1MDAzZW9wdHNbdGVtcF0gXHUwMDI2IDB4MDBGRjtcbiBcbi1cdFx0XHRcdGlmIChzcGVjX2xlbiAhPSAweDAwRkYgXHUwMDI2XHUwMDI2IHNwZWNfbGVuICE9ICpscCkge1xuLVx0XHRcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtMYmFkICUwMlggJTA0WFxcblwmIzM0OywgKmxwLFxuLVx0XHRcdFx0XHRcdCBzcGVjX2xlbik7XG4mIzQzO1x0XHRcdFx0aWYgKHNwZWNfbGVuICE9IDB4MDBGRiBcdTAwMjZcdTAwMjYgc3BlY19sZW4gIT0gKmxwKVxuIFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtMb2sgXCYjMzQ7KTtcbiYjNDM7XG4gXHRcdFx0XHRvcHRsZW4gPSAqbHAgJiM0MzsgMjtcbiBcdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0cHJfZGVidWcoXCYjMzQ7UGFkMVxcblwmIzM0Oyk7XG4gXHRcdFx0XHRvcHRsZW4gPSAxO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHQvKiBTdGVwIHRvIHRoZSBuZXh0ICovXG4tXHRcdFx0cHJfZGVidWcoXCYjMzQ7bGVuJTA0WFxcblwmIzM0Oywgb3B0bGVuKTtcbi1cbiBcdFx0XHRpZiAoKHB0ciBcdTAwM2Ugc2tiLVx1MDAzZWxlbiAtIG9wdGxlbiB8fCBoZHJsZW4gXHUwMDNjIG9wdGxlbikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIHRlbXAgXHUwMDNjIG9wdGluZm8tXHUwMDNlb3B0c25yIC0gMSkge1xuLVx0XHRcdFx0cHJfZGVidWcoXCYjMzQ7bmV3IHBvaW50ZXIgaXMgdG9vIGxhcmdlIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdCAgICB0ZW1wIFx1MDAzYyBvcHRpbmZvLVx1MDAzZW9wdHNuciAtIDEpXG4gXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4mIzQzO1xuIFx0XHRcdHB0ciAmIzQzOz0gb3B0bGVuO1xuIFx0XHRcdGhkcmxlbiAtPSBvcHRsZW47XG4gXHRcdH1cbkBAIC0xNjYsMTYgJiM0MzsxNDQsMTYgQEAgc3RhdGljIGludCBoYmhfbXQ2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IGlwNnRfb3B0cyAqb3B0c2luZm8gPSBwYXItXHUwMDNlbWF0Y2hpbmZvO1xuIFxuIFx0aWYgKG9wdHNpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiB+SVA2VF9PUFRTX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O3Vua25vd24gZmxhZ3MgJVhcXG5cJiMzNDssIG9wdHNpbmZvLVx1MDAzZWludmZsYWdzKTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7dW5rbm93biBmbGFncyAlWFxcblwmIzM0Oywgb3B0c2luZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdGlmIChvcHRzaW5mby1cdTAwM2VvcHRzbnIgXHUwMDNlIElQNlRfT1BUU19PUFRTTlIpIHtcbi1cdFx0cHJfZGVidWcoXCYjMzQ7dG9vIG1hbnkgc3VwcG9ydGVkIG9wdHMgc3BlY2lmaWVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7dG9vIG1hbnkgc3VwcG9ydGVkIG9wdHMgc3BlY2lmaWVkXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRpZiAob3B0c2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfT1BUU19OU1RSSUNUKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O05vdCBzdHJpY3QgLSBub3QgaW1wbGVtZW50ZWRcJiMzNDspO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtOb3Qgc3RyaWN0IC0gbm90IGltcGxlbWVudGVkXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbWguYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X21oLmNcbmluZGV4IGZkNDkyYjY5YWNiYzAuLmJhNmRjYzc3OTFhMDkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9taC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9taC5jXG5AQCAtNDIsMTQgJiM0Mzs0MiwxMSBAQCBzdGF0aWMgYm9vbCBtaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0aWYgKG1oID09IE5VTEwpIHtcbiBcdFx0LyogV2UmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXG4gXHRcdCAgIGNhbiYjMzk7dC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuICovXG4tXHRcdHByX2RlYnVnKFwmIzM0O0Ryb3BwaW5nIGV2aWwgTUggdGlueWdyYW0uXFxuXCYjMzQ7KTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHRpZiAobWgtXHUwMDNlaXA2bWhfcHJvdG8gIT0gSVBQUk9UT19OT05FKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O0Ryb3BwaW5nIGludmFsaWQgTUggUGF5bG9hZCBQcm90bzogJXVcXG5cJiMzNDssXG4tXHRcdFx0IG1oLVx1MDAzZWlwNm1oX3Byb3RvKTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnBmaWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmNcbmluZGV4IDY3Yzg3YTg4Y2RlNGYuLmFmOGQxMGQ0OWRlODEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jXG5AQCAtMTE4LDcgJiM0MzsxMTgsNyBAQCBzdGF0aWMgaW50IHJwZmlsdGVyX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFxuIFx0aWYgKHN0cmNtcChwYXItXHUwMDNldGFibGUsIFwmIzM0O21hbmdsZVwmIzM0OykgIT0gMCBcdTAwMjZcdTAwMjZcbiBcdCAgICBzdHJjbXAocGFyLVx1MDAzZXRhYmxlLCBcJiMzNDtyYXdcJiMzNDspICE9IDApIHtcbi1cdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtvbmx5IHZhbGlkIGluIFxcJiMzOTtyYXdcXCYjMzk7IG9yIFxcJiMzOTttYW5nbGVcXCYjMzk7IHRhYmxlLCBub3QgXFwmIzM5OyVzXFwmIzM5O1xcblwmIzM0OyxcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7b25seSB2YWxpZCBpbiBcXCYjMzk7cmF3XFwmIzM5OyBvciBcXCYjMzk7bWFuZ2xlXFwmIzM5OyB0YWJsZVxcblwmIzM0OyxcbiBcdFx0XHRcdCAgICBwYXItXHUwMDNldGFibGUpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuY1xuaW5kZXggMjc4YjUyNzUyZjM2NC4uMGMwMWFjMjc0NmQxZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmNcbkBAIC0xNTUsMTggJiM0MzsxNTUsMTggQEAgc3RhdGljIGludCBydF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3QgaXA2dF9ydCAqcnRpbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiBcbiBcdGlmIChydGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IH5JUDZUX1JUX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O3Vua25vd24gZmxhZ3MgJVhcXG5cJiMzNDssIHJ0aW5mby1cdTAwM2VpbnZmbGFncyk7XG4mIzQzO1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O3Vua25vd24gZmxhZ3MgJVhcXG5cJiMzNDssIHJ0aW5mby1cdTAwM2VpbnZmbGFncyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKHJ0aW5mby1cdTAwM2VhZGRybnIgXHUwMDNlIElQNlRfUlRfSE9QUykge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDt0b28gbWFueSBhZGRyZXNzZXMgc3BlY2lmaWVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7dG9vIG1hbnkgYWRkcmVzc2VzIHNwZWNpZmllZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKChydGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IChJUDZUX1JUX1JFUyB8IElQNlRfUlRfRlNUX01BU0spKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAoIShydGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfUlRfVFlQKSB8fFxuIFx0ICAgICAocnRpbmZvLVx1MDAzZXJ0X3R5cGUgIT0gMCkgfHxcbiBcdCAgICAgKHJ0aW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgSVA2VF9SVF9JTlZfVFlQKSkpIHtcbi1cdFx0cHJfZGVidWcoXCYjMzQ7YC0tcnQtdHlwZSAwJiMzOTsgcmVxdWlyZWQgYmVmb3JlIGAtLXJ0LTAtKiYjMzk7XCYjMzQ7KTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7YC0tcnQtdHlwZSAwJiMzOTsgcmVxdWlyZWQgYmVmb3JlIGAtLXJ0LTAtKiYjMzk7XCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5jIGIvbmV0L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5jXG5pbmRleCAxNDk0YjNlZTMwZTExLi40ZTQ0MzZhOTEwNGI0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmNcbkBAIC04Nyw4ICYjNDM7ODcsNyBAQCBzdGF0aWMgaW50IGNvbm5zZWNtYXJrX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFxuIFx0aWYgKHN0cmNtcChwYXItXHUwMDNldGFibGUsIFwmIzM0O21hbmdsZVwmIzM0OykgIT0gMCBcdTAwMjZcdTAwMjZcbiBcdCAgICBzdHJjbXAocGFyLVx1MDAzZXRhYmxlLCBcJiMzNDtzZWN1cml0eVwmIzM0OykgIT0gMCkge1xuLVx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O29ubHkgdmFsaWQgaW4gXFwmIzM5O21hbmdsZVxcJiMzOTsgb3IgXFwmIzM5O3NlY3VyaXR5XFwmIzM5OyB0YWJsZSwgbm90IFxcJiMzOTslc1xcJiMzOTtcXG5cJiMzNDssXG4tXHRcdFx0XHQgICAgcGFyLVx1MDAzZXRhYmxlKTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7b25seSB2YWxpZCBpbiBcXCYjMzk7bWFuZ2xlXFwmIzM5OyBvciBcXCYjMzk7c2VjdXJpdHlcXCYjMzk7IHRhYmxlXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DVC5jIGIvbmV0L25ldGZpbHRlci94dF9DVC5jXG5pbmRleCBlNzg2NjBkZmRmNGI2Li45MTMyNjAxNGFkZTFjIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9DVC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X0NULmNcbkBAIC0xOTUsNyAmIzQzOzE5NSw4IEBAIHN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsXG4gXHRcdGdvdG8gZXJyMztcbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWhlbHBlclswXSkge1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZWhlbHBlclswXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc3RybmxlbihpbmZvLVx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiBcdFx0aWYgKHN0cm5sZW4oaW5mby1cdTAwM2VoZWxwZXIsIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpID09IHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiBcdFx0XHRyZXQgPSAtRU5BTUVUT09MT05HO1xuIFx0XHRcdGdvdG8gZXJyMztcbkBAIC0yMDYsNyAmIzQzOzIwNyw4IEBAIHN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsXG4gXHRcdFx0Z290byBlcnIzO1xuIFx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNldGltZW91dFswXSkge1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZXRpbWVvdXRbMF0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHN0cm5sZW4oaW5mby1cdTAwM2V0aW1lb3V0LCBzaXplb2YoaW5mby1cdTAwM2V0aW1lb3V0KSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gXHRcdGlmIChzdHJubGVuKGluZm8tXHUwMDNldGltZW91dCwgc2l6ZW9mKGluZm8tXHUwMDNldGltZW91dCkpID09IHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gXHRcdFx0cmV0ID0gLUVOQU1FVE9PTE9ORztcbiBcdFx0XHRnb3RvIGVycjQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcbmluZGV4IGJmY2YyZDQ0ZTkzZGIuLjE1YjY5OGVhOThhYTYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG5AQCAtMTAyLDggJiM0MzsxMDIsNiBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZXhwaXJlZChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiB7XG4gXHRzdHJ1Y3QgaWRsZXRpbWVyX3RnICp0aW1lciA9IHRpbWVyX2NvbnRhaW5lcl9vZih0aW1lciwgdCwgdGltZXIpO1xuIFxuLVx0cHJfZGVidWcoXCYjMzQ7dGltZXIgJXMgZXhwaXJlZFxcblwmIzM0OywgdGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpO1xuLVxuIFx0c2NoZWR1bGVfd29yayhcdTAwMjZ0aW1lci1cdTAwM2V3b3JrKTtcbiB9XG4gXG5AQCAtMTExLDcgJiM0MzsxMDksNiBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfYWxhcm1wcm9jKHN0cnVjdCBhbGFybSAqYWxhcm0sIGt0aW1lX3Qgbm93KVxuIHtcbiBcdHN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyID0gYWxhcm0tXHUwMDNlZGF0YTtcbiBcbi1cdHByX2RlYnVnKFwmIzM0O2FsYXJtICVzIGV4cGlyZWRcXG5cJiMzNDssIHRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lKTtcbiBcdHNjaGVkdWxlX3dvcmsoXHUwMDI2dGltZXItXHUwMDNld29yayk7XG4gfVxuIFxuQEAgLTE3MSw3ICYjNDM7MTY4LDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbylcbiBcbiBcdHJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKGlkbGV0aW1lcl90Z19rb2JqLCBcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0cik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O2NvdWxkbiYjMzk7dCBhZGQgZmlsZSB0byBzeXNmc1wmIzM0Oyk7XG4mIzQzO1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O2NvdWxkbiYjMzk7dCBhZGQgZmlsZSB0byBzeXNmc1wmIzM0Oyk7XG4gXHRcdGdvdG8gb3V0X2ZyZWVfYXR0cjtcbiBcdH1cbiBcbkBAIC0yMjAsNyAmIzQzOzIxNyw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXG4gXG4gXHRyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShpZGxldGltZXJfdGdfa29iaiwgXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIpO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtjb3VsZG4mIzM5O3QgYWRkIGZpbGUgdG8gc3lzZnNcJiMzNDspO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtjb3VsZG4mIzM5O3QgYWRkIGZpbGUgdG8gc3lzZnNcJiMzNDspO1xuIFx0XHRnb3RvIG91dF9mcmVlX2F0dHI7XG4gXHR9XG4gXG5AQCAtMjI4LDcgJiM0MzsyMjUsNiBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvKVxuIFx0a29iamVjdF91ZXZlbnQoaWRsZXRpbWVyX3RnX2tvYmosS09CSl9BREQpO1xuIFxuIFx0bGlzdF9hZGQoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VlbnRyeSwgXHUwMDI2aWRsZXRpbWVyX3RnX2xpc3QpO1xuLVx0cHJfZGVidWcoXCYjMzQ7dGltZXIgdHlwZSB2YWx1ZSBpcyAldVwmIzM0OywgaW5mby1cdTAwM2V0aW1lcl90eXBlKTtcbiBcdGluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXJfdHlwZSA9IGluZm8tXHUwMDNldGltZXJfdHlwZTtcbiBcdGluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250ID0gMTtcbiBcbkBAIC0yNjMsOSAmIzQzOzI1OSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaWRsZXRpbWVyX3RnX3RhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIHtcbiBcdGNvbnN0IHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbyA9IHBhci1cdTAwM2V0YXJnaW5mbztcbiBcbi1cdHByX2RlYnVnKFwmIzM0O3Jlc2V0dGluZyB0aW1lciAlcywgdGltZW91dCBwZXJpb2QgJXVcXG5cJiMzNDssXG4tXHRcdCBpbmZvLVx1MDAzZWxhYmVsLCBpbmZvLVx1MDAzZXRpbWVvdXQpO1xuLVxuIFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gXHRcdCAgc2Vjc190b19qaWZmaWVzKGluZm8tXHUwMDNldGltZW91dCkgJiM0MzsgamlmZmllcyk7XG4gXG5AQCAtMjgwLDkgJiM0MzsyNzMsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4tXHRwcl9kZWJ1ZyhcJiMzNDtyZXNldHRpbmcgdGltZXIgJXMsIHRpbWVvdXQgcGVyaW9kICV1XFxuXCYjMzQ7LFxuLVx0XHQgaW5mby1cdTAwM2VsYWJlbCwgaW5mby1cdTAwM2V0aW1lb3V0KTtcbi1cbiBcdGlmIChpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXRpbWVyX3R5cGUgXHUwMDI2IFhUX0lETEVUSU1FUl9BTEFSTSkge1xuIFx0XHRpZGxldGltZXJfc3RhcnRfYWxhcm1fc2VjKGluZm8tXHUwMDNldGltZXIsIGluZm8tXHUwMDNldGltZW91dCk7XG4gXHR9IGVsc2Uge1xuQEAgLTI5NiwxNyAmIzQzOzI4NiwxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19oZWxwZXIoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKVxuIHtcbiBcdGlmIChpbmZvLVx1MDAzZXRpbWVvdXQgPT0gMCkge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDt0aW1lb3V0IHZhbHVlIGlzIHplcm9cXG5cJiMzNDspO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDt0aW1lb3V0IHZhbHVlIGlzIHplcm9cXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdGlmIChpbmZvLVx1MDAzZXRpbWVvdXQgXHUwMDNlPSBJTlRfTUFYIC8gMTAwMCkge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDt0aW1lb3V0IHZhbHVlIGlzIHRvbyBiaWdcXG5cJiMzNDspO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDt0aW1lb3V0IHZhbHVlIGlzIHRvbyBiaWdcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdGlmIChpbmZvLVx1MDAzZWxhYmVsWzBdID09ICYjMzk7XFwwJiMzOTsgfHxcbiBcdCAgICBzdHJubGVuKGluZm8tXHUwMDNlbGFiZWwsXG4gXHRcdCAgICBNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkUpID09IE1BWF9JRExFVElNRVJfTEFCRUxfU0laRSkge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtsYWJlbCBpcyBlbXB0eSBvciBub3QgbnVsLXRlcm1pbmF0ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtsYWJlbCBpcyBlbXB0eSBvciBub3QgbnVsLXRlcm1pbmF0ZWRcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiAwO1xuQEAgLTMxOCwzNCAmIzQzOzMwOCwyNSBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFx0c3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIFx0aW50IHJldDtcbiBcbi1cdHByX2RlYnVnKFwmIzM0O2NoZWNrZW50cnkgdGFyZ2luZm8lc1xcblwmIzM0OywgaW5mby1cdTAwM2VsYWJlbCk7XG4tXG4gXHRyZXQgPSBpZGxldGltZXJfdGdfaGVscGVyKGluZm8pO1xuIFx0aWYocmV0IFx1MDAzYyAwKVxuLVx0e1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtjaGVja2VudHJ5IGhlbHBlciByZXR1cm4gaW52YWxpZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiBcbiBcdGluZm8tXHUwMDNldGltZXIgPSBfX2lkbGV0aW1lcl90Z19maW5kX2J5X2xhYmVsKGluZm8tXHUwMDNlbGFiZWwpO1xuIFx0aWYgKGluZm8tXHUwMDNldGltZXIpIHtcbiBcdFx0aWYgKGluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXJfdHlwZSBcdTAwMjYgWFRfSURMRVRJTUVSX0FMQVJNKSB7XG4tXHRcdFx0cHJfZGVidWcoXCYjMzQ7QWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcXG5cJiMzNDspO1xuIFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiYjNDM7XHRcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtBZGRpbmcvUmVwbGFjaW5nIHJ1bGUgd2l0aCBzYW1lIGxhYmVsIGFuZCBkaWZmZXJlbnQgdGltZXIgdHlwZSBpcyBub3QgYWxsb3dlZFxcblwmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcbiBcdFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQmIzQzOyYjNDM7O1xuIFx0XHRtb2RfdGltZXIoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcixcbiBcdFx0XHQgIHNlY3NfdG9famlmZmllcyhpbmZvLVx1MDAzZXRpbWVvdXQpICYjNDM7IGppZmZpZXMpO1xuLVxuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtpbmNyZWFzZWQgcmVmY250IG9mIHRpbWVyICVzIHRvICV1XFxuXCYjMzQ7LFxuLVx0XHRcdCBpbmZvLVx1MDAzZWxhYmVsLCBpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXJlZmNudCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRyZXQgPSBpZGxldGltZXJfdGdfY3JlYXRlKGluZm8pO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdFx0cHJfZGVidWcoXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSB0aW1lclxcblwmIzM0Oyk7XG4gXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbkBAIC0zNjAsMzAgJiM0MzszNDEsMjMgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MShjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbiBcdHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbyA9IHBhci1cdTAwM2V0YXJnaW5mbztcbiBcdGludCByZXQ7XG4gXG4tXHRwcl9kZWJ1ZyhcJiMzNDtjaGVja2VudHJ5IHRhcmdpbmZvJXNcXG5cJiMzNDssIGluZm8tXHUwMDNlbGFiZWwpO1xuLVxuIFx0aWYgKGluZm8tXHUwMDNlc2VuZF9ubF9tc2cpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHJldCA9IGlkbGV0aW1lcl90Z19oZWxwZXIoKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqKWluZm8pO1xuIFx0aWYocmV0IFx1MDAzYyAwKVxuLVx0e1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtjaGVja2VudHJ5IGhlbHBlciByZXR1cm4gaW52YWxpZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNldGltZXJfdHlwZSBcdTAwM2UgWFRfSURMRVRJTUVSX0FMQVJNKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O2ludmFsaWQgdmFsdWUgZm9yIHRpbWVyIHR5cGVcXG5cJiMzNDspO1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZXRpbWVyX3R5cGUgXHUwMDNlIFhUX0lETEVUSU1FUl9BTEFSTSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuIFx0aW5mby1cdTAwM2V0aW1lciA9IF9faWRsZXRpbWVyX3RnX2ZpbmRfYnlfbGFiZWwoaW5mby1cdTAwM2VsYWJlbCk7XG4gXHRpZiAoaW5mby1cdTAwM2V0aW1lcikge1xuIFx0XHRpZiAoaW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlICE9IGluZm8tXHUwMDNldGltZXJfdHlwZSkge1xuLVx0XHRcdHByX2RlYnVnKFwmIzM0O0FkZGluZy9SZXBsYWNpbmcgcnVsZSB3aXRoIHNhbWUgbGFiZWwgYW5kIGRpZmZlcmVudCB0aW1lciB0eXBlIGlzIG5vdCBhbGxvd2VkXFxuXCYjMzQ7KTtcbiBcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4mIzQzO1x0XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7QWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcXG5cJiMzNDspO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXG5AQCAtMzkzLDIxICYjNDM7MzY3LDE1IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRcdFx0a3RpbWVfdCB0b3V0ID0gYWxhcm1fZXhwaXJlc19yZW1haW5pbmcoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhbGFybSk7XG4gXHRcdFx0c3RydWN0IHRpbWVzcGVjNjQga3RpbWVzcGVjID0ga3RpbWVfdG9fdGltZXNwZWM2NCh0b3V0KTtcbiBcbi1cdFx0XHRpZiAoa3RpbWVzcGVjLnR2X3NlYyBcdTAwM2UgMCkge1xuLVx0XHRcdFx0cHJfZGVidWcoXCYjMzQ7dGltZV9leHBpcnlfcmVtYWluaW5nICVsbGRcXG5cJiMzNDssXG4tXHRcdFx0XHRcdCBrdGltZXNwZWMudHZfc2VjKTtcbiYjNDM7XHRcdFx0aWYgKGt0aW1lc3BlYy50dl9zZWMgXHUwMDNlIDApXG4gXHRcdFx0XHRpZGxldGltZXJfc3RhcnRfYWxhcm1fa3RpbWUoaW5mby1cdTAwM2V0aW1lciwgdG91dCk7XG4tXHRcdFx0fVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gXHRcdFx0XHRcdHNlY3NfdG9famlmZmllcyhpbmZvLVx1MDAzZXRpbWVvdXQpICYjNDM7IGppZmZpZXMpO1xuIFx0XHR9XG4tXHRcdHByX2RlYnVnKFwmIzM0O2luY3JlYXNlZCByZWZjbnQgb2YgdGltZXIgJXMgdG8gJXVcXG5cJiMzNDssXG4tXHRcdFx0IGluZm8tXHUwMDNlbGFiZWwsIGluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250KTtcbiBcdH0gZWxzZSB7XG4gXHRcdHJldCA9IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoaW5mbyk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0XHRwcl9kZWJ1ZyhcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIHRpbWVyXFxuXCYjMzQ7KTtcbiBcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuQEAgLTQyMSwxOSAmIzQzOzM4OSwxMyBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtICpwYXIpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIFxuLVx0cHJfZGVidWcoXCYjMzQ7ZGVzdHJveSB0YXJnaW5mbyAlc1xcblwmIzM0OywgaW5mby1cdTAwM2VsYWJlbCk7XG4tXG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuIFx0aWYgKC0taW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQgXHUwMDNlIDApIHtcbi1cdFx0cHJfZGVidWcoXCYjMzQ7ZGVjcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxcblwmIzM0Oyxcbi1cdFx0XHQgaW5mby1cdTAwM2VsYWJlbCwgaW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQpO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHByX2RlYnVnKFwmIzM0O2RlbGV0aW5nIHRpbWVyICVzXFxuXCYjMzQ7LCBpbmZvLVx1MDAzZWxhYmVsKTtcbi1cbiBcdGxpc3RfZGVsKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlZW50cnkpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuQEAgLTQ0OCwxOSAmIzQzOzQxMCwxMyBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZGVzdHJveV92MShjb25zdCBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtICpwYXIpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIFxuLVx0cHJfZGVidWcoXCYjMzQ7ZGVzdHJveSB0YXJnaW5mbyAlc1xcblwmIzM0OywgaW5mby1cdTAwM2VsYWJlbCk7XG4tXG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuIFx0aWYgKC0taW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQgXHUwMDNlIDApIHtcbi1cdFx0cHJfZGVidWcoXCYjMzQ7ZGVjcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxcblwmIzM0Oyxcbi1cdFx0XHQgaW5mby1cdTAwM2VsYWJlbCwgaW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQpO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHByX2RlYnVnKFwmIzM0O2RlbGV0aW5nIHRpbWVyICVzXFxuXCYjMzQ7LCBpbmZvLVx1MDAzZWxhYmVsKTtcbi1cbiBcdGxpc3RfZGVsKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlZW50cnkpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuQEAgLTUzNCw3ICYjNDM7NDkwLDcgQEAgc3RhdGljIGludCBfX2luaXQgaWRsZXRpbWVyX3RnX2luaXQodm9pZClcbiBcdGlkbGV0aW1lcl90Z19jbGFzcyA9IGNsYXNzX2NyZWF0ZShcJiMzNDt4dF9pZGxldGltZXJcJiMzNDspO1xuIFx0ZXJyID0gUFRSX0VSUihpZGxldGltZXJfdGdfY2xhc3MpO1xuIFx0aWYgKElTX0VSUihpZGxldGltZXJfdGdfY2xhc3MpKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O2NvdWxkbiYjMzk7dCByZWdpc3RlciBkZXZpY2UgY2xhc3NcXG5cJiMzNDspO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtjb3VsZG4mIzM5O3QgcmVnaXN0ZXIgZGV2aWNlIGNsYXNzXFxuXCYjMzQ7KTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5AQCAtNTQyLDcgJiM0Mzs0OTgsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBpZGxldGltZXJfdGdfaW5pdCh2b2lkKVxuIFx0XHRcdFx0XHQgICAgTUtERVYoMCwgMCksIE5VTEwsIFwmIzM0O3RpbWVyc1wmIzM0Oyk7XG4gXHRlcnIgPSBQVFJfRVJSKGlkbGV0aW1lcl90Z19kZXZpY2UpO1xuIFx0aWYgKElTX0VSUihpZGxldGltZXJfdGdfZGV2aWNlKSkge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtjb3VsZG4mIzM5O3QgcmVnaXN0ZXIgc3lzdGVtIGRldmljZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O2NvdWxkbiYjMzk7dCByZWdpc3RlciBzeXN0ZW0gZGV2aWNlXFxuXCYjMzQ7KTtcbiBcdFx0Z290byBvdXRfY2xhc3M7XG4gXHR9XG4gXG5AQCAtNTUxLDcgJiM0Mzs1MDcsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBpZGxldGltZXJfdGdfaW5pdCh2b2lkKVxuIFx0ZXJyID0geHRfcmVnaXN0ZXJfdGFyZ2V0cyhpZGxldGltZXJfdGcsIEFSUkFZX1NJWkUoaWRsZXRpbWVyX3RnKSk7XG4gXG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O2NvdWxkbiYjMzk7dCByZWdpc3RlciB4dCB0YXJnZXRcXG5cJiMzNDspO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtjb3VsZG4mIzM5O3QgcmVnaXN0ZXIgeHQgdGFyZ2V0XFxuXCYjMzQ7KTtcbiBcdFx0Z290byBvdXRfZGV2O1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfTE9HLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0xPRy5jXG5pbmRleCBmMzkyNDRmOWMwZWQ5Li5kZTNmMTc2NzkyYTA3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9MT0cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9MT0cuY1xuQEAgLTUwLDEyICYjNDM7NTAsMTIgQEAgc3RhdGljIGludCBsb2dfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGxvZ2luZm8tXHUwMDNlbGV2ZWwgXHUwMDNlPSA4KSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O2xldmVsICV1IFx1MDAzZT0gOFxcblwmIzM0OywgbG9naW5mby1cdTAwM2VsZXZlbCk7XG4mIzQzO1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O2xldmVsICV1IFx1MDAzZT0gOFxcblwmIzM0OywgbG9naW5mby1cdTAwM2VsZXZlbCk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuIFx0aWYgKGxvZ2luZm8tXHUwMDNlcHJlZml4W3NpemVvZihsb2dpbmZvLVx1MDAzZXByZWZpeCktMV0gIT0gJiMzOTtcXDAmIzM5Oykge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtwcmVmaXggaXMgbm90IG51bGwtdGVybWluYXRlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O3ByZWZpeCBpcyBub3QgbnVsbC10ZXJtaW5hdGVkXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9NQVNRVUVSQURFLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuY1xuaW5kZXggZWFlMDVjMTc4MzM2Ny4uY2VhNDg4Y2VjNTQ0NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTUFTUVVFUkFERS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuY1xuQEAgLTIxLDExICYjNDM7MjEsMTEgQEAgc3RhdGljIGludCBtYXNxdWVyYWRlX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IG5mX25hdF9pcHY0X211bHRpX3JhbmdlX2NvbXBhdCAqbXIgPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4gXHRpZiAobXItXHUwMDNlcmFuZ2VbMF0uZmxhZ3MgXHUwMDI2IE5GX05BVF9SQU5HRV9NQVBfSVBTKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O2JhZCBNQVBfSVBTLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O2JhZCBNQVBfSVBTLlxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKG1yLVx1MDAzZXJhbmdlc2l6ZSAhPSAxKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O2JhZCByYW5nZXNpemUgJXVcXG5cJiMzNDssIG1yLVx1MDAzZXJhbmdlc2l6ZSk7XG4mIzQzO1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O2JhZCByYW5nZXNpemUgJXVcXG5cJiMzNDssIG1yLVx1MDAzZXJhbmdlc2l6ZSk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0cmV0dXJuIG5mX2N0X25ldG5zX2dldChwYXItXHUwMDNlbmV0LCBwYXItXHUwMDNlZmFtaWx5KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jIGIvbmV0L25ldGZpbHRlci94dF9ORVRNQVAuY1xuaW5kZXggY2IyZWU4MGQ4NGZhOC4uOGM4NmQ5YTQzMzczYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTkVUTUFQLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfTkVUTUFQLmNcbkBAIC0xMDYsMTEgJiM0MzsxMDYsMTEgQEAgc3RhdGljIGludCBuZXRtYXBfdGc0X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IG5mX25hdF9pcHY0X211bHRpX3JhbmdlX2NvbXBhdCAqbXIgPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4gXHRpZiAoIShtci1cdTAwM2VyYW5nZVswXS5mbGFncyBcdTAwMjYgTkZfTkFUX1JBTkdFX01BUF9JUFMpKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O2JhZCBNQVBfSVBTLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O2JhZCBNQVBfSVBTLlxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKG1yLVx1MDAzZXJhbmdlc2l6ZSAhPSAxKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O2JhZCByYW5nZXNpemUgJXUuXFxuXCYjMzQ7LCBtci1cdTAwM2VyYW5nZXNpemUpO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtiYWQgcmFuZ2VzaXplICV1LlxcblwmIzM0OywgbXItXHUwMDNlcmFuZ2VzaXplKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRyZXR1cm4gbmZfY3RfbmV0bnNfZ2V0KHBhci1cdTAwM2VuZXQsIHBhci1cdTAwM2VmYW1pbHkpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfUkVESVJFQ1QuYyBiL25ldC9uZXRmaWx0ZXIveHRfUkVESVJFQ1QuY1xuaW5kZXggZmY2NmI1NmEzZjk3ZC4uMjdiYzA1NDVjNGY3NCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfUkVESVJFQ1QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jXG5AQCAtNTEsMTEgJiM0Mzs1MSwxMSBAQCBzdGF0aWMgaW50IHJlZGlyZWN0X3RnNF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbiBcdGNvbnN0IHN0cnVjdCBuZl9uYXRfaXB2NF9tdWx0aV9yYW5nZV9jb21wYXQgKm1yID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIFxuIFx0aWYgKG1yLVx1MDAzZXJhbmdlWzBdLmZsYWdzIFx1MDAyNiBORl9OQVRfUkFOR0VfTUFQX0lQUykge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtiYWQgTUFQX0lQUy5cXG5cJiMzNDspO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtiYWQgTUFQX0lQUy5cXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdGlmIChtci1cdTAwM2VyYW5nZXNpemUgIT0gMSkge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtiYWQgcmFuZ2VzaXplICV1LlxcblwmIzM0OywgbXItXHUwMDNlcmFuZ2VzaXplKTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7YmFkIHJhbmdlc2l6ZSAldS5cXG5cJiMzNDssIG1yLVx1MDAzZXJhbmdlc2l6ZSk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0cmV0dXJuIG5mX2N0X25ldG5zX2dldChwYXItXHUwMDNlbmV0LCBwYXItXHUwMDNlZmFtaWx5KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1NFQ01BUksuYyBiL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jXG5pbmRleCA1YmM1ZWE1MDVlYjllLi4zOGU4ZTQxMGI0ZTgxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jXG5AQCAtNzksOCAmIzQzOzc5LDcgQEAgc2VjbWFya190Z19jaGVjayhjb25zdCBjaGFyICp0YWJsZSwgc3RydWN0IHh0X3NlY21hcmtfdGFyZ2V0X2luZm9fdjEgKmluZm8pXG4gXG4gXHRpZiAoc3RyY21wKHRhYmxlLCBcJiMzNDttYW5nbGVcJiMzNDspICE9IDAgXHUwMDI2XHUwMDI2XG4gXHQgICAgc3RyY21wKHRhYmxlLCBcJiMzNDtzZWN1cml0eVwmIzM0OykgIT0gMCkge1xuLVx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O29ubHkgdmFsaWQgaW4gXFwmIzM5O21hbmdsZVxcJiMzOTsgb3IgXFwmIzM5O3NlY3VyaXR5XFwmIzM5OyB0YWJsZSwgbm90IFxcJiMzOTslc1xcJiMzOTtcXG5cJiMzNDssXG4tXHRcdFx0XHQgICAgdGFibGUpO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtvbmx5IHZhbGlkIGluIFxcJiMzOTttYW5nbGVcXCYjMzk7IG9yIFxcJiMzOTtzZWN1cml0eVxcJiMzOTsgdGFibGVcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2Nncm91cC5jIGIvbmV0L25ldGZpbHRlci94dF9jZ3JvdXAuY1xuaW5kZXggNDNkMmFlMmJlNjI4ZC4uYWMxYjdlNzFjZDdmNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfY2dyb3VwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfY2dyb3VwLmNcbkBAIC0zMyw3ICYjNDM7MzMsNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192MChjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHtcbi1cdFx0cHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC00OSw3ICYjNDM7NDksNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192MShjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIWluZm8tXHUwMDNlaGFzX3BhdGggXHUwMDI2XHUwMDI2ICFpbmZvLVx1MDAzZWhhc19jbGFzc2lkKSB7XG4tXHRcdHByX2luZm8oXCYjMzQ7eHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7eHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtNTksNyAmIzQzOzU5LDcgQEAgc3RhdGljIGludCBjZ3JvdXBfbXRfY2hlY2tfdjEoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHR9XG4gXG4gXHRpZiAoaW5mby1cdTAwM2VoYXNfY2xhc3NpZCBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHtcbi1cdFx0cHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC04OSw3ICYjNDM7ODksNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192Mihjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIWluZm8tXHUwMDNlaGFzX3BhdGggXHUwMDI2XHUwMDI2ICFpbmZvLVx1MDAzZWhhc19jbGFzc2lkKSB7XG4tXHRcdHByX2luZm8oXCYjMzQ7eHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7eHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtOTksNyAmIzQzOzk5LDcgQEAgc3RhdGljIGludCBjZ3JvdXBfbXRfY2hlY2tfdjIoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHR9XG4gXG4gXHRpZiAoaW5mby1cdTAwM2VoYXNfY2xhc3NpZCBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHtcbi1cdFx0cHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jIGIvbmV0L25ldGZpbHRlci94dF9lc3AuY1xuaW5kZXggMmExYzBhZDBmZjA3OS4uNjhmZDc1ODg0MjY4YSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfZXNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfZXNwLmNcbkBAIC0yNSwxMiAmIzQzOzI1LDcgQEAgTU9EVUxFX0FMSUFTKFwmIzM0O2lwNnRfZXNwXCYjMzQ7KTtcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpXG4ge1xuLVx0Ym9vbCByO1xuLVx0cHJfZGVidWcoXCYjMzQ7c3BpX21hdGNoOiVjIDB4JXggXHUwMDNjPSAweCV4IFx1MDAzYz0gMHgleFxcblwmIzM0Oyxcbi1cdFx0IGludmVydCA/ICYjMzk7ISYjMzk7IDogJiMzOTsgJiMzOTssIG1pbiwgc3BpLCBtYXgpO1xuLVx0ciA9IChzcGkgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IHNwaSBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4tXHRwcl9kZWJ1ZyhcJiMzNDsgcmVzdWx0ICVzXFxuXCYjMzQ7LCByID8gXCYjMzQ7UEFTU1wmIzM0OyA6IFwmIzM0O0ZBSUxFRFwmIzM0Oyk7XG4tXHRyZXR1cm4gcjtcbiYjNDM7XHRyZXR1cm4gKHNwaSBcdTAwM2U9IG1pbiBcdTAwMjZcdTAwMjYgc3BpIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgZXNwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbkBAIC00OCw3ICYjNDM7NDMsNiBAQCBzdGF0aWMgYm9vbCBlc3BfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHQvKiBXZSYjMzk7dmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2VcbiBcdFx0ICogY2FuJiMzOTt0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC5cbiBcdFx0ICovXG4tXHRcdHByX2RlYnVnKFwmIzM0O0Ryb3BwaW5nIGV2aWwgRVNQIHRpbnlncmFtLlxcblwmIzM0Oyk7XG4gXHRcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuQEAgLTYyLDcgJiM0Mzs1Niw3IEBAIHN0YXRpYyBpbnQgZXNwX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IHh0X2VzcCAqZXNwaW5mbyA9IHBhci1cdTAwM2VtYXRjaGluZm87XG4gXG4gXHRpZiAoZXNwaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgflhUX0VTUF9JTlZfTUFTSykge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDt1bmtub3duIGZsYWdzICVYXFxuXCYjMzQ7LCBlc3BpbmZvLVx1MDAzZWludmZsYWdzKTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7dW5rbm93biBmbGFncyAlWFxcblwmIzM0OywgZXNwaW5mby1cdTAwM2VpbnZmbGFncyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaXBjb21wLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwY29tcC5jXG5pbmRleCA0NzJkYTYzOWEzMmUyLi4zMjk5YzFlYTYwZjllIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcGNvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9pcGNvbXAuY1xuQEAgLTI5LDEyICYjNDM7MjksNyBAQCBNT0RVTEVfQUxJQVMoXCYjMzQ7aXA2dF9pcGNvbXBcJiMzNDspO1xuIHN0YXRpYyBpbmxpbmUgYm9vbFxuIHNwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBib29sIGludmVydClcbiB7XG4tXHRib29sIHI7XG4tXHRwcl9kZWJ1ZyhcJiMzNDtzcGlfbWF0Y2g6JWMgMHgleCBcdTAwM2M9IDB4JXggXHUwMDNjPSAweCV4XFxuXCYjMzQ7LFxuLVx0XHQgaW52ZXJ0ID8gJiMzOTshJiMzOTsgOiAmIzM5OyAmIzM5OywgbWluLCBzcGksIG1heCk7XG4tXHRyID0gKHNwaSBcdTAwM2U9IG1pbiBcdTAwMjZcdTAwMjYgc3BpIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbi1cdHByX2RlYnVnKFwmIzM0OyByZXN1bHQgJXNcXG5cJiMzNDssIHIgPyBcJiMzNDtQQVNTXCYjMzQ7IDogXCYjMzQ7RkFJTEVEXCYjMzQ7KTtcbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiAoc3BpIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBzcGkgXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBjb21wX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbkBAIC01Miw3ICYjNDM7NDcsNiBAQCBzdGF0aWMgYm9vbCBjb21wX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0LyogV2UmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXG4gXHRcdCAqIGNhbiYjMzk7dC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuXG4gXHRcdCAqL1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtEcm9wcGluZyBldmlsIElQQ29tcCB0aW55Z3JhbS5cXG5cJiMzNDspO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYyBiL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jXG5pbmRleCAwYzllMDE0ZTMwYjQ5Li5iZjYxMTQxZmI3ODUwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jXG5AQCAtMjQsMjcgJiM0MzsyNCwxNSBAQCBpcHJhbmdlX210NChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdG0gID0gbnRvaGwoaXBoLVx1MDAzZXNhZGRyKSBcdTAwM2MgbnRvaGwoaW5mby1cdTAwM2VzcmNfbWluLmlwKTtcbiBcdFx0bSB8PSBudG9obChpcGgtXHUwMDNlc2FkZHIpIFx1MDAzZSBudG9obChpbmZvLVx1MDAzZXNyY19tYXguaXApO1xuIFx0XHRtIF49ICEhKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVik7XG4tXHRcdGlmIChtKSB7XG4tXHRcdFx0cHJfZGVidWcoXCYjMzQ7c3JjIElQICVwSTQgTk9UIGluIHJhbmdlICVzJXBJNC0lcEk0XFxuXCYjMzQ7LFxuLVx0XHRcdCAgICAgICAgIFx1MDAyNmlwaC1cdTAwM2VzYWRkcixcbi1cdFx0XHQgICAgICAgICAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9TUkNfSU5WKSA/IFwmIzM0OyhJTlYpIFwmIzM0OyA6IFwmIzM0O1wmIzM0Oyxcbi1cdFx0XHQgICAgICAgICBcdTAwMjZpbmZvLVx1MDAzZXNyY19taW4uaXAsXG4tXHRcdFx0ICAgICAgICAgXHUwMDI2aW5mby1cdTAwM2VzcmNfbWF4LmlwKTtcbiYjNDM7XHRcdGlmIChtKVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0fVxuIFx0fVxuIFx0aWYgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfRFNUKSB7XG4gXHRcdG0gID0gbnRvaGwoaXBoLVx1MDAzZWRhZGRyKSBcdTAwM2MgbnRvaGwoaW5mby1cdTAwM2Vkc3RfbWluLmlwKTtcbiBcdFx0bSB8PSBudG9obChpcGgtXHUwMDNlZGFkZHIpIFx1MDAzZSBudG9obChpbmZvLVx1MDAzZWRzdF9tYXguaXApO1xuIFx0XHRtIF49ICEhKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfRFNUX0lOVik7XG4tXHRcdGlmIChtKSB7XG4tXHRcdFx0cHJfZGVidWcoXCYjMzQ7ZHN0IElQICVwSTQgTk9UIGluIHJhbmdlICVzJXBJNC0lcEk0XFxuXCYjMzQ7LFxuLVx0XHRcdCAgICAgICAgIFx1MDAyNmlwaC1cdTAwM2VkYWRkcixcbi1cdFx0XHQgICAgICAgICAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9EU1RfSU5WKSA/IFwmIzM0OyhJTlYpIFwmIzM0OyA6IFwmIzM0O1wmIzM0Oyxcbi1cdFx0XHQgICAgICAgICBcdTAwMjZpbmZvLVx1MDAzZWRzdF9taW4uaXAsXG4tXHRcdFx0ICAgICAgICAgXHUwMDI2aW5mby1cdTAwM2Vkc3RfbWF4LmlwKTtcbiYjNDM7XHRcdGlmIChtKVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0fVxuIFx0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuQEAgLTczLDI3ICYjNDM7NjEsMTUgQEAgaXByYW5nZV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRtICA9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmluZm8tXHUwMDNlc3JjX21pbi5pbjYpO1xuIFx0XHRtIHw9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpbmZvLVx1MDAzZXNyY19tYXguaW42LCBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuIFx0XHRtIF49ICEhKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVik7XG4tXHRcdGlmIChtKSB7XG4tXHRcdFx0cHJfZGVidWcoXCYjMzQ7c3JjIElQICVwSTYgTk9UIGluIHJhbmdlICVzJXBJNi0lcEk2XFxuXCYjMzQ7LFxuLVx0XHRcdFx0IFx1MDAyNmlwaC1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdCAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9TUkNfSU5WKSA/IFwmIzM0OyhJTlYpIFwmIzM0OyA6IFwmIzM0O1wmIzM0Oyxcbi1cdFx0XHRcdCBcdTAwMjZpbmZvLVx1MDAzZXNyY19taW4uaW42LFxuLVx0XHRcdFx0IFx1MDAyNmluZm8tXHUwMDNlc3JjX21heC5pbjYpO1xuJiM0MztcdFx0aWYgKG0pXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHR9XG4gXHR9XG4gXHRpZiAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9EU1QpIHtcbiBcdFx0bSAgPSBpcHJhbmdlX2lwdjZfbHQoXHUwMDI2aXBoLVx1MDAzZWRhZGRyLCBcdTAwMjZpbmZvLVx1MDAzZWRzdF9taW4uaW42KTtcbiBcdFx0bSB8PSBpcHJhbmdlX2lwdjZfbHQoXHUwMDI2aW5mby1cdTAwM2Vkc3RfbWF4LmluNiwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyKTtcbiBcdFx0bSBePSAhIShpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUFJBTkdFX0RTVF9JTlYpO1xuLVx0XHRpZiAobSkge1xuLVx0XHRcdHByX2RlYnVnKFwmIzM0O2RzdCBJUCAlcEk2IE5PVCBpbiByYW5nZSAlcyVwSTYtJXBJNlxcblwmIzM0Oyxcbi1cdFx0XHRcdCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHQgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfRFNUX0lOVikgPyBcJiMzNDsoSU5WKSBcJiMzNDsgOiBcJiMzNDtcJiMzNDssXG4tXHRcdFx0XHQgXHUwMDI2aW5mby1cdTAwM2Vkc3RfbWluLmluNixcbi1cdFx0XHRcdCBcdTAwMjZpbmZvLVx1MDAzZWRzdF9tYXguaW42KTtcbiYjNDM7XHRcdGlmIChtKVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0fVxuIFx0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jIGIvbmV0L25ldGZpbHRlci94dF9pcHZzLmNcbmluZGV4IDI1M2M3MWNjOWE2MzQuLmUxM2MwZmZiNzNhOWEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2lwdnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9pcHZzLmNcbkBAIC0xNDgsNyAmIzQzOzE0OCw2IEBAIGlwdnNfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIG91dF9wdXRfY3A6XG4gXHRfX2lwX3ZzX2Nvbm5fcHV0KGNwKTtcbiBvdXQ6XG4tXHRwcl9kZWJ1ZyhcJiMzNDttYXRjaD0lZFxcblwmIzM0OywgbWF0Y2gpO1xuIFx0cmV0dXJuIG1hdGNoO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jIGIvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuY1xuaW5kZXggYTE2OTFmZjQwNWQzYy4uYmZmNWY1M2E5YmVmYiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmNcbkBAIC0zNyw3ICYjNDM7MzcsNiBAQCBwb3J0c19tYXRjaF92MShjb25zdCBzdHJ1Y3QgeHRfbXVsdGlwb3J0X3YxICptaW5mbyxcbiBcdFx0aWYgKG1pbmZvLVx1MDAzZXBmbGFnc1tpXSkge1xuIFx0XHRcdC8qIHJhbmdlIHBvcnQgbWF0Y2hpbmcgKi9cbiBcdFx0XHRlID0gbWluZm8tXHUwMDNlcG9ydHNbJiM0MzsmIzQzO2ldO1xuLVx0XHRcdHByX2RlYnVnKFwmIzM0O3NyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkLSVkP1xcblwmIzM0OywgcywgZSk7XG4gXG4gXHRcdFx0c3dpdGNoIChtaW5mby1cdTAwM2VmbGFncykge1xuIFx0XHRcdGNhc2UgWFRfTVVMVElQT1JUX1NPVVJDRTpcbkBAIC01OCw4ICYjNDM7NTcsNiBAQCBwb3J0c19tYXRjaF92MShjb25zdCBzdHJ1Y3QgeHRfbXVsdGlwb3J0X3YxICptaW5mbyxcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0LyogZXhhY3QgcG9ydCBtYXRjaGluZyAqL1xuLVx0XHRcdHByX2RlYnVnKFwmIzM0O3NyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkP1xcblwmIzM0Oywgcyk7XG4tXG4gXHRcdFx0c3dpdGNoIChtaW5mby1cdTAwM2VmbGFncykge1xuIFx0XHRcdGNhc2UgWFRfTVVMVElQT1JUX1NPVVJDRTpcbiBcdFx0XHRcdGlmIChzcmMgPT0gcylcbkBAIC05Nyw3ICYjNDM7OTQsNiBAQCBtdWx0aXBvcnRfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHQvKiBXZSYjMzk7dmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2VcbiBcdFx0ICogY2FuJiMzOTt0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC5cbiBcdFx0ICovXG4tXHRcdHByX2RlYnVnKFwmIzM0O0Ryb3BwaW5nIGV2aWwgb2Zmc2V0PTAgdGlueWdyYW0uXFxuXCYjMzQ7KTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuY1xuaW5kZXggYjQ2YTZhNTEyMDU4My4uZDM1YzIxZDk2NTFiMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuY1xuQEAgLTQ4LDMwICYjNDM7NDgsMTcgQEAgbWF0Y2hfcGFja2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgeHRfc2N0cF9mbGFnX2luZm8gKmZsYWdfaW5mbyA9IGluZm8tXHUwMDNlZmxhZ19pbmZvO1xuIFx0aW50IGZsYWdfY291bnQgPSBpbmZvLVx1MDAzZWZsYWdfY291bnQ7XG4gXG4tI2lmZGVmIERFQlVHXG4tXHRpbnQgaSA9IDA7XG4tI2VuZGlmXG4tXG4gXHRpZiAoY2h1bmtfbWF0Y2hfdHlwZSA9PSBTQ1RQX0NIVU5LX01BVENIX0FMTClcbiBcdFx0U0NUUF9DSFVOS01BUF9DT1BZKGNodW5rbWFwY29weSwgaW5mby1cdTAwM2VjaHVua21hcCk7XG4gXG4gXHRkbyB7XG4gXHRcdHNjaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9zY2gpLCBcdTAwMjZfc2NoKTtcbiBcdFx0aWYgKHNjaCA9PSBOVUxMIHx8IHNjaC1cdTAwM2VsZW5ndGggPT0gMCkge1xuLVx0XHRcdHByX2RlYnVnKFwmIzM0O0Ryb3BwaW5nIGludmFsaWQgU0NUUCBwYWNrZXQuXFxuXCYjMzQ7KTtcbiBcdFx0XHQqaG90ZHJvcCA9IHRydWU7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4tI2lmZGVmIERFQlVHXG4tXHRcdHByX2RlYnVnKFwmIzM0O0NodW5rIG51bTogJWRcXHRvZmZzZXQ6ICVkXFx0dHlwZTogJWRcXHRsZW5ndGg6ICVkXCYjMzQ7XG4tXHRcdFx0IFwmIzM0O1xcdGZsYWdzOiAleFxcblwmIzM0Oyxcbi1cdFx0XHQgJiM0MzsmIzQzO2ksIG9mZnNldCwgc2NoLVx1MDAzZXR5cGUsIGh0b25zKHNjaC1cdTAwM2VsZW5ndGgpLFxuLVx0XHRcdCBzY2gtXHUwMDNlZmxhZ3MpO1xuLSNlbmRpZlxuIFx0XHRvZmZzZXQgJiM0Mzs9IFNDVFBfUEFENChudG9ocyhzY2gtXHUwMDNlbGVuZ3RoKSk7XG4gXG4tXHRcdHByX2RlYnVnKFwmIzM0O3NrYi1cdTAwM2VsZW46ICVkXFx0b2Zmc2V0OiAlZFxcblwmIzM0Oywgc2tiLVx1MDAzZWxlbiwgb2Zmc2V0KTtcbi1cbiBcdFx0aWYgKFNDVFBfQ0hVTktNQVBfSVNfU0VUKGluZm8tXHUwMDNlY2h1bmttYXAsIHNjaC1cdTAwM2V0eXBlKSkge1xuIFx0XHRcdHN3aXRjaCAoY2h1bmtfbWF0Y2hfdHlwZSkge1xuIFx0XHRcdGNhc2UgU0NUUF9DSFVOS19NQVRDSF9BTlk6XG5AQCAtMTIxLDE4ICYjNDM7MTA4LDE0IEBAIHNjdHBfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IHNjdHBoZHIgKnNoO1xuIFx0c3RydWN0IHNjdHBoZHIgX3NoO1xuIFxuLVx0aWYgKHBhci1cdTAwM2VmcmFnb2ZmICE9IDApIHtcbi1cdFx0cHJfZGVidWcoXCYjMzQ7RHJvcHBpbmcgbm9uLWZpcnN0IGZyYWdtZW50Li4gRklYTUVcXG5cJiMzNDspO1xuJiM0MztcdGlmIChwYXItXHUwMDNlZnJhZ29mZiAhPSAwKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4tXHR9XG4gXG4gXHRzaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHBhci1cdTAwM2V0aG9mZiwgc2l6ZW9mKF9zaCksIFx1MDAyNl9zaCk7XG4gXHRpZiAoc2ggPT0gTlVMTCkge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtEcm9wcGluZyBldmlsIFRDUCBvZmZzZXQ9MCB0aW55Z3JhbS5cXG5cJiMzNDspO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbi1cdHByX2RlYnVnKFwmIzM0O3NwdDogJWRcXHRkcHQ6ICVkXFxuXCYjMzQ7LCBudG9ocyhzaC1cdTAwM2Vzb3VyY2UpLCBudG9ocyhzaC1cdTAwM2VkZXN0KSk7XG4gXG4gXHRyZXR1cm4gIFNDQ0hFQ0sobnRvaHMoc2gtXHUwMDNlc291cmNlKSBcdTAwM2U9IGluZm8tXHUwMDNlc3B0c1swXVxuIFx0XHRcdFx1MDAyNlx1MDAyNiBudG9ocyhzaC1cdTAwM2Vzb3VyY2UpIFx1MDAzYz0gaW5mby1cdTAwM2VzcHRzWzFdLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3RjcHVkcC5jXG5pbmRleCBmNzZjZjE4ZjFhMjQ0Li43MDYwOGI4ZDA2YWIyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuY1xuQEAgLTQ0LDggJiM0Mzs0NCw2IEBAIHRjcF9maW5kX29wdGlvbih1X2ludDhfdCBvcHRpb24sXG4gXHR1X2ludDhfdCBfb3B0WzYwIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpXTtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0cHJfZGVidWcoXCYjMzQ7ZmluZGluZyBvcHRpb25cXG5cJiMzNDspO1xuLVxuIFx0aWYgKCFvcHRsZW4pXG4gXHRcdHJldHVybiBpbnZlcnQ7XG4gXG5AQCAtODEsMTAgJiM0Mzs3OSw4IEBAIHN0YXRpYyBib29sIHRjcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdCAgIGNhdXNlcyB0aGlzLiBJdHMgYSBjcmFja2VyIHRyeWluZyB0byBicmVhayBpbiBieSBkb2luZyBhXG4gXHRcdCAgIGZsYWcgb3ZlcndyaXRlIHRvIHBhc3MgdGhlIGRpcmVjdGlvbiBjaGVja3MuXG4gXHRcdCovXG4tXHRcdGlmIChwYXItXHUwMDNlZnJhZ29mZiA9PSAxKSB7XG4tXHRcdFx0cHJfZGVidWcoXCYjMzQ7RHJvcHBpbmcgZXZpbCBUQ1Agb2Zmc2V0PTEgZnJhZy5cXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKHBhci1cdTAwM2VmcmFnb2ZmID09IDEpXG4gXHRcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuLVx0XHR9XG4gXHRcdC8qIE11c3Qgbm90IGJlIGEgZnJhZ21lbnQuICovXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC05Myw3ICYjNDM7ODksNiBAQCBzdGF0aWMgYm9vbCB0Y3BfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0aWYgKHRoID09IE5VTEwpIHtcbiBcdFx0LyogV2UmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXG4gXHRcdCAgIGNhbiYjMzk7dC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuICovXG4tXHRcdHByX2RlYnVnKFwmIzM0O0Ryb3BwaW5nIGV2aWwgVENQIG9mZnNldD0wIHRpbnlncmFtLlxcblwmIzM0Oyk7XG4gXHRcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuQEAgLTE0NSw3ICYjNDM7MTQwLDYgQEAgc3RhdGljIGJvb2wgdWRwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdGlmICh1aCA9PSBOVUxMKSB7XG4gXHRcdC8qIFdlJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZVxuIFx0XHQgICBjYW4mIzM5O3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLiAqL1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtEcm9wcGluZyBldmlsIFVEUCB0aW55Z3JhbS5cXG5cJiMzNDspO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9DVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUiYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7SVBfTkZfUkFXJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3h0X2N0X3RnX2NoZWNrJiMzNDssCiAgICAmIzM0O2lkbGV0aW1lcl90Z19jaGVja2VudHJ5JiMzNDssCiAgICAmIzM0O2lkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB4dF9DVC5jYCB0byBjaGFuZ2UgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBpbmZvLVx1MDAzZWhlbHBlcmAgYW5kIGBpbmZvLVx1MDAzZXRpbWVvdXRgLiBJZiB0aGV5IGFyZSBub3QgbnVsbC10ZXJtaW5hdGVkLCB0aGUgbmV3IGNvZGUgc2tpcHMgc2V0dGluZyB0aGVtIGluc3RlYWQgb2YgcmV0dXJuaW5nIGAtRU5BTUVUT09MT05HYCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdGFyZ2V0IGluaXRpYWxpemF0aW9uIGxvZ2ljLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgeHRfSURMRVRJTUVSLmNgIHRvIHJlbGVhc2UgYSBtdXRleCBiZWZvcmUgbG9nZ2luZywgd2hpY2ggaXMgYSBtaW5vciBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlc2UgY2hhbmdlcyBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBjb25maWd1cmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTMzOGFlYzU1Y2UxZWQwZmVmMDE4YjBjODdhNmFlMzQxYjZhNmE3NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDE0OjM5OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jCmluZGV4IDE2MWJhNDEyY2IwOGIuLjcxMzFmMjk3YWRhMmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfYWguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FoLmMKQEAgLTE5LDEyICYjNDM7MTksNyBAQCBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtYdGFibGVzOiBJUHY0IElQc2VjLUFIIFNQSSBtYXRjaCYjMzQ7KTsKIHN0YXRpYyBpbmxpbmUgYm9vbAogc3BpX21hdGNoKHVfaW50MzJfdCBtaW4sIHVfaW50MzJfdCBtYXgsIHVfaW50MzJfdCBzcGksIGJvb2wgaW52ZXJ0KQogewotCWJvb2wgcjsKLQlwcl9kZWJ1ZygmIzM0O3NwaV9tYXRjaDolYyAweCV4ICZsdDs9IDB4JXggJmx0Oz0gMHgleFxuJiMzNDssCi0JCSBpbnZlcnQgPyAmIzM5OyEmIzM5OyA6ICYjMzk7ICYjMzk7LCBtaW4sIHNwaSwgbWF4KTsKLQlyID0gKHNwaSAmZ3Q7PSBtaW4gJmFtcDsmYW1wOyBzcGkgJmx0Oz0gbWF4KSBeIGludmVydDsKLQlwcl9kZWJ1ZygmIzM0OyByZXN1bHQgJXNcbiYjMzQ7LCByID8gJiMzNDtQQVNTJiMzNDsgOiAmIzM0O0ZBSUxFRCYjMzQ7KTsKLQlyZXR1cm4gcjsKJiM0MzsJcmV0dXJuIChzcGkgJmd0Oz0gbWluICZhbXA7JmFtcDsgc3BpICZsdDs9IG1heCkgXiBpbnZlcnQ7CiB9CiAKIHN0YXRpYyBib29sIGFoX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKQEAgLTQyLDcgJiM0MzszNyw2IEBAIHN0YXRpYyBib29sIGFoX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJLyogV2UmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlCiAJCSAqIGNhbiYjMzk7dC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuCiAJCSAqLwotCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGV2aWwgQUggdGlueWdyYW0uXG4mIzM0Oyk7CiAJCXBhci0mZ3Q7aG90ZHJvcCA9IHRydWU7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC01OCw3ICYjNDM7NTIsNyBAQCBzdGF0aWMgaW50IGFoX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogCiAJLyogTXVzdCBzcGVjaWZ5IG5vIHVua25vd24gaW52ZmxhZ3MgKi8KIAlpZiAoYWhpbmZvLSZndDtpbnZmbGFncyAmYW1wOyB+SVBUX0FIX0lOVl9NQVNLKSB7Ci0JCXByX2RlYnVnKCYjMzQ7dW5rbm93biBmbGFncyAlWFxuJiMzNDssIGFoaW5mby0mZ3Q7aW52ZmxhZ3MpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3Vua25vd24gZmxhZ3MgJVhcbiYjMzQ7LCBhaGluZm8tJmd0O2ludmZsYWdzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ycGZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ycGZpbHRlci5jCmluZGV4IDZkOWJmNTEwNjg2ODQuLjJjMzhmZDY2MjRhYTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JwZmlsdGVyLmMKQEAgLTk1LDggJiM0Mzs5NSw3IEBAIHN0YXRpYyBpbnQgcnBmaWx0ZXJfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAKIAlpZiAoc3RyY21wKHBhci0mZ3Q7dGFibGUsICYjMzQ7bWFuZ2xlJiMzNDspICE9IDAgJmFtcDsmYW1wOwogCSAgICBzdHJjbXAocGFyLSZndDt0YWJsZSwgJiMzNDtyYXcmIzM0OykgIT0gMCkgewotCQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7b25seSB2YWxpZCBpbiBcJiMzOTtyYXdcJiMzOTsgb3IgXCYjMzk7bWFuZ2xlXCYjMzk7IHRhYmxlLCBub3QgXCYjMzk7JXNcJiMzOTtcbiYjMzQ7LAotCQkJCSAgICBwYXItJmd0O3RhYmxlKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtvbmx5IHZhbGlkIGluIFwmIzM5O3Jhd1wmIzM5OyBvciBcJiMzOTttYW5nbGVcJiMzOTsgdGFibGVcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguYwppbmRleCAxMjU4NzgzZWQ4NzYyLi5kYWI3ZGJjNmE2NzVjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmMKQEAgLTI0LDEzICYjNDM7MjQsNyBAQCBNT0RVTEVfQVVUSE9SKCYjMzQ7QW5kcmFzIEtpcy1TemFibyAmbHQ7a2lzemFAc2NoLmJtZS5odSZndDsmIzM0Oyk7CiBzdGF0aWMgaW5saW5lIGJvb2wKIHNwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBib29sIGludmVydCkKIHsKLQlib29sIHI7Ci0KLQlwcl9kZWJ1ZygmIzM0O3NwaV9tYXRjaDolYyAweCV4ICZsdDs9IDB4JXggJmx0Oz0gMHgleFxuJiMzNDssCi0JCSBpbnZlcnQgPyAmIzM5OyEmIzM5OyA6ICYjMzk7ICYjMzk7LCBtaW4sIHNwaSwgbWF4KTsKLQlyID0gKHNwaSAmZ3Q7PSBtaW4gJmFtcDsmYW1wOyBzcGkgJmx0Oz0gbWF4KSBeIGludmVydDsKLQlwcl9kZWJ1ZygmIzM0OyByZXN1bHQgJXNcbiYjMzQ7LCByID8gJiMzNDtQQVNTJiMzNDsgOiAmIzM0O0ZBSUxFRCYjMzQ7KTsKLQlyZXR1cm4gcjsKJiM0MzsJcmV0dXJuIChzcGkgJmd0Oz0gbWluICZhbXA7JmFtcDsgc3BpICZsdDs9IG1heCkgXiBpbnZlcnQ7CiB9CiAKIHN0YXRpYyBib29sIGFoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCkBAIC02MiwyMyAmIzQzOzU2LDYgQEAgc3RhdGljIGJvb2wgYWhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXByX2RlYnVnKCYjMzQ7SVB2NiBBSCBMRU4gJXUgJXUgJiMzNDssIGhkcmxlbiwgYWgtJmd0O2hkcmxlbik7Ci0JcHJfZGVidWcoJiMzNDtSRVMgJTA0WCAmIzM0OywgYWgtJmd0O3Jlc2VydmVkKTsKLQlwcl9kZWJ1ZygmIzM0O1NQSSAldSAlMDhYXG4mIzM0OywgbnRvaGwoYWgtJmd0O3NwaSksIG50b2hsKGFoLSZndDtzcGkpKTsKLQotCXByX2RlYnVnKCYjMzQ7SVB2NiBBSCBzcGkgJTAyWCAmIzM0OywKLQkJIHNwaV9tYXRjaChhaGluZm8tJmd0O3NwaXNbMF0sIGFoaW5mby0mZ3Q7c3Bpc1sxXSwKLQkJCSAgIG50b2hsKGFoLSZndDtzcGkpLAotCQkJICAgISEoYWhpbmZvLSZndDtpbnZmbGFncyAmYW1wOyBJUDZUX0FIX0lOVl9TUEkpKSk7Ci0JcHJfZGVidWcoJiMzNDtsZW4gJTAyWCAlMDRYICUwMlggJiMzNDssCi0JCSBhaGluZm8tJmd0O2hkcmxlbiwgaGRybGVuLAotCQkgKCFhaGluZm8tJmd0O2hkcmxlbiB8fAotCQkgIChhaGluZm8tJmd0O2hkcmxlbiA9PSBoZHJsZW4pIF4KLQkJICAhIShhaGluZm8tJmd0O2ludmZsYWdzICZhbXA7IElQNlRfQUhfSU5WX0xFTikpKTsKLQlwcl9kZWJ1ZygmIzM0O3JlcyAlMDJYICUwNFggJTAyWFxuJiMzNDssCi0JCSBhaGluZm8tJmd0O2hkcnJlcywgYWgtJmd0O3Jlc2VydmVkLAotCQkgIShhaGluZm8tJmd0O2hkcnJlcyAmYW1wOyZhbXA7IGFoLSZndDtyZXNlcnZlZCkpOwotCiAJcmV0dXJuIHNwaV9tYXRjaChhaGluZm8tJmd0O3NwaXNbMF0sIGFoaW5mby0mZ3Q7c3Bpc1sxXSwKIAkJCSAgbnRvaGwoYWgtJmd0O3NwaSksCiAJCQkgICEhKGFoaW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgSVA2VF9BSF9JTlZfU1BJKSkgJmFtcDsmYW1wOwpAQCAtOTMsNyAmIzQzOzcwLDcgQEAgc3RhdGljIGludCBhaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJY29uc3Qgc3RydWN0IGlwNnRfYWggKmFoaW5mbyA9IHBhci0mZ3Q7bWF0Y2hpbmZvOwogCiAJaWYgKGFoaW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgfklQNlRfQUhfSU5WX01BU0spIHsKLQkJcHJfZGVidWcoJiMzNDt1bmtub3duIGZsYWdzICVYXG4mIzM0OywgYWhpbmZvLSZndDtpbnZmbGFncyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7dW5rbm93biBmbGFncyAlWFxuJiMzNDssIGFoaW5mby0mZ3Q7aW52ZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9mcmFnLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9mcmFnLmMKaW5kZXggM2FhZDY0MzkzODZiMS4uZjVmM2NmYjg3MDRjZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuYwpAQCAtMjMsMTIgJiM0MzsyMyw3IEBAIE1PRFVMRV9BVVRIT1IoJiMzNDtBbmRyYXMgS2lzLVN6YWJvICZsdDtraXN6YUBzY2guYm1lLmh1Jmd0OyYjMzQ7KTsKIHN0YXRpYyBpbmxpbmUgYm9vbAogaWRfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IGlkLCBib29sIGludmVydCkKIHsKLQlib29sIHI7Ci0JcHJfZGVidWcoJiMzNDtpZF9tYXRjaDolYyAweCV4ICZsdDs9IDB4JXggJmx0Oz0gMHgleFxuJiMzNDssIGludmVydCA/ICYjMzk7ISYjMzk7IDogJiMzOTsgJiMzOTssCi0JCSBtaW4sIGlkLCBtYXgpOwotCXIgPSAoaWQgJmd0Oz0gbWluICZhbXA7JmFtcDsgaWQgJmx0Oz0gbWF4KSBeIGludmVydDsKLQlwcl9kZWJ1ZygmIzM0OyByZXN1bHQgJXNcbiYjMzQ7LCByID8gJiMzNDtQQVNTJiMzNDsgOiAmIzM0O0ZBSUxFRCYjMzQ7KTsKLQlyZXR1cm4gcjsKJiM0MzsJcmV0dXJuIChpZCAmZ3Q7PSBtaW4gJmFtcDsmYW1wOyBpZCAmbHQ7PSBtYXgpIF4gaW52ZXJ0OwogfQogCiBzdGF0aWMgYm9vbApAQCAtNTMsMzggJiM0Mzs0OCw2IEBAIGZyYWdfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXByX2RlYnVnKCYjMzQ7SU5GTyAlMDRYICYjMzQ7LCBmaC0mZ3Q7ZnJhZ19vZmYpOwotCXByX2RlYnVnKCYjMzQ7T0ZGU0VUICUwNFggJiMzNDssIG50b2hzKGZoLSZndDtmcmFnX29mZikgJmFtcDsgfjB4Nyk7Ci0JcHJfZGVidWcoJiMzNDtSRVMgJTAyWCAlMDRYJiMzNDssIGZoLSZndDtyZXNlcnZlZCwgbnRvaHMoZmgtJmd0O2ZyYWdfb2ZmKSAmYW1wOyAweDYpOwotCXByX2RlYnVnKCYjMzQ7TUYgJTA0WCAmIzM0OywgZmgtJmd0O2ZyYWdfb2ZmICZhbXA7IGh0b25zKElQNl9NRikpOwotCXByX2RlYnVnKCYjMzQ7SUQgJXUgJTA4WFxuJiMzNDssIG50b2hsKGZoLSZndDtpZGVudGlmaWNhdGlvbiksCi0JCSBudG9obChmaC0mZ3Q7aWRlbnRpZmljYXRpb24pKTsKLQotCXByX2RlYnVnKCYjMzQ7SVB2NiBGUkFHIGlkICUwMlggJiMzNDssCi0JCSBpZF9tYXRjaChmcmFnaW5mby0mZ3Q7aWRzWzBdLCBmcmFnaW5mby0mZ3Q7aWRzWzFdLAotCQkJICBudG9obChmaC0mZ3Q7aWRlbnRpZmljYXRpb24pLAotCQkJICAhIShmcmFnaW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgSVA2VF9GUkFHX0lOVl9JRFMpKSk7Ci0JcHJfZGVidWcoJiMzNDtyZXMgJTAyWCAlMDJYJTA0WCAlMDJYICYjMzQ7LAotCQkgZnJhZ2luZm8tJmd0O2ZsYWdzICZhbXA7IElQNlRfRlJBR19SRVMsIGZoLSZndDtyZXNlcnZlZCwKLQkJIG50b2hzKGZoLSZndDtmcmFnX29mZikgJmFtcDsgMHg2LAotCQkgISgoZnJhZ2luZm8tJmd0O2ZsYWdzICZhbXA7IElQNlRfRlJBR19SRVMpICZhbXA7JmFtcDsKLQkJICAgKGZoLSZndDtyZXNlcnZlZCB8fCAobnRvaHMoZmgtJmd0O2ZyYWdfb2ZmKSAmYW1wOyAweDA2KSkpKTsKLQlwcl9kZWJ1ZygmIzM0O2ZpcnN0ICUwMlggJTAyWCAlMDJYICYjMzQ7LAotCQkgZnJhZ2luZm8tJmd0O2ZsYWdzICZhbXA7IElQNlRfRlJBR19GU1QsCi0JCSBudG9ocyhmaC0mZ3Q7ZnJhZ19vZmYpICZhbXA7IH4weDcsCi0JCSAhKChmcmFnaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9GUkFHX0ZTVCkgJmFtcDsmYW1wOwotCQkgICAobnRvaHMoZmgtJmd0O2ZyYWdfb2ZmKSAmYW1wOyB+MHg3KSkpOwotCXByX2RlYnVnKCYjMzQ7bWYgJTAyWCAlMDJYICUwMlggJiMzNDssCi0JCSBmcmFnaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9GUkFHX01GLAotCQkgbnRvaHMoZmgtJmd0O2ZyYWdfb2ZmKSAmYW1wOyBJUDZfTUYsCi0JCSAhKChmcmFnaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9GUkFHX01GKSAmYW1wOyZhbXA7Ci0JCSAgICEoKG50b2hzKGZoLSZndDtmcmFnX29mZikgJmFtcDsgSVA2X01GKSkpKTsKLQlwcl9kZWJ1ZygmIzM0O2xhc3QgJTAyWCAlMDJYICUwMlhcbiYjMzQ7LAotCQkgZnJhZ2luZm8tJmd0O2ZsYWdzICZhbXA7IElQNlRfRlJBR19OTUYsCi0JCSBudG9ocyhmaC0mZ3Q7ZnJhZ19vZmYpICZhbXA7IElQNl9NRiwKLQkJICEoKGZyYWdpbmZvLSZndDtmbGFncyAmYW1wOyBJUDZUX0ZSQUdfTk1GKSAmYW1wOyZhbXA7Ci0JCSAgIChudG9ocyhmaC0mZ3Q7ZnJhZ19vZmYpICZhbXA7IElQNl9NRikpKTsKLQogCXJldHVybiBpZF9tYXRjaChmcmFnaW5mby0mZ3Q7aWRzWzBdLCBmcmFnaW5mby0mZ3Q7aWRzWzFdLAogCQkJIG50b2hsKGZoLSZndDtpZGVudGlmaWNhdGlvbiksCiAJCQkgISEoZnJhZ2luZm8tJmd0O2ludmZsYWdzICZhbXA7IElQNlRfRlJBR19JTlZfSURTKSkgJmFtcDsmYW1wOwpAQCAtMTAzLDcgJiM0Mzs2Niw3IEBAIHN0YXRpYyBpbnQgZnJhZ19tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJY29uc3Qgc3RydWN0IGlwNnRfZnJhZyAqZnJhZ2luZm8gPSBwYXItJmd0O21hdGNoaW5mbzsKIAogCWlmIChmcmFnaW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgfklQNlRfRlJBR19JTlZfTUFTSykgewotCQlwcl9kZWJ1ZygmIzM0O3Vua25vd24gZmxhZ3MgJVhcbiYjMzQ7LCBmcmFnaW5mby0mZ3Q7aW52ZmxhZ3MpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3Vua25vd24gZmxhZ3MgJVhcbiYjMzQ7LCBmcmFnaW5mby0mZ3Q7aW52ZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jCmluZGV4IDZkMWE1ZDIwMjZhNjcuLjM3YzIwN2QzMTUyYTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jCkBAIC03OSwxNCAmIzQzOzc5LDYgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlwcl9kZWJ1ZygmIzM0O0lQdjYgT1BUUyBMRU4gJXUgJXUgJiMzNDssIGhkcmxlbiwgb2gtJmd0O2hkcmxlbik7Ci0KLQlwcl9kZWJ1ZygmIzM0O2xlbiAlMDJYICUwNFggJTAyWCAmIzM0OywKLQkJIG9wdGluZm8tJmd0O2hkcmxlbiwgaGRybGVuLAotCQkgKCEob3B0aW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9PUFRTX0xFTikgfHwKLQkJICAoKG9wdGluZm8tJmd0O2hkcmxlbiA9PSBoZHJsZW4pIF4KLQkJICAgISEob3B0aW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgSVA2VF9PUFRTX0lOVl9MRU4pKSkpOwotCiAJcmV0ID0gKCEob3B0aW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9PUFRTX0xFTikgfHwKIAkgICAgICAgKChvcHRpbmZvLSZndDtoZHJsZW4gPT0gaGRybGVuKSBeCiAJCSEhKG9wdGluZm8tJmd0O2ludmZsYWdzICZhbXA7IElQNlRfT1BUU19JTlZfTEVOKSkpOwpAQCAtOTYsOCAmIzQzOzg4LDYgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJaWYgKCEob3B0aW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9PUFRTX09QVFMpKSB7CiAJCXJldHVybiByZXQ7CiAJfSBlbHNlIHsKLQkJcHJfZGVidWcoJiMzNDtTdHJpY3QgJiMzNDspOwotCQlwcl9kZWJ1ZygmIzM0OyMlZCAmIzM0Oywgb3B0aW5mby0mZ3Q7b3B0c25yKTsKIAkJZm9yICh0ZW1wID0gMDsgdGVtcCAmbHQ7IG9wdGluZm8tJmd0O29wdHNucjsgdGVtcCYjNDM7JiM0MzspIHsKIAkJCS8qIHR5cGUgZmllbGQgZXhpc3RzID8gKi8KIAkJCWlmIChoZHJsZW4gJmx0OyAxKQpAQCAtMTA4LDEzICYjNDM7OTgsOSBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJCQlicmVhazsKIAogCQkJLyogVHlwZSBjaGVjayAqLwotCQkJaWYgKCp0cCAhPSAob3B0aW5mby0mZ3Q7b3B0c1t0ZW1wXSAmYW1wOyAweEZGMDApICZndDsmZ3Q7IDgpIHsKLQkJCQlwcl9kZWJ1ZygmIzM0O1RiYWQgJTAyWCAlMDJYXG4mIzM0OywgKnRwLAotCQkJCQkgKG9wdGluZm8tJmd0O29wdHNbdGVtcF0gJmFtcDsgMHhGRjAwKSAmZ3Q7Jmd0OyA4KTsKJiM0MzsJCQlpZiAoKnRwICE9IChvcHRpbmZvLSZndDtvcHRzW3RlbXBdICZhbXA7IDB4RkYwMCkgJmd0OyZndDsgOCkKIAkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9IGVsc2UgewotCQkJCXByX2RlYnVnKCYjMzQ7VG9rICYjMzQ7KTsKLQkJCX0KJiM0MzsKIAkJCS8qIExlbmd0aCBjaGVjayAqLwogCQkJaWYgKCp0cCkgewogCQkJCXUxNiBzcGVjX2xlbjsKQEAgLTEyOSwyNiAmIzQzOzExNSwxOCBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJCQkJYnJlYWs7CiAJCQkJc3BlY19sZW4gPSBvcHRpbmZvLSZndDtvcHRzW3RlbXBdICZhbXA7IDB4MDBGRjsKIAotCQkJCWlmIChzcGVjX2xlbiAhPSAweDAwRkYgJmFtcDsmYW1wOyBzcGVjX2xlbiAhPSAqbHApIHsKLQkJCQkJcHJfZGVidWcoJiMzNDtMYmFkICUwMlggJTA0WFxuJiMzNDssICpscCwKLQkJCQkJCSBzcGVjX2xlbik7CiYjNDM7CQkJCWlmIChzcGVjX2xlbiAhPSAweDAwRkYgJmFtcDsmYW1wOyBzcGVjX2xlbiAhPSAqbHApCiAJCQkJCXJldHVybiBmYWxzZTsKLQkJCQl9Ci0JCQkJcHJfZGVidWcoJiMzNDtMb2sgJiMzNDspOwomIzQzOwogCQkJCW9wdGxlbiA9ICpscCAmIzQzOyAyOwogCQkJfSBlbHNlIHsKLQkJCQlwcl9kZWJ1ZygmIzM0O1BhZDFcbiYjMzQ7KTsKIAkJCQlvcHRsZW4gPSAxOwogCQkJfQogCi0JCQkvKiBTdGVwIHRvIHRoZSBuZXh0ICovCi0JCQlwcl9kZWJ1ZygmIzM0O2xlbiUwNFhcbiYjMzQ7LCBvcHRsZW4pOwotCiAJCQlpZiAoKHB0ciAmZ3Q7IHNrYi0mZ3Q7bGVuIC0gb3B0bGVuIHx8IGhkcmxlbiAmbHQ7IG9wdGxlbikgJmFtcDsmYW1wOwotCQkJICAgIHRlbXAgJmx0OyBvcHRpbmZvLSZndDtvcHRzbnIgLSAxKSB7Ci0JCQkJcHJfZGVidWcoJiMzNDtuZXcgcG9pbnRlciBpcyB0b28gbGFyZ2UhXG4mIzM0Oyk7CiYjNDM7CQkJICAgIHRlbXAgJmx0OyBvcHRpbmZvLSZndDtvcHRzbnIgLSAxKQogCQkJCWJyZWFrOwotCQkJfQomIzQzOwogCQkJcHRyICYjNDM7PSBvcHRsZW47CiAJCQloZHJsZW4gLT0gb3B0bGVuOwogCQl9CkBAIC0xNjYsMTYgJiM0MzsxNDQsMTYgQEAgc3RhdGljIGludCBoYmhfbXQ2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogCWNvbnN0IHN0cnVjdCBpcDZ0X29wdHMgKm9wdHNpbmZvID0gcGFyLSZndDttYXRjaGluZm87CiAKIAlpZiAob3B0c2luZm8tJmd0O2ludmZsYWdzICZhbXA7IH5JUDZUX09QVFNfSU5WX01BU0spIHsKLQkJcHJfZGVidWcoJiMzNDt1bmtub3duIGZsYWdzICVYXG4mIzM0Oywgb3B0c2luZm8tJmd0O2ludmZsYWdzKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDt1bmtub3duIGZsYWdzICVYXG4mIzM0Oywgb3B0c2luZm8tJmd0O2ludmZsYWdzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChvcHRzaW5mby0mZ3Q7b3B0c25yICZndDsgSVA2VF9PUFRTX09QVFNOUikgewotCQlwcl9kZWJ1ZygmIzM0O3RvbyBtYW55IHN1cHBvcnRlZCBvcHRzIHNwZWNpZmllZFxuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3RvbyBtYW55IHN1cHBvcnRlZCBvcHRzIHNwZWNpZmllZFxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAob3B0c2luZm8tJmd0O2ZsYWdzICZhbXA7IElQNlRfT1BUU19OU1RSSUNUKSB7Ci0JCXByX2RlYnVnKCYjMzQ7Tm90IHN0cmljdCAtIG5vdCBpbXBsZW1lbnRlZCYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtOb3Qgc3RyaWN0IC0gbm90IGltcGxlbWVudGVkJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X21oLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9taC5jCmluZGV4IGZkNDkyYjY5YWNiYzAuLmJhNmRjYzc3OTFhMDkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X21oLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbWguYwpAQCAtNDIsMTQgJiM0Mzs0MiwxMSBAQCBzdGF0aWMgYm9vbCBtaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCWlmIChtaCA9PSBOVUxMKSB7CiAJCS8qIFdlJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZQogCQkgICBjYW4mIzM5O3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLiAqLwotCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGV2aWwgTUggdGlueWdyYW0uXG4mIzM0Oyk7CiAJCXBhci0mZ3Q7aG90ZHJvcCA9IHRydWU7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlpZiAobWgtJmd0O2lwNm1oX3Byb3RvICE9IElQUFJPVE9fTk9ORSkgewotCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGludmFsaWQgTUggUGF5bG9hZCBQcm90bzogJXVcbiYjMzQ7LAotCQkJIG1oLSZndDtpcDZtaF9wcm90byk7CiAJCXBhci0mZ3Q7aG90ZHJvcCA9IHRydWU7CiAJCXJldHVybiBmYWxzZTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnBmaWx0ZXIuYwppbmRleCA2N2M4N2E4OGNkZTRmLi5hZjhkMTBkNDlkZTgxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmMKQEAgLTExOCw3ICYjNDM7MTE4LDcgQEAgc3RhdGljIGludCBycGZpbHRlcl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAogCWlmIChzdHJjbXAocGFyLSZndDt0YWJsZSwgJiMzNDttYW5nbGUmIzM0OykgIT0gMCAmYW1wOyZhbXA7CiAJICAgIHN0cmNtcChwYXItJmd0O3RhYmxlLCAmIzM0O3JhdyYjMzQ7KSAhPSAwKSB7Ci0JCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtvbmx5IHZhbGlkIGluIFwmIzM5O3Jhd1wmIzM5OyBvciBcJiMzOTttYW5nbGVcJiMzOTsgdGFibGUsIG5vdCBcJiMzOTslc1wmIzM5O1xuJiMzNDssCiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7b25seSB2YWxpZCBpbiBcJiMzOTtyYXdcJiMzOTsgb3IgXCYjMzk7bWFuZ2xlXCYjMzk7IHRhYmxlXG4mIzM0OywKIAkJCQkgICAgcGFyLSZndDt0YWJsZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jCmluZGV4IDI3OGI1Mjc1MmYzNjQuLjBjMDFhYzI3NDZkMWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYwpAQCAtMTU1LDE4ICYjNDM7MTU1LDE4IEBAIHN0YXRpYyBpbnQgcnRfbXQ2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogCWNvbnN0IHN0cnVjdCBpcDZ0X3J0ICpydGluZm8gPSBwYXItJmd0O21hdGNoaW5mbzsKIAogCWlmIChydGluZm8tJmd0O2ludmZsYWdzICZhbXA7IH5JUDZUX1JUX0lOVl9NQVNLKSB7Ci0JCXByX2RlYnVnKCYjMzQ7dW5rbm93biBmbGFncyAlWFxuJiMzNDssIHJ0aW5mby0mZ3Q7aW52ZmxhZ3MpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3Vua25vd24gZmxhZ3MgJVhcbiYjMzQ7LCBydGluZm8tJmd0O2ludmZsYWdzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChydGluZm8tJmd0O2FkZHJuciAmZ3Q7IElQNlRfUlRfSE9QUykgewotCQlwcl9kZWJ1ZygmIzM0O3RvbyBtYW55IGFkZHJlc3NlcyBzcGVjaWZpZWRcbiYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDt0b28gbWFueSBhZGRyZXNzZXMgc3BlY2lmaWVkXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoKHJ0aW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgKElQNlRfUlRfUkVTIHwgSVA2VF9SVF9GU1RfTUFTSykpICZhbXA7JmFtcDsKIAkgICAgKCEocnRpbmZvLSZndDtmbGFncyAmYW1wOyBJUDZUX1JUX1RZUCkgfHwKIAkgICAgIChydGluZm8tJmd0O3J0X3R5cGUgIT0gMCkgfHwKIAkgICAgIChydGluZm8tJmd0O2ludmZsYWdzICZhbXA7IElQNlRfUlRfSU5WX1RZUCkpKSB7Ci0JCXByX2RlYnVnKCYjMzQ7YC0tcnQtdHlwZSAwJiMzOTsgcmVxdWlyZWQgYmVmb3JlIGAtLXJ0LTAtKiYjMzk7JiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2AtLXJ0LXR5cGUgMCYjMzk7IHJlcXVpcmVkIGJlZm9yZSBgLS1ydC0wLSomIzM5OyYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMKaW5kZXggMTQ5NGIzZWUzMGUxMS4uNGU0NDM2YTkxMDRiNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuYwpAQCAtODcsOCAmIzQzOzg3LDcgQEAgc3RhdGljIGludCBjb25uc2VjbWFya190Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcikKIAogCWlmIChzdHJjbXAocGFyLSZndDt0YWJsZSwgJiMzNDttYW5nbGUmIzM0OykgIT0gMCAmYW1wOyZhbXA7CiAJICAgIHN0cmNtcChwYXItJmd0O3RhYmxlLCAmIzM0O3NlY3VyaXR5JiMzNDspICE9IDApIHsKLQkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O29ubHkgdmFsaWQgaW4gXCYjMzk7bWFuZ2xlXCYjMzk7IG9yIFwmIzM5O3NlY3VyaXR5XCYjMzk7IHRhYmxlLCBub3QgXCYjMzk7JXNcJiMzOTtcbiYjMzQ7LAotCQkJCSAgICBwYXItJmd0O3RhYmxlKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtvbmx5IHZhbGlkIGluIFwmIzM5O21hbmdsZVwmIzM5OyBvciBcJiMzOTtzZWN1cml0eVwmIzM5OyB0YWJsZVxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfQ1QuYyBiL25ldC9uZXRmaWx0ZXIveHRfQ1QuYwppbmRleCBlNzg2NjBkZmRmNGI2Li45MTMyNjAxNGFkZTFjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0NULmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9DVC5jCkBAIC0xOTUsNyAmIzQzOzE5NSw4IEBAIHN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsCiAJCWdvdG8gZXJyMzsKIAl9CiAKLQlpZiAoaW5mby0mZ3Q7aGVscGVyWzBdKSB7CiYjNDM7CWlmIChpbmZvLSZndDtoZWxwZXJbMF0gJmFtcDsmYW1wOwomIzQzOwkgICAgc3RybmxlbihpbmZvLSZndDtoZWxwZXIsIHNpemVvZihpbmZvLSZndDtoZWxwZXIpKSAmbHQ7IHNpemVvZihpbmZvLSZndDtoZWxwZXIpKSB7CiAJCWlmIChzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpID09IHNpemVvZihpbmZvLSZndDtoZWxwZXIpKSB7CiAJCQlyZXQgPSAtRU5BTUVUT09MT05HOwogCQkJZ290byBlcnIzOwpAQCAtMjA2LDcgJiM0MzsyMDcsOCBAQCBzdGF0aWMgaW50IHh0X2N0X3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyLAogCQkJZ290byBlcnIzOwogCX0KIAotCWlmIChpbmZvLSZndDt0aW1lb3V0WzBdKSB7CiYjNDM7CWlmIChpbmZvLSZndDt0aW1lb3V0WzBdICZhbXA7JmFtcDsKJiM0MzsJICAgIHN0cm5sZW4oaW5mby0mZ3Q7dGltZW91dCwgc2l6ZW9mKGluZm8tJmd0O3RpbWVvdXQpKSAmbHQ7IHNpemVvZihpbmZvLSZndDt0aW1lb3V0KSkgewogCQlpZiAoc3RybmxlbihpbmZvLSZndDt0aW1lb3V0LCBzaXplb2YoaW5mby0mZ3Q7dGltZW91dCkpID09IHNpemVvZihpbmZvLSZndDt0aW1lb3V0KSkgewogCQkJcmV0ID0gLUVOQU1FVE9PTE9ORzsKIAkJCWdvdG8gZXJyNDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jCmluZGV4IGJmY2YyZDQ0ZTkzZGIuLjE1YjY5OGVhOThhYTYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYwpAQCAtMTAyLDggJiM0MzsxMDIsNiBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZXhwaXJlZChzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKIHsKIAlzdHJ1Y3QgaWRsZXRpbWVyX3RnICp0aW1lciA9IHRpbWVyX2NvbnRhaW5lcl9vZih0aW1lciwgdCwgdGltZXIpOwogCi0JcHJfZGVidWcoJiMzNDt0aW1lciAlcyBleHBpcmVkXG4mIzM0OywgdGltZXItJmd0O2F0dHIuYXR0ci5uYW1lKTsKLQogCXNjaGVkdWxlX3dvcmsoJmFtcDt0aW1lci0mZ3Q7d29yayk7CiB9CiAKQEAgLTExMSw3ICYjNDM7MTA5LDYgQEAgc3RhdGljIHZvaWQgaWRsZXRpbWVyX3RnX2FsYXJtcHJvYyhzdHJ1Y3QgYWxhcm0gKmFsYXJtLCBrdGltZV90IG5vdykKIHsKIAlzdHJ1Y3QgaWRsZXRpbWVyX3RnICp0aW1lciA9IGFsYXJtLSZndDtkYXRhOwogCi0JcHJfZGVidWcoJiMzNDthbGFybSAlcyBleHBpcmVkXG4mIzM0OywgdGltZXItJmd0O2F0dHIuYXR0ci5uYW1lKTsKIAlzY2hlZHVsZV93b3JrKCZhbXA7dGltZXItJmd0O3dvcmspOwogfQogCkBAIC0xNzEsNyAmIzQzOzE2OCw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8pCiAKIAlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShpZGxldGltZXJfdGdfa29iaiwgJmFtcDtpbmZvLSZndDt0aW1lci0mZ3Q7YXR0ci5hdHRyKTsKIAlpZiAocmV0ICZsdDsgMCkgewotCQlwcl9kZWJ1ZygmIzM0O2NvdWxkbiYjMzk7dCBhZGQgZmlsZSB0byBzeXNmcyYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtjb3VsZG4mIzM5O3QgYWRkIGZpbGUgdG8gc3lzZnMmIzM0Oyk7CiAJCWdvdG8gb3V0X2ZyZWVfYXR0cjsKIAl9CiAKQEAgLTIyMCw3ICYjNDM7MjE3LDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbykKIAogCXJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKGlkbGV0aW1lcl90Z19rb2JqLCAmYW1wO2luZm8tJmd0O3RpbWVyLSZndDthdHRyLmF0dHIpOwogCWlmIChyZXQgJmx0OyAwKSB7Ci0JCXByX2RlYnVnKCYjMzQ7Y291bGRuJiMzOTt0IGFkZCBmaWxlIHRvIHN5c2ZzJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2NvdWxkbiYjMzk7dCBhZGQgZmlsZSB0byBzeXNmcyYjMzQ7KTsKIAkJZ290byBvdXRfZnJlZV9hdHRyOwogCX0KIApAQCAtMjI4LDcgJiM0MzsyMjUsNiBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvKQogCWtvYmplY3RfdWV2ZW50KGlkbGV0aW1lcl90Z19rb2JqLEtPQkpfQUREKTsKIAogCWxpc3RfYWRkKCZhbXA7aW5mby0mZ3Q7dGltZXItJmd0O2VudHJ5LCAmYW1wO2lkbGV0aW1lcl90Z19saXN0KTsKLQlwcl9kZWJ1ZygmIzM0O3RpbWVyIHR5cGUgdmFsdWUgaXMgJXUmIzM0OywgaW5mby0mZ3Q7dGltZXJfdHlwZSk7CiAJaW5mby0mZ3Q7dGltZXItJmd0O3RpbWVyX3R5cGUgPSBpbmZvLSZndDt0aW1lcl90eXBlOwogCWluZm8tJmd0O3RpbWVyLSZndDtyZWZjbnQgPSAxOwogCkBAIC0yNjMsOSAmIzQzOzI1OSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaWRsZXRpbWVyX3RnX3RhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogewogCWNvbnN0IHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbyA9IHBhci0mZ3Q7dGFyZ2luZm87CiAKLQlwcl9kZWJ1ZygmIzM0O3Jlc2V0dGluZyB0aW1lciAlcywgdGltZW91dCBwZXJpb2QgJXVcbiYjMzQ7LAotCQkgaW5mby0mZ3Q7bGFiZWwsIGluZm8tJmd0O3RpbWVvdXQpOwotCiAJbW9kX3RpbWVyKCZhbXA7aW5mby0mZ3Q7dGltZXItJmd0O3RpbWVyLAogCQkgIHNlY3NfdG9famlmZmllcyhpbmZvLSZndDt0aW1lb3V0KSAmIzQzOyBqaWZmaWVzKTsKIApAQCAtMjgwLDkgJiM0MzsyNzMsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIHsKIAljb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItJmd0O3RhcmdpbmZvOwogCi0JcHJfZGVidWcoJiMzNDtyZXNldHRpbmcgdGltZXIgJXMsIHRpbWVvdXQgcGVyaW9kICV1XG4mIzM0OywKLQkJIGluZm8tJmd0O2xhYmVsLCBpbmZvLSZndDt0aW1lb3V0KTsKLQogCWlmIChpbmZvLSZndDt0aW1lci0mZ3Q7dGltZXJfdHlwZSAmYW1wOyBYVF9JRExFVElNRVJfQUxBUk0pIHsKIAkJaWRsZXRpbWVyX3N0YXJ0X2FsYXJtX3NlYyhpbmZvLSZndDt0aW1lciwgaW5mby0mZ3Q7dGltZW91dCk7CiAJfSBlbHNlIHsKQEAgLTI5NiwxNyAmIzQzOzI4NiwxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2hlbHBlcihzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8pCiB7CiAJaWYgKGluZm8tJmd0O3RpbWVvdXQgPT0gMCkgewotCQlwcl9kZWJ1ZygmIzM0O3RpbWVvdXQgdmFsdWUgaXMgemVyb1xuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3RpbWVvdXQgdmFsdWUgaXMgemVyb1xuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGluZm8tJmd0O3RpbWVvdXQgJmd0Oz0gSU5UX01BWCAvIDEwMDApIHsKLQkJcHJfZGVidWcoJiMzNDt0aW1lb3V0IHZhbHVlIGlzIHRvbyBiaWdcbiYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDt0aW1lb3V0IHZhbHVlIGlzIHRvbyBiaWdcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChpbmZvLSZndDtsYWJlbFswXSA9PSAmIzM5O1wwJiMzOTsgfHwKIAkgICAgc3RybmxlbihpbmZvLSZndDtsYWJlbCwKIAkJICAgIE1BWF9JRExFVElNRVJfTEFCRUxfU0laRSkgPT0gTUFYX0lETEVUSU1FUl9MQUJFTF9TSVpFKSB7Ci0JCXByX2RlYnVnKCYjMzQ7bGFiZWwgaXMgZW1wdHkgb3Igbm90IG51bC10ZXJtaW5hdGVkXG4mIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7bGFiZWwgaXMgZW1wdHkgb3Igbm90IG51bC10ZXJtaW5hdGVkXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKQEAgLTMxOCwzNCAmIzQzOzMwOCwyNSBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQogCXN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbyA9IHBhci0mZ3Q7dGFyZ2luZm87CiAJaW50IHJldDsKIAotCXByX2RlYnVnKCYjMzQ7Y2hlY2tlbnRyeSB0YXJnaW5mbyVzXG4mIzM0OywgaW5mby0mZ3Q7bGFiZWwpOwotCiAJcmV0ID0gaWRsZXRpbWVyX3RnX2hlbHBlcihpbmZvKTsKIAlpZihyZXQgJmx0OyAwKQotCXsKLQkJcHJfZGVidWcoJiMzNDtjaGVja2VudHJ5IGhlbHBlciByZXR1cm4gaW52YWxpZFxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAJbXV0ZXhfbG9jaygmYW1wO2xpc3RfbXV0ZXgpOwogCiAJaW5mby0mZ3Q7dGltZXIgPSBfX2lkbGV0aW1lcl90Z19maW5kX2J5X2xhYmVsKGluZm8tJmd0O2xhYmVsKTsKIAlpZiAoaW5mby0mZ3Q7dGltZXIpIHsKIAkJaWYgKGluZm8tJmd0O3RpbWVyLSZndDt0aW1lcl90eXBlICZhbXA7IFhUX0lETEVUSU1FUl9BTEFSTSkgewotCQkJcHJfZGVidWcoJiMzNDtBZGRpbmcvUmVwbGFjaW5nIHJ1bGUgd2l0aCBzYW1lIGxhYmVsIGFuZCBkaWZmZXJlbnQgdGltZXIgdHlwZSBpcyBub3QgYWxsb3dlZFxuJiMzNDspOwogCQkJbXV0ZXhfdW5sb2NrKCZhbXA7bGlzdF9tdXRleCk7CiYjNDM7CQkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O0FkZGluZy9SZXBsYWNpbmcgcnVsZSB3aXRoIHNhbWUgbGFiZWwgYW5kIGRpZmZlcmVudCB0aW1lciB0eXBlIGlzIG5vdCBhbGxvd2VkXG4mIzM0Oyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCWluZm8tJmd0O3RpbWVyLSZndDtyZWZjbnQmIzQzOyYjNDM7OwogCQltb2RfdGltZXIoJmFtcDtpbmZvLSZndDt0aW1lci0mZ3Q7dGltZXIsCiAJCQkgIHNlY3NfdG9famlmZmllcyhpbmZvLSZndDt0aW1lb3V0KSAmIzQzOyBqaWZmaWVzKTsKLQotCQlwcl9kZWJ1ZygmIzM0O2luY3JlYXNlZCByZWZjbnQgb2YgdGltZXIgJXMgdG8gJXVcbiYjMzQ7LAotCQkJIGluZm8tJmd0O2xhYmVsLCBpbmZvLSZndDt0aW1lci0mZ3Q7cmVmY250KTsKIAl9IGVsc2UgewogCQlyZXQgPSBpZGxldGltZXJfdGdfY3JlYXRlKGluZm8pOwogCQlpZiAocmV0ICZsdDsgMCkgewotCQkJcHJfZGVidWcoJiMzNDtmYWlsZWQgdG8gY3JlYXRlIHRpbWVyXG4mIzM0Oyk7CiAJCQltdXRleF91bmxvY2soJmFtcDtsaXN0X211dGV4KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTM2MCwzMCAmIzQzOzM0MSwyMyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQogCXN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbyA9IHBhci0mZ3Q7dGFyZ2luZm87CiAJaW50IHJldDsKIAotCXByX2RlYnVnKCYjMzQ7Y2hlY2tlbnRyeSB0YXJnaW5mbyVzXG4mIzM0OywgaW5mby0mZ3Q7bGFiZWwpOwotCiAJaWYgKGluZm8tJmd0O3NlbmRfbmxfbXNnKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlyZXQgPSBpZGxldGltZXJfdGdfaGVscGVyKChzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKilpbmZvKTsKIAlpZihyZXQgJmx0OyAwKQotCXsKLQkJcHJfZGVidWcoJiMzNDtjaGVja2VudHJ5IGhlbHBlciByZXR1cm4gaW52YWxpZFxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKLQlpZiAoaW5mby0mZ3Q7dGltZXJfdHlwZSAmZ3Q7IFhUX0lETEVUSU1FUl9BTEFSTSkgewotCQlwcl9kZWJ1ZygmIzM0O2ludmFsaWQgdmFsdWUgZm9yIHRpbWVyIHR5cGVcbiYjMzQ7KTsKJiM0MzsJaWYgKGluZm8tJmd0O3RpbWVyX3R5cGUgJmd0OyBYVF9JRExFVElNRVJfQUxBUk0pCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAogCW11dGV4X2xvY2soJmFtcDtsaXN0X211dGV4KTsKIAogCWluZm8tJmd0O3RpbWVyID0gX19pZGxldGltZXJfdGdfZmluZF9ieV9sYWJlbChpbmZvLSZndDtsYWJlbCk7CiAJaWYgKGluZm8tJmd0O3RpbWVyKSB7CiAJCWlmIChpbmZvLSZndDt0aW1lci0mZ3Q7dGltZXJfdHlwZSAhPSBpbmZvLSZndDt0aW1lcl90eXBlKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O0FkZGluZy9SZXBsYWNpbmcgcnVsZSB3aXRoIHNhbWUgbGFiZWwgYW5kIGRpZmZlcmVudCB0aW1lciB0eXBlIGlzIG5vdCBhbGxvd2VkXG4mIzM0Oyk7CiAJCQltdXRleF91bmxvY2soJmFtcDtsaXN0X211dGV4KTsKJiM0MzsJCQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7QWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcbiYjMzQ7KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTM5MywyMSAmIzQzOzM2NywxNSBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQogCQkJa3RpbWVfdCB0b3V0ID0gYWxhcm1fZXhwaXJlc19yZW1haW5pbmcoJmFtcDtpbmZvLSZndDt0aW1lci0mZ3Q7YWxhcm0pOwogCQkJc3RydWN0IHRpbWVzcGVjNjQga3RpbWVzcGVjID0ga3RpbWVfdG9fdGltZXNwZWM2NCh0b3V0KTsKIAotCQkJaWYgKGt0aW1lc3BlYy50dl9zZWMgJmd0OyAwKSB7Ci0JCQkJcHJfZGVidWcoJiMzNDt0aW1lX2V4cGlyeV9yZW1haW5pbmcgJWxsZFxuJiMzNDssCi0JCQkJCSBrdGltZXNwZWMudHZfc2VjKTsKJiM0MzsJCQlpZiAoa3RpbWVzcGVjLnR2X3NlYyAmZ3Q7IDApCiAJCQkJaWRsZXRpbWVyX3N0YXJ0X2FsYXJtX2t0aW1lKGluZm8tJmd0O3RpbWVyLCB0b3V0KTsKLQkJCX0KIAkJfSBlbHNlIHsKIAkJCQltb2RfdGltZXIoJmFtcDtpbmZvLSZndDt0aW1lci0mZ3Q7dGltZXIsCiAJCQkJCXNlY3NfdG9famlmZmllcyhpbmZvLSZndDt0aW1lb3V0KSAmIzQzOyBqaWZmaWVzKTsKIAkJfQotCQlwcl9kZWJ1ZygmIzM0O2luY3JlYXNlZCByZWZjbnQgb2YgdGltZXIgJXMgdG8gJXVcbiYjMzQ7LAotCQkJIGluZm8tJmd0O2xhYmVsLCBpbmZvLSZndDt0aW1lci0mZ3Q7cmVmY250KTsKIAl9IGVsc2UgewogCQlyZXQgPSBpZGxldGltZXJfdGdfY3JlYXRlX3YxKGluZm8pOwogCQlpZiAocmV0ICZsdDsgMCkgewotCQkJcHJfZGVidWcoJiMzNDtmYWlsZWQgdG8gY3JlYXRlIHRpbWVyXG4mIzM0Oyk7CiAJCQltdXRleF91bmxvY2soJmFtcDtsaXN0X211dGV4KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTQyMSwxOSAmIzQzOzM4OSwxMyBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtICpwYXIpCiB7CiAJY29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLSZndDt0YXJnaW5mbzsKIAotCXByX2RlYnVnKCYjMzQ7ZGVzdHJveSB0YXJnaW5mbyAlc1xuJiMzNDssIGluZm8tJmd0O2xhYmVsKTsKLQogCW11dGV4X2xvY2soJmFtcDtsaXN0X211dGV4KTsKIAogCWlmICgtLWluZm8tJmd0O3RpbWVyLSZndDtyZWZjbnQgJmd0OyAwKSB7Ci0JCXByX2RlYnVnKCYjMzQ7ZGVjcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxuJiMzNDssCi0JCQkgaW5mby0mZ3Q7bGFiZWwsIGluZm8tJmd0O3RpbWVyLSZndDtyZWZjbnQpOwogCQltdXRleF91bmxvY2soJmFtcDtsaXN0X211dGV4KTsKIAkJcmV0dXJuOwogCX0KIAotCXByX2RlYnVnKCYjMzQ7ZGVsZXRpbmcgdGltZXIgJXNcbiYjMzQ7LCBpbmZvLSZndDtsYWJlbCk7Ci0KIAlsaXN0X2RlbCgmYW1wO2luZm8tJmd0O3RpbWVyLSZndDtlbnRyeSk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7bGlzdF9tdXRleCk7CiAKQEAgLTQ0OCwxOSAmIzQzOzQxMCwxMyBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZGVzdHJveV92MShjb25zdCBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtICpwYXIpCiB7CiAJY29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvID0gcGFyLSZndDt0YXJnaW5mbzsKIAotCXByX2RlYnVnKCYjMzQ7ZGVzdHJveSB0YXJnaW5mbyAlc1xuJiMzNDssIGluZm8tJmd0O2xhYmVsKTsKLQogCW11dGV4X2xvY2soJmFtcDtsaXN0X211dGV4KTsKIAogCWlmICgtLWluZm8tJmd0O3RpbWVyLSZndDtyZWZjbnQgJmd0OyAwKSB7Ci0JCXByX2RlYnVnKCYjMzQ7ZGVjcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxuJiMzNDssCi0JCQkgaW5mby0mZ3Q7bGFiZWwsIGluZm8tJmd0O3RpbWVyLSZndDtyZWZjbnQpOwogCQltdXRleF91bmxvY2soJmFtcDtsaXN0X211dGV4KTsKIAkJcmV0dXJuOwogCX0KIAotCXByX2RlYnVnKCYjMzQ7ZGVsZXRpbmcgdGltZXIgJXNcbiYjMzQ7LCBpbmZvLSZndDtsYWJlbCk7Ci0KIAlsaXN0X2RlbCgmYW1wO2luZm8tJmd0O3RpbWVyLSZndDtlbnRyeSk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7bGlzdF9tdXRleCk7CiAKQEAgLTUzNCw3ICYjNDM7NDkwLDcgQEAgc3RhdGljIGludCBfX2luaXQgaWRsZXRpbWVyX3RnX2luaXQodm9pZCkKIAlpZGxldGltZXJfdGdfY2xhc3MgPSBjbGFzc19jcmVhdGUoJiMzNDt4dF9pZGxldGltZXImIzM0Oyk7CiAJZXJyID0gUFRSX0VSUihpZGxldGltZXJfdGdfY2xhc3MpOwogCWlmIChJU19FUlIoaWRsZXRpbWVyX3RnX2NsYXNzKSkgewotCQlwcl9kZWJ1ZygmIzM0O2NvdWxkbiYjMzk7dCByZWdpc3RlciBkZXZpY2UgY2xhc3NcbiYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtjb3VsZG4mIzM5O3QgcmVnaXN0ZXIgZGV2aWNlIGNsYXNzXG4mIzM0Oyk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNTQyLDcgJiM0Mzs0OTgsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBpZGxldGltZXJfdGdfaW5pdCh2b2lkKQogCQkJCQkgICAgTUtERVYoMCwgMCksIE5VTEwsICYjMzQ7dGltZXJzJiMzNDspOwogCWVyciA9IFBUUl9FUlIoaWRsZXRpbWVyX3RnX2RldmljZSk7CiAJaWYgKElTX0VSUihpZGxldGltZXJfdGdfZGV2aWNlKSkgewotCQlwcl9kZWJ1ZygmIzM0O2NvdWxkbiYjMzk7dCByZWdpc3RlciBzeXN0ZW0gZGV2aWNlXG4mIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7Y291bGRuJiMzOTt0IHJlZ2lzdGVyIHN5c3RlbSBkZXZpY2VcbiYjMzQ7KTsKIAkJZ290byBvdXRfY2xhc3M7CiAJfQogCkBAIC01NTEsNyAmIzQzOzUwNyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGlkbGV0aW1lcl90Z19pbml0KHZvaWQpCiAJZXJyID0geHRfcmVnaXN0ZXJfdGFyZ2V0cyhpZGxldGltZXJfdGcsIEFSUkFZX1NJWkUoaWRsZXRpbWVyX3RnKSk7CiAKIAlpZiAoZXJyICZsdDsgMCkgewotCQlwcl9kZWJ1ZygmIzM0O2NvdWxkbiYjMzk7dCByZWdpc3RlciB4dCB0YXJnZXRcbiYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtjb3VsZG4mIzM5O3QgcmVnaXN0ZXIgeHQgdGFyZ2V0XG4mIzM0Oyk7CiAJCWdvdG8gb3V0X2RldjsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfTE9HLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0xPRy5jCmluZGV4IGYzOTI0NGY5YzBlZDkuLmRlM2YxNzY3OTJhMDcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTE9HLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9MT0cuYwpAQCAtNTAsMTIgJiM0Mzs1MCwxMiBAQCBzdGF0aWMgaW50IGxvZ190Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAobG9naW5mby0mZ3Q7bGV2ZWwgJmd0Oz0gOCkgewotCQlwcl9kZWJ1ZygmIzM0O2xldmVsICV1ICZndDs9IDhcbiYjMzQ7LCBsb2dpbmZvLSZndDtsZXZlbCk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7bGV2ZWwgJXUgJmd0Oz0gOFxuJiMzNDssIGxvZ2luZm8tJmd0O2xldmVsKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGxvZ2luZm8tJmd0O3ByZWZpeFtzaXplb2YobG9naW5mby0mZ3Q7cHJlZml4KS0xXSAhPSAmIzM5O1wwJiMzOTspIHsKLQkJcHJfZGVidWcoJiMzNDtwcmVmaXggaXMgbm90IG51bGwtdGVybWluYXRlZFxuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3ByZWZpeCBpcyBub3QgbnVsbC10ZXJtaW5hdGVkXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9NQVNRVUVSQURFLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuYwppbmRleCBlYWUwNWMxNzgzMzY3Li5jZWE0ODhjZWM1NDQ1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuYwpAQCAtMjEsMTEgJiM0MzsyMSwxMSBAQCBzdGF0aWMgaW50IG1hc3F1ZXJhZGVfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCiAJY29uc3Qgc3RydWN0IG5mX25hdF9pcHY0X211bHRpX3JhbmdlX2NvbXBhdCAqbXIgPSBwYXItJmd0O3RhcmdpbmZvOwogCiAJaWYgKG1yLSZndDtyYW5nZVswXS5mbGFncyAmYW1wOyBORl9OQVRfUkFOR0VfTUFQX0lQUykgewotCQlwcl9kZWJ1ZygmIzM0O2JhZCBNQVBfSVBTLlxuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2JhZCBNQVBfSVBTLlxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKG1yLSZndDtyYW5nZXNpemUgIT0gMSkgewotCQlwcl9kZWJ1ZygmIzM0O2JhZCByYW5nZXNpemUgJXVcbiYjMzQ7LCBtci0mZ3Q7cmFuZ2VzaXplKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtiYWQgcmFuZ2VzaXplICV1XG4mIzM0OywgbXItJmd0O3Jhbmdlc2l6ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gbmZfY3RfbmV0bnNfZ2V0KHBhci0mZ3Q7bmV0LCBwYXItJmd0O2ZhbWlseSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jIGIvbmV0L25ldGZpbHRlci94dF9ORVRNQVAuYwppbmRleCBjYjJlZTgwZDg0ZmE4Li44Yzg2ZDlhNDMzNzNhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfTkVUTUFQLmMKQEAgLTEwNiwxMSAmIzQzOzEwNiwxMSBAQCBzdGF0aWMgaW50IG5ldG1hcF90ZzRfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCiAJY29uc3Qgc3RydWN0IG5mX25hdF9pcHY0X211bHRpX3JhbmdlX2NvbXBhdCAqbXIgPSBwYXItJmd0O3RhcmdpbmZvOwogCiAJaWYgKCEobXItJmd0O3JhbmdlWzBdLmZsYWdzICZhbXA7IE5GX05BVF9SQU5HRV9NQVBfSVBTKSkgewotCQlwcl9kZWJ1ZygmIzM0O2JhZCBNQVBfSVBTLlxuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2JhZCBNQVBfSVBTLlxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKG1yLSZndDtyYW5nZXNpemUgIT0gMSkgewotCQlwcl9kZWJ1ZygmIzM0O2JhZCByYW5nZXNpemUgJXUuXG4mIzM0OywgbXItJmd0O3Jhbmdlc2l6ZSk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7YmFkIHJhbmdlc2l6ZSAldS5cbiYjMzQ7LCBtci0mZ3Q7cmFuZ2VzaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiBuZl9jdF9uZXRuc19nZXQocGFyLSZndDtuZXQsIHBhci0mZ3Q7ZmFtaWx5KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfUkVESVJFQ1QuYyBiL25ldC9uZXRmaWx0ZXIveHRfUkVESVJFQ1QuYwppbmRleCBmZjY2YjU2YTNmOTdkLi4yN2JjMDU0NWM0Zjc0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X1JFRElSRUNULmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jCkBAIC01MSwxMSAmIzQzOzUxLDExIEBAIHN0YXRpYyBpbnQgcmVkaXJlY3RfdGc0X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQogCWNvbnN0IHN0cnVjdCBuZl9uYXRfaXB2NF9tdWx0aV9yYW5nZV9jb21wYXQgKm1yID0gcGFyLSZndDt0YXJnaW5mbzsKIAogCWlmIChtci0mZ3Q7cmFuZ2VbMF0uZmxhZ3MgJmFtcDsgTkZfTkFUX1JBTkdFX01BUF9JUFMpIHsKLQkJcHJfZGVidWcoJiMzNDtiYWQgTUFQX0lQUy5cbiYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtiYWQgTUFQX0lQUy5cbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChtci0mZ3Q7cmFuZ2VzaXplICE9IDEpIHsKLQkJcHJfZGVidWcoJiMzNDtiYWQgcmFuZ2VzaXplICV1LlxuJiMzNDssIG1yLSZndDtyYW5nZXNpemUpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2JhZCByYW5nZXNpemUgJXUuXG4mIzM0OywgbXItJmd0O3Jhbmdlc2l6ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gbmZfY3RfbmV0bnNfZ2V0KHBhci0mZ3Q7bmV0LCBwYXItJmd0O2ZhbWlseSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1NFQ01BUksuYyBiL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jCmluZGV4IDViYzVlYTUwNWViOWUuLjM4ZThlNDEwYjRlODEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jCkBAIC03OSw4ICYjNDM7NzksNyBAQCBzZWNtYXJrX3RnX2NoZWNrKGNvbnN0IGNoYXIgKnRhYmxlLCBzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfaW5mb192MSAqaW5mbykKIAogCWlmIChzdHJjbXAodGFibGUsICYjMzQ7bWFuZ2xlJiMzNDspICE9IDAgJmFtcDsmYW1wOwogCSAgICBzdHJjbXAodGFibGUsICYjMzQ7c2VjdXJpdHkmIzM0OykgIT0gMCkgewotCQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7b25seSB2YWxpZCBpbiBcJiMzOTttYW5nbGVcJiMzOTsgb3IgXCYjMzk7c2VjdXJpdHlcJiMzOTsgdGFibGUsIG5vdCBcJiMzOTslc1wmIzM5O1xuJiMzNDssCi0JCQkJICAgIHRhYmxlKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtvbmx5IHZhbGlkIGluIFwmIzM5O21hbmdsZVwmIzM5OyBvciBcJiMzOTtzZWN1cml0eVwmIzM5OyB0YWJsZVxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfY2dyb3VwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nncm91cC5jCmluZGV4IDQzZDJhZTJiZTYyOGQuLmFjMWI3ZTcxY2Q3ZjUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9jZ3JvdXAuYwpAQCAtMzMsNyAmIzQzOzMzLDcgQEAgc3RhdGljIGludCBjZ3JvdXBfbXRfY2hlY2tfdjAoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFJU19FTkFCTEVEKENPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQpKSB7Ci0JCXByX2luZm8oTkVUX0NMU19DTEFTU0lEX0lOVkFMSURfTVNHKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoTkVUX0NMU19DTEFTU0lEX0lOVkFMSURfTVNHKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00OSw3ICYjNDM7NDksNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192MShjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIWluZm8tJmd0O2hhc19wYXRoICZhbXA7JmFtcDsgIWluZm8tJmd0O2hhc19jbGFzc2lkKSB7Ci0JCXByX2luZm8oJiMzNDt4dF9jZ3JvdXA6IG5vIHBhdGggb3IgY2xhc3NpZCBzcGVjaWZpZWRcbiYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDt4dF9jZ3JvdXA6IG5vIHBhdGggb3IgY2xhc3NpZCBzcGVjaWZpZWRcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC01OSw3ICYjNDM7NTksNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192MShjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAl9CiAKIAlpZiAoaW5mby0mZ3Q7aGFzX2NsYXNzaWQgJmFtcDsmYW1wOyAhSVNfRU5BQkxFRChDT05GSUdfQ0dST1VQX05FVF9DTEFTU0lEKSkgewotCQlwcl9pbmZvKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODksNyAmIzQzOzg5LDcgQEAgc3RhdGljIGludCBjZ3JvdXBfbXRfY2hlY2tfdjIoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFpbmZvLSZndDtoYXNfcGF0aCAmYW1wOyZhbXA7ICFpbmZvLSZndDtoYXNfY2xhc3NpZCkgewotCQlwcl9pbmZvKCYjMzQ7eHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXG4mIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7eHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTksNyAmIzQzOzk5LDcgQEAgc3RhdGljIGludCBjZ3JvdXBfbXRfY2hlY2tfdjIoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJfQogCiAJaWYgKGluZm8tJmd0O2hhc19jbGFzc2lkICZhbXA7JmFtcDsgIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHsKLQkJcHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZChORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfZXNwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jCmluZGV4IDJhMWMwYWQwZmYwNzkuLjY4ZmQ3NTg4NDI2OGEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfZXNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9lc3AuYwpAQCAtMjUsMTIgJiM0MzsyNSw3IEBAIE1PRFVMRV9BTElBUygmIzM0O2lwNnRfZXNwJiMzNDspOwogc3RhdGljIGlubGluZSBib29sCiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpCiB7Ci0JYm9vbCByOwotCXByX2RlYnVnKCYjMzQ7c3BpX21hdGNoOiVjIDB4JXggJmx0Oz0gMHgleCAmbHQ7PSAweCV4XG4mIzM0OywKLQkJIGludmVydCA/ICYjMzk7ISYjMzk7IDogJiMzOTsgJiMzOTssIG1pbiwgc3BpLCBtYXgpOwotCXIgPSAoc3BpICZndDs9IG1pbiAmYW1wOyZhbXA7IHNwaSAmbHQ7PSBtYXgpIF4gaW52ZXJ0OwotCXByX2RlYnVnKCYjMzQ7IHJlc3VsdCAlc1xuJiMzNDssIHIgPyAmIzM0O1BBU1MmIzM0OyA6ICYjMzQ7RkFJTEVEJiMzNDspOwotCXJldHVybiByOwomIzQzOwlyZXR1cm4gKHNwaSAmZ3Q7PSBtaW4gJmFtcDsmYW1wOyBzcGkgJmx0Oz0gbWF4KSBeIGludmVydDsKIH0KIAogc3RhdGljIGJvb2wgZXNwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKQEAgLTQ4LDcgJiM0Mzs0Myw2IEBAIHN0YXRpYyBib29sIGVzcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJCS8qIFdlJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZQogCQkgKiBjYW4mIzM5O3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLgogCQkgKi8KLQkJcHJfZGVidWcoJiMzNDtEcm9wcGluZyBldmlsIEVTUCB0aW55Z3JhbS5cbiYjMzQ7KTsKIAkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTYyLDcgJiM0Mzs1Niw3IEBAIHN0YXRpYyBpbnQgZXNwX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogCWNvbnN0IHN0cnVjdCB4dF9lc3AgKmVzcGluZm8gPSBwYXItJmd0O21hdGNoaW5mbzsKIAogCWlmIChlc3BpbmZvLSZndDtpbnZmbGFncyAmYW1wOyB+WFRfRVNQX0lOVl9NQVNLKSB7Ci0JCXByX2RlYnVnKCYjMzQ7dW5rbm93biBmbGFncyAlWFxuJiMzNDssIGVzcGluZm8tJmd0O2ludmZsYWdzKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDt1bmtub3duIGZsYWdzICVYXG4mIzM0OywgZXNwaW5mby0mZ3Q7aW52ZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaXBjb21wLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwY29tcC5jCmluZGV4IDQ3MmRhNjM5YTMyZTIuLjMyOTljMWVhNjBmOWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaXBjb21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9pcGNvbXAuYwpAQCAtMjksMTIgJiM0MzsyOSw3IEBAIE1PRFVMRV9BTElBUygmIzM0O2lwNnRfaXBjb21wJiMzNDspOwogc3RhdGljIGlubGluZSBib29sCiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpCiB7Ci0JYm9vbCByOwotCXByX2RlYnVnKCYjMzQ7c3BpX21hdGNoOiVjIDB4JXggJmx0Oz0gMHgleCAmbHQ7PSAweCV4XG4mIzM0OywKLQkJIGludmVydCA/ICYjMzk7ISYjMzk7IDogJiMzOTsgJiMzOTssIG1pbiwgc3BpLCBtYXgpOwotCXIgPSAoc3BpICZndDs9IG1pbiAmYW1wOyZhbXA7IHNwaSAmbHQ7PSBtYXgpIF4gaW52ZXJ0OwotCXByX2RlYnVnKCYjMzQ7IHJlc3VsdCAlc1xuJiMzNDssIHIgPyAmIzM0O1BBU1MmIzM0OyA6ICYjMzQ7RkFJTEVEJiMzNDspOwotCXJldHVybiByOwomIzQzOwlyZXR1cm4gKHNwaSAmZ3Q7PSBtaW4gJmFtcDsmYW1wOyBzcGkgJmx0Oz0gbWF4KSBeIGludmVydDsKIH0KIAogc3RhdGljIGJvb2wgY29tcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCkBAIC01Miw3ICYjNDM7NDcsNiBAQCBzdGF0aWMgYm9vbCBjb21wX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJLyogV2UmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlCiAJCSAqIGNhbiYjMzk7dC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuCiAJCSAqLwotCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGV2aWwgSVBDb21wIHRpbnlncmFtLlxuJiMzNDspOwogCQlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYwppbmRleCAwYzllMDE0ZTMwYjQ5Li5iZjYxMTQxZmI3ODUwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYwpAQCAtMjQsMjcgJiM0MzsyNCwxNSBAQCBpcHJhbmdlX210NChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJCW0gID0gbnRvaGwoaXBoLSZndDtzYWRkcikgJmx0OyBudG9obChpbmZvLSZndDtzcmNfbWluLmlwKTsKIAkJbSB8PSBudG9obChpcGgtJmd0O3NhZGRyKSAmZ3Q7IG50b2hsKGluZm8tJmd0O3NyY19tYXguaXApOwogCQltIF49ICEhKGluZm8tJmd0O2ZsYWdzICZhbXA7IElQUkFOR0VfU1JDX0lOVik7Ci0JCWlmIChtKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O3NyYyBJUCAlcEk0IE5PVCBpbiByYW5nZSAlcyVwSTQtJXBJNFxuJiMzNDssCi0JCQkgICAgICAgICAmYW1wO2lwaC0mZ3Q7c2FkZHIsCi0JCQkgICAgICAgICAoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVBSQU5HRV9TUkNfSU5WKSA/ICYjMzQ7KElOVikgJiMzNDsgOiAmIzM0OyYjMzQ7LAotCQkJICAgICAgICAgJmFtcDtpbmZvLSZndDtzcmNfbWluLmlwLAotCQkJICAgICAgICAgJmFtcDtpbmZvLSZndDtzcmNfbWF4LmlwKTsKJiM0MzsJCWlmIChtKQogCQkJcmV0dXJuIGZhbHNlOwotCQl9CiAJfQogCWlmIChpbmZvLSZndDtmbGFncyAmYW1wOyBJUFJBTkdFX0RTVCkgewogCQltICA9IG50b2hsKGlwaC0mZ3Q7ZGFkZHIpICZsdDsgbnRvaGwoaW5mby0mZ3Q7ZHN0X21pbi5pcCk7CiAJCW0gfD0gbnRvaGwoaXBoLSZndDtkYWRkcikgJmd0OyBudG9obChpbmZvLSZndDtkc3RfbWF4LmlwKTsKIAkJbSBePSAhIShpbmZvLSZndDtmbGFncyAmYW1wOyBJUFJBTkdFX0RTVF9JTlYpOwotCQlpZiAobSkgewotCQkJcHJfZGVidWcoJiMzNDtkc3QgSVAgJXBJNCBOT1QgaW4gcmFuZ2UgJXMlcEk0LSVwSTRcbiYjMzQ7LAotCQkJICAgICAgICAgJmFtcDtpcGgtJmd0O2RhZGRyLAotCQkJICAgICAgICAgKGluZm8tJmd0O2ZsYWdzICZhbXA7IElQUkFOR0VfRFNUX0lOVikgPyAmIzM0OyhJTlYpICYjMzQ7IDogJiMzNDsmIzM0OywKLQkJCSAgICAgICAgICZhbXA7aW5mby0mZ3Q7ZHN0X21pbi5pcCwKLQkJCSAgICAgICAgICZhbXA7aW5mby0mZ3Q7ZHN0X21heC5pcCk7CiYjNDM7CQlpZiAobSkKIAkJCXJldHVybiBmYWxzZTsKLQkJfQogCX0KIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTczLDI3ICYjNDM7NjEsMTUgQEAgaXByYW5nZV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQltICA9IGlwcmFuZ2VfaXB2Nl9sdCgmYW1wO2lwaC0mZ3Q7c2FkZHIsICZhbXA7aW5mby0mZ3Q7c3JjX21pbi5pbjYpOwogCQltIHw9IGlwcmFuZ2VfaXB2Nl9sdCgmYW1wO2luZm8tJmd0O3NyY19tYXguaW42LCAmYW1wO2lwaC0mZ3Q7c2FkZHIpOwogCQltIF49ICEhKGluZm8tJmd0O2ZsYWdzICZhbXA7IElQUkFOR0VfU1JDX0lOVik7Ci0JCWlmIChtKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O3NyYyBJUCAlcEk2IE5PVCBpbiByYW5nZSAlcyVwSTYtJXBJNlxuJiMzNDssCi0JCQkJICZhbXA7aXBoLSZndDtzYWRkciwKLQkJCQkgKGluZm8tJmd0O2ZsYWdzICZhbXA7IElQUkFOR0VfU1JDX0lOVikgPyAmIzM0OyhJTlYpICYjMzQ7IDogJiMzNDsmIzM0OywKLQkJCQkgJmFtcDtpbmZvLSZndDtzcmNfbWluLmluNiwKLQkJCQkgJmFtcDtpbmZvLSZndDtzcmNfbWF4LmluNik7CiYjNDM7CQlpZiAobSkKIAkJCXJldHVybiBmYWxzZTsKLQkJfQogCX0KIAlpZiAoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVBSQU5HRV9EU1QpIHsKIAkJbSAgPSBpcHJhbmdlX2lwdjZfbHQoJmFtcDtpcGgtJmd0O2RhZGRyLCAmYW1wO2luZm8tJmd0O2RzdF9taW4uaW42KTsKIAkJbSB8PSBpcHJhbmdlX2lwdjZfbHQoJmFtcDtpbmZvLSZndDtkc3RfbWF4LmluNiwgJmFtcDtpcGgtJmd0O2RhZGRyKTsKIAkJbSBePSAhIShpbmZvLSZndDtmbGFncyAmYW1wOyBJUFJBTkdFX0RTVF9JTlYpOwotCQlpZiAobSkgewotCQkJcHJfZGVidWcoJiMzNDtkc3QgSVAgJXBJNiBOT1QgaW4gcmFuZ2UgJXMlcEk2LSVwSTZcbiYjMzQ7LAotCQkJCSAmYW1wO2lwaC0mZ3Q7ZGFkZHIsCi0JCQkJIChpbmZvLSZndDtmbGFncyAmYW1wOyBJUFJBTkdFX0RTVF9JTlYpID8gJiMzNDsoSU5WKSAmIzM0OyA6ICYjMzQ7JiMzNDssCi0JCQkJICZhbXA7aW5mby0mZ3Q7ZHN0X21pbi5pbjYsCi0JCQkJICZhbXA7aW5mby0mZ3Q7ZHN0X21heC5pbjYpOwomIzQzOwkJaWYgKG0pCiAJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KIAl9CiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2lwdnMuYyBiL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jCmluZGV4IDI1M2M3MWNjOWE2MzQuLmUxM2MwZmZiNzNhOWEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jCkBAIC0xNDgsNyAmIzQzOzE0OCw2IEBAIGlwdnNfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogb3V0X3B1dF9jcDoKIAlfX2lwX3ZzX2Nvbm5fcHV0KGNwKTsKIG91dDoKLQlwcl9kZWJ1ZygmIzM0O21hdGNoPSVkXG4mIzM0OywgbWF0Y2gpOwogCXJldHVybiBtYXRjaDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuYyBiL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmMKaW5kZXggYTE2OTFmZjQwNWQzYy4uYmZmNWY1M2E5YmVmYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jCkBAIC0zNyw3ICYjNDM7MzcsNiBAQCBwb3J0c19tYXRjaF92MShjb25zdCBzdHJ1Y3QgeHRfbXVsdGlwb3J0X3YxICptaW5mbywKIAkJaWYgKG1pbmZvLSZndDtwZmxhZ3NbaV0pIHsKIAkJCS8qIHJhbmdlIHBvcnQgbWF0Y2hpbmcgKi8KIAkJCWUgPSBtaW5mby0mZ3Q7cG9ydHNbJiM0MzsmIzQzO2ldOwotCQkJcHJfZGVidWcoJiMzNDtzcmMgb3IgZHN0IG1hdGNoZXMgd2l0aCAlZC0lZD9cbiYjMzQ7LCBzLCBlKTsKIAogCQkJc3dpdGNoIChtaW5mby0mZ3Q7ZmxhZ3MpIHsKIAkJCWNhc2UgWFRfTVVMVElQT1JUX1NPVVJDRToKQEAgLTU4LDggJiM0Mzs1Nyw2IEBAIHBvcnRzX21hdGNoX3YxKGNvbnN0IHN0cnVjdCB4dF9tdWx0aXBvcnRfdjEgKm1pbmZvLAogCQkJfQogCQl9IGVsc2UgewogCQkJLyogZXhhY3QgcG9ydCBtYXRjaGluZyAqLwotCQkJcHJfZGVidWcoJiMzNDtzcmMgb3IgZHN0IG1hdGNoZXMgd2l0aCAlZD9cbiYjMzQ7LCBzKTsKLQogCQkJc3dpdGNoIChtaW5mby0mZ3Q7ZmxhZ3MpIHsKIAkJCWNhc2UgWFRfTVVMVElQT1JUX1NPVVJDRToKIAkJCQlpZiAoc3JjID09IHMpCkBAIC05Nyw3ICYjNDM7OTQsNiBAQCBtdWx0aXBvcnRfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkvKiBXZSYjMzk7dmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2UKIAkJICogY2FuJiMzOTt0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4KIAkJICovCi0JCXByX2RlYnVnKCYjMzQ7RHJvcHBpbmcgZXZpbCBvZmZzZXQ9MCB0aW55Z3JhbS5cbiYjMzQ7KTsKIAkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jIGIvbmV0L25ldGZpbHRlci94dF9zY3RwLmMKaW5kZXggYjQ2YTZhNTEyMDU4My4uZDM1YzIxZDk2NTFiMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9zY3RwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9zY3RwLmMKQEAgLTQ4LDMwICYjNDM7NDgsMTcgQEAgbWF0Y2hfcGFja2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJY29uc3Qgc3RydWN0IHh0X3NjdHBfZmxhZ19pbmZvICpmbGFnX2luZm8gPSBpbmZvLSZndDtmbGFnX2luZm87CiAJaW50IGZsYWdfY291bnQgPSBpbmZvLSZndDtmbGFnX2NvdW50OwogCi0jaWZkZWYgREVCVUcKLQlpbnQgaSA9IDA7Ci0jZW5kaWYKLQogCWlmIChjaHVua19tYXRjaF90eXBlID09IFNDVFBfQ0hVTktfTUFUQ0hfQUxMKQogCQlTQ1RQX0NIVU5LTUFQX0NPUFkoY2h1bmttYXBjb3B5LCBpbmZvLSZndDtjaHVua21hcCk7CiAKIAlkbyB7CiAJCXNjaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9zY2gpLCAmYW1wO19zY2gpOwogCQlpZiAoc2NoID09IE5VTEwgfHwgc2NoLSZndDtsZW5ndGggPT0gMCkgewotCQkJcHJfZGVidWcoJiMzNDtEcm9wcGluZyBpbnZhbGlkIFNDVFAgcGFja2V0LlxuJiMzNDspOwogCQkJKmhvdGRyb3AgPSB0cnVlOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9Ci0jaWZkZWYgREVCVUcKLQkJcHJfZGVidWcoJiMzNDtDaHVuayBudW06ICVkXHRvZmZzZXQ6ICVkXHR0eXBlOiAlZFx0bGVuZ3RoOiAlZCYjMzQ7Ci0JCQkgJiMzNDtcdGZsYWdzOiAleFxuJiMzNDssCi0JCQkgJiM0MzsmIzQzO2ksIG9mZnNldCwgc2NoLSZndDt0eXBlLCBodG9ucyhzY2gtJmd0O2xlbmd0aCksCi0JCQkgc2NoLSZndDtmbGFncyk7Ci0jZW5kaWYKIAkJb2Zmc2V0ICYjNDM7PSBTQ1RQX1BBRDQobnRvaHMoc2NoLSZndDtsZW5ndGgpKTsKIAotCQlwcl9kZWJ1ZygmIzM0O3NrYi0mZ3Q7bGVuOiAlZFx0b2Zmc2V0OiAlZFxuJiMzNDssIHNrYi0mZ3Q7bGVuLCBvZmZzZXQpOwotCiAJCWlmIChTQ1RQX0NIVU5LTUFQX0lTX1NFVChpbmZvLSZndDtjaHVua21hcCwgc2NoLSZndDt0eXBlKSkgewogCQkJc3dpdGNoIChjaHVua19tYXRjaF90eXBlKSB7CiAJCQljYXNlIFNDVFBfQ0hVTktfTUFUQ0hfQU5ZOgpAQCAtMTIxLDE4ICYjNDM7MTA4LDE0IEBAIHNjdHBfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCWNvbnN0IHN0cnVjdCBzY3RwaGRyICpzaDsKIAlzdHJ1Y3Qgc2N0cGhkciBfc2g7CiAKLQlpZiAocGFyLSZndDtmcmFnb2ZmICE9IDApIHsKLQkJcHJfZGVidWcoJiMzNDtEcm9wcGluZyBub24tZmlyc3QgZnJhZ21lbnQuLiBGSVhNRVxuJiMzNDspOwomIzQzOwlpZiAocGFyLSZndDtmcmFnb2ZmICE9IDApCiAJCXJldHVybiBmYWxzZTsKLQl9CiAKIAlzaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHBhci0mZ3Q7dGhvZmYsIHNpemVvZihfc2gpLCAmYW1wO19zaCk7CiAJaWYgKHNoID09IE5VTEwpIHsKLQkJcHJfZGVidWcoJiMzNDtEcm9wcGluZyBldmlsIFRDUCBvZmZzZXQ9MCB0aW55Z3JhbS5cbiYjMzQ7KTsKIAkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQlwcl9kZWJ1ZygmIzM0O3NwdDogJWRcdGRwdDogJWRcbiYjMzQ7LCBudG9ocyhzaC0mZ3Q7c291cmNlKSwgbnRvaHMoc2gtJmd0O2Rlc3QpKTsKIAogCXJldHVybiAgU0NDSEVDSyhudG9ocyhzaC0mZ3Q7c291cmNlKSAmZ3Q7PSBpbmZvLSZndDtzcHRzWzBdCiAJCQkmYW1wOyZhbXA7IG50b2hzKHNoLSZndDtzb3VyY2UpICZsdDs9IGluZm8tJmd0O3NwdHNbMV0sCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3RjcHVkcC5jIGIvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuYwppbmRleCBmNzZjZjE4ZjFhMjQ0Li43MDYwOGI4ZDA2YWIyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3RjcHVkcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmMKQEAgLTQ0LDggJiM0Mzs0NCw2IEBAIHRjcF9maW5kX29wdGlvbih1X2ludDhfdCBvcHRpb24sCiAJdV9pbnQ4X3QgX29wdFs2MCAtIHNpemVvZihzdHJ1Y3QgdGNwaGRyKV07CiAJdW5zaWduZWQgaW50IGk7CiAKLQlwcl9kZWJ1ZygmIzM0O2ZpbmRpbmcgb3B0aW9uXG4mIzM0Oyk7Ci0KIAlpZiAoIW9wdGxlbikKIAkJcmV0dXJuIGludmVydDsKIApAQCAtODEsMTAgJiM0Mzs3OSw4IEBAIHN0YXRpYyBib29sIHRjcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJCSAgIGNhdXNlcyB0aGlzLiBJdHMgYSBjcmFja2VyIHRyeWluZyB0byBicmVhayBpbiBieSBkb2luZyBhCiAJCSAgIGZsYWcgb3ZlcndyaXRlIHRvIHBhc3MgdGhlIGRpcmVjdGlvbiBjaGVja3MuCiAJCSovCi0JCWlmIChwYXItJmd0O2ZyYWdvZmYgPT0gMSkgewotCQkJcHJfZGVidWcoJiMzNDtEcm9wcGluZyBldmlsIFRDUCBvZmZzZXQ9MSBmcmFnLlxuJiMzNDspOwomIzQzOwkJaWYgKHBhci0mZ3Q7ZnJhZ29mZiA9PSAxKQogCQkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKLQkJfQogCQkvKiBNdXN0IG5vdCBiZSBhIGZyYWdtZW50LiAqLwogCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtOTMsNyAmIzQzOzg5LDYgQEAgc3RhdGljIGJvb2wgdGNwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAlpZiAodGggPT0gTlVMTCkgewogCQkvKiBXZSYjMzk7dmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2UKIAkJICAgY2FuJiMzOTt0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4gKi8KLQkJcHJfZGVidWcoJiMzNDtEcm9wcGluZyBldmlsIFRDUCBvZmZzZXQ9MCB0aW55Z3JhbS5cbiYjMzQ7KTsKIAkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTE0NSw3ICYjNDM7MTQwLDYgQEAgc3RhdGljIGJvb2wgdWRwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAlpZiAodWggPT0gTlVMTCkgewogCQkvKiBXZSYjMzk7dmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2UKIAkJICAgY2FuJiMzOTt0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4gKi8KLQkJcHJfZGVidWcoJiMzNDtEcm9wcGluZyBldmlsIFVEUCB0aW55Z3JhbS5cbiYjMzQ7KTsKIAkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MjEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogT3B0aW1pemF0aW9uIGFuZCBQb3RlbnRpYWwgTG9naWMgRmxhdyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgcXVpY2sgc2NhbiwgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBuZXRmaWx0ZXIgZmlsZXMg4oCTIGBuZXQvaXB2NC9uZXRmaWx0ZXIvYCwgYG5ldC9pcHY2L25ldGZpbHRlci9gLCBhbmQgYG5ldC9uZXRmaWx0ZXIvYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlc2UgYXJlIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2VzOiBtYWlubHksIHNvbWUgZGVidWdnaW5nIG91dHB1dCBpcyBiZWluZyB0b25lZCBkb3duIGJ5IHJlbW92aW5nIGBwcl9kZWJ1Z2Agc3RhdGVtZW50cywgcmVwbGFjaW5nIGRlYnVnIG9yIGluZm9ybWF0aW9uYWwgcHJpbnRzIHdpdGggcmF0ZS1saW1pdGVkIHZlcnNpb25zIHVzaW5nIGBwcl9pbmZvX3JhdGVsaW1pdGVkYCBpbiB0aGUgYF9jaGVja2AgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBvcHRpbWl6YXRpb24uCgpUaGVuLCB0aGVyZeKAmXMgc29tZXRoaW5nIG5ldyBpbiBgeHRfQ1QuY2AuIEkgc2VlIHRoYXQgYSBsZW5ndGggY2hlY2sgaGFzIGJlZW4gYWRkZWQgZm9yIGBpbmZvLSZndDtoZWxwZXJgIGFuZCBgaW5mby0mZ3Q7dGltZW91dGAgd2hpY2ggaXMgZ29vZCBwcmFjdGljZS4gSeKAmXZlIG5vdGljZWQgYSBwb3NzaWJsZSBidWcsIHNvIGxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNvZGU6CmBgYGMKQEAgLTE5NSw3ICYjNDM7MTk1LDggQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhciwKIAkJZ290byBlcnIzOwogCX0KIAotCWlmIChpbmZvLSZndDtoZWxwZXJbMF0pIHsKJiM0MzsJaWYgKGluZm8tJmd0O2hlbHBlclswXSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpICZsdDsgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKIAkJaWYgKHN0cm5sZW4oaW5mby0mZ3Q7aGVscGVyLCBzaXplb2YoaW5mby0mZ3Q7aGVscGVyKSkgPT0gc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKIAkJCXJldCA9IC1FTkFNRVRPT0xPTkc7CiAJCQlnb3RvIGVycjM7CkBAIC0yMDYsNyAmIzQzOzIwNyw4IEBAIHN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsCiAJCQlnb3RvIGVycjM7CiAJfQogCi0JaWYgKGluZm8tJmd0O3RpbWVvdXRbMF0pIHsKJiM0MzsJaWYgKGluZm8tJmd0O3RpbWVvdXRbMF0gJmFtcDsmYW1wOwomIzQzOwkgICAgc3RybmxlbihpbmZvLSZndDt0aW1lb3V0LCBzaXplb2YoaW5mby0mZ3Q7dGltZW91dCkpICZsdDsgc2l6ZW9mKGluZm8tJmd0O3RpbWVvdXQpKSB7CiAJCWlmIChzdHJubGVuKGluZm8tJmd0O3RpbWVvdXQsIHNpemVvZihpbmZvLSZndDt0aW1lb3V0KSkgPT0gc2l6ZW9mKGluZm8tJmd0O3RpbWVvdXQpKSB7CiAJCQlyZXQgPSAtRU5BTUVUT09MT05HOwogCQkJZ290byBlcnI0OwpgYGAKTm93LCBjb21wYXJpbmcgdGhlIG9yaWdpbmFsIGNvZGUgdG8gdGhlIG5ldyBjb2RlLi4uIEkgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGUgb3JpZ2luYWwgYGlmYCBjb25kaXRpb24gd2FzOgoKYGBgYwoJaWYgKGluZm8tJmd0O2hlbHBlclswXSkgewoJCWlmIChzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpID09IHNpemVvZihpbmZvLSZndDtoZWxwZXIpKSB7CmBgYAoKVGhlIGFkZGVkIGNoZWNrIGlzOgpgYGBjCglpZiAoaW5mby0mZ3Q7aGVscGVyWzBdICZhbXA7JmFtcDsKCSAgICBzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpICZsdDsgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKCQlpZiAoc3RybmxlbihpbmZvLSZndDtoZWxwZXIsIHNpemVvZihpbmZvLSZndDtoZWxwZXIpKSA9PSBzaXplb2YoaW5mby0mZ3Q7aGVscGVyKSkgewpgYGAKVGhlIGxvZ2ljIGhlcmUgbG9va3MgZmxhd2VkLiBJZiB0aGUgY29uZGl0aW9uIGBzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpICZsdDsgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcilgIGlzICp0cnVlKiwgdGhlbiB0aGUgaW5uZXIgY29uZGl0aW9uIGBzdHJubGVuKC4uLikgPT0gc2l6ZW9mKC4uLilgIHdpbGwgKm5ldmVyKiBiZSB0cnVlLiBUaGUgY29kZSBhZGRlZCBhIHJlZHVuZGFuY3kgY2hlY2sgZm9yIGxlbmd0aCB0aGF0IG1ha2VzIHRoZSBzZWNvbmQgY29uZGl0aW9uIGltcG9zc2libGUsIGFuZCB0aGUgd2hvbGUgY29kZSBibG9jayBjb3VsZCBiZSBza2lwcGVkLiBJdCYjMzk7cyBhIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgaXNzdWU7IHRoYXQgY29uZGl0aW9uYWwgY2hlY2sgaXMgZG9pbmcgbm90aGluZy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGluIGBuZXQvbmV0ZmlsdGVyL3h0X0NULmNgIHRvIHNlZSBpZiB0aGF0IGhhcHBlbnMgZWxzZXdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci94dF9DVC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcdHpvbmUuaWQgPSBpbmZvLVx1MDAzZXpvbmU7XG4gMTgxOlx0XHR6b25lLmRpciA9IHh0X2N0X2ZsYWdzX3RvX2RpcihpbmZvKTtcbiAxODI6XHRcdGlmIChpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBYVF9DVF9aT05FX01BUkspXG4gMTgzOlx0XHRcdHpvbmUuZmxhZ3MgfD0gTkZfQ1RfRkxBR19NQVJLO1xuIDE4NDpcdFxuIDE4NTpcdFx0Y3QgPSBuZl9jdF90bXBsX2FsbG9jKHBhci1cdTAwM2VuZXQsIFx1MDAyNnpvbmUsIEdGUF9LRVJORUwpO1xuIDE4NjpcdFx0aWYgKCFjdCkge1xuIDE4NzpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDE4ODpcdFx0XHRnb3RvIGVycjI7XG4gMTg5Olx0XHR9XG4gMTkwOlx0XG4gMTkxOlx0XHRpZiAoKGluZm8tXHUwMDNlY3RfZXZlbnRzIHx8IGluZm8tXHUwMDNlZXhwX2V2ZW50cykgXHUwMDI2XHUwMDI2XG4gMTkyOlx0XHQgICAgIW5mX2N0X2VjYWNoZV9leHRfYWRkKGN0LCBpbmZvLVx1MDAzZWN0X2V2ZW50cywgaW5mby1cdTAwM2VleHBfZXZlbnRzLFxuIDE5MzpcdFx0XHRcdFx0ICBHRlBfS0VSTkVMKSkge1xuIDE5NDpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDE5NTpcdFx0XHRnb3RvIGVycjM7XG4gMTk2Olx0XHR9XG4gMTk3Olx0XG4gMTk4Olx0XHRpZiAoaW5mby1cdTAwM2VoZWxwZXJbMF0gXHUwMDI2XHUwMDI2XG4gMTk5Olx0XHQgICAgc3RybmxlbihpbmZvLVx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiAyMDA6XHRcdFx0aWYgKHN0cm5sZW4oaW5mby1cdTAwM2VoZWxwZXIsIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpID09IHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiAyMDE6XHRcdFx0XHRyZXQgPSAtRU5BTUVUT09MT05HO1xuIDIwMjpcdFx0XHRcdGdvdG8gZXJyMztcbiAyMDM6XHRcdFx0fVxuIDIwNDpcdFxuIDIwNTpcdFx0XHRyZXQgPSB4dF9jdF9zZXRfaGVscGVyKGN0LCBpbmZvLVx1MDAzZWhlbHBlciwgcGFyKTtcbiAyMDY6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAyMDc6XHRcdFx0XHRnb3RvIGVycjM7XG4gMjA4Olx0XHR9XG4gMjA5Olx0XG4gMjEwOlx0XHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0WzBdIFx1MDAyNlx1MDAyNlxuIDIxMTpcdFx0ICAgIHN0cm5sZW4oaW5mby1cdTAwM2V0aW1lb3V0LCBzaXplb2YoaW5mby1cdTAwM2V0aW1lb3V0KSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gMjEyOlx0XHRcdGlmIChzdHJubGVuKGluZm8tXHUwMDNldGltZW91dCwgc2l6ZW9mKGluZm8tXHUwMDNldGltZW91dCkpID09IHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gMjEzOlx0XHRcdFx0cmV0ID0gLUVOQU1FVE9PTE9ORztcbiAyMTQ6XHRcdFx0XHRnb3RvIGVycjQ7XG4gMjE1Olx0XHRcdH1cbiAyMTY6XHRcbiAyMTc6XHRcdFx0cmV0ID0geHRfY3Rfc2V0X3RpbWVvdXQoY3QsIHBhciwgaW5mby1cdTAwM2V0aW1lb3V0KTtcbiAyMTg6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAyMTk6XHRcdFx0XHRnb3RvIGVycjQ7XG4gMjIwOlx0XHR9XG4gMjIxOlx0XHRfX3NldF9iaXQoSVBTX0NPTkZJUk1FRF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cyk7XG4gMjIyOlx0b3V0OlxuIDIyMzpcdFx0aW5mby1cdTAwM2VjdCA9IGN0O1xuIDIyNDpcdFx0cmV0dXJuIDA7XG4gMjI1Olx0XG4gMjI2Olx0ZXJyNDpcbiAyMjc6XHRcdGhlbHAgPSBuZmN0X2hlbHAoY3QpO1xuIDIyODpcdFx0eHRfY3RfcHV0X2hlbHBlcihoZWxwKTtcbiAyMjk6XHRlcnIzOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTIzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IEEgQmVoYXZpb3JhbCBTaGlmdCBpbiB4dF9DVC5jKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlIGluIHRoZSBgeHRfQ1QuY2AgbW9kdWxlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgeHRfY3RfdGdfY2hlY2tgIGZ1bmN0aW9uLiBUaGUgYWRkaXRpb24gb2YgYCZhbXA7JmFtcDsgc3RybmxlbihpbmZvLSZndDtoZWxwZXIsIHNpemVvZihpbmZvLSZndDtoZWxwZXIpKSAmbHQ7IHNpemVvZihpbmZvLSZndDtoZWxwZXIpYCB0byB0aGUgYGlmYCBjb25kaXRpb24gaW1tZWRpYXRlbHkgY2F1Z2h0IG15IGV5ZS4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpZiBgc3RybmxlbmAgcmV0dXJucyB0aGUgbWF4aW11bSBidWZmZXIgc2l6ZSAobWVhbmluZyBgaW5mby0mZ3Q7aGVscGVyYCBpc24mIzM5O3QgbnVsbC10ZXJtaW5hdGVkKSwgdGhlIGVudGlyZSBibG9jayBpcyBub3cgc2tpcHBlZC4gVGhpcyBpcyBhIGNydWNpYWwgZGV0YWlsLiBUaGUgY29uc2VxdWVuY2UgaXMgdGhhdCBpbnN0ZWFkIG9mIHJldHVybmluZyBgLUVOQU1FVE9PTE9OR2AgYW5kIGV4aXRpbmcgdmlhIGBlcnIzYCwgdGhlIGNvZGUgbm93ICpzaWxlbnRseSogaWdub3JlcyB0aGUgaGVscGVyIHN0cmluZy4gRWZmZWN0aXZlbHksIHRoaXMgYWx0ZXJzIHRoZSB0YXJnZXQmIzM5O3MgYmVoYXZpb3Igd2hlbiBlbmNvdW50ZXJpbmcgYSBoZWxwZXIgc3RyaW5nIHRoYXQgZXhjZWVkcyB0aGUgZXhwZWN0ZWQgbGVuZ3RoIG9yIGlzIG5vdCBwcm9wZXJseSBudWxsLXRlcm1pbmF0ZWQuIEl0IGJ5cGFzc2VzIHRoZSBlcnJvciBjaGVjay4KCkkgd2VudCBiYWNrIGFuZCBkb3VibGUtY2hlY2tlZCB0aGUgb3JpZ2luYWwgY29kZS4gV2l0aG91dCB0aGUgbmV3IGNvbmRpdGlvbiwgdGhlIG9yaWdpbmFsIGNvZGUgKmRpZCogY2F0Y2ggdGhpcyBub24tbnVsbC10ZXJtaW5hdGVkIGhlbHBlciB3aXRoIHRoZSBgc3RybmxlbmAgY2hlY2sgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgY29kZS4gVGh1cywgdGhlIHBhdGNoIGhhcyBkZWZpbml0ZWx5IGNoYW5nZWQgdGhlIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yLiBUaGUgcGF0Y2ggbWFrZXMgYW4gaW1wbGljaXQgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgYnVnLgoKSSBxdWlja2x5IGxvb2tlZCBhdCB0aGUgY2hhbmdlIGluIGBuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jYCBhbmQgc2F3IHRoZSBwbGFjZW1lbnQgb2YgYSBgbXV0ZXhfdW5sb2NrYCBiZWluZyBjaGFuZ2VkLCBidXQgaXQgc2VlbXMgYmVuaWduLgoKVGhpcyBiZWhhdmlvcmFsIGNoYW5nZSBpcyB3b3J0aCBpbnZlc3RpZ2F0aW5nIGZ1cnRoZXIsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gZnV6ei4gVGhlIG9yaWdpbmFsIGNvZGUgcHJvdmlkZWQgZXJyb3IgY2hlY2tpbmcgYW5kIHRoZSBwYXRjaCByZW1vdmVkIGl0LiBUaGlzIGlzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGFuIGFyZWEgdGhhdCBjYW4gYmUgYSBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTtsbCBuZWVkIHRvIGNyYWZ0IHNvbWUgc3BlY2lmaWMgdGVzdCBjYXNlcyB0byBleHBsb3JlIHRoaXMgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4dF9jdF90Z19jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIveHRfQ1QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL3h0X0NULmM9MTQwPXN0YXRpYyB2b2lkIHh0X2N0X3B1dF9oZWxwZXIoc3RydWN0IG5mX2Nvbm5faGVscCAqaGVscClcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMTU0LVxubmV0L25ldGZpbHRlci94dF9DVC5jOjE1NTpzdGF0aWMgaW50IHh0X2N0X3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyLFxubmV0L25ldGZpbHRlci94dF9DVC5jLTE1Ni1cdFx0XHQgIHN0cnVjdCB4dF9jdF90YXJnZXRfaW5mb192MSAqaW5mbylcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMjM2LVxubmV0L25ldGZpbHRlci94dF9DVC5jOjIzNzpzdGF0aWMgaW50IHh0X2N0X3RnX2NoZWNrX3YwKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxubmV0L25ldGZpbHRlci94dF9DVC5jLTIzOC17XG4tLVxubmV0L25ldGZpbHRlci94dF9DVC5jLTI1Mi1cbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYzoyNTM6XHRyZXQgPSB4dF9jdF90Z19jaGVjayhwYXIsIFx1MDAyNmluZm9fdjEpO1xubmV0L25ldGZpbHRlci94dF9DVC5jLTI1NC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci94dF9DVC5jLTI2MS1cbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYzoyNjI6c3RhdGljIGludCB4dF9jdF90Z19jaGVja192MShjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yNjMte1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yNjgtXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmM6MjY5Olx0cmV0dXJuIHh0X2N0X3RnX2NoZWNrKHBhciwgcGFyLVx1MDAzZXRhcmdpbmZvKTtcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yNzAtfVxubmV0L25ldGZpbHRlci94dF9DVC5jLTI3MS1cbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYzoyNzI6c3RhdGljIGludCB4dF9jdF90Z19jaGVja192Mihjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yNzMte1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yNzgtXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmM6Mjc5Olx0cmV0dXJuIHh0X2N0X3RnX2NoZWNrKHBhciwgcGFyLVx1MDAzZXRhcmdpbmZvKTtcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yODAtfVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYz0zMzE9c3RhdGljIHN0cnVjdCB4dF90YXJnZXQgeHRfY3RfdGdfcmVnW10gX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMzQ0LVx0XHQudXNlcnNpemVcdD0gb2Zmc2V0b2Yoc3RydWN0IHh0X2N0X3RhcmdldF9pbmZvLCBjdCksXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmM6MzQ1Olx0XHQuY2hlY2tlbnRyeVx0PSB4dF9jdF90Z19jaGVja192MCxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0zNDYtXHRcdC5kZXN0cm95XHQ9IHh0X2N0X3RnX2Rlc3Ryb3lfdjAsXG4tLVxubmV0L25ldGZpbHRlci94dF9DVC5jLTM1Ni1cdFx0LnVzZXJzaXplXHQ9IG9mZnNldG9mKHN0cnVjdCB4dF9jdF90YXJnZXRfaW5mb192MSwgY3QpLFxubmV0L25ldGZpbHRlci94dF9DVC5jOjM1NzpcdFx0LmNoZWNrZW50cnlcdD0geHRfY3RfdGdfY2hlY2tfdjEsXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMzU4LVx0XHQuZGVzdHJveVx0PSB4dF9jdF90Z19kZXN0cm95X3YxLFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0zNjgtXHRcdC51c2Vyc2l6ZVx0PSBvZmZzZXRvZihzdHJ1Y3QgeHRfY3RfdGFyZ2V0X2luZm9fdjEsIGN0KSxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYzozNjk6XHRcdC5jaGVja2VudHJ5XHQ9IHh0X2N0X3RnX2NoZWNrX3YyLFxubmV0L25ldGZpbHRlci94dF9DVC5jLTM3MC1cdFx0LmRlc3Ryb3lcdD0geHRfY3RfdGdfZGVzdHJveV92MSxcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMzg4LVx0XHQudXNlcnNpemVcdD0gb2Zmc2V0b2Yoc3RydWN0IHh0X2N0X3RhcmdldF9pbmZvLCBjdCksXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmM6Mzg5Olx0XHQuY2hlY2tlbnRyeVx0PSB4dF9jdF90Z19jaGVja192MCxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0zOTAtXHRcdC5kZXN0cm95XHQ9IHh0X2N0X3RnX2Rlc3Ryb3lfdjAsXG4tLVxubmV0L25ldGZpbHRlci94dF9DVC5jLTQwMC1cdFx0LnVzZXJzaXplXHQ9IG9mZnNldG9mKHN0cnVjdCB4dF9jdF90YXJnZXRfaW5mb192MSwgY3QpLFxubmV0L25ldGZpbHRlci94dF9DVC5jOjQwMTpcdFx0LmNoZWNrZW50cnlcdD0geHRfY3RfdGdfY2hlY2tfdjEsXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtNDAyLVx0XHQuZGVzdHJveVx0PSB4dF9jdF90Z19kZXN0cm95X3YxLFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy00MTItXHRcdC51c2Vyc2l6ZVx0PSBvZmZzZXRvZihzdHJ1Y3QgeHRfY3RfdGFyZ2V0X2luZm9fdjEsIGN0KSxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYzo0MTM6XHRcdC5jaGVja2VudHJ5XHQ9IHh0X2N0X3RnX2NoZWNrX3YyLFxubmV0L25ldGZpbHRlci94dF9DVC5jLTQxNC1cdFx0LmRlc3Ryb3lcdD0geHRfY3RfdGdfZGVzdHJveV92MSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTY5OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU1ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgYSBOZXRmaWx0ZXIgUGF0Y2g6IEZ1bmN0aW9uYWwgQ2hhbmdlIGluIGB4dF9DVC5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCYjMzk7cyBwcmltYXJpbHkgYWJvdXQgY2xlYW51cCAtIHJlbW92aW5nIGEgYnVuY2ggb2YgYHByX2RlYnVnYCBjYWxscyBhbmQgY29uc29saWRhdGluZyB0aGVtLCBwcmVzdW1hYmx5IGZvciBhIGxlc3Mgbm9pc3kga2VybmVsIGxvZy4gVGhhdCYjMzk7cyBmaW5lLCBjb3NtZXRpYyBtb3N0bHksIHdvbiYjMzk7dCBmb2N1cyBvbiB0aGF0LiBUaGUgc2lnbmlmaWNhbnQgY2hhbmdlIGlzIGluIGB4dF9DVC5jYC4gTXkgZXhwZXJ0IGV5ZSBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGlzIG1vZGlmaWNhdGlvbjoKCmBgYGMKLQlpZiAoaW5mby0mZ3Q7aGVscGVyWzBdKSB7CiYjNDM7CWlmIChpbmZvLSZndDtoZWxwZXJbMF0gJmFtcDsmYW1wOwomIzQzOwkgICAgc3RybmxlbihpbmZvLSZndDtoZWxwZXIsIHNpemVvZihpbmZvLSZndDtoZWxwZXIpKSAmbHQ7IHNpemVvZihpbmZvLSZndDtoZWxwZXIpKSB7CgkJaWYgKHN0cm5sZW4oaW5mby0mZ3Q7aGVscGVyLCBzaXplb2YoaW5mby0mZ3Q7aGVscGVyKSkgPT0gc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKCQkJcmV0ID0gLUVOQU1FVE9PTE9ORzsKCQkJZ290byBlcnIzOwoJCX0KCgkJcmV0ID0geHRfY3Rfc2V0X2hlbHBlcihjdCwgaW5mby0mZ3Q7aGVscGVyLCBwYXIpOwoJCWlmIChyZXQgJmx0OyAwKQoJCQlnb3RvIGVycjM7Cgl9CmBgYAoKVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgb3JpZ2luYWwgY29kZSBjaGVja2VkIGlmIGBpbmZvLSZndDtoZWxwZXJgIGV4aXN0ZWQuIElmIGl0IGRpZCwgYW5kIGlmIHRoZSBzdHJpbmcgd2FzIG5vdCBudWxsIHRlcm1pbmF0ZWQsIHRoZSBvbGQgY29kZSByZXR1cm5lZCBgLUVOQU1FVE9PTE9OR2AuIFRoZSBuZXcgY29kZSBhZGRzIGEgKnNlY29uZCogY2hlY2ssIGlmIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBpcyBsZXNzIHRoYW4gdGhlIGJ1ZmZlci4gTm93LCAqaWYqIHRoZSBzdHJpbmcgaXNuJiMzOTt0IG51bGwtdGVybWluYXRlZCwgYHN0cm5sZW5gIHdpbGwgcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBidWZmZXIuIFNvLCB0aGUgbmV3IGNvbmRpdGlvbiwgYHN0cm5sZW4oLi4uKSAmbHQ7IHNpemVvZiguLi4pYCwgaXMgZmFsc2UsIGFuZCB0aGUgY29kZSBzaW1wbHkgc2tpcHMgdGhlIGhlbHBlciBjb25maWd1cmF0aW9uLiBOb3csICpwcmV2aW91c2x5KiBpdCB3b3VsZCBoYXZlIHJldHVybmVkIGFuIGVycm9yLCBzcGVjaWZpY2FsbHkgYC1FTkFNRVRPT0xPTkdgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0IG1lYW5zLCB0aGF0IGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSBlcnJvciwgdGhlIGhlbHBlciBpcyAqc2lsZW50bHkqIGlnbm9yZWQuCgpUaGlzIGxvb2tzIGxpa2UgYSBwb3RlbnRpYWwgYnVnIGZpeCBnb25lIHdyb25nLCBvciBhIG1pc3VuZGVyc3RhbmRpbmcgb2YgdGhlIG9yaWdpbmFsIGxvZ2ljLiBQZXJoYXBzIHRoZSBhdXRob3Igd2FzIHRyeWluZyB0byBwcmV2ZW50IGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBidXQgY3JlYXRlZCBkZWFkIGNvZGUsIGFuZCBjaGFuZ2VkIGJlaGF2aW91ciBpbiB0aGUgcHJvY2Vzcy4KCkxldCBtZSB0aGlua+KApiB0aGUgY29kZSBpcyAqc3VwcG9zZWQqIHRvIGJlIHJlY2VpdmluZyBpbmZvcm1hdGlvbiBmcm9tIHVzZXJzcGFjZS4gSWYgSSBwcm92aWRlIGEgbm9uLW51bGwtdGVybWluYXRlZCBgaGVscGVyYCBuYW1lLCB0aGUgb3JpZ2luYWwgY29kZSB3b3VsZCBoYXZlIGZsYWdnZWQgaXQgYXMgYW4gZXJyb3IuIE5vdywgaXQganVzdCBzaWxlbnRseSAqZG9lc24mIzM5O3Qgc2V0KiB0aGUgaGVscGVyLiBObyBlcnJvciBpcyByYWlzZWQsIHRoZSBoZWxwZXIgc2ltcGx5IGRvZXNuJiMzOTt0IGdldCBjb25maWd1cmVkLiBJcyB0aGF0IHdoYXQgd2Ugd2FudD8gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY2hhbmdlIHRoYXQgaW1wYWN0cyBwcm9ncmFtIGZsb3csIGVzcGVjaWFsbHkgaWYgYSB1c2VyICpleHBlY3RzKiB0aGF0IGVycm9yIG1lc3NhZ2UuCgpJIGNhbiYjMzk7dCBzZWUgYW55IGltbWVkaWF0ZSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IG9yIG1lbW9yeSBjb3JydXB0aW9uIGhlcmUsIGJ1dCB0aGlzIGlzIGEgKmJlaGF2aW9yYWwqIGNoYW5nZSwgYW5kIGEgc2lsZW50IG9uZS4gSSBuZWVkIHRvIG5vdGUgdGhpcyBoYXMgZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMgdGhhdCBhcmUgdGVzdGFibGUuIFNvLCAqeWVzKiwgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgZnV6emVyIG1pZ2h0IG5vdCB0cmlnZ2VyIGEgY3Jhc2ggb3IgY29ycnVwdGlvbiwgYnV0IGl0IHdpbGwgZGlzY292ZXIgdGhhdCB0aGlzIGxvZ2ljIHBhdGggaXMgZGlmZmVyZW50LgoKV29ydGhGdXp6aW5nPXRydWUKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9DVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9ODQ5PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTg2MC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4NjE6Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1Rcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04NjItXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O0NUXCYjMzQ7IHRhcmdldCBzdXBwb3J0JiMzOTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODA1MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVwZW5kZW5jeSBEZWVwIERpdmU6IE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1QqKgoKT2theSwgc28gYE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHRoaW5nIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHB1bGxpbmcgdXAgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgdGhlIHVzdWFsIHN1c3BlY3RzIC0gdGhlIEtjb25maWcgZmlsZXMsIHRoZSBNYWtlZmlsZXMsIGFuZCBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbi4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVyZSB3aWxsIGxpa2VseSBiZSBzZXZlcmFsIGxheWVycyBvZiBkZXBlbmRlbmNpZXMgdG8gdW5yYXZlbC4KCkZpcnN0LCBhcmUgdGhlcmUgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXMgbGlzdGVkIGluIHRoZSBLY29uZmlnIGZpbGUgaXRzZWxmPyBTb21ldGltZXMgaXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLCBidXQgbW9yZSBvZnRlbiBpdCYjMzk7cyBhIHdlYiBvZiBjb25uZWN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciB0aGluZ3MgbGlrZSBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBvciBldmVuIGltcGxpY2l0IGRlcGVuZGVuY2llcyBiYXNlZCBvbiBzaGFyZWQgb3B0aW9ucy4KCk5leHQsIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhpbmdzIHRocm91Z2ggdGhlIGJ1aWxkIHN5c3RlbS4gQXJlIHRoZXJlIGFueSBNYWtlZmlsZXMgdGhhdCBnZXQgaW5jbHVkZWQsIG9yIHBlcmhhcHMgb3RoZXIgdGFyZ2V0cyB0aGF0IGBORVRGSUxURVJfWFRfVEFSR0VUX0NUYCByZWxpZXMgb24/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGhlYWRlciBmaWxlIGluY2x1c2lvbnMsIG9iamVjdCBmaWxlIGRlcGVuZGVuY2llcywgYW5kIGFueSBidWlsZCBmbGFncyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgZmluYWwgb3V0Y29tZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtb2R1bGVzIGludm9sdmVkIGFuZCBhbnkgb3RoZXIgbW9kdWxlcyB0aGF0ICptaWdodCogYmUgcmVsZXZhbnQgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBDVGAuCgpGaW5hbGx5LCBJJiMzOTtsbCByZXZpZXcgYW55IGtlcm5lbCBkb2N1bWVudGF0aW9uIG9yIG1haWxpbmcgbGlzdCBkaXNjdXNzaW9ucy4gSXQmIzM5O3MgcG9zc2libGUgdGhlcmUgYXJlIG5vbi1vYnZpb3VzIHJlbGF0aW9uc2hpcHMgb3IgcmVxdWlyZW1lbnRzIHRoYXQgYXJlbiYjMzk7dCBpbW1lZGlhdGVseSBhcHBhcmVudCBmcm9tIHRoZSBjb2RlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgY2F2ZWF0cyBvciBnb3RjaGFzIHRoYXQgY291bGQgYml0ZSBtZSBsYXRlci4gTXkgZ29hbCBoZXJlIGlzIGEgY29tcGxldGUgYW5kIGFjY3VyYXRlIHVuZGVyc3RhbmRpbmcgb2YgZXZlcnl0aGluZyB0aGF0IGhhcyB0byBiZSBpbiBwbGFjZSBmb3IgdGhpcyBvcHRpb24gdG8gd29yaywgbm90IGp1c3QgdGhlIGJhc2ljcy4KCldpdGggYWxsIG9mIHRoaXMgZG9uZSwgSSB3aWxsIGhhdmUgdGhlIG5lZWRlZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24sIHNvIEkmIzM5O2xsIGJlIGFibGUgdG8gcHJvY2VlZCB3aXRoIHRoZSBuZXh0IHRhc2sgd2l0aCBjb25maWRlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODYwOlx0XG4gODYxOlx0Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RcbiA4NjI6XHRcdHRyaXN0YXRlICYjMzk7XCYjMzQ7Q1RcJiMzNDsgdGFyZ2V0IHN1cHBvcnQmIzM5O1xuIDg2MzpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbiA4NjQ6XHRcdGRlcGVuZHMgb24gSVBfTkZfUkFXIHx8IElQNl9ORl9SQVcgfHwgTkZUX0NPTVBBVFxuIDg2NTpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiA4NjY6XHRcdGhlbHBcbiA4Njc6XHRcdCAgVGhpcyBvcHRpb25zIGFkZHMgYSBgQ1QmIzM5OyB0YXJnZXQsIHdoaWNoIGFsbG93cyB0byBzcGVjaWZ5IGluaXRpYWxcbiA4Njg6XHRcdCAgY29ubmVjdGlvbiB0cmFja2luZyBwYXJhbWV0ZXJzIGxpa2UgZXZlbnRzIHRvIGJlIGRlbGl2ZXJlZCBhbmRcbiA4Njk6XHRcdCAgdGhlIGhlbHBlciB0byBiZSB1c2VkLlxuIDg3MDpcdFxuIDg3MTpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiA4NzI6XHRcbiA4NzM6XHRjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQXG4gODc0Olx0XHR0cmlzdGF0ZSAmIzM5O1wmIzM0O0RTQ1BcJiMzNDsgYW5kIFwmIzM0O1RPU1wmIzM0OyB0YXJnZXQgc3VwcG9ydCYjMzk7XG4gODc1Olx0XHRkZXBlbmRzIG9uIElQX05GX01BTkdMRSB8fCBJUDZfTkZfTUFOR0xFIHx8IE5GVF9DT01QQVRcbiA4NzY6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gODc3Olx0XHRoZWxwXG4gODc4Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgYSBgRFNDUCYjMzk7IHRhcmdldCwgd2hpY2ggYWxsb3dzIHlvdSB0byBtYW5pcHVsYXRlXG4gODc5Olx0XHQgIHRoZSBJUHY0L0lQdjYgaGVhZGVyIERTQ1AgZmllbGQgKGRpZmZlcmVudGlhdGVkIHNlcnZpY2VzIGNvZGVwb2ludCkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODQzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWcgcmVxdWlyZW1lbnRzLCBicm9rZW4gZG93biBmcm9tIGEgbmV0d29ya2luZyBrZXJuZWwgcGVyc3BlY3RpdmU6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgdGhpcyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQgbWUgcXVpY2tseSBzdW1tYXJpemUgd2hhdCBJJiMzOTttIHNlZWluZyBoZXJlLiBCYXNlZCBvbiB0aGlzIHBhdGNoLCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gbmVlZHMgdG8gaW5jbHVkZSBhIGZldyBrZXkgY29tcG9uZW50cy4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBORVRGSUxURVJfWFRfVEFSR0VUX0NUYCBpcyBlbmFibGVkOyBjbGVhcmx5LCBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGEgY2VudHJhbCBwaWVjZS4gSSYjMzk7bGwgbmVlZCBgTkZfQ09OTlRSQUNLYCBhcyB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIGluZnJhc3RydWN0dXJlIGlzIGVzc2VudGlhbC4gV2UgaGF2ZSBib3RoIElQdjQgYW5kIElQdjYgY29uc2lkZXJhdGlvbnMsIHNvIGBJUF9ORl9SQVdgIG9yIGBJUDZfTkZfUkFXYCwgb3IgcGVyaGFwcyBgTkZUX0NPTVBBVGAgYXJlIGltcG9ydGFudCBmb3IgaW50ZWdyYXRpbmcgd2l0aCB0aGUgcmF3IHRhYmxlLCBhbmQgbGV0JiMzOTtzIG5vdCBmb3JnZXQgYE5FVEZJTFRFUl9BRFZBTkNFRGAgYXMgYSBwcmVyZXF1aXNpdGUgZm9yIG1vcmUgYWR2YW5jZWQgbmV0ZmlsdGVyIGZlYXR1cmVzLgoKSG1tLCB3YWl0IGEgbW9tZW50IHRob3VnaCwgdGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYHh0X0lETEVUSU1FUi5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBpZGxlIHRpbWVyIGZ1bmN0aW9uYWxpdHkgaXMgcHJvcGVybHkgY29uZmlndXJlZCB0b28sIHNvIGxldCBtZSBxdWlja2x5IGNyb3NzLWNoZWNrIGl0cyBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgYmVmb3JlIHByb2NlZWRpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFueSBpbXBsaWNhdGlvbnMgdGhhdCBtYXkgYXJpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9OTA0PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTkxNy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo5MTg6Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctOTE5LVx0dHJpc3RhdGUgIFwmIzM0O0lETEVUSU1FUiB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTI4OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUmAgcmVsaWVzIG9uLiBVbmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBicmVhayBhbnl0aGluZyB3aGVuIEkgZW5hYmxlLCBkaXNhYmxlLCBvciBtb2RpZnkgdGhpcyB0YXJnZXQuIEl0JiMzOTtzIHRoZSBrZXJuZWwsIHNvIEkgaGF2ZSB0byBiZSBjYXJlZnVsLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgcmVsZXZhbnQgbWFrZWZpbGVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCB0aGUgYnVpbGQgc3lzdGVtIHRvIHNlZSB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIG1vZHVsZXMgYXJlIGxpbmtlZCB3aXRoIG9yIHJlcXVpcmVkIGJ5IHRoaXMgYElETEVUSU1FUmAgdGFyZ2V0LiBBcmUgdGhlcmUgYW55IG90aGVyIGtlcm5lbCBmZWF0dXJlcyB0aGF0IHJlbHkgb24gdGhlIGlkbGUgdGltZXIgbG9naWMsIGZvciBleGFtcGxlPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlbiBiYWNrIG91dCBmcm9tIHRoZXJlLCBvciB1c2UgYG1ha2UgbWVudWNvbmZpZ2Agb3IgYGRlZmNvbmZpZ2AgdG8gY2hlY2suIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZSDigJMgYHh0YWJsZXNgLCBgaXB0YWJsZXNgLCBhbmQgYW55IG90aGVyIHRhcmdldCBtb2R1bGVzIHRoYXQgbWlnaHQgYmUgdXNlZCBhbG9uZ3NpZGUgaXQuIFRoZSBnb2FsIGlzIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLCBhbmQgYW55IGNvbmZsaWN0cyBvciBwcmVyZXF1aXNpdGVzIGl0IG1pZ2h0IGludHJvZHVjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkxNzpcdFxuIDkxODpcdGNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUlxuIDkxOTpcdFx0dHJpc3RhdGUgIFwmIzM0O0lETEVUSU1FUiB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuIDkyMDpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiA5MjE6XHRcdGhlbHBcbiA5MjI6XHRcbiA5MjM6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgYElETEVUSU1FUiYjMzk7IHRhcmdldC4gIEVhY2ggbWF0Y2hpbmcgcGFja2V0XG4gOTI0Olx0XHQgIHJlc2V0cyB0aGUgdGltZXIgYXNzb2NpYXRlZCB3aXRoIGxhYmVsIHNwZWNpZmllZCB3aGVuIHRoZSBydWxlIGlzXG4gOTI1Olx0XHQgIGFkZGVkLiAgV2hlbiB0aGUgdGltZXIgZXhwaXJlcywgaXQgdHJpZ2dlcnMgYSBzeXNmcyBub3RpZmljYXRpb24uXG4gOTI2Olx0XHQgIFRoZSByZW1haW5pbmcgdGltZSBmb3IgZXhwaXJhdGlvbiBjYW4gYmUgcmVhZCB2aWEgc3lzZnMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NzcyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjkxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQYXRjaCBDaGFuZ2VzIC0gQSBGb2N1c2VkIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IGdvbmUgdGhyb3VnaCB0aGlzIGRpZmYuIE15IGluaXRpYWwgZm9jdXMgd2FzIG9uIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgZnVuY3Rpb25hbCByZWdyZXNzaW9ucyBpbnRyb2R1Y2VkLCBwYXJ0aWN1bGFybHkgaW4gdGhlIG5ldGZpbHRlciBjb2RlLgoKSGVyZSYjMzk7cyBteSBicmVha2Rvd246CgoqICAgKipgeHRfSURMRVRJTUVSLmNgIENoYW5nZToqKiBIb25lc3RseSwgdGhlIGB4dF9JRExFVElNRVIuY2AgY2hhbmdlIGlzIG1pbm9yLiBNb3ZpbmcgYG11dGV4X3VubG9ja2AgYmVmb3JlIHRoZSBgcHJfaW5mb19yYXRlbGltaXRlZGAgY2FsbCBpcyBhIHZhbGlkIG9wdGltaXphdGlvbuKAlHJlbGVhc2luZyB0aGUgbG9jayBlYXJsaWVy4oCUYW5kIHdoaWxlIGl0IG1vZGlmaWVzIGJlaGF2aW91ciwgaXQgaXMgdW5saWtlbHkgdG8gaW50cm9kdWNlIHNpZ25pZmljYW50IG5ldyBiZWhhdmlvdXIuCgoqICAgKipgeHRfQ1QuY2AgLSBUaGUgUmVhbCBQcm9ibGVtOioqIFRoZSBgeHRfQ1QuY2AgY2hhbmdlIGltbWVkaWF0ZWx5IGNhdWdodCBteSBhdHRlbnRpb24uIEl0IG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBgaW5mby0mZ3Q7aGVscGVyYCBhbmQgYGluZm8tJmd0O3RpbWVvdXRgIHBhcmFtZXRlcnMgdXNlZCBieSB0aGUgY29ubmVjdGlvbiB0cmFja2luZyB0YXJnZXQuIEl0ICpsb29rcyogbGlrZSB0aGUgYXV0aG9yIHRyaWVkIHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgYHN0cm5sZW5gIG91dC1vZi1ib3VuZHMgcmVhZCwgYnV0IGluIGRvaW5nIHNvLCB0aGV5JiMzOTt2ZSBpbnRyb2R1Y2VkIGEgKipkZWZpbml0ZSBidWcqKi4gVGhlIGxvZ2ljIG5vdyAqKnNraXBzIHZhbGlkYXRpb24qKiB3aGVuIHRoZSBgaW5mby0mZ3Q7aGVscGVyYCBidWZmZXIgaXMgKm5vdCogbnVsbC10ZXJtaW5hdGVkLiBQcmV2aW91c2x5LCBhIG5vbi1udWxsLXRlcm1pbmF0ZWQgYnVmZmVyIHJlc3VsdGVkIGluIGFuIGVycm9yLCBzbyB0aGUgY2hhbmdlcyBsZWFkIHRvIGFuIHVuZGVmaW5lZCBzdGF0ZSB3aGVyZSB0aGVyZSBjb3VsZCBiZSBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIG90aGVyIHBvdGVudGlhbCBpc3N1ZXMuIFRoaXMgaXMgYSBjbGVhciBjYXNlIGZvciBmdXp6aW5nLiBUaGUga2V5IGZ1bmN0aW9uIHRvIHRhcmdldCBpcyBgeHRfY3RfdGdfY2hlY2tgLgoKKiAgICoqT3RoZXIgQ2hhbmdlczogTW9zdGx5IExvZ2dpbmc6KiogVGhlIHJlbWFpbmluZyBjaGFuZ2Vz4oCUaW4gYHh0X2Nncm91cC5jYCwgYHh0X0xPRy5jYCwgYHh0X01BU1FVRVJBREUuY2AsIGB4dF9ORVRNQVAuY2AsIGB4dF9SRURJUkVDVC5jYCwgYHh0X1NFQ01BUksuY2AsIGB4dF9DT05OU0VDTUFSSy5jYCwgYGlwdF9ycGZpbHRlci5jYCwgYW5kIGBpcDZ0X3JwZmlsdGVyLmNg4oCUYXJlIHByZWRvbWluYW50bHkgYWJvdXQgY2hhbmdpbmcgYHByX2RlYnVnYCBjYWxscyB0byBgcHJfaW5mb19yYXRlbGltaXRlZGAgb3Igc2ltcGxpZnlpbmcgZXJyb3IgbWVzc2FnZXMuIFRoZXNlIGFyZSBnZW5lcmFsbHkgb2theSwgb3IgZXZlbiBpbXByb3ZlbWVudHMgZm9yIG1lc3NhZ2UgZmxvb2QgcmVkdWN0aW9uLCBidXQgdGhleSBkb24mIzM5O3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIHJlZ3Jlc3Npb25zIHRoYXQgSSBjYW4gaW1tZWRpYXRlbHkgc2VlLgoKKiAgICoqQWN0aW9uYWJsZSBOZXh0IFN0ZXBzOioqIFRoZSAqY3JpdGljYWwqIHRoaW5nIHRvIGRvIG5vdyBpcyB0byBmb2N1cyBvbiB0aGUgYHh0X0NULmNgIGNoYW5nZS4gVGhpcyBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLiBUaGUgZm9jdXMgc2hvdWxkIGJlIG9uIGNyYWZ0aW5nIGlucHV0cyB3aGVyZSBgaW5mby0mZ3Q7aGVscGVyYCBpcyAqbm90KiBudWxsLXRlcm1pbmF0ZWQuIFdlIG5lZWQgdG8gZXhwbG9yZSB0aGUgZXhhY3QgY29uc2VxdWVuY2VzIG9mIHRoaXMgY2hhbmdlIGluIHRoZSBrZXJuZWzigJlzIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMuIFRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBzdGFydCBkaWdnaW5nIHdpdGggYSB0YXJnZXRlZCBmdXp6aW5nIGNhbXBhaWduLiBUaGUgY29uZmlncyBJIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byBhcmUgYE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGVpdGhlciBgSVBfTkZfUkFXYCBvciBgSVA2X05GX1JBV2AsIGFsb25nIHdpdGggYE5FVEZJTFRFUl9BRFZBTkNFRGAuCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX05GX1JBVyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTI5MT1jb25maWcgSVBfTkZfVEFSR0VUX1RUTFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMwMC0jIHJhdyAmIzQzOyBzcGVjaWZpYyB0YXJnZXRzXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzozMDE6Y29uZmlnIElQX05GX1JBV1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzAyLVx0dHJpc3RhdGUgICYjMzk7cmF3IHRhYmxlIHN1cHBvcnQgKHJlcXVpcmVkIGZvciBOT1RSQUNLL1RSQUNFKSYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDI4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBJUHY2IFJhdyBTb2NrZXQgRmlsdGVyaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgYElQNl9ORl9SQVdgIHRoaW5nIHdvcmtzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBqdW1wIGludG8gYEtjb25maWdgLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgd2hlbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhIGtlcm5lbCBmZWF0dXJlJiMzOTtzIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSBgSVA2X05GX1JBV2AgaXMgZGVmaW5lZCwgd2hpY2ggZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHBlcmhhcHMgZXZlbiB3aGF0IGNvbnRleHQgc3Vycm91bmRzIGl0LiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCB3aGVyZSBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBJUHY2IHJhdyBzb2NrZXQgZmlsdGVyaW5nIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yay4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSB0ZWxscyBtZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQNl9ORl9SQVcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0yMzQ9Y29uZmlnIElQNl9ORl9NQU5HTEVcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yNDQtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyNDU6Y29uZmlnIElQNl9ORl9SQVdcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTI0Ni1cdHRyaXN0YXRlICAmIzM5O3JhdyB0YWJsZSBzdXBwb3J0IChyZXF1aXJlZCBmb3IgVFJBQ0UpJiMzOTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3MzkKCQkJCQkJCW91dHB1dDogMjE3CgkJCQkJCQl0aG91Z2h0czogMTA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFzb25pbmcgVGhyb3VnaCB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbCBSZXF1aXJlbWVudHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gVGhlIGluaXRpYWwgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFuZCByZWxldmFudCBzeW1ib2xzIGZvciBhIHNwZWNpZmljIG5ldGZpbHRlciB0YXJnZXQsIGxpa2VseSByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRoZSBwcm9tcHQgc3BlY2lmaWVzIHRoZSBvdXRwdXQgZm9ybWF0IGZvciBjb25maWd1cmF0aW9ucywgc28gSSBuZWVkIHRvIGF2b2lkIHRoZSBgQ09ORklHX2AgcHJlZml4LgoKRmlyc3QsIEkgaWRlbnRpZmllZCB0aGUgaW5pdGlhbCBzZXQgb2YgcG90ZW50aWFsbHkgbmVlZGVkIGNvbmZpZ3VyYXRpb25zOiBgTkVURklMVEVSX1hUX1RBUkdFVF9DVGAsIGBORl9DT05OVFJBQ0tgLCBgSVBfTkZfUkFXYCwgYW5kIGBORVRGSUxURVJfQURWQU5DRURgLiBUaGUgcHJvbXB0JiMzOTtzIHJlcXVpcmVtZW50IGlzIGNsZWFyOiBqdXN0IHRoZSBiYXJlIG5hbWVzLgoKTm93LCBsZXQmIzM5O3MgZGlnIGRlZXBlciB0byBzZWUgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxhdGVkIHRvIGB4dF9DVGAuIFVwb24gZXhhbWluYXRpb24sIEkgc2VlIHRoZSBgeHRfSURMRVRJTUVSLmNgIGZpbGUgaXMgYWxzbyB0b3VjaGVkIGluIHRoZSBwYXRjaCwgc28gYE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSYCBzaG91bGQgYWxzbyBiZSBpbmNsdWRlZCBiZWNhdXNlIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuCgpOZXh0LCB0aGUgcHJvbXB0IHdhbnRzIHN5bWJvbHMuIFRoZSBmdW5jdGlvbnMgdGhhdCBzZWVtIGNlbnRyYWwgdG8gdGhlIHRhcmdldCYjMzk7cyBvcGVyYXRpb24gYXJlIGB4dF9jdF90Z19jaGVja2AgYW5kIGBpZGxldGltZXJfdGdfY2hlY2tlbnRyeWAuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgZW1waGFzaXplcyB0aGUgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5IHBvaW50cy4gVGhhdCBnaXZlcyBtZSBwYXVzZS4KClVwb24gY2xvc2VyIGluc3BlY3Rpb24sIEkgY29uZmlybSB0aGF0IGJvdGggYHh0X2N0X3RnX2NoZWNrYCBpcyBhY3R1YWxseSBzdGF0aWMuIEhvd2V2ZXIsIGl0JiMzOTtzIGNhbGxlZCBieSBgeHRfY3RfdGdfY2hlY2tfdjBgLCBgeHRfY3RfdGdfY2hlY2tfdjFgLCBgeHRfY3RfdGdfY2hlY2tfdjJgLiBUaGVzZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSByZWdpc3RlcmVkIGluIGB4dF9jdF90Z19yZWdgIGFycmF5LCB3aGljaCBpcyBwYXNzZWQgdG8gYHh0X3JlZ2lzdGVyX3RhcmdldHNgLiBUaGUgZW50cnkgcG9pbnQgZnJvbSB1c2Vyc3BhY2UgaXMgYHh0X2NoZWNrX3RhcmdldGAsIGJ1dCBgeHRfY3RfdGdfY2hlY2tgIGlzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbi4gU2luY2UgdGhlIGZ1bmN0aW9uIGlzIG5vdCBpbmxpbmVkLCBJJiMzOTtsbCBwcm92aWRlIGB4dF9jdF90Z19jaGVja2AgZm9yIG5vdyBhbmQgc2VlIGlmIHRoZSBmdXp6ZXIgY2FuIHJlc29sdmUgdGhlIHN0YXRpYyBmdW5jdGlvbnMuCgpUaGUgcGF0Y2gmIzM5O3MgZnVuY3Rpb25hbCBjaGFuZ2VzIGludm9sdmUgY2hhbmdlcyB0byB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYGluZm8tJmd0O2hlbHBlcmAgYW5kIGBpbmZvLSZndDt0aW1lb3V0YCBhbmQgbW9kaWZ5aW5nIGB4dF9JRExFVElNRVIuY2AgdG8gcmVsZWFzZSBhIG11dGV4LCB3aGljaCBpbXBhY3RzIHRoZSBleGVjdXRpb24gZmxvdy4gVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgcmVhY2hhYmxlIHZpYSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbiwgbWFraW5nIHRoZW0gcmVsZXZhbnQgdG8gdGhlIG92ZXJhbGwgdGFyZ2V0IGJlaGF2aW9yLgoKVGhlcmVmb3JlLCBteSBmaW5hbCBsaXN0IGlzOgoKQ29uZmlnczoKYE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RgCmBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUmAKYE5GX0NPTk5UUkFDS2AKYElQX05GX1JBV2AKYE5FVEZJTFRFUl9BRFZBTkNFRGAKClN5bWJvbHM6CmB4dF9jdF90Z19jaGVja2AKCkxldCYjMzk7cyBwcm9jZWVkIHdpdGggdGhlc2UgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9YVF9UQVJHRVRfQ1QmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVImIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O0lQX05GX1JBVyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4dF9jdF90Z19jaGVjayYjMzQ7LAogICAgJiMzNDtpZGxldGltZXJfdGdfY2hlY2tlbnRyeSYjMzQ7LAogICAgJiMzNDtpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgeHRfQ1QuY2AgdG8gY2hhbmdlIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgaW5mby1cdTAwM2VoZWxwZXJgIGFuZCBgaW5mby1cdTAwM2V0aW1lb3V0YC4gSWYgdGhleSBhcmUgbm90IG51bGwtdGVybWluYXRlZCwgdGhlIG5ldyBjb2RlIHNraXBzIHNldHRpbmcgdGhlbSBpbnN0ZWFkIG9mIHJldHVybmluZyBgLUVOQU1FVE9PTE9OR2AsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHRhcmdldCBpbml0aWFsaXphdGlvbiBsb2dpYy4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYHh0X0lETEVUSU1FUi5jYCB0byByZWxlYXNlIGEgbXV0ZXggYmVmb3JlIGxvZ2dpbmcsIHdoaWNoIGlzIGEgbWlub3IgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9DVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUiYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7SVBfTkZfUkFXJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3h0X2N0X3RnX2NoZWNrJiMzNDssCiAgICAmIzM0O2lkbGV0aW1lcl90Z19jaGVja2VudHJ5JiMzNDssCiAgICAmIzM0O2lkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB4dF9DVC5jYCB0byBjaGFuZ2UgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBpbmZvLVx1MDAzZWhlbHBlcmAgYW5kIGBpbmZvLVx1MDAzZXRpbWVvdXRgLiBJZiB0aGV5IGFyZSBub3QgbnVsbC10ZXJtaW5hdGVkLCB0aGUgbmV3IGNvZGUgc2tpcHMgc2V0dGluZyB0aGVtIGluc3RlYWQgb2YgcmV0dXJuaW5nIGAtRU5BTUVUT09MT05HYCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdGFyZ2V0IGluaXRpYWxpemF0aW9uIGxvZ2ljLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgeHRfSURMRVRJTUVSLmNgIHRvIHJlbGVhc2UgYSBtdXRleCBiZWZvcmUgbG9nZ2luZywgd2hpY2ggaXMgYSBtaW5vciBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlc2UgY2hhbmdlcyBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBjb25maWd1cmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgcmVtb3ZlcyBgcHJfZGVidWdgIHN0YXRlbWVudHMgYW5kIGNvbnZlcnRzIHNvbWUgdG8gYHByX2luZm9fcmF0ZWxpbWl0ZWRgIGFjcm9zcyB2YXJpb3VzIG5ldGZpbHRlciBtb2R1bGVzLiBUaGVyZSBpcyBhbHNvIGEgbG9naWNhbCBjaGFuZ2UgaW4gYHh0X0NULmNgIHJlZ2FyZGluZyB0aGUgdmFsaWRhdGlvbiBvZiBgaW5mby1cdTAwM2VoZWxwZXJgIGFuZCBgaW5mby1cdTAwM2V0aW1lb3V0YCBzdHJpbmdzLCB3aGljaCBpbnRyb2R1Y2VzIGRlYWQgY29kZSBhbmQgYWx0ZXJzIHRoZSBlcnJvciBoYW5kbGluZyBmb3Igbm9uLW51bGwtdGVybWluYXRlZCBzdHJpbmdzLiBIb3dldmVyLCB0aGUgYGluZm9gIHN0cnVjdHVyZSAoYHBhci1cdTAwM2V0YXJnaW5mb2ApIGlzIHBvcHVsYXRlZCB2aWEgYGNvcHlfZnJvbV91c2VyYCB3aXRoIGRhdGEgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUga2VybmVsJiMzOTtzIHBlcnNwZWN0aXZlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHRoZSBsb2dpYyBmbGF3IGluIGB4dF9DVC5jYCkgYXJlIGZ1bmN0aW9uYWwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MzM4YWVjNTVjZTFlZDBmZWYwMThiMGM4N2E2YWUzNDFiNmE2YTc3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTQ6Mzk6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FoLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FoLmMKaW5kZXggMTYxYmE0MTJjYjA4Yi4uNzEzMWYyOTdhZGEyZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfYWguYwpAQCAtMTksMTIgJiM0MzsxOSw3IEBAIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O1h0YWJsZXM6IElQdjQgSVBzZWMtQUggU1BJIG1hdGNoJiMzNDspOwogc3RhdGljIGlubGluZSBib29sCiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpCiB7Ci0JYm9vbCByOwotCXByX2RlYnVnKCYjMzQ7c3BpX21hdGNoOiVjIDB4JXggJmx0Oz0gMHgleCAmbHQ7PSAweCV4XG4mIzM0OywKLQkJIGludmVydCA/ICYjMzk7ISYjMzk7IDogJiMzOTsgJiMzOTssIG1pbiwgc3BpLCBtYXgpOwotCXIgPSAoc3BpICZndDs9IG1pbiAmYW1wOyZhbXA7IHNwaSAmbHQ7PSBtYXgpIF4gaW52ZXJ0OwotCXByX2RlYnVnKCYjMzQ7IHJlc3VsdCAlc1xuJiMzNDssIHIgPyAmIzM0O1BBU1MmIzM0OyA6ICYjMzQ7RkFJTEVEJiMzNDspOwotCXJldHVybiByOwomIzQzOwlyZXR1cm4gKHNwaSAmZ3Q7PSBtaW4gJmFtcDsmYW1wOyBzcGkgJmx0Oz0gbWF4KSBeIGludmVydDsKIH0KIAogc3RhdGljIGJvb2wgYWhfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQpAQCAtNDIsNyAmIzQzOzM3LDYgQEAgc3RhdGljIGJvb2wgYWhfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkvKiBXZSYjMzk7dmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2UKIAkJICogY2FuJiMzOTt0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4KIAkJICovCi0JCXByX2RlYnVnKCYjMzQ7RHJvcHBpbmcgZXZpbCBBSCB0aW55Z3JhbS5cbiYjMzQ7KTsKIAkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTU4LDcgJiM0Mzs1Miw3IEBAIHN0YXRpYyBpbnQgYWhfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAKIAkvKiBNdXN0IHNwZWNpZnkgbm8gdW5rbm93biBpbnZmbGFncyAqLwogCWlmIChhaGluZm8tJmd0O2ludmZsYWdzICZhbXA7IH5JUFRfQUhfSU5WX01BU0spIHsKLQkJcHJfZGVidWcoJiMzNDt1bmtub3duIGZsYWdzICVYXG4mIzM0OywgYWhpbmZvLSZndDtpbnZmbGFncyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7dW5rbm93biBmbGFncyAlWFxuJiMzNDssIGFoaW5mby0mZ3Q7aW52ZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JwZmlsdGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JwZmlsdGVyLmMKaW5kZXggNmQ5YmY1MTA2ODY4NC4uMmMzOGZkNjYyNGFhMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ycGZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuYwpAQCAtOTUsOCAmIzQzOzk1LDcgQEAgc3RhdGljIGludCBycGZpbHRlcl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAogCWlmIChzdHJjbXAocGFyLSZndDt0YWJsZSwgJiMzNDttYW5nbGUmIzM0OykgIT0gMCAmYW1wOyZhbXA7CiAJICAgIHN0cmNtcChwYXItJmd0O3RhYmxlLCAmIzM0O3JhdyYjMzQ7KSAhPSAwKSB7Ci0JCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtvbmx5IHZhbGlkIGluIFwmIzM5O3Jhd1wmIzM5OyBvciBcJiMzOTttYW5nbGVcJiMzOTsgdGFibGUsIG5vdCBcJiMzOTslc1wmIzM5O1xuJiMzNDssCi0JCQkJICAgIHBhci0mZ3Q7dGFibGUpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O29ubHkgdmFsaWQgaW4gXCYjMzk7cmF3XCYjMzk7IG9yIFwmIzM5O21hbmdsZVwmIzM5OyB0YWJsZVxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jCmluZGV4IDEyNTg3ODNlZDg3NjIuLmRhYjdkYmM2YTY3NWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguYwpAQCAtMjQsMTMgJiM0MzsyNCw3IEBAIE1PRFVMRV9BVVRIT1IoJiMzNDtBbmRyYXMgS2lzLVN6YWJvICZsdDtraXN6YUBzY2guYm1lLmh1Jmd0OyYjMzQ7KTsKIHN0YXRpYyBpbmxpbmUgYm9vbAogc3BpX21hdGNoKHVfaW50MzJfdCBtaW4sIHVfaW50MzJfdCBtYXgsIHVfaW50MzJfdCBzcGksIGJvb2wgaW52ZXJ0KQogewotCWJvb2wgcjsKLQotCXByX2RlYnVnKCYjMzQ7c3BpX21hdGNoOiVjIDB4JXggJmx0Oz0gMHgleCAmbHQ7PSAweCV4XG4mIzM0OywKLQkJIGludmVydCA/ICYjMzk7ISYjMzk7IDogJiMzOTsgJiMzOTssIG1pbiwgc3BpLCBtYXgpOwotCXIgPSAoc3BpICZndDs9IG1pbiAmYW1wOyZhbXA7IHNwaSAmbHQ7PSBtYXgpIF4gaW52ZXJ0OwotCXByX2RlYnVnKCYjMzQ7IHJlc3VsdCAlc1xuJiMzNDssIHIgPyAmIzM0O1BBU1MmIzM0OyA6ICYjMzQ7RkFJTEVEJiMzNDspOwotCXJldHVybiByOwomIzQzOwlyZXR1cm4gKHNwaSAmZ3Q7PSBtaW4gJmFtcDsmYW1wOyBzcGkgJmx0Oz0gbWF4KSBeIGludmVydDsKIH0KIAogc3RhdGljIGJvb2wgYWhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKQEAgLTYyLDIzICYjNDM7NTYsNiBAQCBzdGF0aWMgYm9vbCBhaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JcHJfZGVidWcoJiMzNDtJUHY2IEFIIExFTiAldSAldSAmIzM0OywgaGRybGVuLCBhaC0mZ3Q7aGRybGVuKTsKLQlwcl9kZWJ1ZygmIzM0O1JFUyAlMDRYICYjMzQ7LCBhaC0mZ3Q7cmVzZXJ2ZWQpOwotCXByX2RlYnVnKCYjMzQ7U1BJICV1ICUwOFhcbiYjMzQ7LCBudG9obChhaC0mZ3Q7c3BpKSwgbnRvaGwoYWgtJmd0O3NwaSkpOwotCi0JcHJfZGVidWcoJiMzNDtJUHY2IEFIIHNwaSAlMDJYICYjMzQ7LAotCQkgc3BpX21hdGNoKGFoaW5mby0mZ3Q7c3Bpc1swXSwgYWhpbmZvLSZndDtzcGlzWzFdLAotCQkJICAgbnRvaGwoYWgtJmd0O3NwaSksCi0JCQkgICAhIShhaGluZm8tJmd0O2ludmZsYWdzICZhbXA7IElQNlRfQUhfSU5WX1NQSSkpKTsKLQlwcl9kZWJ1ZygmIzM0O2xlbiAlMDJYICUwNFggJTAyWCAmIzM0OywKLQkJIGFoaW5mby0mZ3Q7aGRybGVuLCBoZHJsZW4sCi0JCSAoIWFoaW5mby0mZ3Q7aGRybGVuIHx8Ci0JCSAgKGFoaW5mby0mZ3Q7aGRybGVuID09IGhkcmxlbikgXgotCQkgICEhKGFoaW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgSVA2VF9BSF9JTlZfTEVOKSkpOwotCXByX2RlYnVnKCYjMzQ7cmVzICUwMlggJTA0WCAlMDJYXG4mIzM0OywKLQkJIGFoaW5mby0mZ3Q7aGRycmVzLCBhaC0mZ3Q7cmVzZXJ2ZWQsCi0JCSAhKGFoaW5mby0mZ3Q7aGRycmVzICZhbXA7JmFtcDsgYWgtJmd0O3Jlc2VydmVkKSk7Ci0KIAlyZXR1cm4gc3BpX21hdGNoKGFoaW5mby0mZ3Q7c3Bpc1swXSwgYWhpbmZvLSZndDtzcGlzWzFdLAogCQkJICBudG9obChhaC0mZ3Q7c3BpKSwKIAkJCSAgISEoYWhpbmZvLSZndDtpbnZmbGFncyAmYW1wOyBJUDZUX0FIX0lOVl9TUEkpKSAmYW1wOyZhbXA7CkBAIC05Myw3ICYjNDM7NzAsNyBAQCBzdGF0aWMgaW50IGFoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAljb25zdCBzdHJ1Y3QgaXA2dF9haCAqYWhpbmZvID0gcGFyLSZndDttYXRjaGluZm87CiAKIAlpZiAoYWhpbmZvLSZndDtpbnZmbGFncyAmYW1wOyB+SVA2VF9BSF9JTlZfTUFTSykgewotCQlwcl9kZWJ1ZygmIzM0O3Vua25vd24gZmxhZ3MgJVhcbiYjMzQ7LCBhaGluZm8tJmd0O2ludmZsYWdzKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDt1bmtub3duIGZsYWdzICVYXG4mIzM0OywgYWhpbmZvLSZndDtpbnZmbGFncyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuYwppbmRleCAzYWFkNjQzOTM4NmIxLi5mNWYzY2ZiODcwNGNmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9mcmFnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jCkBAIC0yMywxMiAmIzQzOzIzLDcgQEAgTU9EVUxFX0FVVEhPUigmIzM0O0FuZHJhcyBLaXMtU3phYm8gJmx0O2tpc3phQHNjaC5ibWUuaHUmZ3Q7JiMzNDspOwogc3RhdGljIGlubGluZSBib29sCiBpZF9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3QgaWQsIGJvb2wgaW52ZXJ0KQogewotCWJvb2wgcjsKLQlwcl9kZWJ1ZygmIzM0O2lkX21hdGNoOiVjIDB4JXggJmx0Oz0gMHgleCAmbHQ7PSAweCV4XG4mIzM0OywgaW52ZXJ0ID8gJiMzOTshJiMzOTsgOiAmIzM5OyAmIzM5OywKLQkJIG1pbiwgaWQsIG1heCk7Ci0JciA9IChpZCAmZ3Q7PSBtaW4gJmFtcDsmYW1wOyBpZCAmbHQ7PSBtYXgpIF4gaW52ZXJ0OwotCXByX2RlYnVnKCYjMzQ7IHJlc3VsdCAlc1xuJiMzNDssIHIgPyAmIzM0O1BBU1MmIzM0OyA6ICYjMzQ7RkFJTEVEJiMzNDspOwotCXJldHVybiByOwomIzQzOwlyZXR1cm4gKGlkICZndDs9IG1pbiAmYW1wOyZhbXA7IGlkICZsdDs9IG1heCkgXiBpbnZlcnQ7CiB9CiAKIHN0YXRpYyBib29sCkBAIC01MywzOCAmIzQzOzQ4LDYgQEAgZnJhZ19tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JcHJfZGVidWcoJiMzNDtJTkZPICUwNFggJiMzNDssIGZoLSZndDtmcmFnX29mZik7Ci0JcHJfZGVidWcoJiMzNDtPRkZTRVQgJTA0WCAmIzM0OywgbnRvaHMoZmgtJmd0O2ZyYWdfb2ZmKSAmYW1wOyB+MHg3KTsKLQlwcl9kZWJ1ZygmIzM0O1JFUyAlMDJYICUwNFgmIzM0OywgZmgtJmd0O3Jlc2VydmVkLCBudG9ocyhmaC0mZ3Q7ZnJhZ19vZmYpICZhbXA7IDB4Nik7Ci0JcHJfZGVidWcoJiMzNDtNRiAlMDRYICYjMzQ7LCBmaC0mZ3Q7ZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVA2X01GKSk7Ci0JcHJfZGVidWcoJiMzNDtJRCAldSAlMDhYXG4mIzM0OywgbnRvaGwoZmgtJmd0O2lkZW50aWZpY2F0aW9uKSwKLQkJIG50b2hsKGZoLSZndDtpZGVudGlmaWNhdGlvbikpOwotCi0JcHJfZGVidWcoJiMzNDtJUHY2IEZSQUcgaWQgJTAyWCAmIzM0OywKLQkJIGlkX21hdGNoKGZyYWdpbmZvLSZndDtpZHNbMF0sIGZyYWdpbmZvLSZndDtpZHNbMV0sCi0JCQkgIG50b2hsKGZoLSZndDtpZGVudGlmaWNhdGlvbiksCi0JCQkgICEhKGZyYWdpbmZvLSZndDtpbnZmbGFncyAmYW1wOyBJUDZUX0ZSQUdfSU5WX0lEUykpKTsKLQlwcl9kZWJ1ZygmIzM0O3JlcyAlMDJYICUwMlglMDRYICUwMlggJiMzNDssCi0JCSBmcmFnaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9GUkFHX1JFUywgZmgtJmd0O3Jlc2VydmVkLAotCQkgbnRvaHMoZmgtJmd0O2ZyYWdfb2ZmKSAmYW1wOyAweDYsCi0JCSAhKChmcmFnaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9GUkFHX1JFUykgJmFtcDsmYW1wOwotCQkgICAoZmgtJmd0O3Jlc2VydmVkIHx8IChudG9ocyhmaC0mZ3Q7ZnJhZ19vZmYpICZhbXA7IDB4MDYpKSkpOwotCXByX2RlYnVnKCYjMzQ7Zmlyc3QgJTAyWCAlMDJYICUwMlggJiMzNDssCi0JCSBmcmFnaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9GUkFHX0ZTVCwKLQkJIG50b2hzKGZoLSZndDtmcmFnX29mZikgJmFtcDsgfjB4NywKLQkJICEoKGZyYWdpbmZvLSZndDtmbGFncyAmYW1wOyBJUDZUX0ZSQUdfRlNUKSAmYW1wOyZhbXA7Ci0JCSAgIChudG9ocyhmaC0mZ3Q7ZnJhZ19vZmYpICZhbXA7IH4weDcpKSk7Ci0JcHJfZGVidWcoJiMzNDttZiAlMDJYICUwMlggJTAyWCAmIzM0OywKLQkJIGZyYWdpbmZvLSZndDtmbGFncyAmYW1wOyBJUDZUX0ZSQUdfTUYsCi0JCSBudG9ocyhmaC0mZ3Q7ZnJhZ19vZmYpICZhbXA7IElQNl9NRiwKLQkJICEoKGZyYWdpbmZvLSZndDtmbGFncyAmYW1wOyBJUDZUX0ZSQUdfTUYpICZhbXA7JmFtcDsKLQkJICAgISgobnRvaHMoZmgtJmd0O2ZyYWdfb2ZmKSAmYW1wOyBJUDZfTUYpKSkpOwotCXByX2RlYnVnKCYjMzQ7bGFzdCAlMDJYICUwMlggJTAyWFxuJiMzNDssCi0JCSBmcmFnaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9GUkFHX05NRiwKLQkJIG50b2hzKGZoLSZndDtmcmFnX29mZikgJmFtcDsgSVA2X01GLAotCQkgISgoZnJhZ2luZm8tJmd0O2ZsYWdzICZhbXA7IElQNlRfRlJBR19OTUYpICZhbXA7JmFtcDsKLQkJICAgKG50b2hzKGZoLSZndDtmcmFnX29mZikgJmFtcDsgSVA2X01GKSkpOwotCiAJcmV0dXJuIGlkX21hdGNoKGZyYWdpbmZvLSZndDtpZHNbMF0sIGZyYWdpbmZvLSZndDtpZHNbMV0sCiAJCQkgbnRvaGwoZmgtJmd0O2lkZW50aWZpY2F0aW9uKSwKIAkJCSAhIShmcmFnaW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgSVA2VF9GUkFHX0lOVl9JRFMpKSAmYW1wOyZhbXA7CkBAIC0xMDMsNyAmIzQzOzY2LDcgQEAgc3RhdGljIGludCBmcmFnX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAljb25zdCBzdHJ1Y3QgaXA2dF9mcmFnICpmcmFnaW5mbyA9IHBhci0mZ3Q7bWF0Y2hpbmZvOwogCiAJaWYgKGZyYWdpbmZvLSZndDtpbnZmbGFncyAmYW1wOyB+SVA2VF9GUkFHX0lOVl9NQVNLKSB7Ci0JCXByX2RlYnVnKCYjMzQ7dW5rbm93biBmbGFncyAlWFxuJiMzNDssIGZyYWdpbmZvLSZndDtpbnZmbGFncyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7dW5rbm93biBmbGFncyAlWFxuJiMzNDssIGZyYWdpbmZvLSZndDtpbnZmbGFncyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMKaW5kZXggNmQxYTVkMjAyNmE2Ny4uMzdjMjA3ZDMxNTJhNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMKQEAgLTc5LDE0ICYjNDM7NzksNiBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXByX2RlYnVnKCYjMzQ7SVB2NiBPUFRTIExFTiAldSAldSAmIzM0OywgaGRybGVuLCBvaC0mZ3Q7aGRybGVuKTsKLQotCXByX2RlYnVnKCYjMzQ7bGVuICUwMlggJTA0WCAlMDJYICYjMzQ7LAotCQkgb3B0aW5mby0mZ3Q7aGRybGVuLCBoZHJsZW4sCi0JCSAoIShvcHRpbmZvLSZndDtmbGFncyAmYW1wOyBJUDZUX09QVFNfTEVOKSB8fAotCQkgICgob3B0aW5mby0mZ3Q7aGRybGVuID09IGhkcmxlbikgXgotCQkgICAhIShvcHRpbmZvLSZndDtpbnZmbGFncyAmYW1wOyBJUDZUX09QVFNfSU5WX0xFTikpKSk7Ci0KIAlyZXQgPSAoIShvcHRpbmZvLSZndDtmbGFncyAmYW1wOyBJUDZUX09QVFNfTEVOKSB8fAogCSAgICAgICAoKG9wdGluZm8tJmd0O2hkcmxlbiA9PSBoZHJsZW4pIF4KIAkJISEob3B0aW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgSVA2VF9PUFRTX0lOVl9MRU4pKSk7CkBAIC05Niw4ICYjNDM7ODgsNiBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAlpZiAoIShvcHRpbmZvLSZndDtmbGFncyAmYW1wOyBJUDZUX09QVFNfT1BUUykpIHsKIAkJcmV0dXJuIHJldDsKIAl9IGVsc2UgewotCQlwcl9kZWJ1ZygmIzM0O1N0cmljdCAmIzM0Oyk7Ci0JCXByX2RlYnVnKCYjMzQ7IyVkICYjMzQ7LCBvcHRpbmZvLSZndDtvcHRzbnIpOwogCQlmb3IgKHRlbXAgPSAwOyB0ZW1wICZsdDsgb3B0aW5mby0mZ3Q7b3B0c25yOyB0ZW1wJiM0MzsmIzQzOykgewogCQkJLyogdHlwZSBmaWVsZCBleGlzdHMgPyAqLwogCQkJaWYgKGhkcmxlbiAmbHQ7IDEpCkBAIC0xMDgsMTMgJiM0Mzs5OCw5IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkJCWJyZWFrOwogCiAJCQkvKiBUeXBlIGNoZWNrICovCi0JCQlpZiAoKnRwICE9IChvcHRpbmZvLSZndDtvcHRzW3RlbXBdICZhbXA7IDB4RkYwMCkgJmd0OyZndDsgOCkgewotCQkJCXByX2RlYnVnKCYjMzQ7VGJhZCAlMDJYICUwMlhcbiYjMzQ7LCAqdHAsCi0JCQkJCSAob3B0aW5mby0mZ3Q7b3B0c1t0ZW1wXSAmYW1wOyAweEZGMDApICZndDsmZ3Q7IDgpOwomIzQzOwkJCWlmICgqdHAgIT0gKG9wdGluZm8tJmd0O29wdHNbdGVtcF0gJmFtcDsgMHhGRjAwKSAmZ3Q7Jmd0OyA4KQogCQkJCXJldHVybiBmYWxzZTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJfZGVidWcoJiMzNDtUb2sgJiMzNDspOwotCQkJfQomIzQzOwogCQkJLyogTGVuZ3RoIGNoZWNrICovCiAJCQlpZiAoKnRwKSB7CiAJCQkJdTE2IHNwZWNfbGVuOwpAQCAtMTI5LDI2ICYjNDM7MTE1LDE4IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkJCQlicmVhazsKIAkJCQlzcGVjX2xlbiA9IG9wdGluZm8tJmd0O29wdHNbdGVtcF0gJmFtcDsgMHgwMEZGOwogCi0JCQkJaWYgKHNwZWNfbGVuICE9IDB4MDBGRiAmYW1wOyZhbXA7IHNwZWNfbGVuICE9ICpscCkgewotCQkJCQlwcl9kZWJ1ZygmIzM0O0xiYWQgJTAyWCAlMDRYXG4mIzM0OywgKmxwLAotCQkJCQkJIHNwZWNfbGVuKTsKJiM0MzsJCQkJaWYgKHNwZWNfbGVuICE9IDB4MDBGRiAmYW1wOyZhbXA7IHNwZWNfbGVuICE9ICpscCkKIAkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCX0KLQkJCQlwcl9kZWJ1ZygmIzM0O0xvayAmIzM0Oyk7CiYjNDM7CiAJCQkJb3B0bGVuID0gKmxwICYjNDM7IDI7CiAJCQl9IGVsc2UgewotCQkJCXByX2RlYnVnKCYjMzQ7UGFkMVxuJiMzNDspOwogCQkJCW9wdGxlbiA9IDE7CiAJCQl9CiAKLQkJCS8qIFN0ZXAgdG8gdGhlIG5leHQgKi8KLQkJCXByX2RlYnVnKCYjMzQ7bGVuJTA0WFxuJiMzNDssIG9wdGxlbik7Ci0KIAkJCWlmICgocHRyICZndDsgc2tiLSZndDtsZW4gLSBvcHRsZW4gfHwgaGRybGVuICZsdDsgb3B0bGVuKSAmYW1wOyZhbXA7Ci0JCQkgICAgdGVtcCAmbHQ7IG9wdGluZm8tJmd0O29wdHNuciAtIDEpIHsKLQkJCQlwcl9kZWJ1ZygmIzM0O25ldyBwb2ludGVyIGlzIHRvbyBsYXJnZSFcbiYjMzQ7KTsKJiM0MzsJCQkgICAgdGVtcCAmbHQ7IG9wdGluZm8tJmd0O29wdHNuciAtIDEpCiAJCQkJYnJlYWs7Ci0JCQl9CiYjNDM7CiAJCQlwdHIgJiM0Mzs9IG9wdGxlbjsKIAkJCWhkcmxlbiAtPSBvcHRsZW47CiAJCX0KQEAgLTE2NiwxNiAmIzQzOzE0NCwxNiBAQCBzdGF0aWMgaW50IGhiaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJY29uc3Qgc3RydWN0IGlwNnRfb3B0cyAqb3B0c2luZm8gPSBwYXItJmd0O21hdGNoaW5mbzsKIAogCWlmIChvcHRzaW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgfklQNlRfT1BUU19JTlZfTUFTSykgewotCQlwcl9kZWJ1ZygmIzM0O3Vua25vd24gZmxhZ3MgJVhcbiYjMzQ7LCBvcHRzaW5mby0mZ3Q7aW52ZmxhZ3MpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3Vua25vd24gZmxhZ3MgJVhcbiYjMzQ7LCBvcHRzaW5mby0mZ3Q7aW52ZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKG9wdHNpbmZvLSZndDtvcHRzbnIgJmd0OyBJUDZUX09QVFNfT1BUU05SKSB7Ci0JCXByX2RlYnVnKCYjMzQ7dG9vIG1hbnkgc3VwcG9ydGVkIG9wdHMgc3BlY2lmaWVkXG4mIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7dG9vIG1hbnkgc3VwcG9ydGVkIG9wdHMgc3BlY2lmaWVkXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChvcHRzaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9PUFRTX05TVFJJQ1QpIHsKLQkJcHJfZGVidWcoJiMzNDtOb3Qgc3RyaWN0IC0gbm90IGltcGxlbWVudGVkJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O05vdCBzdHJpY3QgLSBub3QgaW1wbGVtZW50ZWQmIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbWguYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X21oLmMKaW5kZXggZmQ0OTJiNjlhY2JjMC4uYmE2ZGNjNzc5MWEwOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbWguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9taC5jCkBAIC00MiwxNCAmIzQzOzQyLDExIEBAIHN0YXRpYyBib29sIG1oX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJaWYgKG1oID09IE5VTEwpIHsKIAkJLyogV2UmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlCiAJCSAgIGNhbiYjMzk7dC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuICovCi0JCXByX2RlYnVnKCYjMzQ7RHJvcHBpbmcgZXZpbCBNSCB0aW55Z3JhbS5cbiYjMzQ7KTsKIAkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAogCWlmIChtaC0mZ3Q7aXA2bWhfcHJvdG8gIT0gSVBQUk9UT19OT05FKSB7Ci0JCXByX2RlYnVnKCYjMzQ7RHJvcHBpbmcgaW52YWxpZCBNSCBQYXlsb2FkIFByb3RvOiAldVxuJiMzNDssCi0JCQkgbWgtJmd0O2lwNm1oX3Byb3RvKTsKIAkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jCmluZGV4IDY3Yzg3YTg4Y2RlNGYuLmFmOGQxMGQ0OWRlODEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnBmaWx0ZXIuYwpAQCAtMTE4LDcgJiM0MzsxMTgsNyBAQCBzdGF0aWMgaW50IHJwZmlsdGVyX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogCiAJaWYgKHN0cmNtcChwYXItJmd0O3RhYmxlLCAmIzM0O21hbmdsZSYjMzQ7KSAhPSAwICZhbXA7JmFtcDsKIAkgICAgc3RyY21wKHBhci0mZ3Q7dGFibGUsICYjMzQ7cmF3JiMzNDspICE9IDApIHsKLQkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O29ubHkgdmFsaWQgaW4gXCYjMzk7cmF3XCYjMzk7IG9yIFwmIzM5O21hbmdsZVwmIzM5OyB0YWJsZSwgbm90IFwmIzM5OyVzXCYjMzk7XG4mIzM0OywKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtvbmx5IHZhbGlkIGluIFwmIzM5O3Jhd1wmIzM5OyBvciBcJiMzOTttYW5nbGVcJiMzOTsgdGFibGVcbiYjMzQ7LAogCQkJCSAgICBwYXItJmd0O3RhYmxlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmMKaW5kZXggMjc4YjUyNzUyZjM2NC4uMGMwMWFjMjc0NmQxZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jCkBAIC0xNTUsMTggJiM0MzsxNTUsMTggQEAgc3RhdGljIGludCBydF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJY29uc3Qgc3RydWN0IGlwNnRfcnQgKnJ0aW5mbyA9IHBhci0mZ3Q7bWF0Y2hpbmZvOwogCiAJaWYgKHJ0aW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgfklQNlRfUlRfSU5WX01BU0spIHsKLQkJcHJfZGVidWcoJiMzNDt1bmtub3duIGZsYWdzICVYXG4mIzM0OywgcnRpbmZvLSZndDtpbnZmbGFncyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7dW5rbm93biBmbGFncyAlWFxuJiMzNDssIHJ0aW5mby0mZ3Q7aW52ZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKHJ0aW5mby0mZ3Q7YWRkcm5yICZndDsgSVA2VF9SVF9IT1BTKSB7Ci0JCXByX2RlYnVnKCYjMzQ7dG9vIG1hbnkgYWRkcmVzc2VzIHNwZWNpZmllZFxuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3RvbyBtYW55IGFkZHJlc3NlcyBzcGVjaWZpZWRcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmICgocnRpbmZvLSZndDtmbGFncyAmYW1wOyAoSVA2VF9SVF9SRVMgfCBJUDZUX1JUX0ZTVF9NQVNLKSkgJmFtcDsmYW1wOwogCSAgICAoIShydGluZm8tJmd0O2ZsYWdzICZhbXA7IElQNlRfUlRfVFlQKSB8fAogCSAgICAgKHJ0aW5mby0mZ3Q7cnRfdHlwZSAhPSAwKSB8fAogCSAgICAgKHJ0aW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgSVA2VF9SVF9JTlZfVFlQKSkpIHsKLQkJcHJfZGVidWcoJiMzNDtgLS1ydC10eXBlIDAmIzM5OyByZXF1aXJlZCBiZWZvcmUgYC0tcnQtMC0qJiMzOTsmIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7YC0tcnQtdHlwZSAwJiMzOTsgcmVxdWlyZWQgYmVmb3JlIGAtLXJ0LTAtKiYjMzk7JiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuYyBiL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuYwppbmRleCAxNDk0YjNlZTMwZTExLi40ZTQ0MzZhOTEwNGI0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5jCkBAIC04Nyw4ICYjNDM7ODcsNyBAQCBzdGF0aWMgaW50IGNvbm5zZWNtYXJrX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQogCiAJaWYgKHN0cmNtcChwYXItJmd0O3RhYmxlLCAmIzM0O21hbmdsZSYjMzQ7KSAhPSAwICZhbXA7JmFtcDsKIAkgICAgc3RyY21wKHBhci0mZ3Q7dGFibGUsICYjMzQ7c2VjdXJpdHkmIzM0OykgIT0gMCkgewotCQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7b25seSB2YWxpZCBpbiBcJiMzOTttYW5nbGVcJiMzOTsgb3IgXCYjMzk7c2VjdXJpdHlcJiMzOTsgdGFibGUsIG5vdCBcJiMzOTslc1wmIzM5O1xuJiMzNDssCi0JCQkJICAgIHBhci0mZ3Q7dGFibGUpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O29ubHkgdmFsaWQgaW4gXCYjMzk7bWFuZ2xlXCYjMzk7IG9yIFwmIzM5O3NlY3VyaXR5XCYjMzk7IHRhYmxlXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DVC5jIGIvbmV0L25ldGZpbHRlci94dF9DVC5jCmluZGV4IGU3ODY2MGRmZGY0YjYuLjkxMzI2MDE0YWRlMWMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfQ1QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X0NULmMKQEAgLTE5NSw3ICYjNDM7MTk1LDggQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhciwKIAkJZ290byBlcnIzOwogCX0KIAotCWlmIChpbmZvLSZndDtoZWxwZXJbMF0pIHsKJiM0MzsJaWYgKGluZm8tJmd0O2hlbHBlclswXSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpICZsdDsgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKIAkJaWYgKHN0cm5sZW4oaW5mby0mZ3Q7aGVscGVyLCBzaXplb2YoaW5mby0mZ3Q7aGVscGVyKSkgPT0gc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKIAkJCXJldCA9IC1FTkFNRVRPT0xPTkc7CiAJCQlnb3RvIGVycjM7CkBAIC0yMDYsNyAmIzQzOzIwNyw4IEBAIHN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsCiAJCQlnb3RvIGVycjM7CiAJfQogCi0JaWYgKGluZm8tJmd0O3RpbWVvdXRbMF0pIHsKJiM0MzsJaWYgKGluZm8tJmd0O3RpbWVvdXRbMF0gJmFtcDsmYW1wOwomIzQzOwkgICAgc3RybmxlbihpbmZvLSZndDt0aW1lb3V0LCBzaXplb2YoaW5mby0mZ3Q7dGltZW91dCkpICZsdDsgc2l6ZW9mKGluZm8tJmd0O3RpbWVvdXQpKSB7CiAJCWlmIChzdHJubGVuKGluZm8tJmd0O3RpbWVvdXQsIHNpemVvZihpbmZvLSZndDt0aW1lb3V0KSkgPT0gc2l6ZW9mKGluZm8tJmd0O3RpbWVvdXQpKSB7CiAJCQlyZXQgPSAtRU5BTUVUT09MT05HOwogCQkJZ290byBlcnI0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMKaW5kZXggYmZjZjJkNDRlOTNkYi4uMTViNjk4ZWE5OGFhNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jCkBAIC0xMDIsOCAmIzQzOzEwMiw2IEBAIHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19leHBpcmVkKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogewogCXN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyID0gdGltZXJfY29udGFpbmVyX29mKHRpbWVyLCB0LCB0aW1lcik7CiAKLQlwcl9kZWJ1ZygmIzM0O3RpbWVyICVzIGV4cGlyZWRcbiYjMzQ7LCB0aW1lci0mZ3Q7YXR0ci5hdHRyLm5hbWUpOwotCiAJc2NoZWR1bGVfd29yaygmYW1wO3RpbWVyLSZndDt3b3JrKTsKIH0KIApAQCAtMTExLDcgJiM0MzsxMDksNiBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfYWxhcm1wcm9jKHN0cnVjdCBhbGFybSAqYWxhcm0sIGt0aW1lX3Qgbm93KQogewogCXN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyID0gYWxhcm0tJmd0O2RhdGE7CiAKLQlwcl9kZWJ1ZygmIzM0O2FsYXJtICVzIGV4cGlyZWRcbiYjMzQ7LCB0aW1lci0mZ3Q7YXR0ci5hdHRyLm5hbWUpOwogCXNjaGVkdWxlX3dvcmsoJmFtcDt0aW1lci0mZ3Q7d29yayk7CiB9CiAKQEAgLTE3MSw3ICYjNDM7MTY4LDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbykKIAogCXJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKGlkbGV0aW1lcl90Z19rb2JqLCAmYW1wO2luZm8tJmd0O3RpbWVyLSZndDthdHRyLmF0dHIpOwogCWlmIChyZXQgJmx0OyAwKSB7Ci0JCXByX2RlYnVnKCYjMzQ7Y291bGRuJiMzOTt0IGFkZCBmaWxlIHRvIHN5c2ZzJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2NvdWxkbiYjMzk7dCBhZGQgZmlsZSB0byBzeXNmcyYjMzQ7KTsKIAkJZ290byBvdXRfZnJlZV9hdHRyOwogCX0KIApAQCAtMjIwLDcgJiM0MzsyMTcsNyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvKQogCiAJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosICZhbXA7aW5mby0mZ3Q7dGltZXItJmd0O2F0dHIuYXR0cik7CiAJaWYgKHJldCAmbHQ7IDApIHsKLQkJcHJfZGVidWcoJiMzNDtjb3VsZG4mIzM5O3QgYWRkIGZpbGUgdG8gc3lzZnMmIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7Y291bGRuJiMzOTt0IGFkZCBmaWxlIHRvIHN5c2ZzJiMzNDspOwogCQlnb3RvIG91dF9mcmVlX2F0dHI7CiAJfQogCkBAIC0yMjgsNyAmIzQzOzIyNSw2IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pCiAJa29iamVjdF91ZXZlbnQoaWRsZXRpbWVyX3RnX2tvYmosS09CSl9BREQpOwogCiAJbGlzdF9hZGQoJmFtcDtpbmZvLSZndDt0aW1lci0mZ3Q7ZW50cnksICZhbXA7aWRsZXRpbWVyX3RnX2xpc3QpOwotCXByX2RlYnVnKCYjMzQ7dGltZXIgdHlwZSB2YWx1ZSBpcyAldSYjMzQ7LCBpbmZvLSZndDt0aW1lcl90eXBlKTsKIAlpbmZvLSZndDt0aW1lci0mZ3Q7dGltZXJfdHlwZSA9IGluZm8tJmd0O3RpbWVyX3R5cGU7CiAJaW5mby0mZ3Q7dGltZXItJmd0O3JlZmNudCA9IDE7CiAKQEAgLTI2Myw5ICYjNDM7MjU5LDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBpZGxldGltZXJfdGdfdGFyZ2V0KHN0cnVjdCBza19idWZmICpza2IsCiB7CiAJY29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLSZndDt0YXJnaW5mbzsKIAotCXByX2RlYnVnKCYjMzQ7cmVzZXR0aW5nIHRpbWVyICVzLCB0aW1lb3V0IHBlcmlvZCAldVxuJiMzNDssCi0JCSBpbmZvLSZndDtsYWJlbCwgaW5mby0mZ3Q7dGltZW91dCk7Ci0KIAltb2RfdGltZXIoJmFtcDtpbmZvLSZndDt0aW1lci0mZ3Q7dGltZXIsCiAJCSAgc2Vjc190b19qaWZmaWVzKGluZm8tJmd0O3RpbWVvdXQpICYjNDM7IGppZmZpZXMpOwogCkBAIC0yODAsOSAmIzQzOzI3Myw2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaWRsZXRpbWVyX3RnX3RhcmdldF92MShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogewogCWNvbnN0IHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbyA9IHBhci0mZ3Q7dGFyZ2luZm87CiAKLQlwcl9kZWJ1ZygmIzM0O3Jlc2V0dGluZyB0aW1lciAlcywgdGltZW91dCBwZXJpb2QgJXVcbiYjMzQ7LAotCQkgaW5mby0mZ3Q7bGFiZWwsIGluZm8tJmd0O3RpbWVvdXQpOwotCiAJaWYgKGluZm8tJmd0O3RpbWVyLSZndDt0aW1lcl90eXBlICZhbXA7IFhUX0lETEVUSU1FUl9BTEFSTSkgewogCQlpZGxldGltZXJfc3RhcnRfYWxhcm1fc2VjKGluZm8tJmd0O3RpbWVyLCBpbmZvLSZndDt0aW1lb3V0KTsKIAl9IGVsc2UgewpAQCAtMjk2LDE3ICYjNDM7Mjg2LDE3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaWRsZXRpbWVyX3RnX3RhcmdldF92MShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogc3RhdGljIGludCBpZGxldGltZXJfdGdfaGVscGVyKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbykKIHsKIAlpZiAoaW5mby0mZ3Q7dGltZW91dCA9PSAwKSB7Ci0JCXByX2RlYnVnKCYjMzQ7dGltZW91dCB2YWx1ZSBpcyB6ZXJvXG4mIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7dGltZW91dCB2YWx1ZSBpcyB6ZXJvXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoaW5mby0mZ3Q7dGltZW91dCAmZ3Q7PSBJTlRfTUFYIC8gMTAwMCkgewotCQlwcl9kZWJ1ZygmIzM0O3RpbWVvdXQgdmFsdWUgaXMgdG9vIGJpZ1xuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3RpbWVvdXQgdmFsdWUgaXMgdG9vIGJpZ1xuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGluZm8tJmd0O2xhYmVsWzBdID09ICYjMzk7XDAmIzM5OyB8fAogCSAgICBzdHJubGVuKGluZm8tJmd0O2xhYmVsLAogCQkgICAgTUFYX0lETEVUSU1FUl9MQUJFTF9TSVpFKSA9PSBNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkUpIHsKLQkJcHJfZGVidWcoJiMzNDtsYWJlbCBpcyBlbXB0eSBvciBub3QgbnVsLXRlcm1pbmF0ZWRcbiYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtsYWJlbCBpcyBlbXB0eSBvciBub3QgbnVsLXRlcm1pbmF0ZWRcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpAQCAtMzE4LDM0ICYjNDM7MzA4LDI1IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCiAJc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLSZndDt0YXJnaW5mbzsKIAlpbnQgcmV0OwogCi0JcHJfZGVidWcoJiMzNDtjaGVja2VudHJ5IHRhcmdpbmZvJXNcbiYjMzQ7LCBpbmZvLSZndDtsYWJlbCk7Ci0KIAlyZXQgPSBpZGxldGltZXJfdGdfaGVscGVyKGluZm8pOwogCWlmKHJldCAmbHQ7IDApCi0JewotCQlwcl9kZWJ1ZygmIzM0O2NoZWNrZW50cnkgaGVscGVyIHJldHVybiBpbnZhbGlkXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAltdXRleF9sb2NrKCZhbXA7bGlzdF9tdXRleCk7CiAKIAlpbmZvLSZndDt0aW1lciA9IF9faWRsZXRpbWVyX3RnX2ZpbmRfYnlfbGFiZWwoaW5mby0mZ3Q7bGFiZWwpOwogCWlmIChpbmZvLSZndDt0aW1lcikgewogCQlpZiAoaW5mby0mZ3Q7dGltZXItJmd0O3RpbWVyX3R5cGUgJmFtcDsgWFRfSURMRVRJTUVSX0FMQVJNKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O0FkZGluZy9SZXBsYWNpbmcgcnVsZSB3aXRoIHNhbWUgbGFiZWwgYW5kIGRpZmZlcmVudCB0aW1lciB0eXBlIGlzIG5vdCBhbGxvd2VkXG4mIzM0Oyk7CiAJCQltdXRleF91bmxvY2soJmFtcDtsaXN0X211dGV4KTsKJiM0MzsJCQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7QWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcbiYjMzQ7KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJaW5mby0mZ3Q7dGltZXItJmd0O3JlZmNudCYjNDM7JiM0Mzs7CiAJCW1vZF90aW1lcigmYW1wO2luZm8tJmd0O3RpbWVyLSZndDt0aW1lciwKIAkJCSAgc2Vjc190b19qaWZmaWVzKGluZm8tJmd0O3RpbWVvdXQpICYjNDM7IGppZmZpZXMpOwotCi0JCXByX2RlYnVnKCYjMzQ7aW5jcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxuJiMzNDssCi0JCQkgaW5mby0mZ3Q7bGFiZWwsIGluZm8tJmd0O3RpbWVyLSZndDtyZWZjbnQpOwogCX0gZWxzZSB7CiAJCXJldCA9IGlkbGV0aW1lcl90Z19jcmVhdGUoaW5mbyk7CiAJCWlmIChyZXQgJmx0OyAwKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O2ZhaWxlZCB0byBjcmVhdGUgdGltZXJcbiYjMzQ7KTsKIAkJCW11dGV4X3VubG9jaygmYW1wO2xpc3RfbXV0ZXgpOwogCQkJcmV0dXJuIHJldDsKIAkJfQpAQCAtMzYwLDMwICYjNDM7MzQxLDIzIEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCiAJc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvID0gcGFyLSZndDt0YXJnaW5mbzsKIAlpbnQgcmV0OwogCi0JcHJfZGVidWcoJiMzNDtjaGVja2VudHJ5IHRhcmdpbmZvJXNcbiYjMzQ7LCBpbmZvLSZndDtsYWJlbCk7Ci0KIAlpZiAoaW5mby0mZ3Q7c2VuZF9ubF9tc2cpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXJldCA9IGlkbGV0aW1lcl90Z19oZWxwZXIoKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqKWluZm8pOwogCWlmKHJldCAmbHQ7IDApCi0JewotCQlwcl9kZWJ1ZygmIzM0O2NoZWNrZW50cnkgaGVscGVyIHJldHVybiBpbnZhbGlkXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAotCWlmIChpbmZvLSZndDt0aW1lcl90eXBlICZndDsgWFRfSURMRVRJTUVSX0FMQVJNKSB7Ci0JCXByX2RlYnVnKCYjMzQ7aW52YWxpZCB2YWx1ZSBmb3IgdGltZXIgdHlwZVxuJiMzNDspOwomIzQzOwlpZiAoaW5mby0mZ3Q7dGltZXJfdHlwZSAmZ3Q7IFhUX0lETEVUSU1FUl9BTEFSTSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJbXV0ZXhfbG9jaygmYW1wO2xpc3RfbXV0ZXgpOwogCiAJaW5mby0mZ3Q7dGltZXIgPSBfX2lkbGV0aW1lcl90Z19maW5kX2J5X2xhYmVsKGluZm8tJmd0O2xhYmVsKTsKIAlpZiAoaW5mby0mZ3Q7dGltZXIpIHsKIAkJaWYgKGluZm8tJmd0O3RpbWVyLSZndDt0aW1lcl90eXBlICE9IGluZm8tJmd0O3RpbWVyX3R5cGUpIHsKLQkJCXByX2RlYnVnKCYjMzQ7QWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcbiYjMzQ7KTsKIAkJCW11dGV4X3VubG9jaygmYW1wO2xpc3RfbXV0ZXgpOwomIzQzOwkJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtBZGRpbmcvUmVwbGFjaW5nIHJ1bGUgd2l0aCBzYW1lIGxhYmVsIGFuZCBkaWZmZXJlbnQgdGltZXIgdHlwZSBpcyBub3QgYWxsb3dlZFxuJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApAQCAtMzkzLDIxICYjNDM7MzY3LDE1IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCiAJCQlrdGltZV90IHRvdXQgPSBhbGFybV9leHBpcmVzX3JlbWFpbmluZygmYW1wO2luZm8tJmd0O3RpbWVyLSZndDthbGFybSk7CiAJCQlzdHJ1Y3QgdGltZXNwZWM2NCBrdGltZXNwZWMgPSBrdGltZV90b190aW1lc3BlYzY0KHRvdXQpOwogCi0JCQlpZiAoa3RpbWVzcGVjLnR2X3NlYyAmZ3Q7IDApIHsKLQkJCQlwcl9kZWJ1ZygmIzM0O3RpbWVfZXhwaXJ5X3JlbWFpbmluZyAlbGxkXG4mIzM0OywKLQkJCQkJIGt0aW1lc3BlYy50dl9zZWMpOwomIzQzOwkJCWlmIChrdGltZXNwZWMudHZfc2VjICZndDsgMCkKIAkJCQlpZGxldGltZXJfc3RhcnRfYWxhcm1fa3RpbWUoaW5mby0mZ3Q7dGltZXIsIHRvdXQpOwotCQkJfQogCQl9IGVsc2UgewogCQkJCW1vZF90aW1lcigmYW1wO2luZm8tJmd0O3RpbWVyLSZndDt0aW1lciwKIAkJCQkJc2Vjc190b19qaWZmaWVzKGluZm8tJmd0O3RpbWVvdXQpICYjNDM7IGppZmZpZXMpOwogCQl9Ci0JCXByX2RlYnVnKCYjMzQ7aW5jcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxuJiMzNDssCi0JCQkgaW5mby0mZ3Q7bGFiZWwsIGluZm8tJmd0O3RpbWVyLSZndDtyZWZjbnQpOwogCX0gZWxzZSB7CiAJCXJldCA9IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoaW5mbyk7CiAJCWlmIChyZXQgJmx0OyAwKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O2ZhaWxlZCB0byBjcmVhdGUgdGltZXJcbiYjMzQ7KTsKIAkJCW11dGV4X3VubG9jaygmYW1wO2xpc3RfbXV0ZXgpOwogCQkJcmV0dXJuIHJldDsKIAkJfQpAQCAtNDIxLDE5ICYjNDM7Mzg5LDEzIEBAIHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcikKIHsKIAljb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8gPSBwYXItJmd0O3RhcmdpbmZvOwogCi0JcHJfZGVidWcoJiMzNDtkZXN0cm95IHRhcmdpbmZvICVzXG4mIzM0OywgaW5mby0mZ3Q7bGFiZWwpOwotCiAJbXV0ZXhfbG9jaygmYW1wO2xpc3RfbXV0ZXgpOwogCiAJaWYgKC0taW5mby0mZ3Q7dGltZXItJmd0O3JlZmNudCAmZ3Q7IDApIHsKLQkJcHJfZGVidWcoJiMzNDtkZWNyZWFzZWQgcmVmY250IG9mIHRpbWVyICVzIHRvICV1XG4mIzM0OywKLQkJCSBpbmZvLSZndDtsYWJlbCwgaW5mby0mZ3Q7dGltZXItJmd0O3JlZmNudCk7CiAJCW11dGV4X3VubG9jaygmYW1wO2xpc3RfbXV0ZXgpOwogCQlyZXR1cm47CiAJfQogCi0JcHJfZGVidWcoJiMzNDtkZWxldGluZyB0aW1lciAlc1xuJiMzNDssIGluZm8tJmd0O2xhYmVsKTsKLQogCWxpc3RfZGVsKCZhbXA7aW5mby0mZ3Q7dGltZXItJmd0O2VudHJ5KTsKIAltdXRleF91bmxvY2soJmFtcDtsaXN0X211dGV4KTsKIApAQCAtNDQ4LDE5ICYjNDM7NDEwLDEzIEBAIHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19kZXN0cm95X3YxKGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcikKIHsKIAljb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItJmd0O3RhcmdpbmZvOwogCi0JcHJfZGVidWcoJiMzNDtkZXN0cm95IHRhcmdpbmZvICVzXG4mIzM0OywgaW5mby0mZ3Q7bGFiZWwpOwotCiAJbXV0ZXhfbG9jaygmYW1wO2xpc3RfbXV0ZXgpOwogCiAJaWYgKC0taW5mby0mZ3Q7dGltZXItJmd0O3JlZmNudCAmZ3Q7IDApIHsKLQkJcHJfZGVidWcoJiMzNDtkZWNyZWFzZWQgcmVmY250IG9mIHRpbWVyICVzIHRvICV1XG4mIzM0OywKLQkJCSBpbmZvLSZndDtsYWJlbCwgaW5mby0mZ3Q7dGltZXItJmd0O3JlZmNudCk7CiAJCW11dGV4X3VubG9jaygmYW1wO2xpc3RfbXV0ZXgpOwogCQlyZXR1cm47CiAJfQogCi0JcHJfZGVidWcoJiMzNDtkZWxldGluZyB0aW1lciAlc1xuJiMzNDssIGluZm8tJmd0O2xhYmVsKTsKLQogCWxpc3RfZGVsKCZhbXA7aW5mby0mZ3Q7dGltZXItJmd0O2VudHJ5KTsKIAltdXRleF91bmxvY2soJmFtcDtsaXN0X211dGV4KTsKIApAQCAtNTM0LDcgJiM0Mzs0OTAsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBpZGxldGltZXJfdGdfaW5pdCh2b2lkKQogCWlkbGV0aW1lcl90Z19jbGFzcyA9IGNsYXNzX2NyZWF0ZSgmIzM0O3h0X2lkbGV0aW1lciYjMzQ7KTsKIAllcnIgPSBQVFJfRVJSKGlkbGV0aW1lcl90Z19jbGFzcyk7CiAJaWYgKElTX0VSUihpZGxldGltZXJfdGdfY2xhc3MpKSB7Ci0JCXByX2RlYnVnKCYjMzQ7Y291bGRuJiMzOTt0IHJlZ2lzdGVyIGRldmljZSBjbGFzc1xuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2NvdWxkbiYjMzk7dCByZWdpc3RlciBkZXZpY2UgY2xhc3NcbiYjMzQ7KTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC01NDIsNyAmIzQzOzQ5OCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGlkbGV0aW1lcl90Z19pbml0KHZvaWQpCiAJCQkJCSAgICBNS0RFVigwLCAwKSwgTlVMTCwgJiMzNDt0aW1lcnMmIzM0Oyk7CiAJZXJyID0gUFRSX0VSUihpZGxldGltZXJfdGdfZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGlkbGV0aW1lcl90Z19kZXZpY2UpKSB7Ci0JCXByX2RlYnVnKCYjMzQ7Y291bGRuJiMzOTt0IHJlZ2lzdGVyIHN5c3RlbSBkZXZpY2VcbiYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtjb3VsZG4mIzM5O3QgcmVnaXN0ZXIgc3lzdGVtIGRldmljZVxuJiMzNDspOwogCQlnb3RvIG91dF9jbGFzczsKIAl9CiAKQEAgLTU1MSw3ICYjNDM7NTA3LDcgQEAgc3RhdGljIGludCBfX2luaXQgaWRsZXRpbWVyX3RnX2luaXQodm9pZCkKIAllcnIgPSB4dF9yZWdpc3Rlcl90YXJnZXRzKGlkbGV0aW1lcl90ZywgQVJSQVlfU0laRShpZGxldGltZXJfdGcpKTsKIAogCWlmIChlcnIgJmx0OyAwKSB7Ci0JCXByX2RlYnVnKCYjMzQ7Y291bGRuJiMzOTt0IHJlZ2lzdGVyIHh0IHRhcmdldFxuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2NvdWxkbiYjMzk7dCByZWdpc3RlciB4dCB0YXJnZXRcbiYjMzQ7KTsKIAkJZ290byBvdXRfZGV2OwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9MT0cuYyBiL25ldC9uZXRmaWx0ZXIveHRfTE9HLmMKaW5kZXggZjM5MjQ0ZjljMGVkOS4uZGUzZjE3Njc5MmEwNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9MT0cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X0xPRy5jCkBAIC01MCwxMiAmIzQzOzUwLDEyIEBAIHN0YXRpYyBpbnQgbG9nX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChsb2dpbmZvLSZndDtsZXZlbCAmZ3Q7PSA4KSB7Ci0JCXByX2RlYnVnKCYjMzQ7bGV2ZWwgJXUgJmd0Oz0gOFxuJiMzNDssIGxvZ2luZm8tJmd0O2xldmVsKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtsZXZlbCAldSAmZ3Q7PSA4XG4mIzM0OywgbG9naW5mby0mZ3Q7bGV2ZWwpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAobG9naW5mby0mZ3Q7cHJlZml4W3NpemVvZihsb2dpbmZvLSZndDtwcmVmaXgpLTFdICE9ICYjMzk7XDAmIzM5OykgewotCQlwcl9kZWJ1ZygmIzM0O3ByZWZpeCBpcyBub3QgbnVsbC10ZXJtaW5hdGVkXG4mIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7cHJlZml4IGlzIG5vdCBudWxsLXRlcm1pbmF0ZWRcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuYyBiL25ldC9uZXRmaWx0ZXIveHRfTUFTUVVFUkFERS5jCmluZGV4IGVhZTA1YzE3ODMzNjcuLmNlYTQ4OGNlYzU0NDUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTUFTUVVFUkFERS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfTUFTUVVFUkFERS5jCkBAIC0yMSwxMSAmIzQzOzIxLDExIEBAIHN0YXRpYyBpbnQgbWFzcXVlcmFkZV90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcikKIAljb25zdCBzdHJ1Y3QgbmZfbmF0X2lwdjRfbXVsdGlfcmFuZ2VfY29tcGF0ICptciA9IHBhci0mZ3Q7dGFyZ2luZm87CiAKIAlpZiAobXItJmd0O3JhbmdlWzBdLmZsYWdzICZhbXA7IE5GX05BVF9SQU5HRV9NQVBfSVBTKSB7Ci0JCXByX2RlYnVnKCYjMzQ7YmFkIE1BUF9JUFMuXG4mIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7YmFkIE1BUF9JUFMuXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAobXItJmd0O3Jhbmdlc2l6ZSAhPSAxKSB7Ci0JCXByX2RlYnVnKCYjMzQ7YmFkIHJhbmdlc2l6ZSAldVxuJiMzNDssIG1yLSZndDtyYW5nZXNpemUpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2JhZCByYW5nZXNpemUgJXVcbiYjMzQ7LCBtci0mZ3Q7cmFuZ2VzaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiBuZl9jdF9uZXRuc19nZXQocGFyLSZndDtuZXQsIHBhci0mZ3Q7ZmFtaWx5KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfTkVUTUFQLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jCmluZGV4IGNiMmVlODBkODRmYTguLjhjODZkOWE0MzM3M2EgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTkVUTUFQLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9ORVRNQVAuYwpAQCAtMTA2LDExICYjNDM7MTA2LDExIEBAIHN0YXRpYyBpbnQgbmV0bWFwX3RnNF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcikKIAljb25zdCBzdHJ1Y3QgbmZfbmF0X2lwdjRfbXVsdGlfcmFuZ2VfY29tcGF0ICptciA9IHBhci0mZ3Q7dGFyZ2luZm87CiAKIAlpZiAoIShtci0mZ3Q7cmFuZ2VbMF0uZmxhZ3MgJmFtcDsgTkZfTkFUX1JBTkdFX01BUF9JUFMpKSB7Ci0JCXByX2RlYnVnKCYjMzQ7YmFkIE1BUF9JUFMuXG4mIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7YmFkIE1BUF9JUFMuXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAobXItJmd0O3Jhbmdlc2l6ZSAhPSAxKSB7Ci0JCXByX2RlYnVnKCYjMzQ7YmFkIHJhbmdlc2l6ZSAldS5cbiYjMzQ7LCBtci0mZ3Q7cmFuZ2VzaXplKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtiYWQgcmFuZ2VzaXplICV1LlxuJiMzNDssIG1yLSZndDtyYW5nZXNpemUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIG5mX2N0X25ldG5zX2dldChwYXItJmd0O25ldCwgcGFyLSZndDtmYW1pbHkpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jIGIvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jCmluZGV4IGZmNjZiNTZhM2Y5N2QuLjI3YmMwNTQ1YzRmNzQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfUkVESVJFQ1QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X1JFRElSRUNULmMKQEAgLTUxLDExICYjNDM7NTEsMTEgQEAgc3RhdGljIGludCByZWRpcmVjdF90ZzRfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCiAJY29uc3Qgc3RydWN0IG5mX25hdF9pcHY0X211bHRpX3JhbmdlX2NvbXBhdCAqbXIgPSBwYXItJmd0O3RhcmdpbmZvOwogCiAJaWYgKG1yLSZndDtyYW5nZVswXS5mbGFncyAmYW1wOyBORl9OQVRfUkFOR0VfTUFQX0lQUykgewotCQlwcl9kZWJ1ZygmIzM0O2JhZCBNQVBfSVBTLlxuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2JhZCBNQVBfSVBTLlxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKG1yLSZndDtyYW5nZXNpemUgIT0gMSkgewotCQlwcl9kZWJ1ZygmIzM0O2JhZCByYW5nZXNpemUgJXUuXG4mIzM0OywgbXItJmd0O3Jhbmdlc2l6ZSk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7YmFkIHJhbmdlc2l6ZSAldS5cbiYjMzQ7LCBtci0mZ3Q7cmFuZ2VzaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiBuZl9jdF9uZXRuc19nZXQocGFyLSZndDtuZXQsIHBhci0mZ3Q7ZmFtaWx5KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jIGIvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmMKaW5kZXggNWJjNWVhNTA1ZWI5ZS4uMzhlOGU0MTBiNGU4MSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmMKQEAgLTc5LDggJiM0Mzs3OSw3IEBAIHNlY21hcmtfdGdfY2hlY2soY29uc3QgY2hhciAqdGFibGUsIHN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9pbmZvX3YxICppbmZvKQogCiAJaWYgKHN0cmNtcCh0YWJsZSwgJiMzNDttYW5nbGUmIzM0OykgIT0gMCAmYW1wOyZhbXA7CiAJICAgIHN0cmNtcCh0YWJsZSwgJiMzNDtzZWN1cml0eSYjMzQ7KSAhPSAwKSB7Ci0JCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtvbmx5IHZhbGlkIGluIFwmIzM5O21hbmdsZVwmIzM5OyBvciBcJiMzOTtzZWN1cml0eVwmIzM5OyB0YWJsZSwgbm90IFwmIzM5OyVzXCYjMzk7XG4mIzM0OywKLQkJCQkgICAgdGFibGUpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O29ubHkgdmFsaWQgaW4gXCYjMzk7bWFuZ2xlXCYjMzk7IG9yIFwmIzM5O3NlY3VyaXR5XCYjMzk7IHRhYmxlXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jZ3JvdXAuYyBiL25ldC9uZXRmaWx0ZXIveHRfY2dyb3VwLmMKaW5kZXggNDNkMmFlMmJlNjI4ZC4uYWMxYjdlNzFjZDdmNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nncm91cC5jCkBAIC0zMyw3ICYjNDM7MzMsNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192MChjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHsKLQkJcHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZChORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQ5LDcgJiM0Mzs0OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YxKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghaW5mby0mZ3Q7aGFzX3BhdGggJmFtcDsmYW1wOyAhaW5mby0mZ3Q7aGFzX2NsYXNzaWQpIHsKLQkJcHJfaW5mbygmIzM0O3h0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3h0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTU5LDcgJiM0Mzs1OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YxKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogCX0KIAogCWlmIChpbmZvLSZndDtoYXNfY2xhc3NpZCAmYW1wOyZhbXA7ICFJU19FTkFCTEVEKENPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQpKSB7Ci0JCXByX2luZm8oTkVUX0NMU19DTEFTU0lEX0lOVkFMSURfTVNHKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoTkVUX0NMU19DTEFTU0lEX0lOVkFMSURfTVNHKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC04OSw3ICYjNDM7ODksNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192Mihjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIWluZm8tJmd0O2hhc19wYXRoICZhbXA7JmFtcDsgIWluZm8tJmd0O2hhc19jbGFzc2lkKSB7Ci0JCXByX2luZm8oJiMzNDt4dF9jZ3JvdXA6IG5vIHBhdGggb3IgY2xhc3NpZCBzcGVjaWZpZWRcbiYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDt4dF9jZ3JvdXA6IG5vIHBhdGggb3IgY2xhc3NpZCBzcGVjaWZpZWRcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC05OSw3ICYjNDM7OTksNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192Mihjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAl9CiAKIAlpZiAoaW5mby0mZ3Q7aGFzX2NsYXNzaWQgJmFtcDsmYW1wOyAhSVNfRU5BQkxFRChDT05GSUdfQ0dST1VQX05FVF9DTEFTU0lEKSkgewotCQlwcl9pbmZvKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9lc3AuYyBiL25ldC9uZXRmaWx0ZXIveHRfZXNwLmMKaW5kZXggMmExYzBhZDBmZjA3OS4uNjhmZDc1ODg0MjY4YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9lc3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jCkBAIC0yNSwxMiAmIzQzOzI1LDcgQEAgTU9EVUxFX0FMSUFTKCYjMzQ7aXA2dF9lc3AmIzM0Oyk7CiBzdGF0aWMgaW5saW5lIGJvb2wKIHNwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBib29sIGludmVydCkKIHsKLQlib29sIHI7Ci0JcHJfZGVidWcoJiMzNDtzcGlfbWF0Y2g6JWMgMHgleCAmbHQ7PSAweCV4ICZsdDs9IDB4JXhcbiYjMzQ7LAotCQkgaW52ZXJ0ID8gJiMzOTshJiMzOTsgOiAmIzM5OyAmIzM5OywgbWluLCBzcGksIG1heCk7Ci0JciA9IChzcGkgJmd0Oz0gbWluICZhbXA7JmFtcDsgc3BpICZsdDs9IG1heCkgXiBpbnZlcnQ7Ci0JcHJfZGVidWcoJiMzNDsgcmVzdWx0ICVzXG4mIzM0OywgciA/ICYjMzQ7UEFTUyYjMzQ7IDogJiMzNDtGQUlMRUQmIzM0Oyk7Ci0JcmV0dXJuIHI7CiYjNDM7CXJldHVybiAoc3BpICZndDs9IG1pbiAmYW1wOyZhbXA7IHNwaSAmbHQ7PSBtYXgpIF4gaW52ZXJ0OwogfQogCiBzdGF0aWMgYm9vbCBlc3BfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQpAQCAtNDgsNyAmIzQzOzQzLDYgQEAgc3RhdGljIGJvb2wgZXNwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJLyogV2UmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlCiAJCSAqIGNhbiYjMzk7dC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuCiAJCSAqLwotCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGV2aWwgRVNQIHRpbnlncmFtLlxuJiMzNDspOwogCQlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtNjIsNyAmIzQzOzU2LDcgQEAgc3RhdGljIGludCBlc3BfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJY29uc3Qgc3RydWN0IHh0X2VzcCAqZXNwaW5mbyA9IHBhci0mZ3Q7bWF0Y2hpbmZvOwogCiAJaWYgKGVzcGluZm8tJmd0O2ludmZsYWdzICZhbXA7IH5YVF9FU1BfSU5WX01BU0spIHsKLQkJcHJfZGVidWcoJiMzNDt1bmtub3duIGZsYWdzICVYXG4mIzM0OywgZXNwaW5mby0mZ3Q7aW52ZmxhZ3MpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3Vua25vd24gZmxhZ3MgJVhcbiYjMzQ7LCBlc3BpbmZvLSZndDtpbnZmbGFncyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcGNvbXAuYyBiL25ldC9uZXRmaWx0ZXIveHRfaXBjb21wLmMKaW5kZXggNDcyZGE2MzlhMzJlMi4uMzI5OWMxZWE2MGY5ZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcGNvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwY29tcC5jCkBAIC0yOSwxMiAmIzQzOzI5LDcgQEAgTU9EVUxFX0FMSUFTKCYjMzQ7aXA2dF9pcGNvbXAmIzM0Oyk7CiBzdGF0aWMgaW5saW5lIGJvb2wKIHNwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBib29sIGludmVydCkKIHsKLQlib29sIHI7Ci0JcHJfZGVidWcoJiMzNDtzcGlfbWF0Y2g6JWMgMHgleCAmbHQ7PSAweCV4ICZsdDs9IDB4JXhcbiYjMzQ7LAotCQkgaW52ZXJ0ID8gJiMzOTshJiMzOTsgOiAmIzM5OyAmIzM5OywgbWluLCBzcGksIG1heCk7Ci0JciA9IChzcGkgJmd0Oz0gbWluICZhbXA7JmFtcDsgc3BpICZsdDs9IG1heCkgXiBpbnZlcnQ7Ci0JcHJfZGVidWcoJiMzNDsgcmVzdWx0ICVzXG4mIzM0OywgciA/ICYjMzQ7UEFTUyYjMzQ7IDogJiMzNDtGQUlMRUQmIzM0Oyk7Ci0JcmV0dXJuIHI7CiYjNDM7CXJldHVybiAoc3BpICZndDs9IG1pbiAmYW1wOyZhbXA7IHNwaSAmbHQ7PSBtYXgpIF4gaW52ZXJ0OwogfQogCiBzdGF0aWMgYm9vbCBjb21wX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKQEAgLTUyLDcgJiM0Mzs0Nyw2IEBAIHN0YXRpYyBib29sIGNvbXBfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkvKiBXZSYjMzk7dmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2UKIAkJICogY2FuJiMzOTt0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4KIAkJICovCi0JCXByX2RlYnVnKCYjMzQ7RHJvcHBpbmcgZXZpbCBJUENvbXAgdGlueWdyYW0uXG4mIzM0Oyk7CiAJCXBhci0mZ3Q7aG90ZHJvcCA9IHRydWU7CiAJCXJldHVybiBmYWxzZTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYyBiL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jCmluZGV4IDBjOWUwMTRlMzBiNDkuLmJmNjExNDFmYjc4NTAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jCkBAIC0yNCwyNyAmIzQzOzI0LDE1IEBAIGlwcmFuZ2VfbXQ0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJbSAgPSBudG9obChpcGgtJmd0O3NhZGRyKSAmbHQ7IG50b2hsKGluZm8tJmd0O3NyY19taW4uaXApOwogCQltIHw9IG50b2hsKGlwaC0mZ3Q7c2FkZHIpICZndDsgbnRvaGwoaW5mby0mZ3Q7c3JjX21heC5pcCk7CiAJCW0gXj0gISEoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVBSQU5HRV9TUkNfSU5WKTsKLQkJaWYgKG0pIHsKLQkJCXByX2RlYnVnKCYjMzQ7c3JjIElQICVwSTQgTk9UIGluIHJhbmdlICVzJXBJNC0lcEk0XG4mIzM0OywKLQkJCSAgICAgICAgICZhbXA7aXBoLSZndDtzYWRkciwKLQkJCSAgICAgICAgIChpbmZvLSZndDtmbGFncyAmYW1wOyBJUFJBTkdFX1NSQ19JTlYpID8gJiMzNDsoSU5WKSAmIzM0OyA6ICYjMzQ7JiMzNDssCi0JCQkgICAgICAgICAmYW1wO2luZm8tJmd0O3NyY19taW4uaXAsCi0JCQkgICAgICAgICAmYW1wO2luZm8tJmd0O3NyY19tYXguaXApOwomIzQzOwkJaWYgKG0pCiAJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KIAl9CiAJaWYgKGluZm8tJmd0O2ZsYWdzICZhbXA7IElQUkFOR0VfRFNUKSB7CiAJCW0gID0gbnRvaGwoaXBoLSZndDtkYWRkcikgJmx0OyBudG9obChpbmZvLSZndDtkc3RfbWluLmlwKTsKIAkJbSB8PSBudG9obChpcGgtJmd0O2RhZGRyKSAmZ3Q7IG50b2hsKGluZm8tJmd0O2RzdF9tYXguaXApOwogCQltIF49ICEhKGluZm8tJmd0O2ZsYWdzICZhbXA7IElQUkFOR0VfRFNUX0lOVik7Ci0JCWlmIChtKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O2RzdCBJUCAlcEk0IE5PVCBpbiByYW5nZSAlcyVwSTQtJXBJNFxuJiMzNDssCi0JCQkgICAgICAgICAmYW1wO2lwaC0mZ3Q7ZGFkZHIsCi0JCQkgICAgICAgICAoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVBSQU5HRV9EU1RfSU5WKSA/ICYjMzQ7KElOVikgJiMzNDsgOiAmIzM0OyYjMzQ7LAotCQkJICAgICAgICAgJmFtcDtpbmZvLSZndDtkc3RfbWluLmlwLAotCQkJICAgICAgICAgJmFtcDtpbmZvLSZndDtkc3RfbWF4LmlwKTsKJiM0MzsJCWlmIChtKQogCQkJcmV0dXJuIGZhbHNlOwotCQl9CiAJfQogCXJldHVybiB0cnVlOwogfQpAQCAtNzMsMjcgJiM0Mzs2MSwxNSBAQCBpcHJhbmdlX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJCW0gID0gaXByYW5nZV9pcHY2X2x0KCZhbXA7aXBoLSZndDtzYWRkciwgJmFtcDtpbmZvLSZndDtzcmNfbWluLmluNik7CiAJCW0gfD0gaXByYW5nZV9pcHY2X2x0KCZhbXA7aW5mby0mZ3Q7c3JjX21heC5pbjYsICZhbXA7aXBoLSZndDtzYWRkcik7CiAJCW0gXj0gISEoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVBSQU5HRV9TUkNfSU5WKTsKLQkJaWYgKG0pIHsKLQkJCXByX2RlYnVnKCYjMzQ7c3JjIElQICVwSTYgTk9UIGluIHJhbmdlICVzJXBJNi0lcEk2XG4mIzM0OywKLQkJCQkgJmFtcDtpcGgtJmd0O3NhZGRyLAotCQkJCSAoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVBSQU5HRV9TUkNfSU5WKSA/ICYjMzQ7KElOVikgJiMzNDsgOiAmIzM0OyYjMzQ7LAotCQkJCSAmYW1wO2luZm8tJmd0O3NyY19taW4uaW42LAotCQkJCSAmYW1wO2luZm8tJmd0O3NyY19tYXguaW42KTsKJiM0MzsJCWlmIChtKQogCQkJcmV0dXJuIGZhbHNlOwotCQl9CiAJfQogCWlmIChpbmZvLSZndDtmbGFncyAmYW1wOyBJUFJBTkdFX0RTVCkgewogCQltICA9IGlwcmFuZ2VfaXB2Nl9sdCgmYW1wO2lwaC0mZ3Q7ZGFkZHIsICZhbXA7aW5mby0mZ3Q7ZHN0X21pbi5pbjYpOwogCQltIHw9IGlwcmFuZ2VfaXB2Nl9sdCgmYW1wO2luZm8tJmd0O2RzdF9tYXguaW42LCAmYW1wO2lwaC0mZ3Q7ZGFkZHIpOwogCQltIF49ICEhKGluZm8tJmd0O2ZsYWdzICZhbXA7IElQUkFOR0VfRFNUX0lOVik7Ci0JCWlmIChtKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O2RzdCBJUCAlcEk2IE5PVCBpbiByYW5nZSAlcyVwSTYtJXBJNlxuJiMzNDssCi0JCQkJICZhbXA7aXBoLSZndDtkYWRkciwKLQkJCQkgKGluZm8tJmd0O2ZsYWdzICZhbXA7IElQUkFOR0VfRFNUX0lOVikgPyAmIzM0OyhJTlYpICYjMzQ7IDogJiMzNDsmIzM0OywKLQkJCQkgJmFtcDtpbmZvLSZndDtkc3RfbWluLmluNiwKLQkJCQkgJmFtcDtpbmZvLSZndDtkc3RfbWF4LmluNik7CiYjNDM7CQlpZiAobSkKIAkJCXJldHVybiBmYWxzZTsKLQkJfQogCX0KIAlyZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jIGIvbmV0L25ldGZpbHRlci94dF9pcHZzLmMKaW5kZXggMjUzYzcxY2M5YTYzNC4uZTEzYzBmZmI3M2E5YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcHZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9pcHZzLmMKQEAgLTE0OCw3ICYjNDM7MTQ4LDYgQEAgaXB2c19tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiBvdXRfcHV0X2NwOgogCV9faXBfdnNfY29ubl9wdXQoY3ApOwogb3V0OgotCXByX2RlYnVnKCYjMzQ7bWF0Y2g9JWRcbiYjMzQ7LCBtYXRjaCk7CiAJcmV0dXJuIG1hdGNoOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jIGIvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuYwppbmRleCBhMTY5MWZmNDA1ZDNjLi5iZmY1ZjUzYTliZWZiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmMKQEAgLTM3LDcgJiM0MzszNyw2IEBAIHBvcnRzX21hdGNoX3YxKGNvbnN0IHN0cnVjdCB4dF9tdWx0aXBvcnRfdjEgKm1pbmZvLAogCQlpZiAobWluZm8tJmd0O3BmbGFnc1tpXSkgewogCQkJLyogcmFuZ2UgcG9ydCBtYXRjaGluZyAqLwogCQkJZSA9IG1pbmZvLSZndDtwb3J0c1smIzQzOyYjNDM7aV07Ci0JCQlwcl9kZWJ1ZygmIzM0O3NyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkLSVkP1xuJiMzNDssIHMsIGUpOwogCiAJCQlzd2l0Y2ggKG1pbmZvLSZndDtmbGFncykgewogCQkJY2FzZSBYVF9NVUxUSVBPUlRfU09VUkNFOgpAQCAtNTgsOCAmIzQzOzU3LDYgQEAgcG9ydHNfbWF0Y2hfdjEoY29uc3Qgc3RydWN0IHh0X211bHRpcG9ydF92MSAqbWluZm8sCiAJCQl9CiAJCX0gZWxzZSB7CiAJCQkvKiBleGFjdCBwb3J0IG1hdGNoaW5nICovCi0JCQlwcl9kZWJ1ZygmIzM0O3NyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkP1xuJiMzNDssIHMpOwotCiAJCQlzd2l0Y2ggKG1pbmZvLSZndDtmbGFncykgewogCQkJY2FzZSBYVF9NVUxUSVBPUlRfU09VUkNFOgogCQkJCWlmIChzcmMgPT0gcykKQEAgLTk3LDcgJiM0Mzs5NCw2IEBAIG11bHRpcG9ydF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJCS8qIFdlJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZQogCQkgKiBjYW4mIzM5O3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLgogCQkgKi8KLQkJcHJfZGVidWcoJiMzNDtEcm9wcGluZyBldmlsIG9mZnNldD0wIHRpbnlncmFtLlxuJiMzNDspOwogCQlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuYwppbmRleCBiNDZhNmE1MTIwNTgzLi5kMzVjMjFkOTY1MWIwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuYwpAQCAtNDgsMzAgJiM0Mzs0OCwxNyBAQCBtYXRjaF9wYWNrZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAljb25zdCBzdHJ1Y3QgeHRfc2N0cF9mbGFnX2luZm8gKmZsYWdfaW5mbyA9IGluZm8tJmd0O2ZsYWdfaW5mbzsKIAlpbnQgZmxhZ19jb3VudCA9IGluZm8tJmd0O2ZsYWdfY291bnQ7CiAKLSNpZmRlZiBERUJVRwotCWludCBpID0gMDsKLSNlbmRpZgotCiAJaWYgKGNodW5rX21hdGNoX3R5cGUgPT0gU0NUUF9DSFVOS19NQVRDSF9BTEwpCiAJCVNDVFBfQ0hVTktNQVBfQ09QWShjaHVua21hcGNvcHksIGluZm8tJmd0O2NodW5rbWFwKTsKIAogCWRvIHsKIAkJc2NoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX3NjaCksICZhbXA7X3NjaCk7CiAJCWlmIChzY2ggPT0gTlVMTCB8fCBzY2gtJmd0O2xlbmd0aCA9PSAwKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGludmFsaWQgU0NUUCBwYWNrZXQuXG4mIzM0Oyk7CiAJCQkqaG90ZHJvcCA9IHRydWU7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KLSNpZmRlZiBERUJVRwotCQlwcl9kZWJ1ZygmIzM0O0NodW5rIG51bTogJWRcdG9mZnNldDogJWRcdHR5cGU6ICVkXHRsZW5ndGg6ICVkJiMzNDsKLQkJCSAmIzM0O1x0ZmxhZ3M6ICV4XG4mIzM0OywKLQkJCSAmIzQzOyYjNDM7aSwgb2Zmc2V0LCBzY2gtJmd0O3R5cGUsIGh0b25zKHNjaC0mZ3Q7bGVuZ3RoKSwKLQkJCSBzY2gtJmd0O2ZsYWdzKTsKLSNlbmRpZgogCQlvZmZzZXQgJiM0Mzs9IFNDVFBfUEFENChudG9ocyhzY2gtJmd0O2xlbmd0aCkpOwogCi0JCXByX2RlYnVnKCYjMzQ7c2tiLSZndDtsZW46ICVkXHRvZmZzZXQ6ICVkXG4mIzM0Oywgc2tiLSZndDtsZW4sIG9mZnNldCk7Ci0KIAkJaWYgKFNDVFBfQ0hVTktNQVBfSVNfU0VUKGluZm8tJmd0O2NodW5rbWFwLCBzY2gtJmd0O3R5cGUpKSB7CiAJCQlzd2l0Y2ggKGNodW5rX21hdGNoX3R5cGUpIHsKIAkJCWNhc2UgU0NUUF9DSFVOS19NQVRDSF9BTlk6CkBAIC0xMjEsMTggJiM0MzsxMDgsMTQgQEAgc2N0cF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJY29uc3Qgc3RydWN0IHNjdHBoZHIgKnNoOwogCXN0cnVjdCBzY3RwaGRyIF9zaDsKIAotCWlmIChwYXItJmd0O2ZyYWdvZmYgIT0gMCkgewotCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIG5vbi1maXJzdCBmcmFnbWVudC4uIEZJWE1FXG4mIzM0Oyk7CiYjNDM7CWlmIChwYXItJmd0O2ZyYWdvZmYgIT0gMCkKIAkJcmV0dXJuIGZhbHNlOwotCX0KIAogCXNoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcGFyLSZndDt0aG9mZiwgc2l6ZW9mKF9zaCksICZhbXA7X3NoKTsKIAlpZiAoc2ggPT0gTlVMTCkgewotCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGV2aWwgVENQIG9mZnNldD0wIHRpbnlncmFtLlxuJiMzNDspOwogCQlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwogCQlyZXR1cm4gZmFsc2U7CiAJfQotCXByX2RlYnVnKCYjMzQ7c3B0OiAlZFx0ZHB0OiAlZFxuJiMzNDssIG50b2hzKHNoLSZndDtzb3VyY2UpLCBudG9ocyhzaC0mZ3Q7ZGVzdCkpOwogCiAJcmV0dXJuICBTQ0NIRUNLKG50b2hzKHNoLSZndDtzb3VyY2UpICZndDs9IGluZm8tJmd0O3NwdHNbMF0KIAkJCSZhbXA7JmFtcDsgbnRvaHMoc2gtJmd0O3NvdXJjZSkgJmx0Oz0gaW5mby0mZ3Q7c3B0c1sxXSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3RjcHVkcC5jCmluZGV4IGY3NmNmMThmMWEyNDQuLjcwNjA4YjhkMDZhYjIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuYwpAQCAtNDQsOCAmIzQzOzQ0LDYgQEAgdGNwX2ZpbmRfb3B0aW9uKHVfaW50OF90IG9wdGlvbiwKIAl1X2ludDhfdCBfb3B0WzYwIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpXTsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCXByX2RlYnVnKCYjMzQ7ZmluZGluZyBvcHRpb25cbiYjMzQ7KTsKLQogCWlmICghb3B0bGVuKQogCQlyZXR1cm4gaW52ZXJ0OwogCkBAIC04MSwxMCAmIzQzOzc5LDggQEAgc3RhdGljIGJvb2wgdGNwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJICAgY2F1c2VzIHRoaXMuIEl0cyBhIGNyYWNrZXIgdHJ5aW5nIHRvIGJyZWFrIGluIGJ5IGRvaW5nIGEKIAkJICAgZmxhZyBvdmVyd3JpdGUgdG8gcGFzcyB0aGUgZGlyZWN0aW9uIGNoZWNrcy4KIAkJKi8KLQkJaWYgKHBhci0mZ3Q7ZnJhZ29mZiA9PSAxKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGV2aWwgVENQIG9mZnNldD0xIGZyYWcuXG4mIzM0Oyk7CiYjNDM7CQlpZiAocGFyLSZndDtmcmFnb2ZmID09IDEpCiAJCQlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwotCQl9CiAJCS8qIE11c3Qgbm90IGJlIGEgZnJhZ21lbnQuICovCiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC05Myw3ICYjNDM7ODksNiBAQCBzdGF0aWMgYm9vbCB0Y3BfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCWlmICh0aCA9PSBOVUxMKSB7CiAJCS8qIFdlJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZQogCQkgICBjYW4mIzM5O3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLiAqLwotCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGV2aWwgVENQIG9mZnNldD0wIHRpbnlncmFtLlxuJiMzNDspOwogCQlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtMTQ1LDcgJiM0MzsxNDAsNiBAQCBzdGF0aWMgYm9vbCB1ZHBfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCWlmICh1aCA9PSBOVUxMKSB7CiAJCS8qIFdlJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZQogCQkgICBjYW4mIzM5O3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLiAqLwotCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGV2aWwgVURQIHRpbnlncmFtLlxuJiMzNDspOwogCQlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwogCQlyZXR1cm4gZmFsc2U7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MTgKCQkJCQkJCW91dHB1dDogMjIyCgkJCQkJCQl0aG91Z2h0czogMzA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBOZXRmaWx0ZXIgUGF0Y2ggU2VyaWVzOiBQcmltYXJpbHkgTG9nZ2luZyBDbGVhbnVwIHdpdGggYSBHbGl0Y2gqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgZGVhbC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgdGhlIG1haW4gdGhpbmcgaXQmIzM5O3MgZG9pbmcgaXMgcmVtb3ZpbmcgYSBidW5jaCBvZiBgcHJfZGVidWdgIGNhbGxzIGFuZCBjb252ZXJ0aW5nIHNvbWUgb2YgdGhlbSB0byBgcHJfaW5mb19yYXRlbGltaXRlZGAgY2FsbHMgYWNyb3NzIGEgYnVuY2ggb2YgbmV0ZmlsdGVyIG1vZHVsZXM6IGBpcHRfYWguY2AsIGBpcHRfcnBmaWx0ZXIuY2AsIGBpcDZ0X2FoLmNgLCBldGMuIEJhc2ljYWxseSwgaXQmIzM5O3MgYSBjb2RlIGNsZWFudXAsIHdoaWNoIGlzIGZpbmUuIE5vdGhpbmcgdG9vIGV4Y2l0aW5nLCBqdXN0IG1ha2luZyB0aGluZ3MgYSBiaXQgbGVzcyBjaGF0dHkuCgpUaGVuIEkgaGl0IHRoaXMgb2RkIGNoYW5nZSBpbiBgeHRfQ1QuY2AuIFRoZXkmIzM5O3ZlIG1lc3NlZCB3aXRoIHRoZSBjb2RlIHRoYXQgaGFuZGxlcyB0aGUgYGhlbHBlcmAgc3RyaW5nOgoKYGBgYwotCWlmIChpbmZvLSZndDtoZWxwZXJbMF0pIHsKJiM0MzsJaWYgKGluZm8tJmd0O2hlbHBlclswXSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpICZsdDsgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKYGBgCgpJIHNlZSB0aGF0LiBBZGRpbmcgYHN0cm5sZW5gIGNvbmRpdGlvbiAqYmVmb3JlKiB0aGUgb3JpZ2luYWwgY29uZGl0aW9uLiBBbmQgdGhlbiB0aGVyZSYjMzk7cyBtb3JlIGFmdGVyOgoKYGBgYwoJCWlmIChzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpID09IHNpemVvZihpbmZvLSZndDtoZWxwZXIpKSB7CgkJCXJldCA9IC1FTkFNRVRPT0xPTkc7CgkJCWdvdG8gZXJyMzsKCQl9CmBgYAoKV2FpdCBhIHNlY29uZC4uLiBJZiB0aGF0IGBzdHJubGVuYCBpcyAqbGVzcyogdGhhbiBgc2l6ZW9mYCwgdGhlbiB0aGUgaW5uZXIgYGlmYCBjb25kaXRpb24gd2lsbCAqbmV2ZXIqIGJlIHRydWUsIHJpZ2h0PyBCZWNhdXNlIGlmIGl0JiMzOTtzIGxlc3MsIHRoZSBzdHJpbmcgaXMgbnVsbC10ZXJtaW5hdGVkLCBzbyB0aGUgbGVuZ3RoIGNhbiYjMzk7dCBiZSBlcXVhbCB0byB0aGUgYnVmZmVyIHNpemUuIFRoYXQgaW5uZXIgYGlmYCBpcyBlc3NlbnRpYWxseSBkZWFkIGNvZGUgbm93LiBTZWVtcyBsaWtlIGEgbG9naWMgZXJyb3IuIE9yaWdpbmFsIGNvZGUgc2hvdWxkJiMzOTt2ZSByZXR1cm5lZCBgLUVOQU1FVE9PTE9OR2AgaWYgdGhlIHN0cmluZyB3YXNuJiMzOTt0IG51bGwtdGVybWluYXRlZC4gQnV0IG5vdywgd2l0aCB0aGUgYWRkZWQgY2hlY2ssIHRoYXQgY2FzZSBqdXN0ICpnZXRzIHNraXBwZWQqLiBJcyB0aGVyZSBhIEtNU0FOIGlzc3VlIGhlcmU/CgpJIG5lZWQgdG8gY29uZmlybSB0aGUgY29kZToKYGBgYwotCWlmIChpbmZvLSZndDtoZWxwZXJbMF0pIHsKJiM0MzsJaWYgKGluZm8tJmd0O2hlbHBlclswXSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpICZsdDsgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKIAkJaWYgKHN0cm5sZW4oaW5mby0mZ3Q7aGVscGVyLCBzaXplb2YoaW5mby0mZ3Q7aGVscGVyKSkgPT0gc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKIAkJCXJldCA9IC1FTkFNRVRPT0xPTkc7CiAJCQlnb3RvIGVycjM7CiAJCX0KYGBgClllYWghIElmIHRoZSBzdHJpbmcgaXMgbm90IG51bGwtdGVybWluYXRlZCwgaXQganVzdCBza2lwcyB0aGUgd2hvbGUgYmxvY2suIEl0IGRvZXNuJiMzOTt0IHJldHVybiB0aGUgYC1FTkFNRVRPT0xPTkdgIGFzIGl0IHNob3VsZC4gVGhpcyBzZWVtcyBsaWtlIGEgKmJ1ZyogaW50cm9kdWNlZCBieSB0aGUgcGF0Y2gsIG5vdCBhIGZpeC4gSXQgc2tpcHMgdGhlIGVycm9yIGNoZWNraW5nIGFuZCB0aGUgaGVscGVyIGxvYWRpbmcgd2hlbiB0aGUgc3RyaW5nIGlzbiYjMzk7dCBudWxsLXRlcm1pbmF0ZWQuCgpPa2F5LCBpcyB0aGVyZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGhlcmU/IExldCBtZSBjaGVjayB0aGUgZXhhY3QgZGlmZjoKYGBgYwotCWlmIChpbmZvLSZndDtoZWxwZXJbMF0pIHsKJiM0MzsJaWYgKGluZm8tJmd0O2hlbHBlclswXSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpICZsdDsgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKYGBgCgpObywgaXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIGl0IGJlY2F1c2UgaXQmIzM5O3Mgc3RpbGwgY2hlY2tpbmcgdGhlIGZpcnN0IGNoYXJhY3RlciBgaW5mby0mZ3Q7aGVscGVyWzBdYC4gU28gaWYgdGhlIHN0cmluZyBpc24mIzM5O3QgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgdXNlciYjMzk7cyBzaWRlLCBgc3RybmxlbmAgd2lsbCBzdGlsbCByZWFkIGl0IHRvIGRldGVybWluZSB0aGUgbGVuZ3RoLiBCdXQuLi4gdGhlIG1lbW9yeSBmb3IgYGluZm8tJmd0O2hlbHBlcmAgY29tZXMgZnJvbSBgcGFyLSZndDt0YXJnaW5mb2AsIHJpZ2h0PyBUaGF0JiMzOTtzIGZyb20gdXNlcnNwYWNlLiBJZiBgaW5mby0mZ3Q7aGVscGVyYCBpc24mIzM5O3QgbnVsbC10ZXJtaW5hdGVkLCBgc3RybmxlbmAgbWlnaHQgcmVhZCBpdC4KCklzIGBpbmZvYCAqZnVsbHkqIGluaXRpYWxpemVkIGZyb20gdXNlcnNwYWNlPyBMZXQgbWUgZG91YmxlLWNoZWNrLiBUaGUgY29kZSB1c2VzIGBjb3B5X2Zyb21fdXNlcmAuIFNvLCB5ZXMhIEJlY2F1c2UgdXNlcnNwYWNlIGlzIHdyaXRpbmcgdG8gdGhlIGtlcm5lbCwgc28gS01TQU4gc2hvdWxkIG5vdCBjb21wbGFpbiwgYXMgaXQgbWFya3MgYWxsIHRoZSBtZW1vcnkgY29waWVkIGZyb20gdXNlcnNwYWNlIGFzIGluaXRpYWxpemVkISBTbywgaXQgaW5pdGlhbGl6ZXMgaXQgYXMgZmFyIGFzIHRoZSBrZXJuZWwgaXMgY29uY2VybmVkLgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIG90aGVyIGNoYW5nZXMuLi4gcmVtb3ZpbmcgYHByX2RlYnVnYC4gTm90aGluZyB0byBzZWUgdGhlcmUuCgpTbywgaW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBtb3N0bHkgYSBjbGVhbnVwLCByZW1vdmluZyBgcHJfZGVidWdgIGFuZCBjaGFuZ2luZyBzb21lIHRvIGBwcl9pbmZvX3JhdGVsaW1pdGVkYC4gVGhlIGB4dF9DVC5jYCBjaGFuZ2UgKmRvZXMqIGhhdmUgYSBsb2dpYyBlcnJvciwgaW4gdGhhdCBpdCBza2lwcyBlcnJvciBjaGVja2luZy4gSXQgbWFrZXMgdGhlIGlubmVyIGNoZWNrIGRlYWQgY29kZSBhbmQgY2hhbmdlcyBiZWhhdmlvciBmb3Igbm9uLW51bGwtdGVybWluYXRlZCBzdHJpbmdzLiBCdXQgaXQgKmRvZXNuJiMzOTt0KiBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBgaW5mby0mZ3Q7aGVscGVyYCAqaXMqIGluaXRpYWxpemVkIGJlY2F1c2UgaXQgY29tZXMgZnJvbSBgY29weV9mcm9tX3VzZXJgLiBLTVNBTiBpcyBub3QgYW4gaXNzdWUgaGVyZS4gTm8gbmVlZCBmb3IgdGhhdCBmdXp6aW5nLiBUaGUgcGF0Y2ggaGFzIGEgbG9naWMgZmxhdywgdGhhdCYjMzk7cyBhbGwuIEFuZCBpdCYjMzk7cyBwcm9iYWJseSBmdW5jdGlvbmFsLCBub3QgYSBzZWN1cml0eSBpc3N1ZQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgcmVtb3ZlcyBgcHJfZGVidWdgIHN0YXRlbWVudHMgYW5kIGNvbnZlcnRzIHNvbWUgdG8gYHByX2luZm9fcmF0ZWxpbWl0ZWRgIGFjcm9zcyB2YXJpb3VzIG5ldGZpbHRlciBtb2R1bGVzLiBUaGVyZSBpcyBhbHNvIGEgbG9naWNhbCBjaGFuZ2UgaW4gYHh0X0NULmNgIHJlZ2FyZGluZyB0aGUgdmFsaWRhdGlvbiBvZiBgaW5mby1cdTAwM2VoZWxwZXJgIGFuZCBgaW5mby1cdTAwM2V0aW1lb3V0YCBzdHJpbmdzLCB3aGljaCBpbnRyb2R1Y2VzIGRlYWQgY29kZSBhbmQgYWx0ZXJzIHRoZSBlcnJvciBoYW5kbGluZyBmb3Igbm9uLW51bGwtdGVybWluYXRlZCBzdHJpbmdzLiBIb3dldmVyLCB0aGUgYGluZm9gIHN0cnVjdHVyZSAoYHBhci1cdTAwM2V0YXJnaW5mb2ApIGlzIHBvcHVsYXRlZCB2aWEgYGNvcHlfZnJvbV91c2VyYCB3aXRoIGRhdGEgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUga2VybmVsJiMzOTtzIHBlcnNwZWN0aXZlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHRoZSBsb2dpYyBmbGF3IGluIGB4dF9DVC5jYCkgYXJlIGZ1bmN0aW9uYWwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHByaW1hcmlseSByZW1vdmVzIGBwcl9kZWJ1Z2Agc3RhdGVtZW50cyBhbmQgY29udmVydHMgc29tZSB0byBgcHJfaW5mb19yYXRlbGltaXRlZGAgYWNyb3NzIHZhcmlvdXMgbmV0ZmlsdGVyIG1vZHVsZXMuIFRoZXJlIGlzIGFsc28gYSBsb2dpY2FsIGNoYW5nZSBpbiBgeHRfQ1QuY2AgcmVnYXJkaW5nIHRoZSB2YWxpZGF0aW9uIG9mIGBpbmZvLVx1MDAzZWhlbHBlcmAgYW5kIGBpbmZvLVx1MDAzZXRpbWVvdXRgIHN0cmluZ3MsIHdoaWNoIGludHJvZHVjZXMgZGVhZCBjb2RlIGFuZCBhbHRlcnMgdGhlIGVycm9yIGhhbmRsaW5nIGZvciBub24tbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MuIEhvd2V2ZXIsIHRoZSBgaW5mb2Agc3RydWN0dXJlIChgcGFyLVx1MDAzZXRhcmdpbmZvYCkgaXMgcG9wdWxhdGVkIHZpYSBgY29weV9mcm9tX3VzZXJgIHdpdGggZGF0YSBwcm92aWRlZCBieSB1c2Vyc3BhY2UsIG1lYW5pbmcgdGhlIG1lbW9yeSBpcyBmdWxseSBpbml0aWFsaXplZCBmcm9tIHRoZSBrZXJuZWwmIzM5O3MgcGVyc3BlY3RpdmUuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWRkIGNvbnRyb2wgZmxvdyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgdGhlIGxvZ2ljIGZsYXcgaW4gYHh0X0NULmNgKSBhcmUgZnVuY3Rpb25hbCBhbmQgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjM5OjIxLjE4ODM5NjkwNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzczMzkwMzQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX0NUXCIsXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUlwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJJUF9ORl9SQVdcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInh0X2N0X3RnX2NoZWNrXCIsXG4gICAgXCJpZGxldGltZXJfdGdfY2hlY2tlbnRyeVwiLFxuICAgIFwiaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgcmVtb3ZlcyBgcHJfZGVidWdgIHN0YXRlbWVudHMgYW5kIGNvbnZlcnRzIHNvbWUgdG8gYHByX2luZm9fcmF0ZWxpbWl0ZWRgIGFjcm9zcyB2YXJpb3VzIG5ldGZpbHRlciBtb2R1bGVzLiBUaGVyZSBpcyBhbHNvIGEgbG9naWNhbCBjaGFuZ2UgaW4gYHh0X0NULmNgIHJlZ2FyZGluZyB0aGUgdmFsaWRhdGlvbiBvZiBgaW5mby1cXHUwMDNlaGVscGVyYCBhbmQgYGluZm8tXFx1MDAzZXRpbWVvdXRgIHN0cmluZ3MsIHdoaWNoIGludHJvZHVjZXMgZGVhZCBjb2RlIGFuZCBhbHRlcnMgdGhlIGVycm9yIGhhbmRsaW5nIGZvciBub24tbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MuIEhvd2V2ZXIsIHRoZSBgaW5mb2Agc3RydWN0dXJlIChgcGFyLVxcdTAwM2V0YXJnaW5mb2ApIGlzIHBvcHVsYXRlZCB2aWEgYGNvcHlfZnJvbV91c2VyYCB3aXRoIGRhdGEgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUga2VybmVsJ3MgcGVyc3BlY3RpdmUuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWRkIGNvbnRyb2wgZmxvdyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgdGhlIGxvZ2ljIGZsYXcgaW4gYHh0X0NULmNgKSBhcmUgZnVuY3Rpb25hbCBhbmQgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHh0X0NULmNgIHRvIGNoYW5nZSB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYGluZm8tXFx1MDAzZWhlbHBlcmAgYW5kIGBpbmZvLVxcdTAwM2V0aW1lb3V0YC4gSWYgdGhleSBhcmUgbm90IG51bGwtdGVybWluYXRlZCwgdGhlIG5ldyBjb2RlIHNraXBzIHNldHRpbmcgdGhlbSBpbnN0ZWFkIG9mIHJldHVybmluZyBgLUVOQU1FVE9PTE9OR2AsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHRhcmdldCBpbml0aWFsaXphdGlvbiBsb2dpYy4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYHh0X0lETEVUSU1FUi5jYCB0byByZWxlYXNlIGEgbXV0ZXggYmVmb3JlIGxvZ2dpbmcsIHdoaWNoIGlzIGEgbWlub3IgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6Mzk6MjEuMTg4NDAyOTE2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzI2NzM3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5MzM4YWVjNTVjZTFlZDBmZWYwMThiMGM4N2E2YWUzNDFiNmE2YTc3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDE0OjM5OjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfYWguYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfYWguY1xcbmluZGV4IDE2MWJhNDEyY2IwOGIuLjcxMzFmMjk3YWRhMmUgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jXFxuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jXFxuQEAgLTE5LDEyICsxOSw3IEBAIE1PRFVMRV9ERVNDUklQVElPTihcXFwiWHRhYmxlczogSVB2NCBJUHNlYy1BSCBTUEkgbWF0Y2hcXFwiKTtcXG4gc3RhdGljIGlubGluZSBib29sXFxuIHNwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBib29sIGludmVydClcXG4ge1xcbi1cXHRib29sIHI7XFxuLVxcdHByX2RlYnVnKFxcXCJzcGlfbWF0Y2g6JWMgMHgleCBcXHUwMDNjPSAweCV4IFxcdTAwM2M9IDB4JXhcXFxcblxcXCIsXFxuLVxcdFxcdCBpbnZlcnQgPyAnIScgOiAnICcsIG1pbiwgc3BpLCBtYXgpO1xcbi1cXHRyID0gKHNwaSBcXHUwMDNlPSBtaW4gXFx1MDAyNlxcdTAwMjYgc3BpIFxcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XFxuLVxcdHByX2RlYnVnKFxcXCIgcmVzdWx0ICVzXFxcXG5cXFwiLCByID8gXFxcIlBBU1NcXFwiIDogXFxcIkZBSUxFRFxcXCIpO1xcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIChzcGkgXFx1MDAzZT0gbWluIFxcdTAwMjZcXHUwMDI2IHNwaSBcXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBhaF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuQEAgLTQyLDcgKzM3LDYgQEAgc3RhdGljIGJvb2wgYWhfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRcXHQvKiBXZSd2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZVxcbiBcXHRcXHQgKiBjYW4ndC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiRHJvcHBpbmcgZXZpbCBBSCB0aW55Z3JhbS5cXFxcblxcXCIpO1xcbiBcXHRcXHRwYXItXFx1MDAzZWhvdGRyb3AgPSB0cnVlO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG5AQCAtNTgsNyArNTIsNyBAQCBzdGF0aWMgaW50IGFoX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbiBcXG4gXFx0LyogTXVzdCBzcGVjaWZ5IG5vIHVua25vd24gaW52ZmxhZ3MgKi9cXG4gXFx0aWYgKGFoaW5mby1cXHUwMDNlaW52ZmxhZ3MgXFx1MDAyNiB+SVBUX0FIX0lOVl9NQVNLKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJ1bmtub3duIGZsYWdzICVYXFxcXG5cXFwiLCBhaGluZm8tXFx1MDAzZWludmZsYWdzKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwidW5rbm93biBmbGFncyAlWFxcXFxuXFxcIiwgYWhpbmZvLVxcdTAwM2VpbnZmbGFncyk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JwZmlsdGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JwZmlsdGVyLmNcXG5pbmRleCA2ZDliZjUxMDY4Njg0Li4yYzM4ZmQ2NjI0YWExIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuY1xcbisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuY1xcbkBAIC05NSw4ICs5NSw3IEBAIHN0YXRpYyBpbnQgcnBmaWx0ZXJfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxuIFxcbiBcXHRpZiAoc3RyY21wKHBhci1cXHUwMDNldGFibGUsIFxcXCJtYW5nbGVcXFwiKSAhPSAwIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBzdHJjbXAocGFyLVxcdTAwM2V0YWJsZSwgXFxcInJhd1xcXCIpICE9IDApIHtcXG4tXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwib25seSB2YWxpZCBpbiBcXFxcJ3Jhd1xcXFwnIG9yIFxcXFwnbWFuZ2xlXFxcXCcgdGFibGUsIG5vdCBcXFxcJyVzXFxcXCdcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICBwYXItXFx1MDAzZXRhYmxlKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwib25seSB2YWxpZCBpbiBcXFxcJ3Jhd1xcXFwnIG9yIFxcXFwnbWFuZ2xlXFxcXCcgdGFibGVcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmNcXG5pbmRleCAxMjU4NzgzZWQ4NzYyLi5kYWI3ZGJjNmE2NzVjIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmNcXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jXFxuQEAgLTI0LDEzICsyNCw3IEBAIE1PRFVMRV9BVVRIT1IoXFxcIkFuZHJhcyBLaXMtU3phYm8gXFx1MDAzY2tpc3phQHNjaC5ibWUuaHVcXHUwMDNlXFxcIik7XFxuIHN0YXRpYyBpbmxpbmUgYm9vbFxcbiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpXFxuIHtcXG4tXFx0Ym9vbCByO1xcbi1cXG4tXFx0cHJfZGVidWcoXFxcInNwaV9tYXRjaDolYyAweCV4IFxcdTAwM2M9IDB4JXggXFx1MDAzYz0gMHgleFxcXFxuXFxcIixcXG4tXFx0XFx0IGludmVydCA/ICchJyA6ICcgJywgbWluLCBzcGksIG1heCk7XFxuLVxcdHIgPSAoc3BpIFxcdTAwM2U9IG1pbiBcXHUwMDI2XFx1MDAyNiBzcGkgXFx1MDAzYz0gbWF4KSBeIGludmVydDtcXG4tXFx0cHJfZGVidWcoXFxcIiByZXN1bHQgJXNcXFxcblxcXCIsIHIgPyBcXFwiUEFTU1xcXCIgOiBcXFwiRkFJTEVEXFxcIik7XFxuLVxcdHJldHVybiByO1xcbitcXHRyZXR1cm4gKHNwaSBcXHUwMDNlPSBtaW4gXFx1MDAyNlxcdTAwMjYgc3BpIFxcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGFoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuQEAgLTYyLDIzICs1Niw2IEBAIHN0YXRpYyBib29sIGFoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG4tXFx0cHJfZGVidWcoXFxcIklQdjYgQUggTEVOICV1ICV1IFxcXCIsIGhkcmxlbiwgYWgtXFx1MDAzZWhkcmxlbik7XFxuLVxcdHByX2RlYnVnKFxcXCJSRVMgJTA0WCBcXFwiLCBhaC1cXHUwMDNlcmVzZXJ2ZWQpO1xcbi1cXHRwcl9kZWJ1ZyhcXFwiU1BJICV1ICUwOFhcXFxcblxcXCIsIG50b2hsKGFoLVxcdTAwM2VzcGkpLCBudG9obChhaC1cXHUwMDNlc3BpKSk7XFxuLVxcbi1cXHRwcl9kZWJ1ZyhcXFwiSVB2NiBBSCBzcGkgJTAyWCBcXFwiLFxcbi1cXHRcXHQgc3BpX21hdGNoKGFoaW5mby1cXHUwMDNlc3Bpc1swXSwgYWhpbmZvLVxcdTAwM2VzcGlzWzFdLFxcbi1cXHRcXHRcXHQgICBudG9obChhaC1cXHUwMDNlc3BpKSxcXG4tXFx0XFx0XFx0ICAgISEoYWhpbmZvLVxcdTAwM2VpbnZmbGFncyBcXHUwMDI2IElQNlRfQUhfSU5WX1NQSSkpKTtcXG4tXFx0cHJfZGVidWcoXFxcImxlbiAlMDJYICUwNFggJTAyWCBcXFwiLFxcbi1cXHRcXHQgYWhpbmZvLVxcdTAwM2VoZHJsZW4sIGhkcmxlbixcXG4tXFx0XFx0ICghYWhpbmZvLVxcdTAwM2VoZHJsZW4gfHxcXG4tXFx0XFx0ICAoYWhpbmZvLVxcdTAwM2VoZHJsZW4gPT0gaGRybGVuKSBeXFxuLVxcdFxcdCAgISEoYWhpbmZvLVxcdTAwM2VpbnZmbGFncyBcXHUwMDI2IElQNlRfQUhfSU5WX0xFTikpKTtcXG4tXFx0cHJfZGVidWcoXFxcInJlcyAlMDJYICUwNFggJTAyWFxcXFxuXFxcIixcXG4tXFx0XFx0IGFoaW5mby1cXHUwMDNlaGRycmVzLCBhaC1cXHUwMDNlcmVzZXJ2ZWQsXFxuLVxcdFxcdCAhKGFoaW5mby1cXHUwMDNlaGRycmVzIFxcdTAwMjZcXHUwMDI2IGFoLVxcdTAwM2VyZXNlcnZlZCkpO1xcbi1cXG4gXFx0cmV0dXJuIHNwaV9tYXRjaChhaGluZm8tXFx1MDAzZXNwaXNbMF0sIGFoaW5mby1cXHUwMDNlc3Bpc1sxXSxcXG4gXFx0XFx0XFx0ICBudG9obChhaC1cXHUwMDNlc3BpKSxcXG4gXFx0XFx0XFx0ICAhIShhaGluZm8tXFx1MDAzZWludmZsYWdzIFxcdTAwMjYgSVA2VF9BSF9JTlZfU1BJKSkgXFx1MDAyNlxcdTAwMjZcXG5AQCAtOTMsNyArNzAsNyBAQCBzdGF0aWMgaW50IGFoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG4gXFx0Y29uc3Qgc3RydWN0IGlwNnRfYWggKmFoaW5mbyA9IHBhci1cXHUwMDNlbWF0Y2hpbmZvO1xcbiBcXG4gXFx0aWYgKGFoaW5mby1cXHUwMDNlaW52ZmxhZ3MgXFx1MDAyNiB+SVA2VF9BSF9JTlZfTUFTSykge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwidW5rbm93biBmbGFncyAlWFxcXFxuXFxcIiwgYWhpbmZvLVxcdTAwM2VpbnZmbGFncyk7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcInVua25vd24gZmxhZ3MgJVhcXFxcblxcXCIsIGFoaW5mby1cXHUwMDNlaW52ZmxhZ3MpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jXFxuaW5kZXggM2FhZDY0MzkzODZiMS4uZjVmM2NmYjg3MDRjZiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9mcmFnLmNcXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9mcmFnLmNcXG5AQCAtMjMsMTIgKzIzLDcgQEAgTU9EVUxFX0FVVEhPUihcXFwiQW5kcmFzIEtpcy1TemFibyBcXHUwMDNja2lzemFAc2NoLmJtZS5odVxcdTAwM2VcXFwiKTtcXG4gc3RhdGljIGlubGluZSBib29sXFxuIGlkX21hdGNoKHVfaW50MzJfdCBtaW4sIHVfaW50MzJfdCBtYXgsIHVfaW50MzJfdCBpZCwgYm9vbCBpbnZlcnQpXFxuIHtcXG4tXFx0Ym9vbCByO1xcbi1cXHRwcl9kZWJ1ZyhcXFwiaWRfbWF0Y2g6JWMgMHgleCBcXHUwMDNjPSAweCV4IFxcdTAwM2M9IDB4JXhcXFxcblxcXCIsIGludmVydCA/ICchJyA6ICcgJyxcXG4tXFx0XFx0IG1pbiwgaWQsIG1heCk7XFxuLVxcdHIgPSAoaWQgXFx1MDAzZT0gbWluIFxcdTAwMjZcXHUwMDI2IGlkIFxcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XFxuLVxcdHByX2RlYnVnKFxcXCIgcmVzdWx0ICVzXFxcXG5cXFwiLCByID8gXFxcIlBBU1NcXFwiIDogXFxcIkZBSUxFRFxcXCIpO1xcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIChpZCBcXHUwMDNlPSBtaW4gXFx1MDAyNlxcdTAwMjYgaWQgXFx1MDAzYz0gbWF4KSBeIGludmVydDtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2xcXG5AQCAtNTMsMzggKzQ4LDYgQEAgZnJhZ19tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFxuLVxcdHByX2RlYnVnKFxcXCJJTkZPICUwNFggXFxcIiwgZmgtXFx1MDAzZWZyYWdfb2ZmKTtcXG4tXFx0cHJfZGVidWcoXFxcIk9GRlNFVCAlMDRYIFxcXCIsIG50b2hzKGZoLVxcdTAwM2VmcmFnX29mZikgXFx1MDAyNiB+MHg3KTtcXG4tXFx0cHJfZGVidWcoXFxcIlJFUyAlMDJYICUwNFhcXFwiLCBmaC1cXHUwMDNlcmVzZXJ2ZWQsIG50b2hzKGZoLVxcdTAwM2VmcmFnX29mZikgXFx1MDAyNiAweDYpO1xcbi1cXHRwcl9kZWJ1ZyhcXFwiTUYgJTA0WCBcXFwiLCBmaC1cXHUwMDNlZnJhZ19vZmYgXFx1MDAyNiBodG9ucyhJUDZfTUYpKTtcXG4tXFx0cHJfZGVidWcoXFxcIklEICV1ICUwOFhcXFxcblxcXCIsIG50b2hsKGZoLVxcdTAwM2VpZGVudGlmaWNhdGlvbiksXFxuLVxcdFxcdCBudG9obChmaC1cXHUwMDNlaWRlbnRpZmljYXRpb24pKTtcXG4tXFxuLVxcdHByX2RlYnVnKFxcXCJJUHY2IEZSQUcgaWQgJTAyWCBcXFwiLFxcbi1cXHRcXHQgaWRfbWF0Y2goZnJhZ2luZm8tXFx1MDAzZWlkc1swXSwgZnJhZ2luZm8tXFx1MDAzZWlkc1sxXSxcXG4tXFx0XFx0XFx0ICBudG9obChmaC1cXHUwMDNlaWRlbnRpZmljYXRpb24pLFxcbi1cXHRcXHRcXHQgICEhKGZyYWdpbmZvLVxcdTAwM2VpbnZmbGFncyBcXHUwMDI2IElQNlRfRlJBR19JTlZfSURTKSkpO1xcbi1cXHRwcl9kZWJ1ZyhcXFwicmVzICUwMlggJTAyWCUwNFggJTAyWCBcXFwiLFxcbi1cXHRcXHQgZnJhZ2luZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVA2VF9GUkFHX1JFUywgZmgtXFx1MDAzZXJlc2VydmVkLFxcbi1cXHRcXHQgbnRvaHMoZmgtXFx1MDAzZWZyYWdfb2ZmKSBcXHUwMDI2IDB4NixcXG4tXFx0XFx0ICEoKGZyYWdpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQNlRfRlJBR19SRVMpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgIChmaC1cXHUwMDNlcmVzZXJ2ZWQgfHwgKG50b2hzKGZoLVxcdTAwM2VmcmFnX29mZikgXFx1MDAyNiAweDA2KSkpKTtcXG4tXFx0cHJfZGVidWcoXFxcImZpcnN0ICUwMlggJTAyWCAlMDJYIFxcXCIsXFxuLVxcdFxcdCBmcmFnaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUDZUX0ZSQUdfRlNULFxcbi1cXHRcXHQgbnRvaHMoZmgtXFx1MDAzZWZyYWdfb2ZmKSBcXHUwMDI2IH4weDcsXFxuLVxcdFxcdCAhKChmcmFnaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUDZUX0ZSQUdfRlNUKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAobnRvaHMoZmgtXFx1MDAzZWZyYWdfb2ZmKSBcXHUwMDI2IH4weDcpKSk7XFxuLVxcdHByX2RlYnVnKFxcXCJtZiAlMDJYICUwMlggJTAyWCBcXFwiLFxcbi1cXHRcXHQgZnJhZ2luZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVA2VF9GUkFHX01GLFxcbi1cXHRcXHQgbnRvaHMoZmgtXFx1MDAzZWZyYWdfb2ZmKSBcXHUwMDI2IElQNl9NRixcXG4tXFx0XFx0ICEoKGZyYWdpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQNlRfRlJBR19NRikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgISgobnRvaHMoZmgtXFx1MDAzZWZyYWdfb2ZmKSBcXHUwMDI2IElQNl9NRikpKSk7XFxuLVxcdHByX2RlYnVnKFxcXCJsYXN0ICUwMlggJTAyWCAlMDJYXFxcXG5cXFwiLFxcbi1cXHRcXHQgZnJhZ2luZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVA2VF9GUkFHX05NRixcXG4tXFx0XFx0IG50b2hzKGZoLVxcdTAwM2VmcmFnX29mZikgXFx1MDAyNiBJUDZfTUYsXFxuLVxcdFxcdCAhKChmcmFnaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUDZUX0ZSQUdfTk1GKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAobnRvaHMoZmgtXFx1MDAzZWZyYWdfb2ZmKSBcXHUwMDI2IElQNl9NRikpKTtcXG4tXFxuIFxcdHJldHVybiBpZF9tYXRjaChmcmFnaW5mby1cXHUwMDNlaWRzWzBdLCBmcmFnaW5mby1cXHUwMDNlaWRzWzFdLFxcbiBcXHRcXHRcXHQgbnRvaGwoZmgtXFx1MDAzZWlkZW50aWZpY2F0aW9uKSxcXG4gXFx0XFx0XFx0ICEhKGZyYWdpbmZvLVxcdTAwM2VpbnZmbGFncyBcXHUwMDI2IElQNlRfRlJBR19JTlZfSURTKSkgXFx1MDAyNlxcdTAwMjZcXG5AQCAtMTAzLDcgKzY2LDcgQEAgc3RhdGljIGludCBmcmFnX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG4gXFx0Y29uc3Qgc3RydWN0IGlwNnRfZnJhZyAqZnJhZ2luZm8gPSBwYXItXFx1MDAzZW1hdGNoaW5mbztcXG4gXFxuIFxcdGlmIChmcmFnaW5mby1cXHUwMDNlaW52ZmxhZ3MgXFx1MDAyNiB+SVA2VF9GUkFHX0lOVl9NQVNLKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJ1bmtub3duIGZsYWdzICVYXFxcXG5cXFwiLCBmcmFnaW5mby1cXHUwMDNlaW52ZmxhZ3MpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJ1bmtub3duIGZsYWdzICVYXFxcXG5cXFwiLCBmcmFnaW5mby1cXHUwMDNlaW52ZmxhZ3MpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xcbmluZGV4IDZkMWE1ZDIwMjZhNjcuLjM3YzIwN2QzMTUyYTQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmNcXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xcbkBAIC03OSwxNCArNzksNiBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbi1cXHRwcl9kZWJ1ZyhcXFwiSVB2NiBPUFRTIExFTiAldSAldSBcXFwiLCBoZHJsZW4sIG9oLVxcdTAwM2VoZHJsZW4pO1xcbi1cXG4tXFx0cHJfZGVidWcoXFxcImxlbiAlMDJYICUwNFggJTAyWCBcXFwiLFxcbi1cXHRcXHQgb3B0aW5mby1cXHUwMDNlaGRybGVuLCBoZHJsZW4sXFxuLVxcdFxcdCAoIShvcHRpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQNlRfT1BUU19MRU4pIHx8XFxuLVxcdFxcdCAgKChvcHRpbmZvLVxcdTAwM2VoZHJsZW4gPT0gaGRybGVuKSBeXFxuLVxcdFxcdCAgICEhKG9wdGluZm8tXFx1MDAzZWludmZsYWdzIFxcdTAwMjYgSVA2VF9PUFRTX0lOVl9MRU4pKSkpO1xcbi1cXG4gXFx0cmV0ID0gKCEob3B0aW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUDZUX09QVFNfTEVOKSB8fFxcbiBcXHQgICAgICAgKChvcHRpbmZvLVxcdTAwM2VoZHJsZW4gPT0gaGRybGVuKSBeXFxuIFxcdFxcdCEhKG9wdGluZm8tXFx1MDAzZWludmZsYWdzIFxcdTAwMjYgSVA2VF9PUFRTX0lOVl9MRU4pKSk7XFxuQEAgLTk2LDggKzg4LDYgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIFxcdGlmICghKG9wdGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVA2VF9PUFRTX09QVFMpKSB7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJTdHJpY3QgXFxcIik7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCIjJWQgXFxcIiwgb3B0aW5mby1cXHUwMDNlb3B0c25yKTtcXG4gXFx0XFx0Zm9yICh0ZW1wID0gMDsgdGVtcCBcXHUwMDNjIG9wdGluZm8tXFx1MDAzZW9wdHNucjsgdGVtcCsrKSB7XFxuIFxcdFxcdFxcdC8qIHR5cGUgZmllbGQgZXhpc3RzID8gKi9cXG4gXFx0XFx0XFx0aWYgKGhkcmxlbiBcXHUwMDNjIDEpXFxuQEAgLTEwOCwxMyArOTgsOSBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRcXHRcXHQvKiBUeXBlIGNoZWNrICovXFxuLVxcdFxcdFxcdGlmICgqdHAgIT0gKG9wdGluZm8tXFx1MDAzZW9wdHNbdGVtcF0gXFx1MDAyNiAweEZGMDApIFxcdTAwM2VcXHUwMDNlIDgpIHtcXG4tXFx0XFx0XFx0XFx0cHJfZGVidWcoXFxcIlRiYWQgJTAyWCAlMDJYXFxcXG5cXFwiLCAqdHAsXFxuLVxcdFxcdFxcdFxcdFxcdCAob3B0aW5mby1cXHUwMDNlb3B0c1t0ZW1wXSBcXHUwMDI2IDB4RkYwMCkgXFx1MDAzZVxcdTAwM2UgOCk7XFxuK1xcdFxcdFxcdGlmICgqdHAgIT0gKG9wdGluZm8tXFx1MDAzZW9wdHNbdGVtcF0gXFx1MDAyNiAweEZGMDApIFxcdTAwM2VcXHUwMDNlIDgpXFxuIFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0XFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0XFx0cHJfZGVidWcoXFxcIlRvayBcXFwiKTtcXG4tXFx0XFx0XFx0fVxcbitcXG4gXFx0XFx0XFx0LyogTGVuZ3RoIGNoZWNrICovXFxuIFxcdFxcdFxcdGlmICgqdHApIHtcXG4gXFx0XFx0XFx0XFx0dTE2IHNwZWNfbGVuO1xcbkBAIC0xMjksMjYgKzExNSwxOCBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdFxcdHNwZWNfbGVuID0gb3B0aW5mby1cXHUwMDNlb3B0c1t0ZW1wXSBcXHUwMDI2IDB4MDBGRjtcXG4gXFxuLVxcdFxcdFxcdFxcdGlmIChzcGVjX2xlbiAhPSAweDAwRkYgXFx1MDAyNlxcdTAwMjYgc3BlY19sZW4gIT0gKmxwKSB7XFxuLVxcdFxcdFxcdFxcdFxcdHByX2RlYnVnKFxcXCJMYmFkICUwMlggJTA0WFxcXFxuXFxcIiwgKmxwLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgc3BlY19sZW4pO1xcbitcXHRcXHRcXHRcXHRpZiAoc3BlY19sZW4gIT0gMHgwMEZGIFxcdTAwMjZcXHUwMDI2IHNwZWNfbGVuICE9ICpscClcXG4gXFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdFxcdHByX2RlYnVnKFxcXCJMb2sgXFxcIik7XFxuK1xcbiBcXHRcXHRcXHRcXHRvcHRsZW4gPSAqbHAgKyAyO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiUGFkMVxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFxcdG9wdGxlbiA9IDE7XFxuIFxcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdC8qIFN0ZXAgdG8gdGhlIG5leHQgKi9cXG4tXFx0XFx0XFx0cHJfZGVidWcoXFxcImxlbiUwNFhcXFxcblxcXCIsIG9wdGxlbik7XFxuLVxcbiBcXHRcXHRcXHRpZiAoKHB0ciBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuIC0gb3B0bGVuIHx8IGhkcmxlbiBcXHUwMDNjIG9wdGxlbikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIHRlbXAgXFx1MDAzYyBvcHRpbmZvLVxcdTAwM2VvcHRzbnIgLSAxKSB7XFxuLVxcdFxcdFxcdFxcdHByX2RlYnVnKFxcXCJuZXcgcG9pbnRlciBpcyB0b28gbGFyZ2UhXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ICAgIHRlbXAgXFx1MDAzYyBvcHRpbmZvLVxcdTAwM2VvcHRzbnIgLSAxKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbitcXG4gXFx0XFx0XFx0cHRyICs9IG9wdGxlbjtcXG4gXFx0XFx0XFx0aGRybGVuIC09IG9wdGxlbjtcXG4gXFx0XFx0fVxcbkBAIC0xNjYsMTYgKzE0NCwxNiBAQCBzdGF0aWMgaW50IGhiaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxuIFxcdGNvbnN0IHN0cnVjdCBpcDZ0X29wdHMgKm9wdHNpbmZvID0gcGFyLVxcdTAwM2VtYXRjaGluZm87XFxuIFxcbiBcXHRpZiAob3B0c2luZm8tXFx1MDAzZWludmZsYWdzIFxcdTAwMjYgfklQNlRfT1BUU19JTlZfTUFTSykge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwidW5rbm93biBmbGFncyAlWFxcXFxuXFxcIiwgb3B0c2luZm8tXFx1MDAzZWludmZsYWdzKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwidW5rbm93biBmbGFncyAlWFxcXFxuXFxcIiwgb3B0c2luZm8tXFx1MDAzZWludmZsYWdzKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFx0aWYgKG9wdHNpbmZvLVxcdTAwM2VvcHRzbnIgXFx1MDAzZSBJUDZUX09QVFNfT1BUU05SKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJ0b28gbWFueSBzdXBwb3J0ZWQgb3B0cyBzcGVjaWZpZWRcXFxcblxcXCIpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJ0b28gbWFueSBzdXBwb3J0ZWQgb3B0cyBzcGVjaWZpZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKG9wdHNpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQNlRfT1BUU19OU1RSSUNUKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJOb3Qgc3RyaWN0IC0gbm90IGltcGxlbWVudGVkXFxcIik7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcIk5vdCBzdHJpY3QgLSBub3QgaW1wbGVtZW50ZWRcXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X21oLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9taC5jXFxuaW5kZXggZmQ0OTJiNjlhY2JjMC4uYmE2ZGNjNzc5MWEwOSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9taC5jXFxuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbWguY1xcbkBAIC00MiwxNCArNDIsMTEgQEAgc3RhdGljIGJvb2wgbWhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0aWYgKG1oID09IE5VTEwpIHtcXG4gXFx0XFx0LyogV2UndmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2VcXG4gXFx0XFx0ICAgY2FuJ3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLiAqL1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiRHJvcHBpbmcgZXZpbCBNSCB0aW55Z3JhbS5cXFxcblxcXCIpO1xcbiBcXHRcXHRwYXItXFx1MDAzZWhvdGRyb3AgPSB0cnVlO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChtaC1cXHUwMDNlaXA2bWhfcHJvdG8gIT0gSVBQUk9UT19OT05FKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJEcm9wcGluZyBpbnZhbGlkIE1IIFBheWxvYWQgUHJvdG86ICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgbWgtXFx1MDAzZWlwNm1oX3Byb3RvKTtcXG4gXFx0XFx0cGFyLVxcdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jXFxuaW5kZXggNjdjODdhODhjZGU0Zi4uYWY4ZDEwZDQ5ZGU4MSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jXFxuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnBmaWx0ZXIuY1xcbkBAIC0xMTgsNyArMTE4LDcgQEAgc3RhdGljIGludCBycGZpbHRlcl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG4gXFxuIFxcdGlmIChzdHJjbXAocGFyLVxcdTAwM2V0YWJsZSwgXFxcIm1hbmdsZVxcXCIpICE9IDAgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHN0cmNtcChwYXItXFx1MDAzZXRhYmxlLCBcXFwicmF3XFxcIikgIT0gMCkge1xcbi1cXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJvbmx5IHZhbGlkIGluIFxcXFwncmF3XFxcXCcgb3IgXFxcXCdtYW5nbGVcXFxcJyB0YWJsZSwgbm90IFxcXFwnJXNcXFxcJ1xcXFxuXFxcIixcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwib25seSB2YWxpZCBpbiBcXFxcJ3Jhd1xcXFwnIG9yIFxcXFwnbWFuZ2xlXFxcXCcgdGFibGVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCAgICBwYXItXFx1MDAzZXRhYmxlKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmNcXG5pbmRleCAyNzhiNTI3NTJmMzY0Li4wYzAxYWMyNzQ2ZDFmIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmNcXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jXFxuQEAgLTE1NSwxOCArMTU1LDE4IEBAIHN0YXRpYyBpbnQgcnRfbXQ2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbiBcXHRjb25zdCBzdHJ1Y3QgaXA2dF9ydCAqcnRpbmZvID0gcGFyLVxcdTAwM2VtYXRjaGluZm87XFxuIFxcbiBcXHRpZiAocnRpbmZvLVxcdTAwM2VpbnZmbGFncyBcXHUwMDI2IH5JUDZUX1JUX0lOVl9NQVNLKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJ1bmtub3duIGZsYWdzICVYXFxcXG5cXFwiLCBydGluZm8tXFx1MDAzZWludmZsYWdzKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwidW5rbm93biBmbGFncyAlWFxcXFxuXFxcIiwgcnRpbmZvLVxcdTAwM2VpbnZmbGFncyk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcdGlmIChydGluZm8tXFx1MDAzZWFkZHJuciBcXHUwMDNlIElQNlRfUlRfSE9QUykge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwidG9vIG1hbnkgYWRkcmVzc2VzIHNwZWNpZmllZFxcXFxuXFxcIik7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcInRvbyBtYW55IGFkZHJlc3NlcyBzcGVjaWZpZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHRpZiAoKHJ0aW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoSVA2VF9SVF9SRVMgfCBJUDZUX1JUX0ZTVF9NQVNLKSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICghKHJ0aW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUDZUX1JUX1RZUCkgfHxcXG4gXFx0ICAgICAocnRpbmZvLVxcdTAwM2VydF90eXBlICE9IDApIHx8XFxuIFxcdCAgICAgKHJ0aW5mby1cXHUwMDNlaW52ZmxhZ3MgXFx1MDAyNiBJUDZUX1JUX0lOVl9UWVApKSkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiYC0tcnQtdHlwZSAwJyByZXF1aXJlZCBiZWZvcmUgYC0tcnQtMC0qJ1xcXCIpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJgLS1ydC10eXBlIDAnIHJlcXVpcmVkIGJlZm9yZSBgLS1ydC0wLSonXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmNcXG5pbmRleCAxNDk0YjNlZTMwZTExLi40ZTQ0MzZhOTEwNGI0IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuY1xcbkBAIC04Nyw4ICs4Nyw3IEBAIHN0YXRpYyBpbnQgY29ubnNlY21hcmtfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXFxuIFxcbiBcXHRpZiAoc3RyY21wKHBhci1cXHUwMDNldGFibGUsIFxcXCJtYW5nbGVcXFwiKSAhPSAwIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBzdHJjbXAocGFyLVxcdTAwM2V0YWJsZSwgXFxcInNlY3VyaXR5XFxcIikgIT0gMCkge1xcbi1cXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJvbmx5IHZhbGlkIGluIFxcXFwnbWFuZ2xlXFxcXCcgb3IgXFxcXCdzZWN1cml0eVxcXFwnIHRhYmxlLCBub3QgXFxcXCclc1xcXFwnXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgICAgcGFyLVxcdTAwM2V0YWJsZSk7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcIm9ubHkgdmFsaWQgaW4gXFxcXCdtYW5nbGVcXFxcJyBvciBcXFxcJ3NlY3VyaXR5XFxcXCcgdGFibGVcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DVC5jIGIvbmV0L25ldGZpbHRlci94dF9DVC5jXFxuaW5kZXggZTc4NjYwZGZkZjRiNi4uOTEzMjYwMTRhZGUxYyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0NULmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0NULmNcXG5AQCAtMTk1LDcgKzE5NSw4IEBAIHN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsXFxuIFxcdFxcdGdvdG8gZXJyMztcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGluZm8tXFx1MDAzZWhlbHBlclswXSkge1xcbitcXHRpZiAoaW5mby1cXHUwMDNlaGVscGVyWzBdIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBzdHJubGVuKGluZm8tXFx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXFx1MDAzZWhlbHBlcikpIFxcdTAwM2Mgc2l6ZW9mKGluZm8tXFx1MDAzZWhlbHBlcikpIHtcXG4gXFx0XFx0aWYgKHN0cm5sZW4oaW5mby1cXHUwMDNlaGVscGVyLCBzaXplb2YoaW5mby1cXHUwMDNlaGVscGVyKSkgPT0gc2l6ZW9mKGluZm8tXFx1MDAzZWhlbHBlcikpIHtcXG4gXFx0XFx0XFx0cmV0ID0gLUVOQU1FVE9PTE9ORztcXG4gXFx0XFx0XFx0Z290byBlcnIzO1xcbkBAIC0yMDYsNyArMjA3LDggQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcixcXG4gXFx0XFx0XFx0Z290byBlcnIzO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoaW5mby1cXHUwMDNldGltZW91dFswXSkge1xcbitcXHRpZiAoaW5mby1cXHUwMDNldGltZW91dFswXSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc3RybmxlbihpbmZvLVxcdTAwM2V0aW1lb3V0LCBzaXplb2YoaW5mby1cXHUwMDNldGltZW91dCkpIFxcdTAwM2Mgc2l6ZW9mKGluZm8tXFx1MDAzZXRpbWVvdXQpKSB7XFxuIFxcdFxcdGlmIChzdHJubGVuKGluZm8tXFx1MDAzZXRpbWVvdXQsIHNpemVvZihpbmZvLVxcdTAwM2V0aW1lb3V0KSkgPT0gc2l6ZW9mKGluZm8tXFx1MDAzZXRpbWVvdXQpKSB7XFxuIFxcdFxcdFxcdHJldCA9IC1FTkFNRVRPT0xPTkc7XFxuIFxcdFxcdFxcdGdvdG8gZXJyNDtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcXG5pbmRleCBiZmNmMmQ0NGU5M2RiLi4xNWI2OThlYTk4YWE2IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXFxuQEAgLTEwMiw4ICsxMDIsNiBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZXhwaXJlZChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4ge1xcbiBcXHRzdHJ1Y3QgaWRsZXRpbWVyX3RnICp0aW1lciA9IHRpbWVyX2NvbnRhaW5lcl9vZih0aW1lciwgdCwgdGltZXIpO1xcbiBcXG4tXFx0cHJfZGVidWcoXFxcInRpbWVyICVzIGV4cGlyZWRcXFxcblxcXCIsIHRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSk7XFxuLVxcbiBcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZ0aW1lci1cXHUwMDNld29yayk7XFxuIH1cXG4gXFxuQEAgLTExMSw3ICsxMDksNiBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfYWxhcm1wcm9jKHN0cnVjdCBhbGFybSAqYWxhcm0sIGt0aW1lX3Qgbm93KVxcbiB7XFxuIFxcdHN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyID0gYWxhcm0tXFx1MDAzZWRhdGE7XFxuIFxcbi1cXHRwcl9kZWJ1ZyhcXFwiYWxhcm0gJXMgZXhwaXJlZFxcXFxuXFxcIiwgdGltZXItXFx1MDAzZWF0dHIuYXR0ci5uYW1lKTtcXG4gXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2dGltZXItXFx1MDAzZXdvcmspO1xcbiB9XFxuIFxcbkBAIC0xNzEsNyArMTY4LDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbylcXG4gXFxuIFxcdHJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKGlkbGV0aW1lcl90Z19rb2JqLCBcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuYXR0cik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJjb3VsZG4ndCBhZGQgZmlsZSB0byBzeXNmc1xcXCIpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJjb3VsZG4ndCBhZGQgZmlsZSB0byBzeXNmc1xcXCIpO1xcbiBcXHRcXHRnb3RvIG91dF9mcmVlX2F0dHI7XFxuIFxcdH1cXG4gXFxuQEAgLTIyMCw3ICsyMTcsNyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvKVxcbiBcXG4gXFx0cmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0cHJfZGVidWcoXFxcImNvdWxkbid0IGFkZCBmaWxlIHRvIHN5c2ZzXFxcIik7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcImNvdWxkbid0IGFkZCBmaWxlIHRvIHN5c2ZzXFxcIik7XFxuIFxcdFxcdGdvdG8gb3V0X2ZyZWVfYXR0cjtcXG4gXFx0fVxcbiBcXG5AQCAtMjI4LDcgKzIyNSw2IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXFxuIFxcdGtvYmplY3RfdWV2ZW50KGlkbGV0aW1lcl90Z19rb2JqLEtPQkpfQUREKTtcXG4gXFxuIFxcdGxpc3RfYWRkKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlZW50cnksIFxcdTAwMjZpZGxldGltZXJfdGdfbGlzdCk7XFxuLVxcdHByX2RlYnVnKFxcXCJ0aW1lciB0eXBlIHZhbHVlIGlzICV1XFxcIiwgaW5mby1cXHUwMDNldGltZXJfdHlwZSk7XFxuIFxcdGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V0aW1lcl90eXBlID0gaW5mby1cXHUwMDNldGltZXJfdHlwZTtcXG4gXFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXJlZmNudCA9IDE7XFxuIFxcbkBAIC0yNjMsOSArMjU5LDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBpZGxldGltZXJfdGdfdGFyZ2V0KHN0cnVjdCBza19idWZmICpza2IsXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVxcdTAwM2V0YXJnaW5mbztcXG4gXFxuLVxcdHByX2RlYnVnKFxcXCJyZXNldHRpbmcgdGltZXIgJXMsIHRpbWVvdXQgcGVyaW9kICV1XFxcXG5cXFwiLFxcbi1cXHRcXHQgaW5mby1cXHUwMDNlbGFiZWwsIGluZm8tXFx1MDAzZXRpbWVvdXQpO1xcbi1cXG4gXFx0bW9kX3RpbWVyKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIsXFxuIFxcdFxcdCAgc2Vjc190b19qaWZmaWVzKGluZm8tXFx1MDAzZXRpbWVvdXQpICsgamlmZmllcyk7XFxuIFxcbkBAIC0yODAsOSArMjczLDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBpZGxldGltZXJfdGdfdGFyZ2V0X3YxKHN0cnVjdCBza19idWZmICpza2IsXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvID0gcGFyLVxcdTAwM2V0YXJnaW5mbztcXG4gXFxuLVxcdHByX2RlYnVnKFxcXCJyZXNldHRpbmcgdGltZXIgJXMsIHRpbWVvdXQgcGVyaW9kICV1XFxcXG5cXFwiLFxcbi1cXHRcXHQgaW5mby1cXHUwMDNlbGFiZWwsIGluZm8tXFx1MDAzZXRpbWVvdXQpO1xcbi1cXG4gXFx0aWYgKGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V0aW1lcl90eXBlIFxcdTAwMjYgWFRfSURMRVRJTUVSX0FMQVJNKSB7XFxuIFxcdFxcdGlkbGV0aW1lcl9zdGFydF9hbGFybV9zZWMoaW5mby1cXHUwMDNldGltZXIsIGluZm8tXFx1MDAzZXRpbWVvdXQpO1xcbiBcXHR9IGVsc2Uge1xcbkBAIC0yOTYsMTcgKzI4NiwxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gc3RhdGljIGludCBpZGxldGltZXJfdGdfaGVscGVyKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbylcXG4ge1xcbiBcXHRpZiAoaW5mby1cXHUwMDNldGltZW91dCA9PSAwKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJ0aW1lb3V0IHZhbHVlIGlzIHplcm9cXFxcblxcXCIpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJ0aW1lb3V0IHZhbHVlIGlzIHplcm9cXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHRpZiAoaW5mby1cXHUwMDNldGltZW91dCBcXHUwMDNlPSBJTlRfTUFYIC8gMTAwMCkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwidGltZW91dCB2YWx1ZSBpcyB0b28gYmlnXFxcXG5cXFwiKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwidGltZW91dCB2YWx1ZSBpcyB0b28gYmlnXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFx0aWYgKGluZm8tXFx1MDAzZWxhYmVsWzBdID09ICdcXFxcMCcgfHxcXG4gXFx0ICAgIHN0cm5sZW4oaW5mby1cXHUwMDNlbGFiZWwsXFxuIFxcdFxcdCAgICBNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkUpID09IE1BWF9JRExFVElNRVJfTEFCRUxfU0laRSkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwibGFiZWwgaXMgZW1wdHkgb3Igbm90IG51bC10ZXJtaW5hdGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwibGFiZWwgaXMgZW1wdHkgb3Igbm90IG51bC10ZXJtaW5hdGVkXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTMxOCwzNCArMzA4LDI1IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXFxuIFxcdHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRwcl9kZWJ1ZyhcXFwiY2hlY2tlbnRyeSB0YXJnaW5mbyVzXFxcXG5cXFwiLCBpbmZvLVxcdTAwM2VsYWJlbCk7XFxuLVxcbiBcXHRyZXQgPSBpZGxldGltZXJfdGdfaGVscGVyKGluZm8pO1xcbiBcXHRpZihyZXQgXFx1MDAzYyAwKVxcbi1cXHR7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJjaGVja2VudHJ5IGhlbHBlciByZXR1cm4gaW52YWxpZFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHR9XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiBcXG4gXFx0aW5mby1cXHUwMDNldGltZXIgPSBfX2lkbGV0aW1lcl90Z19maW5kX2J5X2xhYmVsKGluZm8tXFx1MDAzZWxhYmVsKTtcXG4gXFx0aWYgKGluZm8tXFx1MDAzZXRpbWVyKSB7XFxuIFxcdFxcdGlmIChpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXJfdHlwZSBcXHUwMDI2IFhUX0lETEVUSU1FUl9BTEFSTSkge1xcbi1cXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiQWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbitcXHRcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJBZGRpbmcvUmVwbGFjaW5nIHJ1bGUgd2l0aCBzYW1lIGxhYmVsIGFuZCBkaWZmZXJlbnQgdGltZXIgdHlwZSBpcyBub3QgYWxsb3dlZFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlcmVmY250Kys7XFxuIFxcdFxcdG1vZF90aW1lcihcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXRpbWVyLFxcbiBcXHRcXHRcXHQgIHNlY3NfdG9famlmZmllcyhpbmZvLVxcdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xcbi1cXG4tXFx0XFx0cHJfZGVidWcoXFxcImluY3JlYXNlZCByZWZjbnQgb2YgdGltZXIgJXMgdG8gJXVcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCBpbmZvLVxcdTAwM2VsYWJlbCwgaW5mby1cXHUwMDNldGltZXItXFx1MDAzZXJlZmNudCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHJldCA9IGlkbGV0aW1lcl90Z19jcmVhdGUoaW5mbyk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdFxcdHByX2RlYnVnKFxcXCJmYWlsZWQgdG8gY3JlYXRlIHRpbWVyXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X211dGV4KTtcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0fVxcbkBAIC0zNjAsMzAgKzM0MSwyMyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxcbiBcXHRzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItXFx1MDAzZXRhcmdpbmZvO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cHJfZGVidWcoXFxcImNoZWNrZW50cnkgdGFyZ2luZm8lc1xcXFxuXFxcIiwgaW5mby1cXHUwMDNlbGFiZWwpO1xcbi1cXG4gXFx0aWYgKGluZm8tXFx1MDAzZXNlbmRfbmxfbXNnKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbiBcXHRyZXQgPSBpZGxldGltZXJfdGdfaGVscGVyKChzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKilpbmZvKTtcXG4gXFx0aWYocmV0IFxcdTAwM2MgMClcXG4tXFx0e1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiY2hlY2tlbnRyeSBoZWxwZXIgcmV0dXJuIGludmFsaWRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0fVxcbiBcXG4tXFx0aWYgKGluZm8tXFx1MDAzZXRpbWVyX3R5cGUgXFx1MDAzZSBYVF9JRExFVElNRVJfQUxBUk0pIHtcXG4tXFx0XFx0cHJfZGVidWcoXFxcImludmFsaWQgdmFsdWUgZm9yIHRpbWVyIHR5cGVcXFxcblxcXCIpO1xcbitcXHRpZiAoaW5mby1cXHUwMDNldGltZXJfdHlwZSBcXHUwMDNlIFhUX0lETEVUSU1FUl9BTEFSTSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdH1cXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiBcXG4gXFx0aW5mby1cXHUwMDNldGltZXIgPSBfX2lkbGV0aW1lcl90Z19maW5kX2J5X2xhYmVsKGluZm8tXFx1MDAzZWxhYmVsKTtcXG4gXFx0aWYgKGluZm8tXFx1MDAzZXRpbWVyKSB7XFxuIFxcdFxcdGlmIChpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXJfdHlwZSAhPSBpbmZvLVxcdTAwM2V0aW1lcl90eXBlKSB7XFxuLVxcdFxcdFxcdHByX2RlYnVnKFxcXCJBZGRpbmcvUmVwbGFjaW5nIHJ1bGUgd2l0aCBzYW1lIGxhYmVsIGFuZCBkaWZmZXJlbnQgdGltZXIgdHlwZSBpcyBub3QgYWxsb3dlZFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bGlzdF9tdXRleCk7XFxuK1xcdFxcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcIkFkZGluZy9SZXBsYWNpbmcgcnVsZSB3aXRoIHNhbWUgbGFiZWwgYW5kIGRpZmZlcmVudCB0aW1lciB0eXBlIGlzIG5vdCBhbGxvd2VkXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTM5MywyMSArMzY3LDE1IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXFxuIFxcdFxcdFxcdGt0aW1lX3QgdG91dCA9IGFsYXJtX2V4cGlyZXNfcmVtYWluaW5nKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYWxhcm0pO1xcbiBcXHRcXHRcXHRzdHJ1Y3QgdGltZXNwZWM2NCBrdGltZXNwZWMgPSBrdGltZV90b190aW1lc3BlYzY0KHRvdXQpO1xcbiBcXG4tXFx0XFx0XFx0aWYgKGt0aW1lc3BlYy50dl9zZWMgXFx1MDAzZSAwKSB7XFxuLVxcdFxcdFxcdFxcdHByX2RlYnVnKFxcXCJ0aW1lX2V4cGlyeV9yZW1haW5pbmcgJWxsZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0IGt0aW1lc3BlYy50dl9zZWMpO1xcbitcXHRcXHRcXHRpZiAoa3RpbWVzcGVjLnR2X3NlYyBcXHUwMDNlIDApXFxuIFxcdFxcdFxcdFxcdGlkbGV0aW1lcl9zdGFydF9hbGFybV9rdGltZShpbmZvLVxcdTAwM2V0aW1lciwgdG91dCk7XFxuLVxcdFxcdFxcdH1cXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIsXFxuIFxcdFxcdFxcdFxcdFxcdHNlY3NfdG9famlmZmllcyhpbmZvLVxcdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJpbmNyZWFzZWQgcmVmY250IG9mIHRpbWVyICVzIHRvICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgaW5mby1cXHUwMDNlbGFiZWwsIGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VyZWZjbnQpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRyZXQgPSBpZGxldGltZXJfdGdfY3JlYXRlX3YxKGluZm8pO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiZmFpbGVkIHRvIGNyZWF0ZSB0aW1lclxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bGlzdF9tdXRleCk7XFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdH1cXG5AQCAtNDIxLDE5ICszODksMTMgQEAgc3RhdGljIHZvaWQgaWRsZXRpbWVyX3RnX2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X3RnZHRvcl9wYXJhbSAqcGFyKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxuIFxcbi1cXHRwcl9kZWJ1ZyhcXFwiZGVzdHJveSB0YXJnaW5mbyAlc1xcXFxuXFxcIiwgaW5mby1cXHUwMDNlbGFiZWwpO1xcbi1cXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2bGlzdF9tdXRleCk7XFxuIFxcbiBcXHRpZiAoLS1pbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlcmVmY250IFxcdTAwM2UgMCkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiZGVjcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0IGluZm8tXFx1MDAzZWxhYmVsLCBpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlcmVmY250KTtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X211dGV4KTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRwcl9kZWJ1ZyhcXFwiZGVsZXRpbmcgdGltZXIgJXNcXFxcblxcXCIsIGluZm8tXFx1MDAzZWxhYmVsKTtcXG4tXFxuIFxcdGxpc3RfZGVsKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlZW50cnkpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiBcXG5AQCAtNDQ4LDE5ICs0MTAsMTMgQEAgc3RhdGljIHZvaWQgaWRsZXRpbWVyX3RnX2Rlc3Ryb3lfdjEoY29uc3Qgc3RydWN0IHh0X3RnZHRvcl9wYXJhbSAqcGFyKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxuIFxcbi1cXHRwcl9kZWJ1ZyhcXFwiZGVzdHJveSB0YXJnaW5mbyAlc1xcXFxuXFxcIiwgaW5mby1cXHUwMDNlbGFiZWwpO1xcbi1cXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2bGlzdF9tdXRleCk7XFxuIFxcbiBcXHRpZiAoLS1pbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlcmVmY250IFxcdTAwM2UgMCkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiZGVjcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0IGluZm8tXFx1MDAzZWxhYmVsLCBpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlcmVmY250KTtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X211dGV4KTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRwcl9kZWJ1ZyhcXFwiZGVsZXRpbmcgdGltZXIgJXNcXFxcblxcXCIsIGluZm8tXFx1MDAzZWxhYmVsKTtcXG4tXFxuIFxcdGxpc3RfZGVsKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlZW50cnkpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiBcXG5AQCAtNTM0LDcgKzQ5MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGlkbGV0aW1lcl90Z19pbml0KHZvaWQpXFxuIFxcdGlkbGV0aW1lcl90Z19jbGFzcyA9IGNsYXNzX2NyZWF0ZShcXFwieHRfaWRsZXRpbWVyXFxcIik7XFxuIFxcdGVyciA9IFBUUl9FUlIoaWRsZXRpbWVyX3RnX2NsYXNzKTtcXG4gXFx0aWYgKElTX0VSUihpZGxldGltZXJfdGdfY2xhc3MpKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJjb3VsZG4ndCByZWdpc3RlciBkZXZpY2UgY2xhc3NcXFxcblxcXCIpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJjb3VsZG4ndCByZWdpc3RlciBkZXZpY2UgY2xhc3NcXFxcblxcXCIpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG5AQCAtNTQyLDcgKzQ5OCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGlkbGV0aW1lcl90Z19pbml0KHZvaWQpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBNS0RFVigwLCAwKSwgTlVMTCwgXFxcInRpbWVyc1xcXCIpO1xcbiBcXHRlcnIgPSBQVFJfRVJSKGlkbGV0aW1lcl90Z19kZXZpY2UpO1xcbiBcXHRpZiAoSVNfRVJSKGlkbGV0aW1lcl90Z19kZXZpY2UpKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJjb3VsZG4ndCByZWdpc3RlciBzeXN0ZW0gZGV2aWNlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwiY291bGRuJ3QgcmVnaXN0ZXIgc3lzdGVtIGRldmljZVxcXFxuXFxcIik7XFxuIFxcdFxcdGdvdG8gb3V0X2NsYXNzO1xcbiBcXHR9XFxuIFxcbkBAIC01NTEsNyArNTA3LDcgQEAgc3RhdGljIGludCBfX2luaXQgaWRsZXRpbWVyX3RnX2luaXQodm9pZClcXG4gXFx0ZXJyID0geHRfcmVnaXN0ZXJfdGFyZ2V0cyhpZGxldGltZXJfdGcsIEFSUkFZX1NJWkUoaWRsZXRpbWVyX3RnKSk7XFxuIFxcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiY291bGRuJ3QgcmVnaXN0ZXIgeHQgdGFyZ2V0XFxcXG5cXFwiKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwiY291bGRuJ3QgcmVnaXN0ZXIgeHQgdGFyZ2V0XFxcXG5cXFwiKTtcXG4gXFx0XFx0Z290byBvdXRfZGV2O1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0xPRy5jIGIvbmV0L25ldGZpbHRlci94dF9MT0cuY1xcbmluZGV4IGYzOTI0NGY5YzBlZDkuLmRlM2YxNzY3OTJhMDcgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9MT0cuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTE9HLmNcXG5AQCAtNTAsMTIgKzUwLDEyIEBAIHN0YXRpYyBpbnQgbG9nX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmIChsb2dpbmZvLVxcdTAwM2VsZXZlbCBcXHUwMDNlPSA4KSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJsZXZlbCAldSBcXHUwMDNlPSA4XFxcXG5cXFwiLCBsb2dpbmZvLVxcdTAwM2VsZXZlbCk7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcImxldmVsICV1IFxcdTAwM2U9IDhcXFxcblxcXCIsIGxvZ2luZm8tXFx1MDAzZWxldmVsKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChsb2dpbmZvLVxcdTAwM2VwcmVmaXhbc2l6ZW9mKGxvZ2luZm8tXFx1MDAzZXByZWZpeCktMV0gIT0gJ1xcXFwwJykge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwicHJlZml4IGlzIG5vdCBudWxsLXRlcm1pbmF0ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJwcmVmaXggaXMgbm90IG51bGwtdGVybWluYXRlZFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuYyBiL25ldC9uZXRmaWx0ZXIveHRfTUFTUVVFUkFERS5jXFxuaW5kZXggZWFlMDVjMTc4MzM2Ny4uY2VhNDg4Y2VjNTQ0NSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTUFTUVVFUkFERS5jXFxuQEAgLTIxLDExICsyMSwxMSBAQCBzdGF0aWMgaW50IG1hc3F1ZXJhZGVfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXFxuIFxcdGNvbnN0IHN0cnVjdCBuZl9uYXRfaXB2NF9tdWx0aV9yYW5nZV9jb21wYXQgKm1yID0gcGFyLVxcdTAwM2V0YXJnaW5mbztcXG4gXFxuIFxcdGlmIChtci1cXHUwMDNlcmFuZ2VbMF0uZmxhZ3MgXFx1MDAyNiBORl9OQVRfUkFOR0VfTUFQX0lQUykge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiYmFkIE1BUF9JUFMuXFxcXG5cXFwiKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwiYmFkIE1BUF9JUFMuXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFx0aWYgKG1yLVxcdTAwM2VyYW5nZXNpemUgIT0gMSkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiYmFkIHJhbmdlc2l6ZSAldVxcXFxuXFxcIiwgbXItXFx1MDAzZXJhbmdlc2l6ZSk7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcImJhZCByYW5nZXNpemUgJXVcXFxcblxcXCIsIG1yLVxcdTAwM2VyYW5nZXNpemUpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gbmZfY3RfbmV0bnNfZ2V0KHBhci1cXHUwMDNlbmV0LCBwYXItXFx1MDAzZWZhbWlseSk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfTkVUTUFQLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jXFxuaW5kZXggY2IyZWU4MGQ4NGZhOC4uOGM4NmQ5YTQzMzczYSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci94dF9ORVRNQVAuY1xcbkBAIC0xMDYsMTEgKzEwNiwxMSBAQCBzdGF0aWMgaW50IG5ldG1hcF90ZzRfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXFxuIFxcdGNvbnN0IHN0cnVjdCBuZl9uYXRfaXB2NF9tdWx0aV9yYW5nZV9jb21wYXQgKm1yID0gcGFyLVxcdTAwM2V0YXJnaW5mbztcXG4gXFxuIFxcdGlmICghKG1yLVxcdTAwM2VyYW5nZVswXS5mbGFncyBcXHUwMDI2IE5GX05BVF9SQU5HRV9NQVBfSVBTKSkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiYmFkIE1BUF9JUFMuXFxcXG5cXFwiKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwiYmFkIE1BUF9JUFMuXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFx0aWYgKG1yLVxcdTAwM2VyYW5nZXNpemUgIT0gMSkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiYmFkIHJhbmdlc2l6ZSAldS5cXFxcblxcXCIsIG1yLVxcdTAwM2VyYW5nZXNpemUpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJiYWQgcmFuZ2VzaXplICV1LlxcXFxuXFxcIiwgbXItXFx1MDAzZXJhbmdlc2l6ZSk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcdHJldHVybiBuZl9jdF9uZXRuc19nZXQocGFyLVxcdTAwM2VuZXQsIHBhci1cXHUwMDNlZmFtaWx5KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jIGIvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jXFxuaW5kZXggZmY2NmI1NmEzZjk3ZC4uMjdiYzA1NDVjNGY3NCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X1JFRElSRUNULmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X1JFRElSRUNULmNcXG5AQCAtNTEsMTEgKzUxLDExIEBAIHN0YXRpYyBpbnQgcmVkaXJlY3RfdGc0X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxcbiBcXHRjb25zdCBzdHJ1Y3QgbmZfbmF0X2lwdjRfbXVsdGlfcmFuZ2VfY29tcGF0ICptciA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxuIFxcbiBcXHRpZiAobXItXFx1MDAzZXJhbmdlWzBdLmZsYWdzIFxcdTAwMjYgTkZfTkFUX1JBTkdFX01BUF9JUFMpIHtcXG4tXFx0XFx0cHJfZGVidWcoXFxcImJhZCBNQVBfSVBTLlxcXFxuXFxcIik7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcImJhZCBNQVBfSVBTLlxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcdGlmIChtci1cXHUwMDNlcmFuZ2VzaXplICE9IDEpIHtcXG4tXFx0XFx0cHJfZGVidWcoXFxcImJhZCByYW5nZXNpemUgJXUuXFxcXG5cXFwiLCBtci1cXHUwMDNlcmFuZ2VzaXplKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwiYmFkIHJhbmdlc2l6ZSAldS5cXFxcblxcXCIsIG1yLVxcdTAwM2VyYW5nZXNpemUpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gbmZfY3RfbmV0bnNfZ2V0KHBhci1cXHUwMDNlbmV0LCBwYXItXFx1MDAzZWZhbWlseSk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jIGIvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmNcXG5pbmRleCA1YmM1ZWE1MDVlYjllLi4zOGU4ZTQxMGI0ZTgxIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jXFxuKysrIGIvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmNcXG5AQCAtNzksOCArNzksNyBAQCBzZWNtYXJrX3RnX2NoZWNrKGNvbnN0IGNoYXIgKnRhYmxlLCBzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfaW5mb192MSAqaW5mbylcXG4gXFxuIFxcdGlmIChzdHJjbXAodGFibGUsIFxcXCJtYW5nbGVcXFwiKSAhPSAwIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBzdHJjbXAodGFibGUsIFxcXCJzZWN1cml0eVxcXCIpICE9IDApIHtcXG4tXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwib25seSB2YWxpZCBpbiBcXFxcJ21hbmdsZVxcXFwnIG9yIFxcXFwnc2VjdXJpdHlcXFxcJyB0YWJsZSwgbm90IFxcXFwnJXNcXFxcJ1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgIHRhYmxlKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwib25seSB2YWxpZCBpbiBcXFxcJ21hbmdsZVxcXFwnIG9yIFxcXFwnc2VjdXJpdHlcXFxcJyB0YWJsZVxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2Nncm91cC5jIGIvbmV0L25ldGZpbHRlci94dF9jZ3JvdXAuY1xcbmluZGV4IDQzZDJhZTJiZTYyOGQuLmFjMWI3ZTcxY2Q3ZjUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9jZ3JvdXAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfY2dyb3VwLmNcXG5AQCAtMzMsNyArMzMsNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192MChjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHtcXG4tXFx0XFx0cHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YxKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmICghaW5mby1cXHUwMDNlaGFzX3BhdGggXFx1MDAyNlxcdTAwMjYgIWluZm8tXFx1MDAzZWhhc19jbGFzc2lkKSB7XFxuLVxcdFxcdHByX2luZm8oXFxcInh0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxcXFxuXFxcIik7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcInh0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbkBAIC01OSw3ICs1OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YxKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoaW5mby1cXHUwMDNlaGFzX2NsYXNzaWQgXFx1MDAyNlxcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHtcXG4tXFx0XFx0cHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YyKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmICghaW5mby1cXHUwMDNlaGFzX3BhdGggXFx1MDAyNlxcdTAwMjYgIWluZm8tXFx1MDAzZWhhc19jbGFzc2lkKSB7XFxuLVxcdFxcdHByX2luZm8oXFxcInh0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxcXFxuXFxcIik7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcInh0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YyKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoaW5mby1cXHUwMDNlaGFzX2NsYXNzaWQgXFx1MDAyNlxcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHtcXG4tXFx0XFx0cHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jIGIvbmV0L25ldGZpbHRlci94dF9lc3AuY1xcbmluZGV4IDJhMWMwYWQwZmYwNzkuLjY4ZmQ3NTg4NDI2OGEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9lc3AuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfZXNwLmNcXG5AQCAtMjUsMTIgKzI1LDcgQEAgTU9EVUxFX0FMSUFTKFxcXCJpcDZ0X2VzcFxcXCIpO1xcbiBzdGF0aWMgaW5saW5lIGJvb2xcXG4gc3BpX21hdGNoKHVfaW50MzJfdCBtaW4sIHVfaW50MzJfdCBtYXgsIHVfaW50MzJfdCBzcGksIGJvb2wgaW52ZXJ0KVxcbiB7XFxuLVxcdGJvb2wgcjtcXG4tXFx0cHJfZGVidWcoXFxcInNwaV9tYXRjaDolYyAweCV4IFxcdTAwM2M9IDB4JXggXFx1MDAzYz0gMHgleFxcXFxuXFxcIixcXG4tXFx0XFx0IGludmVydCA/ICchJyA6ICcgJywgbWluLCBzcGksIG1heCk7XFxuLVxcdHIgPSAoc3BpIFxcdTAwM2U9IG1pbiBcXHUwMDI2XFx1MDAyNiBzcGkgXFx1MDAzYz0gbWF4KSBeIGludmVydDtcXG4tXFx0cHJfZGVidWcoXFxcIiByZXN1bHQgJXNcXFxcblxcXCIsIHIgPyBcXFwiUEFTU1xcXCIgOiBcXFwiRkFJTEVEXFxcIik7XFxuLVxcdHJldHVybiByO1xcbitcXHRyZXR1cm4gKHNwaSBcXHUwMDNlPSBtaW4gXFx1MDAyNlxcdTAwMjYgc3BpIFxcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGVzcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuQEAgLTQ4LDcgKzQzLDYgQEAgc3RhdGljIGJvb2wgZXNwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0XFx0LyogV2UndmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2VcXG4gXFx0XFx0ICogY2FuJ3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0cHJfZGVidWcoXFxcIkRyb3BwaW5nIGV2aWwgRVNQIHRpbnlncmFtLlxcXFxuXFxcIik7XFxuIFxcdFxcdHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWU7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbkBAIC02Miw3ICs1Niw3IEBAIHN0YXRpYyBpbnQgZXNwX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbiBcXHRjb25zdCBzdHJ1Y3QgeHRfZXNwICplc3BpbmZvID0gcGFyLVxcdTAwM2VtYXRjaGluZm87XFxuIFxcbiBcXHRpZiAoZXNwaW5mby1cXHUwMDNlaW52ZmxhZ3MgXFx1MDAyNiB+WFRfRVNQX0lOVl9NQVNLKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJ1bmtub3duIGZsYWdzICVYXFxcXG5cXFwiLCBlc3BpbmZvLVxcdTAwM2VpbnZmbGFncyk7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcInVua25vd24gZmxhZ3MgJVhcXFxcblxcXCIsIGVzcGluZm8tXFx1MDAzZWludmZsYWdzKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaXBjb21wLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwY29tcC5jXFxuaW5kZXggNDcyZGE2MzlhMzJlMi4uMzI5OWMxZWE2MGY5ZSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2lwY29tcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci94dF9pcGNvbXAuY1xcbkBAIC0yOSwxMiArMjksNyBAQCBNT0RVTEVfQUxJQVMoXFxcImlwNnRfaXBjb21wXFxcIik7XFxuIHN0YXRpYyBpbmxpbmUgYm9vbFxcbiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpXFxuIHtcXG4tXFx0Ym9vbCByO1xcbi1cXHRwcl9kZWJ1ZyhcXFwic3BpX21hdGNoOiVjIDB4JXggXFx1MDAzYz0gMHgleCBcXHUwMDNjPSAweCV4XFxcXG5cXFwiLFxcbi1cXHRcXHQgaW52ZXJ0ID8gJyEnIDogJyAnLCBtaW4sIHNwaSwgbWF4KTtcXG4tXFx0ciA9IChzcGkgXFx1MDAzZT0gbWluIFxcdTAwMjZcXHUwMDI2IHNwaSBcXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xcbi1cXHRwcl9kZWJ1ZyhcXFwiIHJlc3VsdCAlc1xcXFxuXFxcIiwgciA/IFxcXCJQQVNTXFxcIiA6IFxcXCJGQUlMRURcXFwiKTtcXG4tXFx0cmV0dXJuIHI7XFxuK1xcdHJldHVybiAoc3BpIFxcdTAwM2U9IG1pbiBcXHUwMDI2XFx1MDAyNiBzcGkgXFx1MDAzYz0gbWF4KSBeIGludmVydDtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgY29tcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuQEAgLTUyLDcgKzQ3LDYgQEAgc3RhdGljIGJvb2wgY29tcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIFxcdFxcdC8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXFxuIFxcdFxcdCAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHByX2RlYnVnKFxcXCJEcm9wcGluZyBldmlsIElQQ29tcCB0aW55Z3JhbS5cXFxcblxcXCIpO1xcbiBcXHRcXHRwYXItXFx1MDAzZWhvdGRyb3AgPSB0cnVlO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuY1xcbmluZGV4IDBjOWUwMTRlMzBiNDkuLmJmNjExNDFmYjc4NTAgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuY1xcbkBAIC0yNCwyNyArMjQsMTUgQEAgaXByYW5nZV9tdDQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRcXHRtICA9IG50b2hsKGlwaC1cXHUwMDNlc2FkZHIpIFxcdTAwM2MgbnRvaGwoaW5mby1cXHUwMDNlc3JjX21pbi5pcCk7XFxuIFxcdFxcdG0gfD0gbnRvaGwoaXBoLVxcdTAwM2VzYWRkcikgXFx1MDAzZSBudG9obChpbmZvLVxcdTAwM2VzcmNfbWF4LmlwKTtcXG4gXFx0XFx0bSBePSAhIShpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQUkFOR0VfU1JDX0lOVik7XFxuLVxcdFxcdGlmIChtKSB7XFxuLVxcdFxcdFxcdHByX2RlYnVnKFxcXCJzcmMgSVAgJXBJNCBOT1QgaW4gcmFuZ2UgJXMlcEk0LSVwSTRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICAgIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHQgICAgICAgICAoaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUFJBTkdFX1NSQ19JTlYpID8gXFxcIihJTlYpIFxcXCIgOiBcXFwiXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgICAgXFx1MDAyNmluZm8tXFx1MDAzZXNyY19taW4uaXAsXFxuLVxcdFxcdFxcdCAgICAgICAgIFxcdTAwMjZpbmZvLVxcdTAwM2VzcmNfbWF4LmlwKTtcXG4rXFx0XFx0aWYgKG0pXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0XFx0fVxcbiBcXHR9XFxuIFxcdGlmIChpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQUkFOR0VfRFNUKSB7XFxuIFxcdFxcdG0gID0gbnRvaGwoaXBoLVxcdTAwM2VkYWRkcikgXFx1MDAzYyBudG9obChpbmZvLVxcdTAwM2Vkc3RfbWluLmlwKTtcXG4gXFx0XFx0bSB8PSBudG9obChpcGgtXFx1MDAzZWRhZGRyKSBcXHUwMDNlIG50b2hsKGluZm8tXFx1MDAzZWRzdF9tYXguaXApO1xcbiBcXHRcXHRtIF49ICEhKGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBSQU5HRV9EU1RfSU5WKTtcXG4tXFx0XFx0aWYgKG0pIHtcXG4tXFx0XFx0XFx0cHJfZGVidWcoXFxcImRzdCBJUCAlcEk0IE5PVCBpbiByYW5nZSAlcyVwSTQtJXBJNFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgICAgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIsXFxuLVxcdFxcdFxcdCAgICAgICAgIChpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQUkFOR0VfRFNUX0lOVikgPyBcXFwiKElOVikgXFxcIiA6IFxcXCJcXFwiLFxcbi1cXHRcXHRcXHQgICAgICAgICBcXHUwMDI2aW5mby1cXHUwMDNlZHN0X21pbi5pcCxcXG4tXFx0XFx0XFx0ICAgICAgICAgXFx1MDAyNmluZm8tXFx1MDAzZWRzdF9tYXguaXApO1xcbitcXHRcXHRpZiAobSlcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRcXHR9XFxuIFxcdH1cXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG5AQCAtNzMsMjcgKzYxLDE1IEBAIGlwcmFuZ2VfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0XFx0bSAgPSBpcHJhbmdlX2lwdjZfbHQoXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIsIFxcdTAwMjZpbmZvLVxcdTAwM2VzcmNfbWluLmluNik7XFxuIFxcdFxcdG0gfD0gaXByYW5nZV9pcHY2X2x0KFxcdTAwMjZpbmZvLVxcdTAwM2VzcmNfbWF4LmluNiwgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIpO1xcbiBcXHRcXHRtIF49ICEhKGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBSQU5HRV9TUkNfSU5WKTtcXG4tXFx0XFx0aWYgKG0pIHtcXG4tXFx0XFx0XFx0cHJfZGVidWcoXFxcInNyYyBJUCAlcEk2IE5PVCBpbiByYW5nZSAlcyVwSTYtJXBJNlxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0IFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHRcXHQgKGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBSQU5HRV9TUkNfSU5WKSA/IFxcXCIoSU5WKSBcXFwiIDogXFxcIlxcXCIsXFxuLVxcdFxcdFxcdFxcdCBcXHUwMDI2aW5mby1cXHUwMDNlc3JjX21pbi5pbjYsXFxuLVxcdFxcdFxcdFxcdCBcXHUwMDI2aW5mby1cXHUwMDNlc3JjX21heC5pbjYpO1xcbitcXHRcXHRpZiAobSlcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRcXHR9XFxuIFxcdH1cXG4gXFx0aWYgKGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBSQU5HRV9EU1QpIHtcXG4gXFx0XFx0bSAgPSBpcHJhbmdlX2lwdjZfbHQoXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIsIFxcdTAwMjZpbmZvLVxcdTAwM2Vkc3RfbWluLmluNik7XFxuIFxcdFxcdG0gfD0gaXByYW5nZV9pcHY2X2x0KFxcdTAwMjZpbmZvLVxcdTAwM2Vkc3RfbWF4LmluNiwgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIpO1xcbiBcXHRcXHRtIF49ICEhKGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBSQU5HRV9EU1RfSU5WKTtcXG4tXFx0XFx0aWYgKG0pIHtcXG4tXFx0XFx0XFx0cHJfZGVidWcoXFxcImRzdCBJUCAlcEk2IE5PVCBpbiByYW5nZSAlcyVwSTYtJXBJNlxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0IFxcdTAwMjZpcGgtXFx1MDAzZWRhZGRyLFxcbi1cXHRcXHRcXHRcXHQgKGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBSQU5HRV9EU1RfSU5WKSA/IFxcXCIoSU5WKSBcXFwiIDogXFxcIlxcXCIsXFxuLVxcdFxcdFxcdFxcdCBcXHUwMDI2aW5mby1cXHUwMDNlZHN0X21pbi5pbjYsXFxuLVxcdFxcdFxcdFxcdCBcXHUwMDI2aW5mby1cXHUwMDNlZHN0X21heC5pbjYpO1xcbitcXHRcXHRpZiAobSlcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRcXHR9XFxuIFxcdH1cXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcHZzLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwdnMuY1xcbmluZGV4IDI1M2M3MWNjOWE2MzQuLmUxM2MwZmZiNzNhOWEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcHZzLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwdnMuY1xcbkBAIC0xNDgsNyArMTQ4LDYgQEAgaXB2c19tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIG91dF9wdXRfY3A6XFxuIFxcdF9faXBfdnNfY29ubl9wdXQoY3ApO1xcbiBvdXQ6XFxuLVxcdHByX2RlYnVnKFxcXCJtYXRjaD0lZFxcXFxuXFxcIiwgbWF0Y2gpO1xcbiBcXHRyZXR1cm4gbWF0Y2g7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jXFxuaW5kZXggYTE2OTFmZjQwNWQzYy4uYmZmNWY1M2E5YmVmYiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuY1xcbkBAIC0zNyw3ICszNyw2IEBAIHBvcnRzX21hdGNoX3YxKGNvbnN0IHN0cnVjdCB4dF9tdWx0aXBvcnRfdjEgKm1pbmZvLFxcbiBcXHRcXHRpZiAobWluZm8tXFx1MDAzZXBmbGFnc1tpXSkge1xcbiBcXHRcXHRcXHQvKiByYW5nZSBwb3J0IG1hdGNoaW5nICovXFxuIFxcdFxcdFxcdGUgPSBtaW5mby1cXHUwMDNlcG9ydHNbKytpXTtcXG4tXFx0XFx0XFx0cHJfZGVidWcoXFxcInNyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkLSVkP1xcXFxuXFxcIiwgcywgZSk7XFxuIFxcbiBcXHRcXHRcXHRzd2l0Y2ggKG1pbmZvLVxcdTAwM2VmbGFncykge1xcbiBcXHRcXHRcXHRjYXNlIFhUX01VTFRJUE9SVF9TT1VSQ0U6XFxuQEAgLTU4LDggKzU3LDYgQEAgcG9ydHNfbWF0Y2hfdjEoY29uc3Qgc3RydWN0IHh0X211bHRpcG9ydF92MSAqbWluZm8sXFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0LyogZXhhY3QgcG9ydCBtYXRjaGluZyAqL1xcbi1cXHRcXHRcXHRwcl9kZWJ1ZyhcXFwic3JjIG9yIGRzdCBtYXRjaGVzIHdpdGggJWQ/XFxcXG5cXFwiLCBzKTtcXG4tXFxuIFxcdFxcdFxcdHN3aXRjaCAobWluZm8tXFx1MDAzZWZsYWdzKSB7XFxuIFxcdFxcdFxcdGNhc2UgWFRfTVVMVElQT1JUX1NPVVJDRTpcXG4gXFx0XFx0XFx0XFx0aWYgKHNyYyA9PSBzKVxcbkBAIC05Nyw3ICs5NCw2IEBAIG11bHRpcG9ydF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIFxcdFxcdC8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXFxuIFxcdFxcdCAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHByX2RlYnVnKFxcXCJEcm9wcGluZyBldmlsIG9mZnNldD0wIHRpbnlncmFtLlxcXFxuXFxcIik7XFxuIFxcdFxcdHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWU7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jXFxuaW5kZXggYjQ2YTZhNTEyMDU4My4uZDM1YzIxZDk2NTFiMCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jXFxuQEAgLTQ4LDMwICs0OCwxNyBAQCBtYXRjaF9wYWNrZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0Y29uc3Qgc3RydWN0IHh0X3NjdHBfZmxhZ19pbmZvICpmbGFnX2luZm8gPSBpbmZvLVxcdTAwM2VmbGFnX2luZm87XFxuIFxcdGludCBmbGFnX2NvdW50ID0gaW5mby1cXHUwMDNlZmxhZ19jb3VudDtcXG4gXFxuLSNpZmRlZiBERUJVR1xcbi1cXHRpbnQgaSA9IDA7XFxuLSNlbmRpZlxcbi1cXG4gXFx0aWYgKGNodW5rX21hdGNoX3R5cGUgPT0gU0NUUF9DSFVOS19NQVRDSF9BTEwpXFxuIFxcdFxcdFNDVFBfQ0hVTktNQVBfQ09QWShjaHVua21hcGNvcHksIGluZm8tXFx1MDAzZWNodW5rbWFwKTtcXG4gXFxuIFxcdGRvIHtcXG4gXFx0XFx0c2NoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX3NjaCksIFxcdTAwMjZfc2NoKTtcXG4gXFx0XFx0aWYgKHNjaCA9PSBOVUxMIHx8IHNjaC1cXHUwMDNlbGVuZ3RoID09IDApIHtcXG4tXFx0XFx0XFx0cHJfZGVidWcoXFxcIkRyb3BwaW5nIGludmFsaWQgU0NUUCBwYWNrZXQuXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0KmhvdGRyb3AgPSB0cnVlO1xcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdH1cXG4tI2lmZGVmIERFQlVHXFxuLVxcdFxcdHByX2RlYnVnKFxcXCJDaHVuayBudW06ICVkXFxcXHRvZmZzZXQ6ICVkXFxcXHR0eXBlOiAlZFxcXFx0bGVuZ3RoOiAlZFxcXCJcXG4tXFx0XFx0XFx0IFxcXCJcXFxcdGZsYWdzOiAleFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICsraSwgb2Zmc2V0LCBzY2gtXFx1MDAzZXR5cGUsIGh0b25zKHNjaC1cXHUwMDNlbGVuZ3RoKSxcXG4tXFx0XFx0XFx0IHNjaC1cXHUwMDNlZmxhZ3MpO1xcbi0jZW5kaWZcXG4gXFx0XFx0b2Zmc2V0ICs9IFNDVFBfUEFENChudG9ocyhzY2gtXFx1MDAzZWxlbmd0aCkpO1xcbiBcXG4tXFx0XFx0cHJfZGVidWcoXFxcInNrYi1cXHUwMDNlbGVuOiAlZFxcXFx0b2Zmc2V0OiAlZFxcXFxuXFxcIiwgc2tiLVxcdTAwM2VsZW4sIG9mZnNldCk7XFxuLVxcbiBcXHRcXHRpZiAoU0NUUF9DSFVOS01BUF9JU19TRVQoaW5mby1cXHUwMDNlY2h1bmttYXAsIHNjaC1cXHUwMDNldHlwZSkpIHtcXG4gXFx0XFx0XFx0c3dpdGNoIChjaHVua19tYXRjaF90eXBlKSB7XFxuIFxcdFxcdFxcdGNhc2UgU0NUUF9DSFVOS19NQVRDSF9BTlk6XFxuQEAgLTEyMSwxOCArMTA4LDE0IEBAIHNjdHBfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRjb25zdCBzdHJ1Y3Qgc2N0cGhkciAqc2g7XFxuIFxcdHN0cnVjdCBzY3RwaGRyIF9zaDtcXG4gXFxuLVxcdGlmIChwYXItXFx1MDAzZWZyYWdvZmYgIT0gMCkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiRHJvcHBpbmcgbm9uLWZpcnN0IGZyYWdtZW50Li4gRklYTUVcXFxcblxcXCIpO1xcbitcXHRpZiAocGFyLVxcdTAwM2VmcmFnb2ZmICE9IDApXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0fVxcbiBcXG4gXFx0c2ggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwYXItXFx1MDAzZXRob2ZmLCBzaXplb2YoX3NoKSwgXFx1MDAyNl9zaCk7XFxuIFxcdGlmIChzaCA9PSBOVUxMKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJEcm9wcGluZyBldmlsIFRDUCBvZmZzZXQ9MCB0aW55Z3JhbS5cXFxcblxcXCIpO1xcbiBcXHRcXHRwYXItXFx1MDAzZWhvdGRyb3AgPSB0cnVlO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4tXFx0cHJfZGVidWcoXFxcInNwdDogJWRcXFxcdGRwdDogJWRcXFxcblxcXCIsIG50b2hzKHNoLVxcdTAwM2Vzb3VyY2UpLCBudG9ocyhzaC1cXHUwMDNlZGVzdCkpO1xcbiBcXG4gXFx0cmV0dXJuICBTQ0NIRUNLKG50b2hzKHNoLVxcdTAwM2Vzb3VyY2UpIFxcdTAwM2U9IGluZm8tXFx1MDAzZXNwdHNbMF1cXG4gXFx0XFx0XFx0XFx1MDAyNlxcdTAwMjYgbnRvaHMoc2gtXFx1MDAzZXNvdXJjZSkgXFx1MDAzYz0gaW5mby1cXHUwMDNlc3B0c1sxXSxcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuYyBiL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmNcXG5pbmRleCBmNzZjZjE4ZjFhMjQ0Li43MDYwOGI4ZDA2YWIyIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3RjcHVkcC5jXFxuQEAgLTQ0LDggKzQ0LDYgQEAgdGNwX2ZpbmRfb3B0aW9uKHVfaW50OF90IG9wdGlvbixcXG4gXFx0dV9pbnQ4X3QgX29wdFs2MCAtIHNpemVvZihzdHJ1Y3QgdGNwaGRyKV07XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbiBcXG4tXFx0cHJfZGVidWcoXFxcImZpbmRpbmcgb3B0aW9uXFxcXG5cXFwiKTtcXG4tXFxuIFxcdGlmICghb3B0bGVuKVxcbiBcXHRcXHRyZXR1cm4gaW52ZXJ0O1xcbiBcXG5AQCAtODEsMTAgKzc5LDggQEAgc3RhdGljIGJvb2wgdGNwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0XFx0ICAgY2F1c2VzIHRoaXMuIEl0cyBhIGNyYWNrZXIgdHJ5aW5nIHRvIGJyZWFrIGluIGJ5IGRvaW5nIGFcXG4gXFx0XFx0ICAgZmxhZyBvdmVyd3JpdGUgdG8gcGFzcyB0aGUgZGlyZWN0aW9uIGNoZWNrcy5cXG4gXFx0XFx0Ki9cXG4tXFx0XFx0aWYgKHBhci1cXHUwMDNlZnJhZ29mZiA9PSAxKSB7XFxuLVxcdFxcdFxcdHByX2RlYnVnKFxcXCJEcm9wcGluZyBldmlsIFRDUCBvZmZzZXQ9MSBmcmFnLlxcXFxuXFxcIik7XFxuK1xcdFxcdGlmIChwYXItXFx1MDAzZWZyYWdvZmYgPT0gMSlcXG4gXFx0XFx0XFx0cGFyLVxcdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcXG4tXFx0XFx0fVxcbiBcXHRcXHQvKiBNdXN0IG5vdCBiZSBhIGZyYWdtZW50LiAqL1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG5AQCAtOTMsNyArODksNiBAQCBzdGF0aWMgYm9vbCB0Y3BfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRpZiAodGggPT0gTlVMTCkge1xcbiBcXHRcXHQvKiBXZSd2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZVxcbiBcXHRcXHQgICBjYW4ndC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuICovXFxuLVxcdFxcdHByX2RlYnVnKFxcXCJEcm9wcGluZyBldmlsIFRDUCBvZmZzZXQ9MCB0aW55Z3JhbS5cXFxcblxcXCIpO1xcbiBcXHRcXHRwYXItXFx1MDAzZWhvdGRyb3AgPSB0cnVlO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG5AQCAtMTQ1LDcgKzE0MCw2IEBAIHN0YXRpYyBib29sIHVkcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIFxcdGlmICh1aCA9PSBOVUxMKSB7XFxuIFxcdFxcdC8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXFxuIFxcdFxcdCAgIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4gKi9cXG4tXFx0XFx0cHJfZGVidWcoXFxcIkRyb3BwaW5nIGV2aWwgVURQIHRpbnlncmFtLlxcXFxuXFxcIik7XFxuIFxcdFxcdHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWU7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDozOToyMS44MjE3ODgwODdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzQ1ODM1MjIyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSX1hUX1RBUkdFVF9DVFwiLFxuICAgIFwiTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVJcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiSVBfTkZfUkFXXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4dF9jdF90Z19jaGVja1wiLFxuICAgIFwiaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlcIixcbiAgICBcImlkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHh0X0NULmNgIHRvIGNoYW5nZSB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYGluZm8tXFx1MDAzZWhlbHBlcmAgYW5kIGBpbmZvLVxcdTAwM2V0aW1lb3V0YC4gSWYgdGhleSBhcmUgbm90IG51bGwtdGVybWluYXRlZCwgdGhlIG5ldyBjb2RlIHNraXBzIHNldHRpbmcgdGhlbSBpbnN0ZWFkIG9mIHJldHVybmluZyBgLUVOQU1FVE9PTE9OR2AsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHRhcmdldCBpbml0aWFsaXphdGlvbiBsb2dpYy4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYHh0X0lETEVUSU1FUi5jYCB0byByZWxlYXNlIGEgbXV0ZXggYmVmb3JlIGxvZ2dpbmcsIHdoaWNoIGlzIGEgbWlub3IgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTMzOGFlYzU1Y2UxZWQwZmVmMDE4YjBjODdhNmFlMzQxYjZhNmE3N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE0OjM5OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jXG5pbmRleCAxNjFiYTQxMmNiMDhiLi43MTMxZjI5N2FkYTJlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FoLmNcbkBAIC0xOSwxMiArMTksNyBAQCBNT0RVTEVfREVTQ1JJUFRJT04oXCJYdGFibGVzOiBJUHY0IElQc2VjLUFIIFNQSSBtYXRjaFwiKTtcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpXG4ge1xuLVx0Ym9vbCByO1xuLVx0cHJfZGVidWcoXCJzcGlfbWF0Y2g6JWMgMHgleCBcdTAwM2M9IDB4JXggXHUwMDNjPSAweCV4XFxuXCIsXG4tXHRcdCBpbnZlcnQgPyAnIScgOiAnICcsIG1pbiwgc3BpLCBtYXgpO1xuLVx0ciA9IChzcGkgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IHNwaSBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4tXHRwcl9kZWJ1ZyhcIiByZXN1bHQgJXNcXG5cIiwgciA/IFwiUEFTU1wiIDogXCJGQUlMRURcIik7XG4tXHRyZXR1cm4gcjtcbitcdHJldHVybiAoc3BpIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBzcGkgXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBhaF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG5AQCAtNDIsNyArMzcsNiBAQCBzdGF0aWMgYm9vbCBhaF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdC8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXG4gXHRcdCAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC5cbiBcdFx0ICovXG4tXHRcdHByX2RlYnVnKFwiRHJvcHBpbmcgZXZpbCBBSCB0aW55Z3JhbS5cXG5cIik7XG4gXHRcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuQEAgLTU4LDcgKzUyLDcgQEAgc3RhdGljIGludCBhaF9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcbiBcdC8qIE11c3Qgc3BlY2lmeSBubyB1bmtub3duIGludmZsYWdzICovXG4gXHRpZiAoYWhpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiB+SVBUX0FIX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuY1xuaW5kZXggNmQ5YmY1MTA2ODY4NC4uMmMzOGZkNjYyNGFhMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuY1xuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ycGZpbHRlci5jXG5AQCAtOTUsOCArOTUsNyBAQCBzdGF0aWMgaW50IHJwZmlsdGVyX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFxuIFx0aWYgKHN0cmNtcChwYXItXHUwMDNldGFibGUsIFwibWFuZ2xlXCIpICE9IDAgXHUwMDI2XHUwMDI2XG4gXHQgICAgc3RyY21wKHBhci1cdTAwM2V0YWJsZSwgXCJyYXdcIikgIT0gMCkge1xuLVx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwib25seSB2YWxpZCBpbiBcXCdyYXdcXCcgb3IgXFwnbWFuZ2xlXFwnIHRhYmxlLCBub3QgXFwnJXNcXCdcXG5cIixcbi1cdFx0XHRcdCAgICBwYXItXHUwMDNldGFibGUpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwib25seSB2YWxpZCBpbiBcXCdyYXdcXCcgb3IgXFwnbWFuZ2xlXFwnIHRhYmxlXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguY1xuaW5kZXggMTI1ODc4M2VkODc2Mi4uZGFiN2RiYzZhNjc1YyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmNcbisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmNcbkBAIC0yNCwxMyArMjQsNyBAQCBNT0RVTEVfQVVUSE9SKFwiQW5kcmFzIEtpcy1TemFibyBcdTAwM2NraXN6YUBzY2guYm1lLmh1XHUwMDNlXCIpO1xuIHN0YXRpYyBpbmxpbmUgYm9vbFxuIHNwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBib29sIGludmVydClcbiB7XG4tXHRib29sIHI7XG4tXG4tXHRwcl9kZWJ1ZyhcInNwaV9tYXRjaDolYyAweCV4IFx1MDAzYz0gMHgleCBcdTAwM2M9IDB4JXhcXG5cIixcbi1cdFx0IGludmVydCA/ICchJyA6ICcgJywgbWluLCBzcGksIG1heCk7XG4tXHRyID0gKHNwaSBcdTAwM2U9IG1pbiBcdTAwMjZcdTAwMjYgc3BpIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbi1cdHByX2RlYnVnKFwiIHJlc3VsdCAlc1xcblwiLCByID8gXCJQQVNTXCIgOiBcIkZBSUxFRFwiKTtcbi1cdHJldHVybiByO1xuK1x0cmV0dXJuIChzcGkgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IHNwaSBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4gfVxuIFxuIHN0YXRpYyBib29sIGFoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG5AQCAtNjIsMjMgKzU2LDYgQEAgc3RhdGljIGJvb2wgYWhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuLVx0cHJfZGVidWcoXCJJUHY2IEFIIExFTiAldSAldSBcIiwgaGRybGVuLCBhaC1cdTAwM2VoZHJsZW4pO1xuLVx0cHJfZGVidWcoXCJSRVMgJTA0WCBcIiwgYWgtXHUwMDNlcmVzZXJ2ZWQpO1xuLVx0cHJfZGVidWcoXCJTUEkgJXUgJTA4WFxcblwiLCBudG9obChhaC1cdTAwM2VzcGkpLCBudG9obChhaC1cdTAwM2VzcGkpKTtcbi1cbi1cdHByX2RlYnVnKFwiSVB2NiBBSCBzcGkgJTAyWCBcIixcbi1cdFx0IHNwaV9tYXRjaChhaGluZm8tXHUwMDNlc3Bpc1swXSwgYWhpbmZvLVx1MDAzZXNwaXNbMV0sXG4tXHRcdFx0ICAgbnRvaGwoYWgtXHUwMDNlc3BpKSxcbi1cdFx0XHQgICAhIShhaGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IElQNlRfQUhfSU5WX1NQSSkpKTtcbi1cdHByX2RlYnVnKFwibGVuICUwMlggJTA0WCAlMDJYIFwiLFxuLVx0XHQgYWhpbmZvLVx1MDAzZWhkcmxlbiwgaGRybGVuLFxuLVx0XHQgKCFhaGluZm8tXHUwMDNlaGRybGVuIHx8XG4tXHRcdCAgKGFoaW5mby1cdTAwM2VoZHJsZW4gPT0gaGRybGVuKSBeXG4tXHRcdCAgISEoYWhpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiBJUDZUX0FIX0lOVl9MRU4pKSk7XG4tXHRwcl9kZWJ1ZyhcInJlcyAlMDJYICUwNFggJTAyWFxcblwiLFxuLVx0XHQgYWhpbmZvLVx1MDAzZWhkcnJlcywgYWgtXHUwMDNlcmVzZXJ2ZWQsXG4tXHRcdCAhKGFoaW5mby1cdTAwM2VoZHJyZXMgXHUwMDI2XHUwMDI2IGFoLVx1MDAzZXJlc2VydmVkKSk7XG4tXG4gXHRyZXR1cm4gc3BpX21hdGNoKGFoaW5mby1cdTAwM2VzcGlzWzBdLCBhaGluZm8tXHUwMDNlc3Bpc1sxXSxcbiBcdFx0XHQgIG50b2hsKGFoLVx1MDAzZXNwaSksXG4gXHRcdFx0ICAhIShhaGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IElQNlRfQUhfSU5WX1NQSSkpIFx1MDAyNlx1MDAyNlxuQEAgLTkzLDcgKzcwLDcgQEAgc3RhdGljIGludCBhaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3QgaXA2dF9haCAqYWhpbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiBcbiBcdGlmIChhaGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IH5JUDZUX0FIX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuY1xuaW5kZXggM2FhZDY0MzkzODZiMS4uZjVmM2NmYjg3MDRjZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuY1xuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jXG5AQCAtMjMsMTIgKzIzLDcgQEAgTU9EVUxFX0FVVEhPUihcIkFuZHJhcyBLaXMtU3phYm8gXHUwMDNja2lzemFAc2NoLmJtZS5odVx1MDAzZVwiKTtcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBpZF9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3QgaWQsIGJvb2wgaW52ZXJ0KVxuIHtcbi1cdGJvb2wgcjtcbi1cdHByX2RlYnVnKFwiaWRfbWF0Y2g6JWMgMHgleCBcdTAwM2M9IDB4JXggXHUwMDNjPSAweCV4XFxuXCIsIGludmVydCA/ICchJyA6ICcgJyxcbi1cdFx0IG1pbiwgaWQsIG1heCk7XG4tXHRyID0gKGlkIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBpZCBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4tXHRwcl9kZWJ1ZyhcIiByZXN1bHQgJXNcXG5cIiwgciA/IFwiUEFTU1wiIDogXCJGQUlMRURcIik7XG4tXHRyZXR1cm4gcjtcbitcdHJldHVybiAoaWQgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IGlkIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbiB9XG4gXG4gc3RhdGljIGJvb2xcbkBAIC01MywzOCArNDgsNiBAQCBmcmFnX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbi1cdHByX2RlYnVnKFwiSU5GTyAlMDRYIFwiLCBmaC1cdTAwM2VmcmFnX29mZik7XG4tXHRwcl9kZWJ1ZyhcIk9GRlNFVCAlMDRYIFwiLCBudG9ocyhmaC1cdTAwM2VmcmFnX29mZikgXHUwMDI2IH4weDcpO1xuLVx0cHJfZGVidWcoXCJSRVMgJTAyWCAlMDRYXCIsIGZoLVx1MDAzZXJlc2VydmVkLCBudG9ocyhmaC1cdTAwM2VmcmFnX29mZikgXHUwMDI2IDB4Nik7XG4tXHRwcl9kZWJ1ZyhcIk1GICUwNFggXCIsIGZoLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUDZfTUYpKTtcbi1cdHByX2RlYnVnKFwiSUQgJXUgJTA4WFxcblwiLCBudG9obChmaC1cdTAwM2VpZGVudGlmaWNhdGlvbiksXG4tXHRcdCBudG9obChmaC1cdTAwM2VpZGVudGlmaWNhdGlvbikpO1xuLVxuLVx0cHJfZGVidWcoXCJJUHY2IEZSQUcgaWQgJTAyWCBcIixcbi1cdFx0IGlkX21hdGNoKGZyYWdpbmZvLVx1MDAzZWlkc1swXSwgZnJhZ2luZm8tXHUwMDNlaWRzWzFdLFxuLVx0XHRcdCAgbnRvaGwoZmgtXHUwMDNlaWRlbnRpZmljYXRpb24pLFxuLVx0XHRcdCAgISEoZnJhZ2luZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19JTlZfSURTKSkpO1xuLVx0cHJfZGVidWcoXCJyZXMgJTAyWCAlMDJYJTA0WCAlMDJYIFwiLFxuLVx0XHQgZnJhZ2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19SRVMsIGZoLVx1MDAzZXJlc2VydmVkLFxuLVx0XHQgbnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiAweDYsXG4tXHRcdCAhKChmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX1JFUykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgIChmaC1cdTAwM2VyZXNlcnZlZCB8fCAobnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiAweDA2KSkpKTtcbi1cdHByX2RlYnVnKFwiZmlyc3QgJTAyWCAlMDJYICUwMlggXCIsXG4tXHRcdCBmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX0ZTVCxcbi1cdFx0IG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgfjB4Nyxcbi1cdFx0ICEoKGZyYWdpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZUX0ZSQUdfRlNUKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgKG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgfjB4NykpKTtcbi1cdHByX2RlYnVnKFwibWYgJTAyWCAlMDJYICUwMlggXCIsXG4tXHRcdCBmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX01GLFxuLVx0XHQgbnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiBJUDZfTUYsXG4tXHRcdCAhKChmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX01GKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgISgobnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiBJUDZfTUYpKSkpO1xuLVx0cHJfZGVidWcoXCJsYXN0ICUwMlggJTAyWCAlMDJYXFxuXCIsXG4tXHRcdCBmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX05NRixcbi1cdFx0IG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgSVA2X01GLFxuLVx0XHQgISgoZnJhZ2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19OTUYpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAobnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiBJUDZfTUYpKSk7XG4tXG4gXHRyZXR1cm4gaWRfbWF0Y2goZnJhZ2luZm8tXHUwMDNlaWRzWzBdLCBmcmFnaW5mby1cdTAwM2VpZHNbMV0sXG4gXHRcdFx0IG50b2hsKGZoLVx1MDAzZWlkZW50aWZpY2F0aW9uKSxcbiBcdFx0XHQgISEoZnJhZ2luZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19JTlZfSURTKSkgXHUwMDI2XHUwMDI2XG5AQCAtMTAzLDcgKzY2LDcgQEAgc3RhdGljIGludCBmcmFnX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdGNvbnN0IHN0cnVjdCBpcDZ0X2ZyYWcgKmZyYWdpbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiBcbiBcdGlmIChmcmFnaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgfklQNlRfRlJBR19JTlZfTUFTSykge1xuLVx0XHRwcl9kZWJ1ZyhcInVua25vd24gZmxhZ3MgJVhcXG5cIiwgZnJhZ2luZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBmcmFnaW5mby1cdTAwM2VpbnZmbGFncyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xuaW5kZXggNmQxYTVkMjAyNmE2Ny4uMzdjMjA3ZDMxNTJhNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xuQEAgLTc5LDE0ICs3OSw2IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4tXHRwcl9kZWJ1ZyhcIklQdjYgT1BUUyBMRU4gJXUgJXUgXCIsIGhkcmxlbiwgb2gtXHUwMDNlaGRybGVuKTtcbi1cbi1cdHByX2RlYnVnKFwibGVuICUwMlggJTA0WCAlMDJYIFwiLFxuLVx0XHQgb3B0aW5mby1cdTAwM2VoZHJsZW4sIGhkcmxlbixcbi1cdFx0ICghKG9wdGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfT1BUU19MRU4pIHx8XG4tXHRcdCAgKChvcHRpbmZvLVx1MDAzZWhkcmxlbiA9PSBoZHJsZW4pIF5cbi1cdFx0ICAgISEob3B0aW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgSVA2VF9PUFRTX0lOVl9MRU4pKSkpO1xuLVxuIFx0cmV0ID0gKCEob3B0aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9PUFRTX0xFTikgfHxcbiBcdCAgICAgICAoKG9wdGluZm8tXHUwMDNlaGRybGVuID09IGhkcmxlbikgXlxuIFx0XHQhIShvcHRpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiBJUDZUX09QVFNfSU5WX0xFTikpKTtcbkBAIC05Niw4ICs4OCw2IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0aWYgKCEob3B0aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9PUFRTX09QVFMpKSB7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9IGVsc2Uge1xuLVx0XHRwcl9kZWJ1ZyhcIlN0cmljdCBcIik7XG4tXHRcdHByX2RlYnVnKFwiIyVkIFwiLCBvcHRpbmZvLVx1MDAzZW9wdHNucik7XG4gXHRcdGZvciAodGVtcCA9IDA7IHRlbXAgXHUwMDNjIG9wdGluZm8tXHUwMDNlb3B0c25yOyB0ZW1wKyspIHtcbiBcdFx0XHQvKiB0eXBlIGZpZWxkIGV4aXN0cyA/ICovXG4gXHRcdFx0aWYgKGhkcmxlbiBcdTAwM2MgMSlcbkBAIC0xMDgsMTMgKzk4LDkgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0XHRicmVhaztcbiBcbiBcdFx0XHQvKiBUeXBlIGNoZWNrICovXG4tXHRcdFx0aWYgKCp0cCAhPSAob3B0aW5mby1cdTAwM2VvcHRzW3RlbXBdIFx1MDAyNiAweEZGMDApIFx1MDAzZVx1MDAzZSA4KSB7XG4tXHRcdFx0XHRwcl9kZWJ1ZyhcIlRiYWQgJTAyWCAlMDJYXFxuXCIsICp0cCxcbi1cdFx0XHRcdFx0IChvcHRpbmZvLVx1MDAzZW9wdHNbdGVtcF0gXHUwMDI2IDB4RkYwMCkgXHUwMDNlXHUwMDNlIDgpO1xuK1x0XHRcdGlmICgqdHAgIT0gKG9wdGluZm8tXHUwMDNlb3B0c1t0ZW1wXSBcdTAwMjYgMHhGRjAwKSBcdTAwM2VcdTAwM2UgOClcbiBcdFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0cHJfZGVidWcoXCJUb2sgXCIpO1xuLVx0XHRcdH1cbitcbiBcdFx0XHQvKiBMZW5ndGggY2hlY2sgKi9cbiBcdFx0XHRpZiAoKnRwKSB7XG4gXHRcdFx0XHR1MTYgc3BlY19sZW47XG5AQCAtMTI5LDI2ICsxMTUsMTggQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0c3BlY19sZW4gPSBvcHRpbmZvLVx1MDAzZW9wdHNbdGVtcF0gXHUwMDI2IDB4MDBGRjtcbiBcbi1cdFx0XHRcdGlmIChzcGVjX2xlbiAhPSAweDAwRkYgXHUwMDI2XHUwMDI2IHNwZWNfbGVuICE9ICpscCkge1xuLVx0XHRcdFx0XHRwcl9kZWJ1ZyhcIkxiYWQgJTAyWCAlMDRYXFxuXCIsICpscCxcbi1cdFx0XHRcdFx0XHQgc3BlY19sZW4pO1xuK1x0XHRcdFx0aWYgKHNwZWNfbGVuICE9IDB4MDBGRiBcdTAwMjZcdTAwMjYgc3BlY19sZW4gIT0gKmxwKVxuIFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRwcl9kZWJ1ZyhcIkxvayBcIik7XG4rXG4gXHRcdFx0XHRvcHRsZW4gPSAqbHAgKyAyO1xuIFx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRwcl9kZWJ1ZyhcIlBhZDFcXG5cIik7XG4gXHRcdFx0XHRvcHRsZW4gPSAxO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHQvKiBTdGVwIHRvIHRoZSBuZXh0ICovXG4tXHRcdFx0cHJfZGVidWcoXCJsZW4lMDRYXFxuXCIsIG9wdGxlbik7XG4tXG4gXHRcdFx0aWYgKChwdHIgXHUwMDNlIHNrYi1cdTAwM2VsZW4gLSBvcHRsZW4gfHwgaGRybGVuIFx1MDAzYyBvcHRsZW4pIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICB0ZW1wIFx1MDAzYyBvcHRpbmZvLVx1MDAzZW9wdHNuciAtIDEpIHtcbi1cdFx0XHRcdHByX2RlYnVnKFwibmV3IHBvaW50ZXIgaXMgdG9vIGxhcmdlIVxcblwiKTtcbitcdFx0XHQgICAgdGVtcCBcdTAwM2Mgb3B0aW5mby1cdTAwM2VvcHRzbnIgLSAxKVxuIFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuK1xuIFx0XHRcdHB0ciArPSBvcHRsZW47XG4gXHRcdFx0aGRybGVuIC09IG9wdGxlbjtcbiBcdFx0fVxuQEAgLTE2NiwxNiArMTQ0LDE2IEBAIHN0YXRpYyBpbnQgaGJoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdGNvbnN0IHN0cnVjdCBpcDZ0X29wdHMgKm9wdHNpbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiBcbiBcdGlmIChvcHRzaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgfklQNlRfT1BUU19JTlZfTUFTSykge1xuLVx0XHRwcl9kZWJ1ZyhcInVua25vd24gZmxhZ3MgJVhcXG5cIiwgb3B0c2luZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBvcHRzaW5mby1cdTAwM2VpbnZmbGFncyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKG9wdHNpbmZvLVx1MDAzZW9wdHNuciBcdTAwM2UgSVA2VF9PUFRTX09QVFNOUikge1xuLVx0XHRwcl9kZWJ1ZyhcInRvbyBtYW55IHN1cHBvcnRlZCBvcHRzIHNwZWNpZmllZFxcblwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcInRvbyBtYW55IHN1cHBvcnRlZCBvcHRzIHNwZWNpZmllZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRpZiAob3B0c2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfT1BUU19OU1RSSUNUKSB7XG4tXHRcdHByX2RlYnVnKFwiTm90IHN0cmljdCAtIG5vdCBpbXBsZW1lbnRlZFwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcIk5vdCBzdHJpY3QgLSBub3QgaW1wbGVtZW50ZWRcIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X21oLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9taC5jXG5pbmRleCBmZDQ5MmI2OWFjYmMwLi5iYTZkY2M3NzkxYTA5IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbWguY1xuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbWguY1xuQEAgLTQyLDE0ICs0MiwxMSBAQCBzdGF0aWMgYm9vbCBtaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0aWYgKG1oID09IE5VTEwpIHtcbiBcdFx0LyogV2UndmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2VcbiBcdFx0ICAgY2FuJ3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLiAqL1xuLVx0XHRwcl9kZWJ1ZyhcIkRyb3BwaW5nIGV2aWwgTUggdGlueWdyYW0uXFxuXCIpO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdGlmIChtaC1cdTAwM2VpcDZtaF9wcm90byAhPSBJUFBST1RPX05PTkUpIHtcbi1cdFx0cHJfZGVidWcoXCJEcm9wcGluZyBpbnZhbGlkIE1IIFBheWxvYWQgUHJvdG86ICV1XFxuXCIsXG4tXHRcdFx0IG1oLVx1MDAzZWlwNm1oX3Byb3RvKTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnBmaWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmNcbmluZGV4IDY3Yzg3YTg4Y2RlNGYuLmFmOGQxMGQ0OWRlODEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jXG5AQCAtMTE4LDcgKzExOCw3IEBAIHN0YXRpYyBpbnQgcnBmaWx0ZXJfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXG4gXHRpZiAoc3RyY21wKHBhci1cdTAwM2V0YWJsZSwgXCJtYW5nbGVcIikgIT0gMCBcdTAwMjZcdTAwMjZcbiBcdCAgICBzdHJjbXAocGFyLVx1MDAzZXRhYmxlLCBcInJhd1wiKSAhPSAwKSB7XG4tXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJvbmx5IHZhbGlkIGluIFxcJ3Jhd1xcJyBvciBcXCdtYW5nbGVcXCcgdGFibGUsIG5vdCBcXCclc1xcJ1xcblwiLFxuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwib25seSB2YWxpZCBpbiBcXCdyYXdcXCcgb3IgXFwnbWFuZ2xlXFwnIHRhYmxlXFxuXCIsXG4gXHRcdFx0XHQgICAgcGFyLVx1MDAzZXRhYmxlKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmNcbmluZGV4IDI3OGI1Mjc1MmYzNjQuLjBjMDFhYzI3NDZkMWYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jXG5AQCAtMTU1LDE4ICsxNTUsMTggQEAgc3RhdGljIGludCBydF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3QgaXA2dF9ydCAqcnRpbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiBcbiBcdGlmIChydGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IH5JUDZUX1JUX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBydGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBydGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdGlmIChydGluZm8tXHUwMDNlYWRkcm5yIFx1MDAzZSBJUDZUX1JUX0hPUFMpIHtcbi1cdFx0cHJfZGVidWcoXCJ0b28gbWFueSBhZGRyZXNzZXMgc3BlY2lmaWVkXFxuXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidG9vIG1hbnkgYWRkcmVzc2VzIHNwZWNpZmllZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRpZiAoKHJ0aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgKElQNlRfUlRfUkVTIHwgSVA2VF9SVF9GU1RfTUFTSykpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICghKHJ0aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9SVF9UWVApIHx8XG4gXHQgICAgIChydGluZm8tXHUwMDNlcnRfdHlwZSAhPSAwKSB8fFxuIFx0ICAgICAocnRpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiBJUDZUX1JUX0lOVl9UWVApKSkge1xuLVx0XHRwcl9kZWJ1ZyhcImAtLXJ0LXR5cGUgMCcgcmVxdWlyZWQgYmVmb3JlIGAtLXJ0LTAtKidcIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJgLS1ydC10eXBlIDAnIHJlcXVpcmVkIGJlZm9yZSBgLS1ydC0wLSonXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmNcbmluZGV4IDE0OTRiM2VlMzBlMTEuLjRlNDQzNmE5MTA0YjQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuY1xuQEAgLTg3LDggKzg3LDcgQEAgc3RhdGljIGludCBjb25uc2VjbWFya190Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbiBcbiBcdGlmIChzdHJjbXAocGFyLVx1MDAzZXRhYmxlLCBcIm1hbmdsZVwiKSAhPSAwIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHN0cmNtcChwYXItXHUwMDNldGFibGUsIFwic2VjdXJpdHlcIikgIT0gMCkge1xuLVx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwib25seSB2YWxpZCBpbiBcXCdtYW5nbGVcXCcgb3IgXFwnc2VjdXJpdHlcXCcgdGFibGUsIG5vdCBcXCclc1xcJ1xcblwiLFxuLVx0XHRcdFx0ICAgIHBhci1cdTAwM2V0YWJsZSk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJvbmx5IHZhbGlkIGluIFxcJ21hbmdsZVxcJyBvciBcXCdzZWN1cml0eVxcJyB0YWJsZVxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DVC5jIGIvbmV0L25ldGZpbHRlci94dF9DVC5jXG5pbmRleCBlNzg2NjBkZmRmNGI2Li45MTMyNjAxNGFkZTFjIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9DVC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0NULmNcbkBAIC0xOTUsNyArMTk1LDggQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcixcbiBcdFx0Z290byBlcnIzO1xuIFx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNlaGVscGVyWzBdKSB7XG4rXHRpZiAoaW5mby1cdTAwM2VoZWxwZXJbMF0gXHUwMDI2XHUwMDI2XG4rXHQgICAgc3RybmxlbihpbmZvLVx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiBcdFx0aWYgKHN0cm5sZW4oaW5mby1cdTAwM2VoZWxwZXIsIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpID09IHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiBcdFx0XHRyZXQgPSAtRU5BTUVUT09MT05HO1xuIFx0XHRcdGdvdG8gZXJyMztcbkBAIC0yMDYsNyArMjA3LDggQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcixcbiBcdFx0XHRnb3RvIGVycjM7XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0WzBdKSB7XG4rXHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0WzBdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHN0cm5sZW4oaW5mby1cdTAwM2V0aW1lb3V0LCBzaXplb2YoaW5mby1cdTAwM2V0aW1lb3V0KSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gXHRcdGlmIChzdHJubGVuKGluZm8tXHUwMDNldGltZW91dCwgc2l6ZW9mKGluZm8tXHUwMDNldGltZW91dCkpID09IHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gXHRcdFx0cmV0ID0gLUVOQU1FVE9PTE9ORztcbiBcdFx0XHRnb3RvIGVycjQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcbmluZGV4IGJmY2YyZDQ0ZTkzZGIuLjE1YjY5OGVhOThhYTYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG5AQCAtMTAyLDggKzEwMiw2IEBAIHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19leHBpcmVkKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIHtcbiBcdHN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyID0gdGltZXJfY29udGFpbmVyX29mKHRpbWVyLCB0LCB0aW1lcik7XG4gXG4tXHRwcl9kZWJ1ZyhcInRpbWVyICVzIGV4cGlyZWRcXG5cIiwgdGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpO1xuLVxuIFx0c2NoZWR1bGVfd29yayhcdTAwMjZ0aW1lci1cdTAwM2V3b3JrKTtcbiB9XG4gXG5AQCAtMTExLDcgKzEwOSw2IEBAIHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19hbGFybXByb2Moc3RydWN0IGFsYXJtICphbGFybSwga3RpbWVfdCBub3cpXG4ge1xuIFx0c3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXIgPSBhbGFybS1cdTAwM2VkYXRhO1xuIFxuLVx0cHJfZGVidWcoXCJhbGFybSAlcyBleHBpcmVkXFxuXCIsIHRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lKTtcbiBcdHNjaGVkdWxlX3dvcmsoXHUwMDI2dGltZXItXHUwMDNld29yayk7XG4gfVxuIFxuQEAgLTE3MSw3ICsxNjgsNyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGUoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKVxuIFxuIFx0cmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0cHJfZGVidWcoXCJjb3VsZG4ndCBhZGQgZmlsZSB0byBzeXNmc1wiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcImNvdWxkbid0IGFkZCBmaWxlIHRvIHN5c2ZzXCIpO1xuIFx0XHRnb3RvIG91dF9mcmVlX2F0dHI7XG4gXHR9XG4gXG5AQCAtMjIwLDcgKzIxNyw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXG4gXG4gXHRyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShpZGxldGltZXJfdGdfa29iaiwgXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIpO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRwcl9kZWJ1ZyhcImNvdWxkbid0IGFkZCBmaWxlIHRvIHN5c2ZzXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiY291bGRuJ3QgYWRkIGZpbGUgdG8gc3lzZnNcIik7XG4gXHRcdGdvdG8gb3V0X2ZyZWVfYXR0cjtcbiBcdH1cbiBcbkBAIC0yMjgsNyArMjI1LDYgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbylcbiBcdGtvYmplY3RfdWV2ZW50KGlkbGV0aW1lcl90Z19rb2JqLEtPQkpfQUREKTtcbiBcbiBcdGxpc3RfYWRkKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlZW50cnksIFx1MDAyNmlkbGV0aW1lcl90Z19saXN0KTtcbi1cdHByX2RlYnVnKFwidGltZXIgdHlwZSB2YWx1ZSBpcyAldVwiLCBpbmZvLVx1MDAzZXRpbWVyX3R5cGUpO1xuIFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlID0gaW5mby1cdTAwM2V0aW1lcl90eXBlO1xuIFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQgPSAxO1xuIFxuQEAgLTI2Myw5ICsyNTksNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4tXHRwcl9kZWJ1ZyhcInJlc2V0dGluZyB0aW1lciAlcywgdGltZW91dCBwZXJpb2QgJXVcXG5cIixcbi1cdFx0IGluZm8tXHUwMDNlbGFiZWwsIGluZm8tXHUwMDNldGltZW91dCk7XG4tXG4gXHRtb2RfdGltZXIoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcixcbiBcdFx0ICBzZWNzX3RvX2ppZmZpZXMoaW5mby1cdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xuIFxuQEAgLTI4MCw5ICsyNzMsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4tXHRwcl9kZWJ1ZyhcInJlc2V0dGluZyB0aW1lciAlcywgdGltZW91dCBwZXJpb2QgJXVcXG5cIixcbi1cdFx0IGluZm8tXHUwMDNlbGFiZWwsIGluZm8tXHUwMDNldGltZW91dCk7XG4tXG4gXHRpZiAoaW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlIFx1MDAyNiBYVF9JRExFVElNRVJfQUxBUk0pIHtcbiBcdFx0aWRsZXRpbWVyX3N0YXJ0X2FsYXJtX3NlYyhpbmZvLVx1MDAzZXRpbWVyLCBpbmZvLVx1MDAzZXRpbWVvdXQpO1xuIFx0fSBlbHNlIHtcbkBAIC0yOTYsMTcgKzI4NiwxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19oZWxwZXIoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKVxuIHtcbiBcdGlmIChpbmZvLVx1MDAzZXRpbWVvdXQgPT0gMCkge1xuLVx0XHRwcl9kZWJ1ZyhcInRpbWVvdXQgdmFsdWUgaXMgemVyb1xcblwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcInRpbWVvdXQgdmFsdWUgaXMgemVyb1xcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0IFx1MDAzZT0gSU5UX01BWCAvIDEwMDApIHtcbi1cdFx0cHJfZGVidWcoXCJ0aW1lb3V0IHZhbHVlIGlzIHRvbyBiaWdcXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJ0aW1lb3V0IHZhbHVlIGlzIHRvbyBiaWdcXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKGluZm8tXHUwMDNlbGFiZWxbMF0gPT0gJ1xcMCcgfHxcbiBcdCAgICBzdHJubGVuKGluZm8tXHUwMDNlbGFiZWwsXG4gXHRcdCAgICBNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkUpID09IE1BWF9JRExFVElNRVJfTEFCRUxfU0laRSkge1xuLVx0XHRwcl9kZWJ1ZyhcImxhYmVsIGlzIGVtcHR5IG9yIG5vdCBudWwtdGVybWluYXRlZFxcblwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcImxhYmVsIGlzIGVtcHR5IG9yIG5vdCBudWwtdGVybWluYXRlZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbkBAIC0zMTgsMzQgKzMwOCwyNSBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFx0c3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIFx0aW50IHJldDtcbiBcbi1cdHByX2RlYnVnKFwiY2hlY2tlbnRyeSB0YXJnaW5mbyVzXFxuXCIsIGluZm8tXHUwMDNlbGFiZWwpO1xuLVxuIFx0cmV0ID0gaWRsZXRpbWVyX3RnX2hlbHBlcihpbmZvKTtcbiBcdGlmKHJldCBcdTAwM2MgMClcbi1cdHtcbi1cdFx0cHJfZGVidWcoXCJjaGVja2VudHJ5IGhlbHBlciByZXR1cm4gaW52YWxpZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuIFx0aW5mby1cdTAwM2V0aW1lciA9IF9faWRsZXRpbWVyX3RnX2ZpbmRfYnlfbGFiZWwoaW5mby1cdTAwM2VsYWJlbCk7XG4gXHRpZiAoaW5mby1cdTAwM2V0aW1lcikge1xuIFx0XHRpZiAoaW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlIFx1MDAyNiBYVF9JRExFVElNRVJfQUxBUk0pIHtcbi1cdFx0XHRwcl9kZWJ1ZyhcIkFkZGluZy9SZXBsYWNpbmcgcnVsZSB3aXRoIHNhbWUgbGFiZWwgYW5kIGRpZmZlcmVudCB0aW1lciB0eXBlIGlzIG5vdCBhbGxvd2VkXFxuXCIpO1xuIFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbitcdFx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiQWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcXG5cIik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcbiBcdFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQrKztcbiBcdFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gXHRcdFx0ICBzZWNzX3RvX2ppZmZpZXMoaW5mby1cdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xuLVxuLVx0XHRwcl9kZWJ1ZyhcImluY3JlYXNlZCByZWZjbnQgb2YgdGltZXIgJXMgdG8gJXVcXG5cIixcbi1cdFx0XHQgaW5mby1cdTAwM2VsYWJlbCwgaW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmV0ID0gaWRsZXRpbWVyX3RnX2NyZWF0ZShpbmZvKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdHByX2RlYnVnKFwiZmFpbGVkIHRvIGNyZWF0ZSB0aW1lclxcblwiKTtcbiBcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuQEAgLTM2MCwzMCArMzQxLDIzIEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXHRpbnQgcmV0O1xuIFxuLVx0cHJfZGVidWcoXCJjaGVja2VudHJ5IHRhcmdpbmZvJXNcXG5cIiwgaW5mby1cdTAwM2VsYWJlbCk7XG4tXG4gXHRpZiAoaW5mby1cdTAwM2VzZW5kX25sX21zZylcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0cmV0ID0gaWRsZXRpbWVyX3RnX2hlbHBlcigoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICopaW5mbyk7XG4gXHRpZihyZXQgXHUwMDNjIDApXG4tXHR7XG4tXHRcdHByX2RlYnVnKFwiY2hlY2tlbnRyeSBoZWxwZXIgcmV0dXJuIGludmFsaWRcXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNldGltZXJfdHlwZSBcdTAwM2UgWFRfSURMRVRJTUVSX0FMQVJNKSB7XG4tXHRcdHByX2RlYnVnKFwiaW52YWxpZCB2YWx1ZSBmb3IgdGltZXIgdHlwZVxcblwiKTtcbitcdGlmIChpbmZvLVx1MDAzZXRpbWVyX3R5cGUgXHUwMDNlIFhUX0lETEVUSU1FUl9BTEFSTSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuIFx0aW5mby1cdTAwM2V0aW1lciA9IF9faWRsZXRpbWVyX3RnX2ZpbmRfYnlfbGFiZWwoaW5mby1cdTAwM2VsYWJlbCk7XG4gXHRpZiAoaW5mby1cdTAwM2V0aW1lcikge1xuIFx0XHRpZiAoaW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlICE9IGluZm8tXHUwMDNldGltZXJfdHlwZSkge1xuLVx0XHRcdHByX2RlYnVnKFwiQWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcXG5cIik7XG4gXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuK1x0XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJBZGRpbmcvUmVwbGFjaW5nIHJ1bGUgd2l0aCBzYW1lIGxhYmVsIGFuZCBkaWZmZXJlbnQgdGltZXIgdHlwZSBpcyBub3QgYWxsb3dlZFxcblwiKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFxuQEAgLTM5MywyMSArMzY3LDE1IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRcdFx0a3RpbWVfdCB0b3V0ID0gYWxhcm1fZXhwaXJlc19yZW1haW5pbmcoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhbGFybSk7XG4gXHRcdFx0c3RydWN0IHRpbWVzcGVjNjQga3RpbWVzcGVjID0ga3RpbWVfdG9fdGltZXNwZWM2NCh0b3V0KTtcbiBcbi1cdFx0XHRpZiAoa3RpbWVzcGVjLnR2X3NlYyBcdTAwM2UgMCkge1xuLVx0XHRcdFx0cHJfZGVidWcoXCJ0aW1lX2V4cGlyeV9yZW1haW5pbmcgJWxsZFxcblwiLFxuLVx0XHRcdFx0XHQga3RpbWVzcGVjLnR2X3NlYyk7XG4rXHRcdFx0aWYgKGt0aW1lc3BlYy50dl9zZWMgXHUwMDNlIDApXG4gXHRcdFx0XHRpZGxldGltZXJfc3RhcnRfYWxhcm1fa3RpbWUoaW5mby1cdTAwM2V0aW1lciwgdG91dCk7XG4tXHRcdFx0fVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gXHRcdFx0XHRcdHNlY3NfdG9famlmZmllcyhpbmZvLVx1MDAzZXRpbWVvdXQpICsgamlmZmllcyk7XG4gXHRcdH1cbi1cdFx0cHJfZGVidWcoXCJpbmNyZWFzZWQgcmVmY250IG9mIHRpbWVyICVzIHRvICV1XFxuXCIsXG4tXHRcdFx0IGluZm8tXHUwMDNlbGFiZWwsIGluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250KTtcbiBcdH0gZWxzZSB7XG4gXHRcdHJldCA9IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoaW5mbyk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0XHRwcl9kZWJ1ZyhcImZhaWxlZCB0byBjcmVhdGUgdGltZXJcXG5cIik7XG4gXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbkBAIC00MjEsMTkgKzM4OSwxMyBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtICpwYXIpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIFxuLVx0cHJfZGVidWcoXCJkZXN0cm95IHRhcmdpbmZvICVzXFxuXCIsIGluZm8tXHUwMDNlbGFiZWwpO1xuLVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiBcbiBcdGlmICgtLWluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250IFx1MDAzZSAwKSB7XG4tXHRcdHByX2RlYnVnKFwiZGVjcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxcblwiLFxuLVx0XHRcdCBpbmZvLVx1MDAzZWxhYmVsLCBpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXJlZmNudCk7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0cHJfZGVidWcoXCJkZWxldGluZyB0aW1lciAlc1xcblwiLCBpbmZvLVx1MDAzZWxhYmVsKTtcbi1cbiBcdGxpc3RfZGVsKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlZW50cnkpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuQEAgLTQ0OCwxOSArNDEwLDEzIEBAIHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19kZXN0cm95X3YxKGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4tXHRwcl9kZWJ1ZyhcImRlc3Ryb3kgdGFyZ2luZm8gJXNcXG5cIiwgaW5mby1cdTAwM2VsYWJlbCk7XG4tXG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuIFx0aWYgKC0taW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQgXHUwMDNlIDApIHtcbi1cdFx0cHJfZGVidWcoXCJkZWNyZWFzZWQgcmVmY250IG9mIHRpbWVyICVzIHRvICV1XFxuXCIsXG4tXHRcdFx0IGluZm8tXHUwMDNlbGFiZWwsIGluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250KTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRwcl9kZWJ1ZyhcImRlbGV0aW5nIHRpbWVyICVzXFxuXCIsIGluZm8tXHUwMDNlbGFiZWwpO1xuLVxuIFx0bGlzdF9kZWwoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VlbnRyeSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gXG5AQCAtNTM0LDcgKzQ5MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGlkbGV0aW1lcl90Z19pbml0KHZvaWQpXG4gXHRpZGxldGltZXJfdGdfY2xhc3MgPSBjbGFzc19jcmVhdGUoXCJ4dF9pZGxldGltZXJcIik7XG4gXHRlcnIgPSBQVFJfRVJSKGlkbGV0aW1lcl90Z19jbGFzcyk7XG4gXHRpZiAoSVNfRVJSKGlkbGV0aW1lcl90Z19jbGFzcykpIHtcbi1cdFx0cHJfZGVidWcoXCJjb3VsZG4ndCByZWdpc3RlciBkZXZpY2UgY2xhc3NcXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJjb3VsZG4ndCByZWdpc3RlciBkZXZpY2UgY2xhc3NcXG5cIik7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTU0Miw3ICs0OTgsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBpZGxldGltZXJfdGdfaW5pdCh2b2lkKVxuIFx0XHRcdFx0XHQgICAgTUtERVYoMCwgMCksIE5VTEwsIFwidGltZXJzXCIpO1xuIFx0ZXJyID0gUFRSX0VSUihpZGxldGltZXJfdGdfZGV2aWNlKTtcbiBcdGlmIChJU19FUlIoaWRsZXRpbWVyX3RnX2RldmljZSkpIHtcbi1cdFx0cHJfZGVidWcoXCJjb3VsZG4ndCByZWdpc3RlciBzeXN0ZW0gZGV2aWNlXFxuXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiY291bGRuJ3QgcmVnaXN0ZXIgc3lzdGVtIGRldmljZVxcblwiKTtcbiBcdFx0Z290byBvdXRfY2xhc3M7XG4gXHR9XG4gXG5AQCAtNTUxLDcgKzUwNyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGlkbGV0aW1lcl90Z19pbml0KHZvaWQpXG4gXHRlcnIgPSB4dF9yZWdpc3Rlcl90YXJnZXRzKGlkbGV0aW1lcl90ZywgQVJSQVlfU0laRShpZGxldGltZXJfdGcpKTtcbiBcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbi1cdFx0cHJfZGVidWcoXCJjb3VsZG4ndCByZWdpc3RlciB4dCB0YXJnZXRcXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJjb3VsZG4ndCByZWdpc3RlciB4dCB0YXJnZXRcXG5cIik7XG4gXHRcdGdvdG8gb3V0X2RldjtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0xPRy5jIGIvbmV0L25ldGZpbHRlci94dF9MT0cuY1xuaW5kZXggZjM5MjQ0ZjljMGVkOS4uZGUzZjE3Njc5MmEwNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTE9HLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTE9HLmNcbkBAIC01MCwxMiArNTAsMTIgQEAgc3RhdGljIGludCBsb2dfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGxvZ2luZm8tXHUwMDNlbGV2ZWwgXHUwMDNlPSA4KSB7XG4tXHRcdHByX2RlYnVnKFwibGV2ZWwgJXUgXHUwMDNlPSA4XFxuXCIsIGxvZ2luZm8tXHUwMDNlbGV2ZWwpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwibGV2ZWwgJXUgXHUwMDNlPSA4XFxuXCIsIGxvZ2luZm8tXHUwMDNlbGV2ZWwpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGlmIChsb2dpbmZvLVx1MDAzZXByZWZpeFtzaXplb2YobG9naW5mby1cdTAwM2VwcmVmaXgpLTFdICE9ICdcXDAnKSB7XG4tXHRcdHByX2RlYnVnKFwicHJlZml4IGlzIG5vdCBudWxsLXRlcm1pbmF0ZWRcXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJwcmVmaXggaXMgbm90IG51bGwtdGVybWluYXRlZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9NQVNRVUVSQURFLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuY1xuaW5kZXggZWFlMDVjMTc4MzM2Ny4uY2VhNDg4Y2VjNTQ0NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTUFTUVVFUkFERS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuY1xuQEAgLTIxLDExICsyMSwxMSBAQCBzdGF0aWMgaW50IG1hc3F1ZXJhZGVfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3QgbmZfbmF0X2lwdjRfbXVsdGlfcmFuZ2VfY29tcGF0ICptciA9IHBhci1cdTAwM2V0YXJnaW5mbztcbiBcbiBcdGlmIChtci1cdTAwM2VyYW5nZVswXS5mbGFncyBcdTAwMjYgTkZfTkFUX1JBTkdFX01BUF9JUFMpIHtcbi1cdFx0cHJfZGVidWcoXCJiYWQgTUFQX0lQUy5cXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJiYWQgTUFQX0lQUy5cXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKG1yLVx1MDAzZXJhbmdlc2l6ZSAhPSAxKSB7XG4tXHRcdHByX2RlYnVnKFwiYmFkIHJhbmdlc2l6ZSAldVxcblwiLCBtci1cdTAwM2VyYW5nZXNpemUpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiYmFkIHJhbmdlc2l6ZSAldVxcblwiLCBtci1cdTAwM2VyYW5nZXNpemUpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiBuZl9jdF9uZXRuc19nZXQocGFyLVx1MDAzZW5ldCwgcGFyLVx1MDAzZWZhbWlseSk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9ORVRNQVAuYyBiL25ldC9uZXRmaWx0ZXIveHRfTkVUTUFQLmNcbmluZGV4IGNiMmVlODBkODRmYTguLjhjODZkOWE0MzM3M2EgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jXG5AQCAtMTA2LDExICsxMDYsMTEgQEAgc3RhdGljIGludCBuZXRtYXBfdGc0X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IG5mX25hdF9pcHY0X211bHRpX3JhbmdlX2NvbXBhdCAqbXIgPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4gXHRpZiAoIShtci1cdTAwM2VyYW5nZVswXS5mbGFncyBcdTAwMjYgTkZfTkFUX1JBTkdFX01BUF9JUFMpKSB7XG4tXHRcdHByX2RlYnVnKFwiYmFkIE1BUF9JUFMuXFxuXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiYmFkIE1BUF9JUFMuXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdGlmIChtci1cdTAwM2VyYW5nZXNpemUgIT0gMSkge1xuLVx0XHRwcl9kZWJ1ZyhcImJhZCByYW5nZXNpemUgJXUuXFxuXCIsIG1yLVx1MDAzZXJhbmdlc2l6ZSk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJiYWQgcmFuZ2VzaXplICV1LlxcblwiLCBtci1cdTAwM2VyYW5nZXNpemUpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiBuZl9jdF9uZXRuc19nZXQocGFyLVx1MDAzZW5ldCwgcGFyLVx1MDAzZWZhbWlseSk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jIGIvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jXG5pbmRleCBmZjY2YjU2YTNmOTdkLi4yN2JjMDU0NWM0Zjc0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X1JFRElSRUNULmNcbkBAIC01MSwxMSArNTEsMTEgQEAgc3RhdGljIGludCByZWRpcmVjdF90ZzRfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3QgbmZfbmF0X2lwdjRfbXVsdGlfcmFuZ2VfY29tcGF0ICptciA9IHBhci1cdTAwM2V0YXJnaW5mbztcbiBcbiBcdGlmIChtci1cdTAwM2VyYW5nZVswXS5mbGFncyBcdTAwMjYgTkZfTkFUX1JBTkdFX01BUF9JUFMpIHtcbi1cdFx0cHJfZGVidWcoXCJiYWQgTUFQX0lQUy5cXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJiYWQgTUFQX0lQUy5cXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKG1yLVx1MDAzZXJhbmdlc2l6ZSAhPSAxKSB7XG4tXHRcdHByX2RlYnVnKFwiYmFkIHJhbmdlc2l6ZSAldS5cXG5cIiwgbXItXHUwMDNlcmFuZ2VzaXplKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcImJhZCByYW5nZXNpemUgJXUuXFxuXCIsIG1yLVx1MDAzZXJhbmdlc2l6ZSk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0cmV0dXJuIG5mX2N0X25ldG5zX2dldChwYXItXHUwMDNlbmV0LCBwYXItXHUwMDNlZmFtaWx5KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1NFQ01BUksuYyBiL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jXG5pbmRleCA1YmM1ZWE1MDVlYjllLi4zOGU4ZTQxMGI0ZTgxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jXG5AQCAtNzksOCArNzksNyBAQCBzZWNtYXJrX3RnX2NoZWNrKGNvbnN0IGNoYXIgKnRhYmxlLCBzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfaW5mb192MSAqaW5mbylcbiBcbiBcdGlmIChzdHJjbXAodGFibGUsIFwibWFuZ2xlXCIpICE9IDAgXHUwMDI2XHUwMDI2XG4gXHQgICAgc3RyY21wKHRhYmxlLCBcInNlY3VyaXR5XCIpICE9IDApIHtcbi1cdFx0cHJfaW5mb19yYXRlbGltaXRlZChcIm9ubHkgdmFsaWQgaW4gXFwnbWFuZ2xlXFwnIG9yIFxcJ3NlY3VyaXR5XFwnIHRhYmxlLCBub3QgXFwnJXNcXCdcXG5cIixcbi1cdFx0XHRcdCAgICB0YWJsZSk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJvbmx5IHZhbGlkIGluIFxcJ21hbmdsZVxcJyBvciBcXCdzZWN1cml0eVxcJyB0YWJsZVxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jZ3JvdXAuYyBiL25ldC9uZXRmaWx0ZXIveHRfY2dyb3VwLmNcbmluZGV4IDQzZDJhZTJiZTYyOGQuLmFjMWI3ZTcxY2Q3ZjUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2Nncm91cC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nncm91cC5jXG5AQCAtMzMsNyArMzMsNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192MChjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHtcbi1cdFx0cHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIGludCBjZ3JvdXBfbXRfY2hlY2tfdjEoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKCFpbmZvLVx1MDAzZWhhc19wYXRoIFx1MDAyNlx1MDAyNiAhaW5mby1cdTAwM2VoYXNfY2xhc3NpZCkge1xuLVx0XHRwcl9pbmZvKFwieHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXFxuXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwieHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC01OSw3ICs1OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YxKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0fVxuIFxuIFx0aWYgKGluZm8tXHUwMDNlaGFzX2NsYXNzaWQgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQpKSB7XG4tXHRcdHByX2luZm8oTkVUX0NMU19DTEFTU0lEX0lOVkFMSURfTVNHKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YyKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmICghaW5mby1cdTAwM2VoYXNfcGF0aCBcdTAwMjZcdTAwMjYgIWluZm8tXHUwMDNlaGFzX2NsYXNzaWQpIHtcbi1cdFx0cHJfaW5mbyhcInh0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxcblwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcInh0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtOTksNyArOTksNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192Mihjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdH1cbiBcbiBcdGlmIChpbmZvLVx1MDAzZWhhc19jbGFzc2lkIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfQ0dST1VQX05FVF9DTEFTU0lEKSkge1xuLVx0XHRwcl9pbmZvKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoTkVUX0NMU19DTEFTU0lEX0lOVkFMSURfTVNHKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9lc3AuYyBiL25ldC9uZXRmaWx0ZXIveHRfZXNwLmNcbmluZGV4IDJhMWMwYWQwZmYwNzkuLjY4ZmQ3NTg4NDI2OGEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jXG5AQCAtMjUsMTIgKzI1LDcgQEAgTU9EVUxFX0FMSUFTKFwiaXA2dF9lc3BcIik7XG4gc3RhdGljIGlubGluZSBib29sXG4gc3BpX21hdGNoKHVfaW50MzJfdCBtaW4sIHVfaW50MzJfdCBtYXgsIHVfaW50MzJfdCBzcGksIGJvb2wgaW52ZXJ0KVxuIHtcbi1cdGJvb2wgcjtcbi1cdHByX2RlYnVnKFwic3BpX21hdGNoOiVjIDB4JXggXHUwMDNjPSAweCV4IFx1MDAzYz0gMHgleFxcblwiLFxuLVx0XHQgaW52ZXJ0ID8gJyEnIDogJyAnLCBtaW4sIHNwaSwgbWF4KTtcbi1cdHIgPSAoc3BpIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBzcGkgXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xuLVx0cHJfZGVidWcoXCIgcmVzdWx0ICVzXFxuXCIsIHIgPyBcIlBBU1NcIiA6IFwiRkFJTEVEXCIpO1xuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gKHNwaSBcdTAwM2U9IG1pbiBcdTAwMjZcdTAwMjYgc3BpIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgZXNwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbkBAIC00OCw3ICs0Myw2IEBAIHN0YXRpYyBib29sIGVzcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdC8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXG4gXHRcdCAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC5cbiBcdFx0ICovXG4tXHRcdHByX2RlYnVnKFwiRHJvcHBpbmcgZXZpbCBFU1AgdGlueWdyYW0uXFxuXCIpO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC02Miw3ICs1Niw3IEBAIHN0YXRpYyBpbnQgZXNwX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IHh0X2VzcCAqZXNwaW5mbyA9IHBhci1cdTAwM2VtYXRjaGluZm87XG4gXG4gXHRpZiAoZXNwaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgflhUX0VTUF9JTlZfTUFTSykge1xuLVx0XHRwcl9kZWJ1ZyhcInVua25vd24gZmxhZ3MgJVhcXG5cIiwgZXNwaW5mby1cdTAwM2VpbnZmbGFncyk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJ1bmtub3duIGZsYWdzICVYXFxuXCIsIGVzcGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2lwY29tcC5jIGIvbmV0L25ldGZpbHRlci94dF9pcGNvbXAuY1xuaW5kZXggNDcyZGE2MzlhMzJlMi4uMzI5OWMxZWE2MGY5ZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaXBjb21wLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaXBjb21wLmNcbkBAIC0yOSwxMiArMjksNyBAQCBNT0RVTEVfQUxJQVMoXCJpcDZ0X2lwY29tcFwiKTtcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpXG4ge1xuLVx0Ym9vbCByO1xuLVx0cHJfZGVidWcoXCJzcGlfbWF0Y2g6JWMgMHgleCBcdTAwM2M9IDB4JXggXHUwMDNjPSAweCV4XFxuXCIsXG4tXHRcdCBpbnZlcnQgPyAnIScgOiAnICcsIG1pbiwgc3BpLCBtYXgpO1xuLVx0ciA9IChzcGkgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IHNwaSBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4tXHRwcl9kZWJ1ZyhcIiByZXN1bHQgJXNcXG5cIiwgciA/IFwiUEFTU1wiIDogXCJGQUlMRURcIik7XG4tXHRyZXR1cm4gcjtcbitcdHJldHVybiAoc3BpIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBzcGkgXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBjb21wX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbkBAIC01Miw3ICs0Nyw2IEBAIHN0YXRpYyBib29sIGNvbXBfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHQvKiBXZSd2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZVxuIFx0XHQgKiBjYW4ndC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuXG4gXHRcdCAqL1xuLVx0XHRwcl9kZWJ1ZyhcIkRyb3BwaW5nIGV2aWwgSVBDb21wIHRpbnlncmFtLlxcblwiKTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuY1xuaW5kZXggMGM5ZTAxNGUzMGI0OS4uYmY2MTE0MWZiNzg1MCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuY1xuQEAgLTI0LDI3ICsyNCwxNSBAQCBpcHJhbmdlX210NChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdG0gID0gbnRvaGwoaXBoLVx1MDAzZXNhZGRyKSBcdTAwM2MgbnRvaGwoaW5mby1cdTAwM2VzcmNfbWluLmlwKTtcbiBcdFx0bSB8PSBudG9obChpcGgtXHUwMDNlc2FkZHIpIFx1MDAzZSBudG9obChpbmZvLVx1MDAzZXNyY19tYXguaXApO1xuIFx0XHRtIF49ICEhKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVik7XG4tXHRcdGlmIChtKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJzcmMgSVAgJXBJNCBOT1QgaW4gcmFuZ2UgJXMlcEk0LSVwSTRcXG5cIixcbi1cdFx0XHQgICAgICAgICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsXG4tXHRcdFx0ICAgICAgICAgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVikgPyBcIihJTlYpIFwiIDogXCJcIixcbi1cdFx0XHQgICAgICAgICBcdTAwMjZpbmZvLVx1MDAzZXNyY19taW4uaXAsXG4tXHRcdFx0ICAgICAgICAgXHUwMDI2aW5mby1cdTAwM2VzcmNfbWF4LmlwKTtcbitcdFx0aWYgKG0pXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHR9XG4gXHR9XG4gXHRpZiAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9EU1QpIHtcbiBcdFx0bSAgPSBudG9obChpcGgtXHUwMDNlZGFkZHIpIFx1MDAzYyBudG9obChpbmZvLVx1MDAzZWRzdF9taW4uaXApO1xuIFx0XHRtIHw9IG50b2hsKGlwaC1cdTAwM2VkYWRkcikgXHUwMDNlIG50b2hsKGluZm8tXHUwMDNlZHN0X21heC5pcCk7XG4gXHRcdG0gXj0gISEoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9EU1RfSU5WKTtcbi1cdFx0aWYgKG0pIHtcbi1cdFx0XHRwcl9kZWJ1ZyhcImRzdCBJUCAlcEk0IE5PVCBpbiByYW5nZSAlcyVwSTQtJXBJNFxcblwiLFxuLVx0XHRcdCAgICAgICAgIFx1MDAyNmlwaC1cdTAwM2VkYWRkcixcbi1cdFx0XHQgICAgICAgICAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9EU1RfSU5WKSA/IFwiKElOVikgXCIgOiBcIlwiLFxuLVx0XHRcdCAgICAgICAgIFx1MDAyNmluZm8tXHUwMDNlZHN0X21pbi5pcCxcbi1cdFx0XHQgICAgICAgICBcdTAwMjZpbmZvLVx1MDAzZWRzdF9tYXguaXApO1xuK1x0XHRpZiAobSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbiBcdH1cbiBcdHJldHVybiB0cnVlO1xuIH1cbkBAIC03MywyNyArNjEsMTUgQEAgaXByYW5nZV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRtICA9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmluZm8tXHUwMDNlc3JjX21pbi5pbjYpO1xuIFx0XHRtIHw9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpbmZvLVx1MDAzZXNyY19tYXguaW42LCBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuIFx0XHRtIF49ICEhKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVik7XG4tXHRcdGlmIChtKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJzcmMgSVAgJXBJNiBOT1QgaW4gcmFuZ2UgJXMlcEk2LSVwSTZcXG5cIixcbi1cdFx0XHRcdCBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHQgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVikgPyBcIihJTlYpIFwiIDogXCJcIixcbi1cdFx0XHRcdCBcdTAwMjZpbmZvLVx1MDAzZXNyY19taW4uaW42LFxuLVx0XHRcdFx0IFx1MDAyNmluZm8tXHUwMDNlc3JjX21heC5pbjYpO1xuK1x0XHRpZiAobSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbiBcdH1cbiBcdGlmIChpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUFJBTkdFX0RTVCkge1xuIFx0XHRtICA9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpcGgtXHUwMDNlZGFkZHIsIFx1MDAyNmluZm8tXHUwMDNlZHN0X21pbi5pbjYpO1xuIFx0XHRtIHw9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpbmZvLVx1MDAzZWRzdF9tYXguaW42LCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIpO1xuIFx0XHRtIF49ICEhKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfRFNUX0lOVik7XG4tXHRcdGlmIChtKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJkc3QgSVAgJXBJNiBOT1QgaW4gcmFuZ2UgJXMlcEk2LSVwSTZcXG5cIixcbi1cdFx0XHRcdCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHQgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfRFNUX0lOVikgPyBcIihJTlYpIFwiIDogXCJcIixcbi1cdFx0XHRcdCBcdTAwMjZpbmZvLVx1MDAzZWRzdF9taW4uaW42LFxuLVx0XHRcdFx0IFx1MDAyNmluZm8tXHUwMDNlZHN0X21heC5pbjYpO1xuK1x0XHRpZiAobSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbiBcdH1cbiBcdHJldHVybiB0cnVlO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2lwdnMuYyBiL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jXG5pbmRleCAyNTNjNzFjYzlhNjM0Li5lMTNjMGZmYjczYTlhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcHZzLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jXG5AQCAtMTQ4LDcgKzE0OCw2IEBAIGlwdnNfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIG91dF9wdXRfY3A6XG4gXHRfX2lwX3ZzX2Nvbm5fcHV0KGNwKTtcbiBvdXQ6XG4tXHRwcl9kZWJ1ZyhcIm1hdGNoPSVkXFxuXCIsIG1hdGNoKTtcbiBcdHJldHVybiBtYXRjaDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuYyBiL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmNcbmluZGV4IGExNjkxZmY0MDVkM2MuLmJmZjVmNTNhOWJlZmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jXG5AQCAtMzcsNyArMzcsNiBAQCBwb3J0c19tYXRjaF92MShjb25zdCBzdHJ1Y3QgeHRfbXVsdGlwb3J0X3YxICptaW5mbyxcbiBcdFx0aWYgKG1pbmZvLVx1MDAzZXBmbGFnc1tpXSkge1xuIFx0XHRcdC8qIHJhbmdlIHBvcnQgbWF0Y2hpbmcgKi9cbiBcdFx0XHRlID0gbWluZm8tXHUwMDNlcG9ydHNbKytpXTtcbi1cdFx0XHRwcl9kZWJ1ZyhcInNyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkLSVkP1xcblwiLCBzLCBlKTtcbiBcbiBcdFx0XHRzd2l0Y2ggKG1pbmZvLVx1MDAzZWZsYWdzKSB7XG4gXHRcdFx0Y2FzZSBYVF9NVUxUSVBPUlRfU09VUkNFOlxuQEAgLTU4LDggKzU3LDYgQEAgcG9ydHNfbWF0Y2hfdjEoY29uc3Qgc3RydWN0IHh0X211bHRpcG9ydF92MSAqbWluZm8sXG4gXHRcdFx0fVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIGV4YWN0IHBvcnQgbWF0Y2hpbmcgKi9cbi1cdFx0XHRwcl9kZWJ1ZyhcInNyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkP1xcblwiLCBzKTtcbi1cbiBcdFx0XHRzd2l0Y2ggKG1pbmZvLVx1MDAzZWZsYWdzKSB7XG4gXHRcdFx0Y2FzZSBYVF9NVUxUSVBPUlRfU09VUkNFOlxuIFx0XHRcdFx0aWYgKHNyYyA9PSBzKVxuQEAgLTk3LDcgKzk0LDYgQEAgbXVsdGlwb3J0X210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0LyogV2UndmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2VcbiBcdFx0ICogY2FuJ3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLlxuIFx0XHQgKi9cbi1cdFx0cHJfZGVidWcoXCJEcm9wcGluZyBldmlsIG9mZnNldD0wIHRpbnlncmFtLlxcblwiKTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuY1xuaW5kZXggYjQ2YTZhNTEyMDU4My4uZDM1YzIxZDk2NTFiMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuY1xuQEAgLTQ4LDMwICs0OCwxNyBAQCBtYXRjaF9wYWNrZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHN0cnVjdCB4dF9zY3RwX2ZsYWdfaW5mbyAqZmxhZ19pbmZvID0gaW5mby1cdTAwM2VmbGFnX2luZm87XG4gXHRpbnQgZmxhZ19jb3VudCA9IGluZm8tXHUwMDNlZmxhZ19jb3VudDtcbiBcbi0jaWZkZWYgREVCVUdcbi1cdGludCBpID0gMDtcbi0jZW5kaWZcbi1cbiBcdGlmIChjaHVua19tYXRjaF90eXBlID09IFNDVFBfQ0hVTktfTUFUQ0hfQUxMKVxuIFx0XHRTQ1RQX0NIVU5LTUFQX0NPUFkoY2h1bmttYXBjb3B5LCBpbmZvLVx1MDAzZWNodW5rbWFwKTtcbiBcbiBcdGRvIHtcbiBcdFx0c2NoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX3NjaCksIFx1MDAyNl9zY2gpO1xuIFx0XHRpZiAoc2NoID09IE5VTEwgfHwgc2NoLVx1MDAzZWxlbmd0aCA9PSAwKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJEcm9wcGluZyBpbnZhbGlkIFNDVFAgcGFja2V0LlxcblwiKTtcbiBcdFx0XHQqaG90ZHJvcCA9IHRydWU7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4tI2lmZGVmIERFQlVHXG4tXHRcdHByX2RlYnVnKFwiQ2h1bmsgbnVtOiAlZFxcdG9mZnNldDogJWRcXHR0eXBlOiAlZFxcdGxlbmd0aDogJWRcIlxuLVx0XHRcdCBcIlxcdGZsYWdzOiAleFxcblwiLFxuLVx0XHRcdCArK2ksIG9mZnNldCwgc2NoLVx1MDAzZXR5cGUsIGh0b25zKHNjaC1cdTAwM2VsZW5ndGgpLFxuLVx0XHRcdCBzY2gtXHUwMDNlZmxhZ3MpO1xuLSNlbmRpZlxuIFx0XHRvZmZzZXQgKz0gU0NUUF9QQUQ0KG50b2hzKHNjaC1cdTAwM2VsZW5ndGgpKTtcbiBcbi1cdFx0cHJfZGVidWcoXCJza2ItXHUwMDNlbGVuOiAlZFxcdG9mZnNldDogJWRcXG5cIiwgc2tiLVx1MDAzZWxlbiwgb2Zmc2V0KTtcbi1cbiBcdFx0aWYgKFNDVFBfQ0hVTktNQVBfSVNfU0VUKGluZm8tXHUwMDNlY2h1bmttYXAsIHNjaC1cdTAwM2V0eXBlKSkge1xuIFx0XHRcdHN3aXRjaCAoY2h1bmtfbWF0Y2hfdHlwZSkge1xuIFx0XHRcdGNhc2UgU0NUUF9DSFVOS19NQVRDSF9BTlk6XG5AQCAtMTIxLDE4ICsxMDgsMTQgQEAgc2N0cF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3Qgc2N0cGhkciAqc2g7XG4gXHRzdHJ1Y3Qgc2N0cGhkciBfc2g7XG4gXG4tXHRpZiAocGFyLVx1MDAzZWZyYWdvZmYgIT0gMCkge1xuLVx0XHRwcl9kZWJ1ZyhcIkRyb3BwaW5nIG5vbi1maXJzdCBmcmFnbWVudC4uIEZJWE1FXFxuXCIpO1xuK1x0aWYgKHBhci1cdTAwM2VmcmFnb2ZmICE9IDApXG4gXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbiBcbiBcdHNoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcGFyLVx1MDAzZXRob2ZmLCBzaXplb2YoX3NoKSwgXHUwMDI2X3NoKTtcbiBcdGlmIChzaCA9PSBOVUxMKSB7XG4tXHRcdHByX2RlYnVnKFwiRHJvcHBpbmcgZXZpbCBUQ1Agb2Zmc2V0PTAgdGlueWdyYW0uXFxuXCIpO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbi1cdHByX2RlYnVnKFwic3B0OiAlZFxcdGRwdDogJWRcXG5cIiwgbnRvaHMoc2gtXHUwMDNlc291cmNlKSwgbnRvaHMoc2gtXHUwMDNlZGVzdCkpO1xuIFxuIFx0cmV0dXJuICBTQ0NIRUNLKG50b2hzKHNoLVx1MDAzZXNvdXJjZSkgXHUwMDNlPSBpbmZvLVx1MDAzZXNwdHNbMF1cbiBcdFx0XHRcdTAwMjZcdTAwMjYgbnRvaHMoc2gtXHUwMDNlc291cmNlKSBcdTAwM2M9IGluZm8tXHUwMDNlc3B0c1sxXSxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3RjcHVkcC5jIGIvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuY1xuaW5kZXggZjc2Y2YxOGYxYTI0NC4uNzA2MDhiOGQwNmFiMiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmNcbkBAIC00NCw4ICs0NCw2IEBAIHRjcF9maW5kX29wdGlvbih1X2ludDhfdCBvcHRpb24sXG4gXHR1X2ludDhfdCBfb3B0WzYwIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpXTtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0cHJfZGVidWcoXCJmaW5kaW5nIG9wdGlvblxcblwiKTtcbi1cbiBcdGlmICghb3B0bGVuKVxuIFx0XHRyZXR1cm4gaW52ZXJ0O1xuIFxuQEAgLTgxLDEwICs3OSw4IEBAIHN0YXRpYyBib29sIHRjcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdCAgIGNhdXNlcyB0aGlzLiBJdHMgYSBjcmFja2VyIHRyeWluZyB0byBicmVhayBpbiBieSBkb2luZyBhXG4gXHRcdCAgIGZsYWcgb3ZlcndyaXRlIHRvIHBhc3MgdGhlIGRpcmVjdGlvbiBjaGVja3MuXG4gXHRcdCovXG4tXHRcdGlmIChwYXItXHUwMDNlZnJhZ29mZiA9PSAxKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJEcm9wcGluZyBldmlsIFRDUCBvZmZzZXQ9MSBmcmFnLlxcblwiKTtcbitcdFx0aWYgKHBhci1cdTAwM2VmcmFnb2ZmID09IDEpXG4gXHRcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuLVx0XHR9XG4gXHRcdC8qIE11c3Qgbm90IGJlIGEgZnJhZ21lbnQuICovXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC05Myw3ICs4OSw2IEBAIHN0YXRpYyBib29sIHRjcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRpZiAodGggPT0gTlVMTCkge1xuIFx0XHQvKiBXZSd2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZVxuIFx0XHQgICBjYW4ndC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuICovXG4tXHRcdHByX2RlYnVnKFwiRHJvcHBpbmcgZXZpbCBUQ1Agb2Zmc2V0PTAgdGlueWdyYW0uXFxuXCIpO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC0xNDUsNyArMTQwLDYgQEAgc3RhdGljIGJvb2wgdWRwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdGlmICh1aCA9PSBOVUxMKSB7XG4gXHRcdC8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXG4gXHRcdCAgIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4gKi9cbi1cdFx0cHJfZGVidWcoXCJEcm9wcGluZyBldmlsIFVEUCB0aW55Z3JhbS5cXG5cIik7XG4gXHRcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6Mzk6MjEuODIxNzg5Mzc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTMxMjU3MDUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBPcHRpbWl6YXRpb24gYW5kIFBvdGVudGlhbCBMb2dpYyBGbGF3KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgcXVpY2sgc2NhbiwgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBuZXRmaWx0ZXIgZmlsZXMg4oCTIGBuZXQvaXB2NC9uZXRmaWx0ZXIvYCwgYG5ldC9pcHY2L25ldGZpbHRlci9gLCBhbmQgYG5ldC9uZXRmaWx0ZXIvYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlc2UgYXJlIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2VzOiBtYWlubHksIHNvbWUgZGVidWdnaW5nIG91dHB1dCBpcyBiZWluZyB0b25lZCBkb3duIGJ5IHJlbW92aW5nIGBwcl9kZWJ1Z2Agc3RhdGVtZW50cywgcmVwbGFjaW5nIGRlYnVnIG9yIGluZm9ybWF0aW9uYWwgcHJpbnRzIHdpdGggcmF0ZS1saW1pdGVkIHZlcnNpb25zIHVzaW5nIGBwcl9pbmZvX3JhdGVsaW1pdGVkYCBpbiB0aGUgYF9jaGVja2AgZnVuY3Rpb25zLiBUaGF0J3MgYSByZWFzb25hYmxlIG9wdGltaXphdGlvbi5cblxuVGhlbiwgdGhlcmXigJlzIHNvbWV0aGluZyBuZXcgaW4gYHh0X0NULmNgLiBJIHNlZSB0aGF0IGEgbGVuZ3RoIGNoZWNrIGhhcyBiZWVuIGFkZGVkIGZvciBgaW5mby1cdTAwM2VoZWxwZXJgIGFuZCBgaW5mby1cdTAwM2V0aW1lb3V0YCB3aGljaCBpcyBnb29kIHByYWN0aWNlLiBJ4oCZdmUgbm90aWNlZCBhIHBvc3NpYmxlIGJ1Zywgc28gbGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29kZTpcbmBgYGNcbkBAIC0xOTUsNyArMTk1LDggQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcixcbiBcdFx0Z290byBlcnIzO1xuIFx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNlaGVscGVyWzBdKSB7XG4rXHRpZiAoaW5mby1cdTAwM2VoZWxwZXJbMF0gXHUwMDI2XHUwMDI2XG4rXHQgICAgc3RybmxlbihpbmZvLVx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiBcdFx0aWYgKHN0cm5sZW4oaW5mby1cdTAwM2VoZWxwZXIsIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpID09IHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiBcdFx0XHRyZXQgPSAtRU5BTUVUT09MT05HO1xuIFx0XHRcdGdvdG8gZXJyMztcbkBAIC0yMDYsNyArMjA3LDggQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcixcbiBcdFx0XHRnb3RvIGVycjM7XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0WzBdKSB7XG4rXHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0WzBdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHN0cm5sZW4oaW5mby1cdTAwM2V0aW1lb3V0LCBzaXplb2YoaW5mby1cdTAwM2V0aW1lb3V0KSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gXHRcdGlmIChzdHJubGVuKGluZm8tXHUwMDNldGltZW91dCwgc2l6ZW9mKGluZm8tXHUwMDNldGltZW91dCkpID09IHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gXHRcdFx0cmV0ID0gLUVOQU1FVE9PTE9ORztcbiBcdFx0XHRnb3RvIGVycjQ7XG5gYGBcbk5vdywgY29tcGFyaW5nIHRoZSBvcmlnaW5hbCBjb2RlIHRvIHRoZSBuZXcgY29kZS4uLiBJIHNlZSB3aGF0J3MgaGFwcGVuaW5nLiBUaGUgb3JpZ2luYWwgYGlmYCBjb25kaXRpb24gd2FzOlxuXG5gYGBjXG5cdGlmIChpbmZvLVx1MDAzZWhlbHBlclswXSkge1xuXHRcdGlmIChzdHJubGVuKGluZm8tXHUwMDNlaGVscGVyLCBzaXplb2YoaW5mby1cdTAwM2VoZWxwZXIpKSA9PSBzaXplb2YoaW5mby1cdTAwM2VoZWxwZXIpKSB7XG5gYGBcblxuVGhlIGFkZGVkIGNoZWNrIGlzOlxuYGBgY1xuXHRpZiAoaW5mby1cdTAwM2VoZWxwZXJbMF0gXHUwMDI2XHUwMDI2XG5cdCAgICBzdHJubGVuKGluZm8tXHUwMDNlaGVscGVyLCBzaXplb2YoaW5mby1cdTAwM2VoZWxwZXIpKSBcdTAwM2Mgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkge1xuXHRcdGlmIChzdHJubGVuKGluZm8tXHUwMDNlaGVscGVyLCBzaXplb2YoaW5mby1cdTAwM2VoZWxwZXIpKSA9PSBzaXplb2YoaW5mby1cdTAwM2VoZWxwZXIpKSB7XG5gYGBcblRoZSBsb2dpYyBoZXJlIGxvb2tzIGZsYXdlZC4gSWYgdGhlIGNvbmRpdGlvbiBgc3RybmxlbihpbmZvLVx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcilgIGlzICp0cnVlKiwgdGhlbiB0aGUgaW5uZXIgY29uZGl0aW9uIGBzdHJubGVuKC4uLikgPT0gc2l6ZW9mKC4uLilgIHdpbGwgKm5ldmVyKiBiZSB0cnVlLiBUaGUgY29kZSBhZGRlZCBhIHJlZHVuZGFuY3kgY2hlY2sgZm9yIGxlbmd0aCB0aGF0IG1ha2VzIHRoZSBzZWNvbmQgY29uZGl0aW9uIGltcG9zc2libGUsIGFuZCB0aGUgd2hvbGUgY29kZSBibG9jayBjb3VsZCBiZSBza2lwcGVkLiBJdCdzIGEgc3VidGxlIGJ1dCBzaWduaWZpY2FudCBpc3N1ZTsgdGhhdCBjb25kaXRpb25hbCBjaGVjayBpcyBkb2luZyBub3RoaW5nLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSByZXN0IG9mIHRoZSBwYXRjaCBpbiBgbmV0L25ldGZpbHRlci94dF9DVC5jYCB0byBzZWUgaWYgdGhhdCBoYXBwZW5zIGVsc2V3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MjEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDozOTozMS4xMzQzNjM4MTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL3h0X0NULmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdHpvbmUuaWQgPSBpbmZvLVxcdTAwM2V6b25lO1xcbiAxODE6XFx0XFx0em9uZS5kaXIgPSB4dF9jdF9mbGFnc190b19kaXIoaW5mbyk7XFxuIDE4MjpcXHRcXHRpZiAoaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYVF9DVF9aT05FX01BUkspXFxuIDE4MzpcXHRcXHRcXHR6b25lLmZsYWdzIHw9IE5GX0NUX0ZMQUdfTUFSSztcXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0Y3QgPSBuZl9jdF90bXBsX2FsbG9jKHBhci1cXHUwMDNlbmV0LCBcXHUwMDI2em9uZSwgR0ZQX0tFUk5FTCk7XFxuIDE4NjpcXHRcXHRpZiAoIWN0KSB7XFxuIDE4NzpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiAxODg6XFx0XFx0XFx0Z290byBlcnIyO1xcbiAxODk6XFx0XFx0fVxcbiAxOTA6XFx0XFxuIDE5MTpcXHRcXHRpZiAoKGluZm8tXFx1MDAzZWN0X2V2ZW50cyB8fCBpbmZvLVxcdTAwM2VleHBfZXZlbnRzKSBcXHUwMDI2XFx1MDAyNlxcbiAxOTI6XFx0XFx0ICAgICFuZl9jdF9lY2FjaGVfZXh0X2FkZChjdCwgaW5mby1cXHUwMDNlY3RfZXZlbnRzLCBpbmZvLVxcdTAwM2VleHBfZXZlbnRzLFxcbiAxOTM6XFx0XFx0XFx0XFx0XFx0ICBHRlBfS0VSTkVMKSkge1xcbiAxOTQ6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gMTk1OlxcdFxcdFxcdGdvdG8gZXJyMztcXG4gMTk2OlxcdFxcdH1cXG4gMTk3OlxcdFxcbiAxOTg6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWhlbHBlclswXSBcXHUwMDI2XFx1MDAyNlxcbiAxOTk6XFx0XFx0ICAgIHN0cm5sZW4oaW5mby1cXHUwMDNlaGVscGVyLCBzaXplb2YoaW5mby1cXHUwMDNlaGVscGVyKSkgXFx1MDAzYyBzaXplb2YoaW5mby1cXHUwMDNlaGVscGVyKSkge1xcbiAyMDA6XFx0XFx0XFx0aWYgKHN0cm5sZW4oaW5mby1cXHUwMDNlaGVscGVyLCBzaXplb2YoaW5mby1cXHUwMDNlaGVscGVyKSkgPT0gc2l6ZW9mKGluZm8tXFx1MDAzZWhlbHBlcikpIHtcXG4gMjAxOlxcdFxcdFxcdFxcdHJldCA9IC1FTkFNRVRPT0xPTkc7XFxuIDIwMjpcXHRcXHRcXHRcXHRnb3RvIGVycjM7XFxuIDIwMzpcXHRcXHRcXHR9XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdFxcdHJldCA9IHh0X2N0X3NldF9oZWxwZXIoY3QsIGluZm8tXFx1MDAzZWhlbHBlciwgcGFyKTtcXG4gMjA2OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAyMDc6XFx0XFx0XFx0XFx0Z290byBlcnIzO1xcbiAyMDg6XFx0XFx0fVxcbiAyMDk6XFx0XFxuIDIxMDpcXHRcXHRpZiAoaW5mby1cXHUwMDNldGltZW91dFswXSBcXHUwMDI2XFx1MDAyNlxcbiAyMTE6XFx0XFx0ICAgIHN0cm5sZW4oaW5mby1cXHUwMDNldGltZW91dCwgc2l6ZW9mKGluZm8tXFx1MDAzZXRpbWVvdXQpKSBcXHUwMDNjIHNpemVvZihpbmZvLVxcdTAwM2V0aW1lb3V0KSkge1xcbiAyMTI6XFx0XFx0XFx0aWYgKHN0cm5sZW4oaW5mby1cXHUwMDNldGltZW91dCwgc2l6ZW9mKGluZm8tXFx1MDAzZXRpbWVvdXQpKSA9PSBzaXplb2YoaW5mby1cXHUwMDNldGltZW91dCkpIHtcXG4gMjEzOlxcdFxcdFxcdFxcdHJldCA9IC1FTkFNRVRPT0xPTkc7XFxuIDIxNDpcXHRcXHRcXHRcXHRnb3RvIGVycjQ7XFxuIDIxNTpcXHRcXHRcXHR9XFxuIDIxNjpcXHRcXG4gMjE3OlxcdFxcdFxcdHJldCA9IHh0X2N0X3NldF90aW1lb3V0KGN0LCBwYXIsIGluZm8tXFx1MDAzZXRpbWVvdXQpO1xcbiAyMTg6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDIxOTpcXHRcXHRcXHRcXHRnb3RvIGVycjQ7XFxuIDIyMDpcXHRcXHR9XFxuIDIyMTpcXHRcXHRfX3NldF9iaXQoSVBTX0NPTkZJUk1FRF9CSVQsIFxcdTAwMjZjdC1cXHUwMDNlc3RhdHVzKTtcXG4gMjIyOlxcdG91dDpcXG4gMjIzOlxcdFxcdGluZm8tXFx1MDAzZWN0ID0gY3Q7XFxuIDIyNDpcXHRcXHRyZXR1cm4gMDtcXG4gMjI1OlxcdFxcbiAyMjY6XFx0ZXJyNDpcXG4gMjI3OlxcdFxcdGhlbHAgPSBuZmN0X2hlbHAoY3QpO1xcbiAyMjg6XFx0XFx0eHRfY3RfcHV0X2hlbHBlcihoZWxwKTtcXG4gMjI5OlxcdGVycjM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjM5OjMxLjEzNDQ0MDgwM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTQyMDI5NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEEgQmVoYXZpb3JhbCBTaGlmdCBpbiB4dF9DVC5jKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhlIGB4dF9DVC5jYCBtb2R1bGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGB4dF9jdF90Z19jaGVja2AgZnVuY3Rpb24uIFRoZSBhZGRpdGlvbiBvZiBgXHUwMDI2XHUwMDI2IHN0cm5sZW4oaW5mby1cdTAwM2VoZWxwZXIsIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIFx1MDAzYyBzaXplb2YoaW5mby1cdTAwM2VoZWxwZXIpYCB0byB0aGUgYGlmYCBjb25kaXRpb24gaW1tZWRpYXRlbHkgY2F1Z2h0IG15IGV5ZS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGlmIGBzdHJubGVuYCByZXR1cm5zIHRoZSBtYXhpbXVtIGJ1ZmZlciBzaXplIChtZWFuaW5nIGBpbmZvLVx1MDAzZWhlbHBlcmAgaXNuJ3QgbnVsbC10ZXJtaW5hdGVkKSwgdGhlIGVudGlyZSBibG9jayBpcyBub3cgc2tpcHBlZC4gVGhpcyBpcyBhIGNydWNpYWwgZGV0YWlsLiBUaGUgY29uc2VxdWVuY2UgaXMgdGhhdCBpbnN0ZWFkIG9mIHJldHVybmluZyBgLUVOQU1FVE9PTE9OR2AgYW5kIGV4aXRpbmcgdmlhIGBlcnIzYCwgdGhlIGNvZGUgbm93ICpzaWxlbnRseSogaWdub3JlcyB0aGUgaGVscGVyIHN0cmluZy4gRWZmZWN0aXZlbHksIHRoaXMgYWx0ZXJzIHRoZSB0YXJnZXQncyBiZWhhdmlvciB3aGVuIGVuY291bnRlcmluZyBhIGhlbHBlciBzdHJpbmcgdGhhdCBleGNlZWRzIHRoZSBleHBlY3RlZCBsZW5ndGggb3IgaXMgbm90IHByb3Blcmx5IG51bGwtdGVybWluYXRlZC4gSXQgYnlwYXNzZXMgdGhlIGVycm9yIGNoZWNrLlxuXG5JIHdlbnQgYmFjayBhbmQgZG91YmxlLWNoZWNrZWQgdGhlIG9yaWdpbmFsIGNvZGUuIFdpdGhvdXQgdGhlIG5ldyBjb25kaXRpb24sIHRoZSBvcmlnaW5hbCBjb2RlICpkaWQqIGNhdGNoIHRoaXMgbm9uLW51bGwtdGVybWluYXRlZCBoZWxwZXIgd2l0aCB0aGUgYHN0cm5sZW5gIGNoZWNrIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuIFRodXMsIHRoZSBwYXRjaCBoYXMgZGVmaW5pdGVseSBjaGFuZ2VkIHRoZSBmdW5jdGlvbidzIGJlaGF2aW9yLiBUaGUgcGF0Y2ggbWFrZXMgYW4gaW1wbGljaXQgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgYnVnLlxuXG5JIHF1aWNrbHkgbG9va2VkIGF0IHRoZSBjaGFuZ2UgaW4gYG5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNgIGFuZCBzYXcgdGhlIHBsYWNlbWVudCBvZiBhIGBtdXRleF91bmxvY2tgIGJlaW5nIGNoYW5nZWQsIGJ1dCBpdCBzZWVtcyBiZW5pZ24uXG5cblRoaXMgYmVoYXZpb3JhbCBjaGFuZ2UgaXMgd29ydGggaW52ZXN0aWdhdGluZyBmdXJ0aGVyLCBhbmQgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gZnV6ei4gVGhlIG9yaWdpbmFsIGNvZGUgcHJvdmlkZWQgZXJyb3IgY2hlY2tpbmcgYW5kIHRoZSBwYXRjaCByZW1vdmVkIGl0LiBUaGlzIGlzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGFuIGFyZWEgdGhhdCBjYW4gYmUgYSBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0aWVzLiBJJ2xsIG5lZWQgdG8gY3JhZnQgc29tZSBzcGVjaWZpYyB0ZXN0IGNhc2VzIHRvIGV4cGxvcmUgdGhpcyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTEyMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjM5OjQyLjI3NjQ3MzczNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA3NDQxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHRfY3RfdGdfY2hlY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci94dF9DVC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIveHRfQ1QuYz0xNDA9c3RhdGljIHZvaWQgeHRfY3RfcHV0X2hlbHBlcihzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwKVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9DVC5jLTE1NC1cXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmM6MTU1OnN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsXFxubmV0L25ldGZpbHRlci94dF9DVC5jLTE1Ni1cXHRcXHRcXHQgIHN0cnVjdCB4dF9jdF90YXJnZXRfaW5mb192MSAqaW5mbylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yMzYtXFxubmV0L25ldGZpbHRlci94dF9DVC5jOjIzNzpzdGF0aWMgaW50IHh0X2N0X3RnX2NoZWNrX3YwKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yMzgte1xcbi0tXFxubmV0L25ldGZpbHRlci94dF9DVC5jLTI1Mi1cXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmM6MjUzOlxcdHJldCA9IHh0X2N0X3RnX2NoZWNrKHBhciwgXFx1MDAyNmluZm9fdjEpO1xcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yNTQtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMjYxLVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYzoyNjI6c3RhdGljIGludCB4dF9jdF90Z19jaGVja192MShjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMjYzLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yNjgtXFxubmV0L25ldGZpbHRlci94dF9DVC5jOjI2OTpcXHRyZXR1cm4geHRfY3RfdGdfY2hlY2socGFyLCBwYXItXFx1MDAzZXRhcmdpbmZvKTtcXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMjcwLX1cXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMjcxLVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYzoyNzI6c3RhdGljIGludCB4dF9jdF90Z19jaGVja192Mihjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMjczLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yNzgtXFxubmV0L25ldGZpbHRlci94dF9DVC5jOjI3OTpcXHRyZXR1cm4geHRfY3RfdGdfY2hlY2socGFyLCBwYXItXFx1MDAzZXRhcmdpbmZvKTtcXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMjgwLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYz0zMzE9c3RhdGljIHN0cnVjdCB4dF90YXJnZXQgeHRfY3RfdGdfcmVnW10gX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0zNDQtXFx0XFx0LnVzZXJzaXplXFx0PSBvZmZzZXRvZihzdHJ1Y3QgeHRfY3RfdGFyZ2V0X2luZm8sIGN0KSxcXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmM6MzQ1OlxcdFxcdC5jaGVja2VudHJ5XFx0PSB4dF9jdF90Z19jaGVja192MCxcXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMzQ2LVxcdFxcdC5kZXN0cm95XFx0PSB4dF9jdF90Z19kZXN0cm95X3YwLFxcbi0tXFxubmV0L25ldGZpbHRlci94dF9DVC5jLTM1Ni1cXHRcXHQudXNlcnNpemVcXHQ9IG9mZnNldG9mKHN0cnVjdCB4dF9jdF90YXJnZXRfaW5mb192MSwgY3QpLFxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYzozNTc6XFx0XFx0LmNoZWNrZW50cnlcXHQ9IHh0X2N0X3RnX2NoZWNrX3YxLFxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0zNTgtXFx0XFx0LmRlc3Ryb3lcXHQ9IHh0X2N0X3RnX2Rlc3Ryb3lfdjEsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMzY4LVxcdFxcdC51c2Vyc2l6ZVxcdD0gb2Zmc2V0b2Yoc3RydWN0IHh0X2N0X3RhcmdldF9pbmZvX3YxLCBjdCksXFxubmV0L25ldGZpbHRlci94dF9DVC5jOjM2OTpcXHRcXHQuY2hlY2tlbnRyeVxcdD0geHRfY3RfdGdfY2hlY2tfdjIsXFxubmV0L25ldGZpbHRlci94dF9DVC5jLTM3MC1cXHRcXHQuZGVzdHJveVxcdD0geHRfY3RfdGdfZGVzdHJveV92MSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0zODgtXFx0XFx0LnVzZXJzaXplXFx0PSBvZmZzZXRvZihzdHJ1Y3QgeHRfY3RfdGFyZ2V0X2luZm8sIGN0KSxcXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmM6Mzg5OlxcdFxcdC5jaGVja2VudHJ5XFx0PSB4dF9jdF90Z19jaGVja192MCxcXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMzkwLVxcdFxcdC5kZXN0cm95XFx0PSB4dF9jdF90Z19kZXN0cm95X3YwLFxcbi0tXFxubmV0L25ldGZpbHRlci94dF9DVC5jLTQwMC1cXHRcXHQudXNlcnNpemVcXHQ9IG9mZnNldG9mKHN0cnVjdCB4dF9jdF90YXJnZXRfaW5mb192MSwgY3QpLFxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYzo0MDE6XFx0XFx0LmNoZWNrZW50cnlcXHQ9IHh0X2N0X3RnX2NoZWNrX3YxLFxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy00MDItXFx0XFx0LmRlc3Ryb3lcXHQ9IHh0X2N0X3RnX2Rlc3Ryb3lfdjEsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtNDEyLVxcdFxcdC51c2Vyc2l6ZVxcdD0gb2Zmc2V0b2Yoc3RydWN0IHh0X2N0X3RhcmdldF9pbmZvX3YxLCBjdCksXFxubmV0L25ldGZpbHRlci94dF9DVC5jOjQxMzpcXHRcXHQuY2hlY2tlbnRyeVxcdD0geHRfY3RfdGdfY2hlY2tfdjIsXFxubmV0L25ldGZpbHRlci94dF9DVC5jLTQxNC1cXHRcXHQuZGVzdHJveVxcdD0geHRfY3RfdGdfZGVzdHJveV92MSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6Mzk6NDIuMzc3MjI0MjIyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5ODE5NDA1NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYSBOZXRmaWx0ZXIgUGF0Y2g6IEZ1bmN0aW9uYWwgQ2hhbmdlIGluIGB4dF9DVC5jYCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UgaGF2ZSBhIHBhdGNoIHRoYXQncyBwcmltYXJpbHkgYWJvdXQgY2xlYW51cCAtIHJlbW92aW5nIGEgYnVuY2ggb2YgYHByX2RlYnVnYCBjYWxscyBhbmQgY29uc29saWRhdGluZyB0aGVtLCBwcmVzdW1hYmx5IGZvciBhIGxlc3Mgbm9pc3kga2VybmVsIGxvZy4gVGhhdCdzIGZpbmUsIGNvc21ldGljIG1vc3RseSwgd29uJ3QgZm9jdXMgb24gdGhhdC4gVGhlIHNpZ25pZmljYW50IGNoYW5nZSBpcyBpbiBgeHRfQ1QuY2AuIE15IGV4cGVydCBleWUgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhpcyBtb2RpZmljYXRpb246XG5cbmBgYGNcbi1cdGlmIChpbmZvLVx1MDAzZWhlbHBlclswXSkge1xuK1x0aWYgKGluZm8tXHUwMDNlaGVscGVyWzBdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHN0cm5sZW4oaW5mby1cdTAwM2VoZWxwZXIsIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIFx1MDAzYyBzaXplb2YoaW5mby1cdTAwM2VoZWxwZXIpKSB7XG5cdFx0aWYgKHN0cm5sZW4oaW5mby1cdTAwM2VoZWxwZXIsIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpID09IHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcblx0XHRcdHJldCA9IC1FTkFNRVRPT0xPTkc7XG5cdFx0XHRnb3RvIGVycjM7XG5cdFx0fVxuXG5cdFx0cmV0ID0geHRfY3Rfc2V0X2hlbHBlcihjdCwgaW5mby1cdTAwM2VoZWxwZXIsIHBhcik7XG5cdFx0aWYgKHJldCBcdTAwM2MgMClcblx0XHRcdGdvdG8gZXJyMztcblx0fVxuYGBgXG5cblRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhlIG9yaWdpbmFsIGNvZGUgY2hlY2tlZCBpZiBgaW5mby1cdTAwM2VoZWxwZXJgIGV4aXN0ZWQuIElmIGl0IGRpZCwgYW5kIGlmIHRoZSBzdHJpbmcgd2FzIG5vdCBudWxsIHRlcm1pbmF0ZWQsIHRoZSBvbGQgY29kZSByZXR1cm5lZCBgLUVOQU1FVE9PTE9OR2AuIFRoZSBuZXcgY29kZSBhZGRzIGEgKnNlY29uZCogY2hlY2ssIGlmIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBpcyBsZXNzIHRoYW4gdGhlIGJ1ZmZlci4gTm93LCAqaWYqIHRoZSBzdHJpbmcgaXNuJ3QgbnVsbC10ZXJtaW5hdGVkLCBgc3RybmxlbmAgd2lsbCByZXR1cm4gdGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4gU28sIHRoZSBuZXcgY29uZGl0aW9uLCBgc3RybmxlbiguLi4pIFx1MDAzYyBzaXplb2YoLi4uKWAsIGlzIGZhbHNlLCBhbmQgdGhlIGNvZGUgc2ltcGx5IHNraXBzIHRoZSBoZWxwZXIgY29uZmlndXJhdGlvbi4gTm93LCAqcHJldmlvdXNseSogaXQgd291bGQgaGF2ZSByZXR1cm5lZCBhbiBlcnJvciwgc3BlY2lmaWNhbGx5IGAtRU5BTUVUT09MT05HYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBtZWFucywgdGhhdCBpbnN0ZWFkIG9mIHJldHVybmluZyB0aGUgZXJyb3IsIHRoZSBoZWxwZXIgaXMgKnNpbGVudGx5KiBpZ25vcmVkLlxuXG5UaGlzIGxvb2tzIGxpa2UgYSBwb3RlbnRpYWwgYnVnIGZpeCBnb25lIHdyb25nLCBvciBhIG1pc3VuZGVyc3RhbmRpbmcgb2YgdGhlIG9yaWdpbmFsIGxvZ2ljLiBQZXJoYXBzIHRoZSBhdXRob3Igd2FzIHRyeWluZyB0byBwcmV2ZW50IGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBidXQgY3JlYXRlZCBkZWFkIGNvZGUsIGFuZCBjaGFuZ2VkIGJlaGF2aW91ciBpbiB0aGUgcHJvY2Vzcy5cblxuTGV0IG1lIHRoaW5r4oCmIHRoZSBjb2RlIGlzICpzdXBwb3NlZCogdG8gYmUgcmVjZWl2aW5nIGluZm9ybWF0aW9uIGZyb20gdXNlcnNwYWNlLiBJZiBJIHByb3ZpZGUgYSBub24tbnVsbC10ZXJtaW5hdGVkIGBoZWxwZXJgIG5hbWUsIHRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGhhdmUgZmxhZ2dlZCBpdCBhcyBhbiBlcnJvci4gTm93LCBpdCBqdXN0IHNpbGVudGx5ICpkb2Vzbid0IHNldCogdGhlIGhlbHBlci4gTm8gZXJyb3IgaXMgcmFpc2VkLCB0aGUgaGVscGVyIHNpbXBseSBkb2Vzbid0IGdldCBjb25maWd1cmVkLiBJcyB0aGF0IHdoYXQgd2Ugd2FudD8gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY2hhbmdlIHRoYXQgaW1wYWN0cyBwcm9ncmFtIGZsb3csIGVzcGVjaWFsbHkgaWYgYSB1c2VyICpleHBlY3RzKiB0aGF0IGVycm9yIG1lc3NhZ2UuXG5cbkkgY2FuJ3Qgc2VlIGFueSBpbW1lZGlhdGUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBvciBtZW1vcnkgY29ycnVwdGlvbiBoZXJlLCBidXQgdGhpcyBpcyBhICpiZWhhdmlvcmFsKiBjaGFuZ2UsIGFuZCBhIHNpbGVudCBvbmUuIEkgbmVlZCB0byBub3RlIHRoaXMgaGFzIGZ1bmN0aW9uYWwgaW1wbGljYXRpb25zIHRoYXQgYXJlIHRlc3RhYmxlLiBTbywgKnllcyosIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgZnV6emVyIG1pZ2h0IG5vdCB0cmlnZ2VyIGEgY3Jhc2ggb3IgY29ycnVwdGlvbiwgYnV0IGl0IHdpbGwgZGlzY292ZXIgdGhhdCB0aGlzIGxvZ2ljIHBhdGggaXMgZGlmZmVyZW50LlxuXG5Xb3J0aEZ1enppbmc9dHJ1ZVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY5OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NDA6MjUuMzU5MTY3Mzk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MTE3MTAxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9DVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTg0OT1jb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTg2MC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODYxOmNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0NUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTg2Mi1cXHR0cmlzdGF0ZSAnXFxcIkNUXFxcIiB0YXJnZXQgc3VwcG9ydCdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NDA6MjUuOTMwMzQzMzU5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM4NTYxOTEwMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmU6IE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1QqKlxuXG5Pa2F5LCBzbyBgTkVURklMVEVSX1hUX1RBUkdFVF9DVGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgdGhpbmcgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEknbSBnb2luZyB0byBzdGFydCBieSBwdWxsaW5nIHVwIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayB0aGUgdXN1YWwgc3VzcGVjdHMgLSB0aGUgS2NvbmZpZyBmaWxlcywgdGhlIE1ha2VmaWxlcywgYW5kIGFueSByZWxldmFudCBkb2N1bWVudGF0aW9uLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoZXJlIHdpbGwgbGlrZWx5IGJlIHNldmVyYWwgbGF5ZXJzIG9mIGRlcGVuZGVuY2llcyB0byB1bnJhdmVsLlxuXG5GaXJzdCwgYXJlIHRoZXJlIGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzIGxpc3RlZCBpbiB0aGUgS2NvbmZpZyBmaWxlIGl0c2VsZj8gU29tZXRpbWVzIGl0J3Mgc3RyYWlnaHRmb3J3YXJkLCBidXQgbW9yZSBvZnRlbiBpdCdzIGEgd2ViIG9mIGNvbm5lY3Rpb25zLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgdGhpbmdzIGxpa2UgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgb3IgZXZlbiBpbXBsaWNpdCBkZXBlbmRlbmNpZXMgYmFzZWQgb24gc2hhcmVkIG9wdGlvbnMuXG5cbk5leHQsIEknbGwgbmVlZCB0byB0cmFjZSB0aGluZ3MgdGhyb3VnaCB0aGUgYnVpbGQgc3lzdGVtLiBBcmUgdGhlcmUgYW55IE1ha2VmaWxlcyB0aGF0IGdldCBpbmNsdWRlZCwgb3IgcGVyaGFwcyBvdGhlciB0YXJnZXRzIHRoYXQgYE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RgIHJlbGllcyBvbj8gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBoZWFkZXIgZmlsZSBpbmNsdXNpb25zLCBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgYnVpbGQgZmxhZ3MgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGZpbmFsIG91dGNvbWUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtb2R1bGVzIGludm9sdmVkIGFuZCBhbnkgb3RoZXIgbW9kdWxlcyB0aGF0ICptaWdodCogYmUgcmVsZXZhbnQgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBDVGAuXG5cbkZpbmFsbHksIEknbGwgcmV2aWV3IGFueSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBvciBtYWlsaW5nIGxpc3QgZGlzY3Vzc2lvbnMuIEl0J3MgcG9zc2libGUgdGhlcmUgYXJlIG5vbi1vYnZpb3VzIHJlbGF0aW9uc2hpcHMgb3IgcmVxdWlyZW1lbnRzIHRoYXQgYXJlbid0IGltbWVkaWF0ZWx5IGFwcGFyZW50IGZyb20gdGhlIGNvZGUuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGNhdmVhdHMgb3IgZ290Y2hhcyB0aGF0IGNvdWxkIGJpdGUgbWUgbGF0ZXIuIE15IGdvYWwgaGVyZSBpcyBhIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZSB1bmRlcnN0YW5kaW5nIG9mIGV2ZXJ5dGhpbmcgdGhhdCBoYXMgdG8gYmUgaW4gcGxhY2UgZm9yIHRoaXMgb3B0aW9uIHRvIHdvcmssIG5vdCBqdXN0IHRoZSBiYXNpY3MuXG5cbldpdGggYWxsIG9mIHRoaXMgZG9uZSwgSSB3aWxsIGhhdmUgdGhlIG5lZWRlZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24sIHNvIEknbGwgYmUgYWJsZSB0byBwcm9jZWVkIHdpdGggdGhlIG5leHQgdGFzayB3aXRoIGNvbmZpZGVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NDA6MzkuNzg2NTM4NTE2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODYwOlxcdFxcbiA4NjE6XFx0Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RcXG4gODYyOlxcdFxcdHRyaXN0YXRlICdcXFwiQ1RcXFwiIHRhcmdldCBzdXBwb3J0J1xcbiA4NjM6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG4gODY0OlxcdFxcdGRlcGVuZHMgb24gSVBfTkZfUkFXIHx8IElQNl9ORl9SQVcgfHwgTkZUX0NPTVBBVFxcbiA4NjU6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gODY2OlxcdFxcdGhlbHBcXG4gODY3OlxcdFxcdCAgVGhpcyBvcHRpb25zIGFkZHMgYSBgQ1QnIHRhcmdldCwgd2hpY2ggYWxsb3dzIHRvIHNwZWNpZnkgaW5pdGlhbFxcbiA4Njg6XFx0XFx0ICBjb25uZWN0aW9uIHRyYWNraW5nIHBhcmFtZXRlcnMgbGlrZSBldmVudHMgdG8gYmUgZGVsaXZlcmVkIGFuZFxcbiA4Njk6XFx0XFx0ICB0aGUgaGVscGVyIHRvIGJlIHVzZWQuXFxuIDg3MDpcXHRcXG4gODcxOlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDg3MjpcXHRcXG4gODczOlxcdGNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1BcXG4gODc0OlxcdFxcdHRyaXN0YXRlICdcXFwiRFNDUFxcXCIgYW5kIFxcXCJUT1NcXFwiIHRhcmdldCBzdXBwb3J0J1xcbiA4NzU6XFx0XFx0ZGVwZW5kcyBvbiBJUF9ORl9NQU5HTEUgfHwgSVA2X05GX01BTkdMRSB8fCBORlRfQ09NUEFUXFxuIDg3NjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiA4Nzc6XFx0XFx0aGVscFxcbiA4Nzg6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIGEgYERTQ1AnIHRhcmdldCwgd2hpY2ggYWxsb3dzIHlvdSB0byBtYW5pcHVsYXRlXFxuIDg3OTpcXHRcXHQgIHRoZSBJUHY0L0lQdjYgaGVhZGVyIERTQ1AgZmllbGQgKGRpZmZlcmVudGlhdGVkIHNlcnZpY2VzIGNvZGVwb2ludCkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjQwOjM5Ljc4NjY2OTI4NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjM0ODI0NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWcgcmVxdWlyZW1lbnRzLCBicm9rZW4gZG93biBmcm9tIGEgbmV0d29ya2luZyBrZXJuZWwgcGVyc3BlY3RpdmU6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciB0aGlzIFBhdGNoKipcblxuQWxyaWdodCwgbGV0IG1lIHF1aWNrbHkgc3VtbWFyaXplIHdoYXQgSSdtIHNlZWluZyBoZXJlLiBCYXNlZCBvbiB0aGlzIHBhdGNoLCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gbmVlZHMgdG8gaW5jbHVkZSBhIGZldyBrZXkgY29tcG9uZW50cy4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBORVRGSUxURVJfWFRfVEFSR0VUX0NUYCBpcyBlbmFibGVkOyBjbGVhcmx5LCBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGEgY2VudHJhbCBwaWVjZS4gSSdsbCBuZWVkIGBORl9DT05OVFJBQ0tgIGFzIHRoZSBjb3JlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgZXNzZW50aWFsLiBXZSBoYXZlIGJvdGggSVB2NCBhbmQgSVB2NiBjb25zaWRlcmF0aW9ucywgc28gYElQX05GX1JBV2Agb3IgYElQNl9ORl9SQVdgLCBvciBwZXJoYXBzIGBORlRfQ09NUEFUYCBhcmUgaW1wb3J0YW50IGZvciBpbnRlZ3JhdGluZyB3aXRoIHRoZSByYXcgdGFibGUsIGFuZCBsZXQncyBub3QgZm9yZ2V0IGBORVRGSUxURVJfQURWQU5DRURgIGFzIGEgcHJlcmVxdWlzaXRlIGZvciBtb3JlIGFkdmFuY2VkIG5ldGZpbHRlciBmZWF0dXJlcy5cblxuSG1tLCB3YWl0IGEgbW9tZW50IHRob3VnaCwgdGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYHh0X0lETEVUSU1FUi5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBpZGxlIHRpbWVyIGZ1bmN0aW9uYWxpdHkgaXMgcHJvcGVybHkgY29uZmlndXJlZCB0b28sIHNvIGxldCBtZSBxdWlja2x5IGNyb3NzLWNoZWNrIGl0cyBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgYmVmb3JlIHByb2NlZWRpbmcuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IGltcGxpY2F0aW9ucyB0aGF0IG1heSBhcmlzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4NDMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjQwOjQ0LjAyMTQ5Njc4NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgxODM1NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9OTA0PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctOTE3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo5MTg6Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTkxOS1cXHR0cmlzdGF0ZSAgXFxcIklETEVUSU1FUiB0YXJnZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NDA6NDQuMTA5Njg4NjIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODQzNTQ0NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSYCByZWxpZXMgb24uIFVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgYnJlYWsgYW55dGhpbmcgd2hlbiBJIGVuYWJsZSwgZGlzYWJsZSwgb3IgbW9kaWZ5IHRoaXMgdGFyZ2V0LiBJdCdzIHRoZSBrZXJuZWwsIHNvIEkgaGF2ZSB0byBiZSBjYXJlZnVsLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IHRoZSByZWxldmFudCBtYWtlZmlsZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdsbCBuZWVkIHRvIHRyYWNlIHRocm91Z2ggdGhlIGJ1aWxkIHN5c3RlbSB0byBzZWUgd2hhdCBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIGFyZSBsaW5rZWQgd2l0aCBvciByZXF1aXJlZCBieSB0aGlzIGBJRExFVElNRVJgIHRhcmdldC4gQXJlIHRoZXJlIGFueSBvdGhlciBrZXJuZWwgZmVhdHVyZXMgdGhhdCByZWx5IG9uIHRoZSBpZGxlIHRpbWVyIGxvZ2ljLCBmb3IgZXhhbXBsZT8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlbiBiYWNrIG91dCBmcm9tIHRoZXJlLCBvciB1c2UgYG1ha2UgbWVudWNvbmZpZ2Agb3IgYGRlZmNvbmZpZ2AgdG8gY2hlY2suIEknbGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlIOKAkyBgeHRhYmxlc2AsIGBpcHRhYmxlc2AsIGFuZCBhbnkgb3RoZXIgdGFyZ2V0IG1vZHVsZXMgdGhhdCBtaWdodCBiZSB1c2VkIGFsb25nc2lkZSBpdC4gVGhlIGdvYWwgaXMgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHBsYWNlIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0sIGFuZCBhbnkgY29uZmxpY3RzIG9yIHByZXJlcXVpc2l0ZXMgaXQgbWlnaHQgaW50cm9kdWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTI4OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjQwOjQ3LjU5NDA0NzQ5OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkxNyxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkxNzpcXHRcXG4gOTE4OlxcdGNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUlxcbiA5MTk6XFx0XFx0dHJpc3RhdGUgIFxcXCJJRExFVElNRVIgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuIDkyMDpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiA5MjE6XFx0XFx0aGVscFxcbiA5MjI6XFx0XFxuIDkyMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGBJRExFVElNRVInIHRhcmdldC4gIEVhY2ggbWF0Y2hpbmcgcGFja2V0XFxuIDkyNDpcXHRcXHQgIHJlc2V0cyB0aGUgdGltZXIgYXNzb2NpYXRlZCB3aXRoIGxhYmVsIHNwZWNpZmllZCB3aGVuIHRoZSBydWxlIGlzXFxuIDkyNTpcXHRcXHQgIGFkZGVkLiAgV2hlbiB0aGUgdGltZXIgZXhwaXJlcywgaXQgdHJpZ2dlcnMgYSBzeXNmcyBub3RpZmljYXRpb24uXFxuIDkyNjpcXHRcXHQgIFRoZSByZW1haW5pbmcgdGltZSBmb3IgZXhwaXJhdGlvbiBjYW4gYmUgcmVhZCB2aWEgc3lzZnMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjQwOjQ3LjU5NDE5ODIyOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzYxNzU5MzE4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQYXRjaCBDaGFuZ2VzIC0gQSBGb2N1c2VkIFJldmlldyoqXG5cbk9rYXksIHNvIEkndmUganVzdCBnb25lIHRocm91Z2ggdGhpcyBkaWZmLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBvbiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGZ1bmN0aW9uYWwgcmVncmVzc2lvbnMgaW50cm9kdWNlZCwgcGFydGljdWxhcmx5IGluIHRoZSBuZXRmaWx0ZXIgY29kZS5cblxuSGVyZSdzIG15IGJyZWFrZG93bjpcblxuKiAgICoqYHh0X0lETEVUSU1FUi5jYCBDaGFuZ2U6KiogSG9uZXN0bHksIHRoZSBgeHRfSURMRVRJTUVSLmNgIGNoYW5nZSBpcyBtaW5vci4gTW92aW5nIGBtdXRleF91bmxvY2tgIGJlZm9yZSB0aGUgYHByX2luZm9fcmF0ZWxpbWl0ZWRgIGNhbGwgaXMgYSB2YWxpZCBvcHRpbWl6YXRpb27igJRyZWxlYXNpbmcgdGhlIGxvY2sgZWFybGllcuKAlGFuZCB3aGlsZSBpdCBtb2RpZmllcyBiZWhhdmlvdXIsIGl0IGlzIHVubGlrZWx5IHRvIGludHJvZHVjZSBzaWduaWZpY2FudCBuZXcgYmVoYXZpb3VyLlxuXG4qICAgKipgeHRfQ1QuY2AgLSBUaGUgUmVhbCBQcm9ibGVtOioqIFRoZSBgeHRfQ1QuY2AgY2hhbmdlIGltbWVkaWF0ZWx5IGNhdWdodCBteSBhdHRlbnRpb24uIEl0IG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBgaW5mby1cdTAwM2VoZWxwZXJgIGFuZCBgaW5mby1cdTAwM2V0aW1lb3V0YCBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGFyZ2V0LiBJdCAqbG9va3MqIGxpa2UgdGhlIGF1dGhvciB0cmllZCB0byBhZGRyZXNzIGEgcG90ZW50aWFsIGBzdHJubGVuYCBvdXQtb2YtYm91bmRzIHJlYWQsIGJ1dCBpbiBkb2luZyBzbywgdGhleSd2ZSBpbnRyb2R1Y2VkIGEgKipkZWZpbml0ZSBidWcqKi4gVGhlIGxvZ2ljIG5vdyAqKnNraXBzIHZhbGlkYXRpb24qKiB3aGVuIHRoZSBgaW5mby1cdTAwM2VoZWxwZXJgIGJ1ZmZlciBpcyAqbm90KiBudWxsLXRlcm1pbmF0ZWQuIFByZXZpb3VzbHksIGEgbm9uLW51bGwtdGVybWluYXRlZCBidWZmZXIgcmVzdWx0ZWQgaW4gYW4gZXJyb3IsIHNvIHRoZSBjaGFuZ2VzIGxlYWQgdG8gYW4gdW5kZWZpbmVkIHN0YXRlIHdoZXJlIHRoZXJlIGNvdWxkIGJlIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igb3RoZXIgcG90ZW50aWFsIGlzc3Vlcy4gVGhpcyBpcyBhIGNsZWFyIGNhc2UgZm9yIGZ1enppbmcuIFRoZSBrZXkgZnVuY3Rpb24gdG8gdGFyZ2V0IGlzIGB4dF9jdF90Z19jaGVja2AuXG5cbiogICAqKk90aGVyIENoYW5nZXM6IE1vc3RseSBMb2dnaW5nOioqIFRoZSByZW1haW5pbmcgY2hhbmdlc+KAlGluIGB4dF9jZ3JvdXAuY2AsIGB4dF9MT0cuY2AsIGB4dF9NQVNRVUVSQURFLmNgLCBgeHRfTkVUTUFQLmNgLCBgeHRfUkVESVJFQ1QuY2AsIGB4dF9TRUNNQVJLLmNgLCBgeHRfQ09OTlNFQ01BUksuY2AsIGBpcHRfcnBmaWx0ZXIuY2AsIGFuZCBgaXA2dF9ycGZpbHRlci5jYOKAlGFyZSBwcmVkb21pbmFudGx5IGFib3V0IGNoYW5naW5nIGBwcl9kZWJ1Z2AgY2FsbHMgdG8gYHByX2luZm9fcmF0ZWxpbWl0ZWRgIG9yIHNpbXBsaWZ5aW5nIGVycm9yIG1lc3NhZ2VzLiBUaGVzZSBhcmUgZ2VuZXJhbGx5IG9rYXksIG9yIGV2ZW4gaW1wcm92ZW1lbnRzIGZvciBtZXNzYWdlIGZsb29kIHJlZHVjdGlvbiwgYnV0IHRoZXkgZG9uJ3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIHJlZ3Jlc3Npb25zIHRoYXQgSSBjYW4gaW1tZWRpYXRlbHkgc2VlLlxuXG4qICAgKipBY3Rpb25hYmxlIE5leHQgU3RlcHM6KiogVGhlICpjcml0aWNhbCogdGhpbmcgdG8gZG8gbm93IGlzIHRvIGZvY3VzIG9uIHRoZSBgeHRfQ1QuY2AgY2hhbmdlLiBUaGlzIG5lZWRzIHRob3JvdWdoIGZ1enppbmcuIFRoZSBmb2N1cyBzaG91bGQgYmUgb24gY3JhZnRpbmcgaW5wdXRzIHdoZXJlIGBpbmZvLVx1MDAzZWhlbHBlcmAgaXMgKm5vdCogbnVsbC10ZXJtaW5hdGVkLiBXZSBuZWVkIHRvIGV4cGxvcmUgdGhlIGV4YWN0IGNvbnNlcXVlbmNlcyBvZiB0aGlzIGNoYW5nZSBpbiB0aGUga2VybmVs4oCZcyBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljLiBUaGlzIGlzIHdoZXJlIEknZCBzdGFydCBkaWdnaW5nIHdpdGggYSB0YXJnZXRlZCBmdXp6aW5nIGNhbXBhaWduLiBUaGUgY29uZmlncyBJIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byBhcmUgYE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGVpdGhlciBgSVBfTkZfUkFXYCBvciBgSVA2X05GX1JBV2AsIGFsb25nIHdpdGggYE5FVEZJTFRFUl9BRFZBTkNFRGAuXG5cbiIsIklucHV0VG9rZW5zIjoyOTc3MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo0MToxMS4yMTE4MDkyNDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzI3NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9ORl9SQVdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MjkxPWNvbmZpZyBJUF9ORl9UQVJHRVRfVFRMXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zMDAtIyByYXcgKyBzcGVjaWZpYyB0YXJnZXRzXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzAxOmNvbmZpZyBJUF9ORl9SQVdcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zMDItXFx0dHJpc3RhdGUgICdyYXcgdGFibGUgc3VwcG9ydCAocmVxdWlyZWQgZm9yIE5PVFJBQ0svVFJBQ0UpJ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo0MToxMS4yNTk1NDE3ODdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzNTk0MTAxNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBJUHY2IFJhdyBTb2NrZXQgRmlsdGVyaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBgSVA2X05GX1JBV2AgdGhpbmcgd29ya3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGp1bXAgaW50byBgS2NvbmZpZ2AuIFRoYXQncyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHdoZW4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBrZXJuZWwgZmVhdHVyZSdzIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSBgSVA2X05GX1JBV2AgaXMgZGVmaW5lZCwgd2hpY2ggZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHBlcmhhcHMgZXZlbiB3aGF0IGNvbnRleHQgc3Vycm91bmRzIGl0LiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCB3aGVyZSBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBJUHY2IHJhdyBzb2NrZXQgZmlsdGVyaW5nIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yay4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIHRlbGxzIG1lIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQyOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjQxOjIyLjYxODk1Njg2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYyMDQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVA2X05GX1JBV1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0yMzQ9Y29uZmlnIElQNl9ORl9NQU5HTEVcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTI0NC1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyNDU6Y29uZmlnIElQNl9ORl9SQVdcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yNDYtXFx0dHJpc3RhdGUgICdyYXcgdGFibGUgc3VwcG9ydCAocmVxdWlyZWQgZm9yIFRSQUNFKSdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NDE6MjIuNjY3NTgzNzA5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNjU2MDQxNDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYXNvbmluZyBUaHJvdWdoIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIFJlcXVpcmVtZW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gVGhlIGluaXRpYWwgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFuZCByZWxldmFudCBzeW1ib2xzIGZvciBhIHNwZWNpZmljIG5ldGZpbHRlciB0YXJnZXQsIGxpa2VseSByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRoZSBwcm9tcHQgc3BlY2lmaWVzIHRoZSBvdXRwdXQgZm9ybWF0IGZvciBjb25maWd1cmF0aW9ucywgc28gSSBuZWVkIHRvIGF2b2lkIHRoZSBgQ09ORklHX2AgcHJlZml4LlxuXG5GaXJzdCwgSSBpZGVudGlmaWVkIHRoZSBpbml0aWFsIHNldCBvZiBwb3RlbnRpYWxseSBuZWVkZWQgY29uZmlndXJhdGlvbnM6IGBORVRGSUxURVJfWFRfVEFSR0VUX0NUYCwgYE5GX0NPTk5UUkFDS2AsIGBJUF9ORl9SQVdgLCBhbmQgYE5FVEZJTFRFUl9BRFZBTkNFRGAuIFRoZSBwcm9tcHQncyByZXF1aXJlbWVudCBpcyBjbGVhcjoganVzdCB0aGUgYmFyZSBuYW1lcy5cblxuTm93LCBsZXQncyBkaWcgZGVlcGVyIHRvIHNlZSBpZiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbGF0ZWQgdG8gYHh0X0NUYC4gVXBvbiBleGFtaW5hdGlvbiwgSSBzZWUgdGhlIGB4dF9JRExFVElNRVIuY2AgZmlsZSBpcyBhbHNvIHRvdWNoZWQgaW4gdGhlIHBhdGNoLCBzbyBgTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVJgIHNob3VsZCBhbHNvIGJlIGluY2x1ZGVkIGJlY2F1c2UgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5OZXh0LCB0aGUgcHJvbXB0IHdhbnRzIHN5bWJvbHMuIFRoZSBmdW5jdGlvbnMgdGhhdCBzZWVtIGNlbnRyYWwgdG8gdGhlIHRhcmdldCdzIG9wZXJhdGlvbiBhcmUgYHh0X2N0X3RnX2NoZWNrYCBhbmQgYGlkbGV0aW1lcl90Z19jaGVja2VudHJ5YC4gSG93ZXZlciwgdGhlIHByb21wdCBlbXBoYXNpemVzIHRoZSBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnkgcG9pbnRzLiBUaGF0IGdpdmVzIG1lIHBhdXNlLlxuXG5VcG9uIGNsb3NlciBpbnNwZWN0aW9uLCBJIGNvbmZpcm0gdGhhdCBib3RoIGB4dF9jdF90Z19jaGVja2AgaXMgYWN0dWFsbHkgc3RhdGljLiBIb3dldmVyLCBpdCdzIGNhbGxlZCBieSBgeHRfY3RfdGdfY2hlY2tfdjBgLCBgeHRfY3RfdGdfY2hlY2tfdjFgLCBgeHRfY3RfdGdfY2hlY2tfdjJgLiBUaGVzZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSByZWdpc3RlcmVkIGluIGB4dF9jdF90Z19yZWdgIGFycmF5LCB3aGljaCBpcyBwYXNzZWQgdG8gYHh0X3JlZ2lzdGVyX3RhcmdldHNgLiBUaGUgZW50cnkgcG9pbnQgZnJvbSB1c2Vyc3BhY2UgaXMgYHh0X2NoZWNrX3RhcmdldGAsIGJ1dCBgeHRfY3RfdGdfY2hlY2tgIGlzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbi4gU2luY2UgdGhlIGZ1bmN0aW9uIGlzIG5vdCBpbmxpbmVkLCBJJ2xsIHByb3ZpZGUgYHh0X2N0X3RnX2NoZWNrYCBmb3Igbm93IGFuZCBzZWUgaWYgdGhlIGZ1enplciBjYW4gcmVzb2x2ZSB0aGUgc3RhdGljIGZ1bmN0aW9ucy5cblxuVGhlIHBhdGNoJ3MgZnVuY3Rpb25hbCBjaGFuZ2VzIGludm9sdmUgY2hhbmdlcyB0byB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYGluZm8tXHUwMDNlaGVscGVyYCBhbmQgYGluZm8tXHUwMDNldGltZW91dGAgYW5kIG1vZGlmeWluZyBgeHRfSURMRVRJTUVSLmNgIHRvIHJlbGVhc2UgYSBtdXRleCwgd2hpY2ggaW1wYWN0cyB0aGUgZXhlY3V0aW9uIGZsb3cuIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24sIG1ha2luZyB0aGVtIHJlbGV2YW50IHRvIHRoZSBvdmVyYWxsIHRhcmdldCBiZWhhdmlvci5cblxuVGhlcmVmb3JlLCBteSBmaW5hbCBsaXN0IGlzOlxuXG5Db25maWdzOlxuYE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RgXG5gTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVJgXG5gTkZfQ09OTlRSQUNLYFxuYElQX05GX1JBV2BcbmBORVRGSUxURVJfQURWQU5DRURgXG5cblN5bWJvbHM6XG5geHRfY3RfdGdfY2hlY2tgXG5cbkxldCdzIHByb2NlZWQgd2l0aCB0aGVzZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzczOSwiT3V0cHV0VG9rZW5zIjoyMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjQxOjM2LjMyMzYyOTIxMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNjc3Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX0NUXCIsXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUlwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJJUF9ORl9SQVdcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInh0X2N0X3RnX2NoZWNrXCIsXG4gICAgXCJpZGxldGltZXJfdGdfY2hlY2tlbnRyeVwiLFxuICAgIFwiaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgeHRfQ1QuY2AgdG8gY2hhbmdlIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgaW5mby1cXHUwMDNlaGVscGVyYCBhbmQgYGluZm8tXFx1MDAzZXRpbWVvdXRgLiBJZiB0aGV5IGFyZSBub3QgbnVsbC10ZXJtaW5hdGVkLCB0aGUgbmV3IGNvZGUgc2tpcHMgc2V0dGluZyB0aGVtIGluc3RlYWQgb2YgcmV0dXJuaW5nIGAtRU5BTUVUT09MT05HYCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdGFyZ2V0IGluaXRpYWxpemF0aW9uIGxvZ2ljLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgeHRfSURMRVRJTUVSLmNgIHRvIHJlbGVhc2UgYSBtdXRleCBiZWZvcmUgbG9nZ2luZywgd2hpY2ggaXMgYSBtaW5vciBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlc2UgY2hhbmdlcyBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBjb25maWd1cmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIklQX05GX1JBV1wiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieHRfY3RfdGdfY2hlY2tcIixcbiAgICBcImlkbGV0aW1lcl90Z19jaGVja2VudHJ5XCIsXG4gICAgXCJpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB4dF9DVC5jYCB0byBjaGFuZ2UgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBpbmZvLVxcdTAwM2VoZWxwZXJgIGFuZCBgaW5mby1cXHUwMDNldGltZW91dGAuIElmIHRoZXkgYXJlIG5vdCBudWxsLXRlcm1pbmF0ZWQsIHRoZSBuZXcgY29kZSBza2lwcyBzZXR0aW5nIHRoZW0gaW5zdGVhZCBvZiByZXR1cm5pbmcgYC1FTkFNRVRPT0xPTkdgLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB0YXJnZXQgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGB4dF9JRExFVElNRVIuY2AgdG8gcmVsZWFzZSBhIG11dGV4IGJlZm9yZSBsb2dnaW5nLCB3aGljaCBpcyBhIG1pbm9yIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjQxOjM2LjQwNTMxNDQ2OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI1MTY5NzQ0NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo0MTozNi40MDU4NjE2MDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzI1MTY0MjI5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgcmVtb3ZlcyBgcHJfZGVidWdgIHN0YXRlbWVudHMgYW5kIGNvbnZlcnRzIHNvbWUgdG8gYHByX2luZm9fcmF0ZWxpbWl0ZWRgIGFjcm9zcyB2YXJpb3VzIG5ldGZpbHRlciBtb2R1bGVzLiBUaGVyZSBpcyBhbHNvIGEgbG9naWNhbCBjaGFuZ2UgaW4gYHh0X0NULmNgIHJlZ2FyZGluZyB0aGUgdmFsaWRhdGlvbiBvZiBgaW5mby1cXHUwMDNlaGVscGVyYCBhbmQgYGluZm8tXFx1MDAzZXRpbWVvdXRgIHN0cmluZ3MsIHdoaWNoIGludHJvZHVjZXMgZGVhZCBjb2RlIGFuZCBhbHRlcnMgdGhlIGVycm9yIGhhbmRsaW5nIGZvciBub24tbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MuIEhvd2V2ZXIsIHRoZSBgaW5mb2Agc3RydWN0dXJlIChgcGFyLVxcdTAwM2V0YXJnaW5mb2ApIGlzIHBvcHVsYXRlZCB2aWEgYGNvcHlfZnJvbV91c2VyYCB3aXRoIGRhdGEgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUga2VybmVsJ3MgcGVyc3BlY3RpdmUuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWRkIGNvbnRyb2wgZmxvdyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgdGhlIGxvZ2ljIGZsYXcgaW4gYHh0X0NULmNgKSBhcmUgZnVuY3Rpb25hbCBhbmQgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTMzOGFlYzU1Y2UxZWQwZmVmMDE4YjBjODdhNmFlMzQxYjZhNmE3N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE0OjM5OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jXG5pbmRleCAxNjFiYTQxMmNiMDhiLi43MTMxZjI5N2FkYTJlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FoLmNcbkBAIC0xOSwxMiArMTksNyBAQCBNT0RVTEVfREVTQ1JJUFRJT04oXCJYdGFibGVzOiBJUHY0IElQc2VjLUFIIFNQSSBtYXRjaFwiKTtcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpXG4ge1xuLVx0Ym9vbCByO1xuLVx0cHJfZGVidWcoXCJzcGlfbWF0Y2g6JWMgMHgleCBcdTAwM2M9IDB4JXggXHUwMDNjPSAweCV4XFxuXCIsXG4tXHRcdCBpbnZlcnQgPyAnIScgOiAnICcsIG1pbiwgc3BpLCBtYXgpO1xuLVx0ciA9IChzcGkgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IHNwaSBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4tXHRwcl9kZWJ1ZyhcIiByZXN1bHQgJXNcXG5cIiwgciA/IFwiUEFTU1wiIDogXCJGQUlMRURcIik7XG4tXHRyZXR1cm4gcjtcbitcdHJldHVybiAoc3BpIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBzcGkgXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBhaF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG5AQCAtNDIsNyArMzcsNiBAQCBzdGF0aWMgYm9vbCBhaF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdC8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXG4gXHRcdCAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC5cbiBcdFx0ICovXG4tXHRcdHByX2RlYnVnKFwiRHJvcHBpbmcgZXZpbCBBSCB0aW55Z3JhbS5cXG5cIik7XG4gXHRcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuQEAgLTU4LDcgKzUyLDcgQEAgc3RhdGljIGludCBhaF9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcbiBcdC8qIE11c3Qgc3BlY2lmeSBubyB1bmtub3duIGludmZsYWdzICovXG4gXHRpZiAoYWhpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiB+SVBUX0FIX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuY1xuaW5kZXggNmQ5YmY1MTA2ODY4NC4uMmMzOGZkNjYyNGFhMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuY1xuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ycGZpbHRlci5jXG5AQCAtOTUsOCArOTUsNyBAQCBzdGF0aWMgaW50IHJwZmlsdGVyX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFxuIFx0aWYgKHN0cmNtcChwYXItXHUwMDNldGFibGUsIFwibWFuZ2xlXCIpICE9IDAgXHUwMDI2XHUwMDI2XG4gXHQgICAgc3RyY21wKHBhci1cdTAwM2V0YWJsZSwgXCJyYXdcIikgIT0gMCkge1xuLVx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwib25seSB2YWxpZCBpbiBcXCdyYXdcXCcgb3IgXFwnbWFuZ2xlXFwnIHRhYmxlLCBub3QgXFwnJXNcXCdcXG5cIixcbi1cdFx0XHRcdCAgICBwYXItXHUwMDNldGFibGUpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwib25seSB2YWxpZCBpbiBcXCdyYXdcXCcgb3IgXFwnbWFuZ2xlXFwnIHRhYmxlXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguY1xuaW5kZXggMTI1ODc4M2VkODc2Mi4uZGFiN2RiYzZhNjc1YyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmNcbisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmNcbkBAIC0yNCwxMyArMjQsNyBAQCBNT0RVTEVfQVVUSE9SKFwiQW5kcmFzIEtpcy1TemFibyBcdTAwM2NraXN6YUBzY2guYm1lLmh1XHUwMDNlXCIpO1xuIHN0YXRpYyBpbmxpbmUgYm9vbFxuIHNwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBib29sIGludmVydClcbiB7XG4tXHRib29sIHI7XG4tXG4tXHRwcl9kZWJ1ZyhcInNwaV9tYXRjaDolYyAweCV4IFx1MDAzYz0gMHgleCBcdTAwM2M9IDB4JXhcXG5cIixcbi1cdFx0IGludmVydCA/ICchJyA6ICcgJywgbWluLCBzcGksIG1heCk7XG4tXHRyID0gKHNwaSBcdTAwM2U9IG1pbiBcdTAwMjZcdTAwMjYgc3BpIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbi1cdHByX2RlYnVnKFwiIHJlc3VsdCAlc1xcblwiLCByID8gXCJQQVNTXCIgOiBcIkZBSUxFRFwiKTtcbi1cdHJldHVybiByO1xuK1x0cmV0dXJuIChzcGkgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IHNwaSBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4gfVxuIFxuIHN0YXRpYyBib29sIGFoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG5AQCAtNjIsMjMgKzU2LDYgQEAgc3RhdGljIGJvb2wgYWhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuLVx0cHJfZGVidWcoXCJJUHY2IEFIIExFTiAldSAldSBcIiwgaGRybGVuLCBhaC1cdTAwM2VoZHJsZW4pO1xuLVx0cHJfZGVidWcoXCJSRVMgJTA0WCBcIiwgYWgtXHUwMDNlcmVzZXJ2ZWQpO1xuLVx0cHJfZGVidWcoXCJTUEkgJXUgJTA4WFxcblwiLCBudG9obChhaC1cdTAwM2VzcGkpLCBudG9obChhaC1cdTAwM2VzcGkpKTtcbi1cbi1cdHByX2RlYnVnKFwiSVB2NiBBSCBzcGkgJTAyWCBcIixcbi1cdFx0IHNwaV9tYXRjaChhaGluZm8tXHUwMDNlc3Bpc1swXSwgYWhpbmZvLVx1MDAzZXNwaXNbMV0sXG4tXHRcdFx0ICAgbnRvaGwoYWgtXHUwMDNlc3BpKSxcbi1cdFx0XHQgICAhIShhaGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IElQNlRfQUhfSU5WX1NQSSkpKTtcbi1cdHByX2RlYnVnKFwibGVuICUwMlggJTA0WCAlMDJYIFwiLFxuLVx0XHQgYWhpbmZvLVx1MDAzZWhkcmxlbiwgaGRybGVuLFxuLVx0XHQgKCFhaGluZm8tXHUwMDNlaGRybGVuIHx8XG4tXHRcdCAgKGFoaW5mby1cdTAwM2VoZHJsZW4gPT0gaGRybGVuKSBeXG4tXHRcdCAgISEoYWhpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiBJUDZUX0FIX0lOVl9MRU4pKSk7XG4tXHRwcl9kZWJ1ZyhcInJlcyAlMDJYICUwNFggJTAyWFxcblwiLFxuLVx0XHQgYWhpbmZvLVx1MDAzZWhkcnJlcywgYWgtXHUwMDNlcmVzZXJ2ZWQsXG4tXHRcdCAhKGFoaW5mby1cdTAwM2VoZHJyZXMgXHUwMDI2XHUwMDI2IGFoLVx1MDAzZXJlc2VydmVkKSk7XG4tXG4gXHRyZXR1cm4gc3BpX21hdGNoKGFoaW5mby1cdTAwM2VzcGlzWzBdLCBhaGluZm8tXHUwMDNlc3Bpc1sxXSxcbiBcdFx0XHQgIG50b2hsKGFoLVx1MDAzZXNwaSksXG4gXHRcdFx0ICAhIShhaGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IElQNlRfQUhfSU5WX1NQSSkpIFx1MDAyNlx1MDAyNlxuQEAgLTkzLDcgKzcwLDcgQEAgc3RhdGljIGludCBhaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3QgaXA2dF9haCAqYWhpbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiBcbiBcdGlmIChhaGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IH5JUDZUX0FIX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuY1xuaW5kZXggM2FhZDY0MzkzODZiMS4uZjVmM2NmYjg3MDRjZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuY1xuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jXG5AQCAtMjMsMTIgKzIzLDcgQEAgTU9EVUxFX0FVVEhPUihcIkFuZHJhcyBLaXMtU3phYm8gXHUwMDNja2lzemFAc2NoLmJtZS5odVx1MDAzZVwiKTtcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBpZF9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3QgaWQsIGJvb2wgaW52ZXJ0KVxuIHtcbi1cdGJvb2wgcjtcbi1cdHByX2RlYnVnKFwiaWRfbWF0Y2g6JWMgMHgleCBcdTAwM2M9IDB4JXggXHUwMDNjPSAweCV4XFxuXCIsIGludmVydCA/ICchJyA6ICcgJyxcbi1cdFx0IG1pbiwgaWQsIG1heCk7XG4tXHRyID0gKGlkIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBpZCBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4tXHRwcl9kZWJ1ZyhcIiByZXN1bHQgJXNcXG5cIiwgciA/IFwiUEFTU1wiIDogXCJGQUlMRURcIik7XG4tXHRyZXR1cm4gcjtcbitcdHJldHVybiAoaWQgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IGlkIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbiB9XG4gXG4gc3RhdGljIGJvb2xcbkBAIC01MywzOCArNDgsNiBAQCBmcmFnX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbi1cdHByX2RlYnVnKFwiSU5GTyAlMDRYIFwiLCBmaC1cdTAwM2VmcmFnX29mZik7XG4tXHRwcl9kZWJ1ZyhcIk9GRlNFVCAlMDRYIFwiLCBudG9ocyhmaC1cdTAwM2VmcmFnX29mZikgXHUwMDI2IH4weDcpO1xuLVx0cHJfZGVidWcoXCJSRVMgJTAyWCAlMDRYXCIsIGZoLVx1MDAzZXJlc2VydmVkLCBudG9ocyhmaC1cdTAwM2VmcmFnX29mZikgXHUwMDI2IDB4Nik7XG4tXHRwcl9kZWJ1ZyhcIk1GICUwNFggXCIsIGZoLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUDZfTUYpKTtcbi1cdHByX2RlYnVnKFwiSUQgJXUgJTA4WFxcblwiLCBudG9obChmaC1cdTAwM2VpZGVudGlmaWNhdGlvbiksXG4tXHRcdCBudG9obChmaC1cdTAwM2VpZGVudGlmaWNhdGlvbikpO1xuLVxuLVx0cHJfZGVidWcoXCJJUHY2IEZSQUcgaWQgJTAyWCBcIixcbi1cdFx0IGlkX21hdGNoKGZyYWdpbmZvLVx1MDAzZWlkc1swXSwgZnJhZ2luZm8tXHUwMDNlaWRzWzFdLFxuLVx0XHRcdCAgbnRvaGwoZmgtXHUwMDNlaWRlbnRpZmljYXRpb24pLFxuLVx0XHRcdCAgISEoZnJhZ2luZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19JTlZfSURTKSkpO1xuLVx0cHJfZGVidWcoXCJyZXMgJTAyWCAlMDJYJTA0WCAlMDJYIFwiLFxuLVx0XHQgZnJhZ2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19SRVMsIGZoLVx1MDAzZXJlc2VydmVkLFxuLVx0XHQgbnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiAweDYsXG4tXHRcdCAhKChmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX1JFUykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgIChmaC1cdTAwM2VyZXNlcnZlZCB8fCAobnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiAweDA2KSkpKTtcbi1cdHByX2RlYnVnKFwiZmlyc3QgJTAyWCAlMDJYICUwMlggXCIsXG4tXHRcdCBmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX0ZTVCxcbi1cdFx0IG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgfjB4Nyxcbi1cdFx0ICEoKGZyYWdpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZUX0ZSQUdfRlNUKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgKG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgfjB4NykpKTtcbi1cdHByX2RlYnVnKFwibWYgJTAyWCAlMDJYICUwMlggXCIsXG4tXHRcdCBmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX01GLFxuLVx0XHQgbnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiBJUDZfTUYsXG4tXHRcdCAhKChmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX01GKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgISgobnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiBJUDZfTUYpKSkpO1xuLVx0cHJfZGVidWcoXCJsYXN0ICUwMlggJTAyWCAlMDJYXFxuXCIsXG4tXHRcdCBmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX05NRixcbi1cdFx0IG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgSVA2X01GLFxuLVx0XHQgISgoZnJhZ2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19OTUYpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAobnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiBJUDZfTUYpKSk7XG4tXG4gXHRyZXR1cm4gaWRfbWF0Y2goZnJhZ2luZm8tXHUwMDNlaWRzWzBdLCBmcmFnaW5mby1cdTAwM2VpZHNbMV0sXG4gXHRcdFx0IG50b2hsKGZoLVx1MDAzZWlkZW50aWZpY2F0aW9uKSxcbiBcdFx0XHQgISEoZnJhZ2luZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19JTlZfSURTKSkgXHUwMDI2XHUwMDI2XG5AQCAtMTAzLDcgKzY2LDcgQEAgc3RhdGljIGludCBmcmFnX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdGNvbnN0IHN0cnVjdCBpcDZ0X2ZyYWcgKmZyYWdpbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiBcbiBcdGlmIChmcmFnaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgfklQNlRfRlJBR19JTlZfTUFTSykge1xuLVx0XHRwcl9kZWJ1ZyhcInVua25vd24gZmxhZ3MgJVhcXG5cIiwgZnJhZ2luZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBmcmFnaW5mby1cdTAwM2VpbnZmbGFncyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xuaW5kZXggNmQxYTVkMjAyNmE2Ny4uMzdjMjA3ZDMxNTJhNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xuQEAgLTc5LDE0ICs3OSw2IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4tXHRwcl9kZWJ1ZyhcIklQdjYgT1BUUyBMRU4gJXUgJXUgXCIsIGhkcmxlbiwgb2gtXHUwMDNlaGRybGVuKTtcbi1cbi1cdHByX2RlYnVnKFwibGVuICUwMlggJTA0WCAlMDJYIFwiLFxuLVx0XHQgb3B0aW5mby1cdTAwM2VoZHJsZW4sIGhkcmxlbixcbi1cdFx0ICghKG9wdGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfT1BUU19MRU4pIHx8XG4tXHRcdCAgKChvcHRpbmZvLVx1MDAzZWhkcmxlbiA9PSBoZHJsZW4pIF5cbi1cdFx0ICAgISEob3B0aW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgSVA2VF9PUFRTX0lOVl9MRU4pKSkpO1xuLVxuIFx0cmV0ID0gKCEob3B0aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9PUFRTX0xFTikgfHxcbiBcdCAgICAgICAoKG9wdGluZm8tXHUwMDNlaGRybGVuID09IGhkcmxlbikgXlxuIFx0XHQhIShvcHRpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiBJUDZUX09QVFNfSU5WX0xFTikpKTtcbkBAIC05Niw4ICs4OCw2IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0aWYgKCEob3B0aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9PUFRTX09QVFMpKSB7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9IGVsc2Uge1xuLVx0XHRwcl9kZWJ1ZyhcIlN0cmljdCBcIik7XG4tXHRcdHByX2RlYnVnKFwiIyVkIFwiLCBvcHRpbmZvLVx1MDAzZW9wdHNucik7XG4gXHRcdGZvciAodGVtcCA9IDA7IHRlbXAgXHUwMDNjIG9wdGluZm8tXHUwMDNlb3B0c25yOyB0ZW1wKyspIHtcbiBcdFx0XHQvKiB0eXBlIGZpZWxkIGV4aXN0cyA/ICovXG4gXHRcdFx0aWYgKGhkcmxlbiBcdTAwM2MgMSlcbkBAIC0xMDgsMTMgKzk4LDkgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0XHRicmVhaztcbiBcbiBcdFx0XHQvKiBUeXBlIGNoZWNrICovXG4tXHRcdFx0aWYgKCp0cCAhPSAob3B0aW5mby1cdTAwM2VvcHRzW3RlbXBdIFx1MDAyNiAweEZGMDApIFx1MDAzZVx1MDAzZSA4KSB7XG4tXHRcdFx0XHRwcl9kZWJ1ZyhcIlRiYWQgJTAyWCAlMDJYXFxuXCIsICp0cCxcbi1cdFx0XHRcdFx0IChvcHRpbmZvLVx1MDAzZW9wdHNbdGVtcF0gXHUwMDI2IDB4RkYwMCkgXHUwMDNlXHUwMDNlIDgpO1xuK1x0XHRcdGlmICgqdHAgIT0gKG9wdGluZm8tXHUwMDNlb3B0c1t0ZW1wXSBcdTAwMjYgMHhGRjAwKSBcdTAwM2VcdTAwM2UgOClcbiBcdFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0cHJfZGVidWcoXCJUb2sgXCIpO1xuLVx0XHRcdH1cbitcbiBcdFx0XHQvKiBMZW5ndGggY2hlY2sgKi9cbiBcdFx0XHRpZiAoKnRwKSB7XG4gXHRcdFx0XHR1MTYgc3BlY19sZW47XG5AQCAtMTI5LDI2ICsxMTUsMTggQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0c3BlY19sZW4gPSBvcHRpbmZvLVx1MDAzZW9wdHNbdGVtcF0gXHUwMDI2IDB4MDBGRjtcbiBcbi1cdFx0XHRcdGlmIChzcGVjX2xlbiAhPSAweDAwRkYgXHUwMDI2XHUwMDI2IHNwZWNfbGVuICE9ICpscCkge1xuLVx0XHRcdFx0XHRwcl9kZWJ1ZyhcIkxiYWQgJTAyWCAlMDRYXFxuXCIsICpscCxcbi1cdFx0XHRcdFx0XHQgc3BlY19sZW4pO1xuK1x0XHRcdFx0aWYgKHNwZWNfbGVuICE9IDB4MDBGRiBcdTAwMjZcdTAwMjYgc3BlY19sZW4gIT0gKmxwKVxuIFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRwcl9kZWJ1ZyhcIkxvayBcIik7XG4rXG4gXHRcdFx0XHRvcHRsZW4gPSAqbHAgKyAyO1xuIFx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRwcl9kZWJ1ZyhcIlBhZDFcXG5cIik7XG4gXHRcdFx0XHRvcHRsZW4gPSAxO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHQvKiBTdGVwIHRvIHRoZSBuZXh0ICovXG4tXHRcdFx0cHJfZGVidWcoXCJsZW4lMDRYXFxuXCIsIG9wdGxlbik7XG4tXG4gXHRcdFx0aWYgKChwdHIgXHUwMDNlIHNrYi1cdTAwM2VsZW4gLSBvcHRsZW4gfHwgaGRybGVuIFx1MDAzYyBvcHRsZW4pIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICB0ZW1wIFx1MDAzYyBvcHRpbmZvLVx1MDAzZW9wdHNuciAtIDEpIHtcbi1cdFx0XHRcdHByX2RlYnVnKFwibmV3IHBvaW50ZXIgaXMgdG9vIGxhcmdlIVxcblwiKTtcbitcdFx0XHQgICAgdGVtcCBcdTAwM2Mgb3B0aW5mby1cdTAwM2VvcHRzbnIgLSAxKVxuIFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuK1xuIFx0XHRcdHB0ciArPSBvcHRsZW47XG4gXHRcdFx0aGRybGVuIC09IG9wdGxlbjtcbiBcdFx0fVxuQEAgLTE2NiwxNiArMTQ0LDE2IEBAIHN0YXRpYyBpbnQgaGJoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdGNvbnN0IHN0cnVjdCBpcDZ0X29wdHMgKm9wdHNpbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiBcbiBcdGlmIChvcHRzaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgfklQNlRfT1BUU19JTlZfTUFTSykge1xuLVx0XHRwcl9kZWJ1ZyhcInVua25vd24gZmxhZ3MgJVhcXG5cIiwgb3B0c2luZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBvcHRzaW5mby1cdTAwM2VpbnZmbGFncyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKG9wdHNpbmZvLVx1MDAzZW9wdHNuciBcdTAwM2UgSVA2VF9PUFRTX09QVFNOUikge1xuLVx0XHRwcl9kZWJ1ZyhcInRvbyBtYW55IHN1cHBvcnRlZCBvcHRzIHNwZWNpZmllZFxcblwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcInRvbyBtYW55IHN1cHBvcnRlZCBvcHRzIHNwZWNpZmllZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRpZiAob3B0c2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfT1BUU19OU1RSSUNUKSB7XG4tXHRcdHByX2RlYnVnKFwiTm90IHN0cmljdCAtIG5vdCBpbXBsZW1lbnRlZFwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcIk5vdCBzdHJpY3QgLSBub3QgaW1wbGVtZW50ZWRcIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X21oLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9taC5jXG5pbmRleCBmZDQ5MmI2OWFjYmMwLi5iYTZkY2M3NzkxYTA5IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbWguY1xuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbWguY1xuQEAgLTQyLDE0ICs0MiwxMSBAQCBzdGF0aWMgYm9vbCBtaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0aWYgKG1oID09IE5VTEwpIHtcbiBcdFx0LyogV2UndmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2VcbiBcdFx0ICAgY2FuJ3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLiAqL1xuLVx0XHRwcl9kZWJ1ZyhcIkRyb3BwaW5nIGV2aWwgTUggdGlueWdyYW0uXFxuXCIpO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdGlmIChtaC1cdTAwM2VpcDZtaF9wcm90byAhPSBJUFBST1RPX05PTkUpIHtcbi1cdFx0cHJfZGVidWcoXCJEcm9wcGluZyBpbnZhbGlkIE1IIFBheWxvYWQgUHJvdG86ICV1XFxuXCIsXG4tXHRcdFx0IG1oLVx1MDAzZWlwNm1oX3Byb3RvKTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnBmaWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmNcbmluZGV4IDY3Yzg3YTg4Y2RlNGYuLmFmOGQxMGQ0OWRlODEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jXG5AQCAtMTE4LDcgKzExOCw3IEBAIHN0YXRpYyBpbnQgcnBmaWx0ZXJfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXG4gXHRpZiAoc3RyY21wKHBhci1cdTAwM2V0YWJsZSwgXCJtYW5nbGVcIikgIT0gMCBcdTAwMjZcdTAwMjZcbiBcdCAgICBzdHJjbXAocGFyLVx1MDAzZXRhYmxlLCBcInJhd1wiKSAhPSAwKSB7XG4tXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJvbmx5IHZhbGlkIGluIFxcJ3Jhd1xcJyBvciBcXCdtYW5nbGVcXCcgdGFibGUsIG5vdCBcXCclc1xcJ1xcblwiLFxuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwib25seSB2YWxpZCBpbiBcXCdyYXdcXCcgb3IgXFwnbWFuZ2xlXFwnIHRhYmxlXFxuXCIsXG4gXHRcdFx0XHQgICAgcGFyLVx1MDAzZXRhYmxlKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmNcbmluZGV4IDI3OGI1Mjc1MmYzNjQuLjBjMDFhYzI3NDZkMWYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jXG5AQCAtMTU1LDE4ICsxNTUsMTggQEAgc3RhdGljIGludCBydF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3QgaXA2dF9ydCAqcnRpbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiBcbiBcdGlmIChydGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IH5JUDZUX1JUX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBydGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBydGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdGlmIChydGluZm8tXHUwMDNlYWRkcm5yIFx1MDAzZSBJUDZUX1JUX0hPUFMpIHtcbi1cdFx0cHJfZGVidWcoXCJ0b28gbWFueSBhZGRyZXNzZXMgc3BlY2lmaWVkXFxuXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidG9vIG1hbnkgYWRkcmVzc2VzIHNwZWNpZmllZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRpZiAoKHJ0aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgKElQNlRfUlRfUkVTIHwgSVA2VF9SVF9GU1RfTUFTSykpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICghKHJ0aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9SVF9UWVApIHx8XG4gXHQgICAgIChydGluZm8tXHUwMDNlcnRfdHlwZSAhPSAwKSB8fFxuIFx0ICAgICAocnRpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiBJUDZUX1JUX0lOVl9UWVApKSkge1xuLVx0XHRwcl9kZWJ1ZyhcImAtLXJ0LXR5cGUgMCcgcmVxdWlyZWQgYmVmb3JlIGAtLXJ0LTAtKidcIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJgLS1ydC10eXBlIDAnIHJlcXVpcmVkIGJlZm9yZSBgLS1ydC0wLSonXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmNcbmluZGV4IDE0OTRiM2VlMzBlMTEuLjRlNDQzNmE5MTA0YjQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuY1xuQEAgLTg3LDggKzg3LDcgQEAgc3RhdGljIGludCBjb25uc2VjbWFya190Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbiBcbiBcdGlmIChzdHJjbXAocGFyLVx1MDAzZXRhYmxlLCBcIm1hbmdsZVwiKSAhPSAwIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHN0cmNtcChwYXItXHUwMDNldGFibGUsIFwic2VjdXJpdHlcIikgIT0gMCkge1xuLVx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwib25seSB2YWxpZCBpbiBcXCdtYW5nbGVcXCcgb3IgXFwnc2VjdXJpdHlcXCcgdGFibGUsIG5vdCBcXCclc1xcJ1xcblwiLFxuLVx0XHRcdFx0ICAgIHBhci1cdTAwM2V0YWJsZSk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJvbmx5IHZhbGlkIGluIFxcJ21hbmdsZVxcJyBvciBcXCdzZWN1cml0eVxcJyB0YWJsZVxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DVC5jIGIvbmV0L25ldGZpbHRlci94dF9DVC5jXG5pbmRleCBlNzg2NjBkZmRmNGI2Li45MTMyNjAxNGFkZTFjIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9DVC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0NULmNcbkBAIC0xOTUsNyArMTk1LDggQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcixcbiBcdFx0Z290byBlcnIzO1xuIFx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNlaGVscGVyWzBdKSB7XG4rXHRpZiAoaW5mby1cdTAwM2VoZWxwZXJbMF0gXHUwMDI2XHUwMDI2XG4rXHQgICAgc3RybmxlbihpbmZvLVx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiBcdFx0aWYgKHN0cm5sZW4oaW5mby1cdTAwM2VoZWxwZXIsIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpID09IHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiBcdFx0XHRyZXQgPSAtRU5BTUVUT09MT05HO1xuIFx0XHRcdGdvdG8gZXJyMztcbkBAIC0yMDYsNyArMjA3LDggQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcixcbiBcdFx0XHRnb3RvIGVycjM7XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0WzBdKSB7XG4rXHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0WzBdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHN0cm5sZW4oaW5mby1cdTAwM2V0aW1lb3V0LCBzaXplb2YoaW5mby1cdTAwM2V0aW1lb3V0KSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gXHRcdGlmIChzdHJubGVuKGluZm8tXHUwMDNldGltZW91dCwgc2l6ZW9mKGluZm8tXHUwMDNldGltZW91dCkpID09IHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gXHRcdFx0cmV0ID0gLUVOQU1FVE9PTE9ORztcbiBcdFx0XHRnb3RvIGVycjQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcbmluZGV4IGJmY2YyZDQ0ZTkzZGIuLjE1YjY5OGVhOThhYTYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG5AQCAtMTAyLDggKzEwMiw2IEBAIHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19leHBpcmVkKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIHtcbiBcdHN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyID0gdGltZXJfY29udGFpbmVyX29mKHRpbWVyLCB0LCB0aW1lcik7XG4gXG4tXHRwcl9kZWJ1ZyhcInRpbWVyICVzIGV4cGlyZWRcXG5cIiwgdGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpO1xuLVxuIFx0c2NoZWR1bGVfd29yayhcdTAwMjZ0aW1lci1cdTAwM2V3b3JrKTtcbiB9XG4gXG5AQCAtMTExLDcgKzEwOSw2IEBAIHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19hbGFybXByb2Moc3RydWN0IGFsYXJtICphbGFybSwga3RpbWVfdCBub3cpXG4ge1xuIFx0c3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXIgPSBhbGFybS1cdTAwM2VkYXRhO1xuIFxuLVx0cHJfZGVidWcoXCJhbGFybSAlcyBleHBpcmVkXFxuXCIsIHRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lKTtcbiBcdHNjaGVkdWxlX3dvcmsoXHUwMDI2dGltZXItXHUwMDNld29yayk7XG4gfVxuIFxuQEAgLTE3MSw3ICsxNjgsNyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGUoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKVxuIFxuIFx0cmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0cHJfZGVidWcoXCJjb3VsZG4ndCBhZGQgZmlsZSB0byBzeXNmc1wiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcImNvdWxkbid0IGFkZCBmaWxlIHRvIHN5c2ZzXCIpO1xuIFx0XHRnb3RvIG91dF9mcmVlX2F0dHI7XG4gXHR9XG4gXG5AQCAtMjIwLDcgKzIxNyw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXG4gXG4gXHRyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShpZGxldGltZXJfdGdfa29iaiwgXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIpO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRwcl9kZWJ1ZyhcImNvdWxkbid0IGFkZCBmaWxlIHRvIHN5c2ZzXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiY291bGRuJ3QgYWRkIGZpbGUgdG8gc3lzZnNcIik7XG4gXHRcdGdvdG8gb3V0X2ZyZWVfYXR0cjtcbiBcdH1cbiBcbkBAIC0yMjgsNyArMjI1LDYgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbylcbiBcdGtvYmplY3RfdWV2ZW50KGlkbGV0aW1lcl90Z19rb2JqLEtPQkpfQUREKTtcbiBcbiBcdGxpc3RfYWRkKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlZW50cnksIFx1MDAyNmlkbGV0aW1lcl90Z19saXN0KTtcbi1cdHByX2RlYnVnKFwidGltZXIgdHlwZSB2YWx1ZSBpcyAldVwiLCBpbmZvLVx1MDAzZXRpbWVyX3R5cGUpO1xuIFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlID0gaW5mby1cdTAwM2V0aW1lcl90eXBlO1xuIFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQgPSAxO1xuIFxuQEAgLTI2Myw5ICsyNTksNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4tXHRwcl9kZWJ1ZyhcInJlc2V0dGluZyB0aW1lciAlcywgdGltZW91dCBwZXJpb2QgJXVcXG5cIixcbi1cdFx0IGluZm8tXHUwMDNlbGFiZWwsIGluZm8tXHUwMDNldGltZW91dCk7XG4tXG4gXHRtb2RfdGltZXIoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcixcbiBcdFx0ICBzZWNzX3RvX2ppZmZpZXMoaW5mby1cdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xuIFxuQEAgLTI4MCw5ICsyNzMsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4tXHRwcl9kZWJ1ZyhcInJlc2V0dGluZyB0aW1lciAlcywgdGltZW91dCBwZXJpb2QgJXVcXG5cIixcbi1cdFx0IGluZm8tXHUwMDNlbGFiZWwsIGluZm8tXHUwMDNldGltZW91dCk7XG4tXG4gXHRpZiAoaW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlIFx1MDAyNiBYVF9JRExFVElNRVJfQUxBUk0pIHtcbiBcdFx0aWRsZXRpbWVyX3N0YXJ0X2FsYXJtX3NlYyhpbmZvLVx1MDAzZXRpbWVyLCBpbmZvLVx1MDAzZXRpbWVvdXQpO1xuIFx0fSBlbHNlIHtcbkBAIC0yOTYsMTcgKzI4NiwxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19oZWxwZXIoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKVxuIHtcbiBcdGlmIChpbmZvLVx1MDAzZXRpbWVvdXQgPT0gMCkge1xuLVx0XHRwcl9kZWJ1ZyhcInRpbWVvdXQgdmFsdWUgaXMgemVyb1xcblwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcInRpbWVvdXQgdmFsdWUgaXMgemVyb1xcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0IFx1MDAzZT0gSU5UX01BWCAvIDEwMDApIHtcbi1cdFx0cHJfZGVidWcoXCJ0aW1lb3V0IHZhbHVlIGlzIHRvbyBiaWdcXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJ0aW1lb3V0IHZhbHVlIGlzIHRvbyBiaWdcXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKGluZm8tXHUwMDNlbGFiZWxbMF0gPT0gJ1xcMCcgfHxcbiBcdCAgICBzdHJubGVuKGluZm8tXHUwMDNlbGFiZWwsXG4gXHRcdCAgICBNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkUpID09IE1BWF9JRExFVElNRVJfTEFCRUxfU0laRSkge1xuLVx0XHRwcl9kZWJ1ZyhcImxhYmVsIGlzIGVtcHR5IG9yIG5vdCBudWwtdGVybWluYXRlZFxcblwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcImxhYmVsIGlzIGVtcHR5IG9yIG5vdCBudWwtdGVybWluYXRlZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbkBAIC0zMTgsMzQgKzMwOCwyNSBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFx0c3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIFx0aW50IHJldDtcbiBcbi1cdHByX2RlYnVnKFwiY2hlY2tlbnRyeSB0YXJnaW5mbyVzXFxuXCIsIGluZm8tXHUwMDNlbGFiZWwpO1xuLVxuIFx0cmV0ID0gaWRsZXRpbWVyX3RnX2hlbHBlcihpbmZvKTtcbiBcdGlmKHJldCBcdTAwM2MgMClcbi1cdHtcbi1cdFx0cHJfZGVidWcoXCJjaGVja2VudHJ5IGhlbHBlciByZXR1cm4gaW52YWxpZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuIFx0aW5mby1cdTAwM2V0aW1lciA9IF9faWRsZXRpbWVyX3RnX2ZpbmRfYnlfbGFiZWwoaW5mby1cdTAwM2VsYWJlbCk7XG4gXHRpZiAoaW5mby1cdTAwM2V0aW1lcikge1xuIFx0XHRpZiAoaW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlIFx1MDAyNiBYVF9JRExFVElNRVJfQUxBUk0pIHtcbi1cdFx0XHRwcl9kZWJ1ZyhcIkFkZGluZy9SZXBsYWNpbmcgcnVsZSB3aXRoIHNhbWUgbGFiZWwgYW5kIGRpZmZlcmVudCB0aW1lciB0eXBlIGlzIG5vdCBhbGxvd2VkXFxuXCIpO1xuIFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbitcdFx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiQWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcXG5cIik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcbiBcdFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQrKztcbiBcdFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gXHRcdFx0ICBzZWNzX3RvX2ppZmZpZXMoaW5mby1cdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xuLVxuLVx0XHRwcl9kZWJ1ZyhcImluY3JlYXNlZCByZWZjbnQgb2YgdGltZXIgJXMgdG8gJXVcXG5cIixcbi1cdFx0XHQgaW5mby1cdTAwM2VsYWJlbCwgaW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmV0ID0gaWRsZXRpbWVyX3RnX2NyZWF0ZShpbmZvKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdHByX2RlYnVnKFwiZmFpbGVkIHRvIGNyZWF0ZSB0aW1lclxcblwiKTtcbiBcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuQEAgLTM2MCwzMCArMzQxLDIzIEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXHRpbnQgcmV0O1xuIFxuLVx0cHJfZGVidWcoXCJjaGVja2VudHJ5IHRhcmdpbmZvJXNcXG5cIiwgaW5mby1cdTAwM2VsYWJlbCk7XG4tXG4gXHRpZiAoaW5mby1cdTAwM2VzZW5kX25sX21zZylcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0cmV0ID0gaWRsZXRpbWVyX3RnX2hlbHBlcigoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICopaW5mbyk7XG4gXHRpZihyZXQgXHUwMDNjIDApXG4tXHR7XG4tXHRcdHByX2RlYnVnKFwiY2hlY2tlbnRyeSBoZWxwZXIgcmV0dXJuIGludmFsaWRcXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNldGltZXJfdHlwZSBcdTAwM2UgWFRfSURMRVRJTUVSX0FMQVJNKSB7XG4tXHRcdHByX2RlYnVnKFwiaW52YWxpZCB2YWx1ZSBmb3IgdGltZXIgdHlwZVxcblwiKTtcbitcdGlmIChpbmZvLVx1MDAzZXRpbWVyX3R5cGUgXHUwMDNlIFhUX0lETEVUSU1FUl9BTEFSTSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuIFx0aW5mby1cdTAwM2V0aW1lciA9IF9faWRsZXRpbWVyX3RnX2ZpbmRfYnlfbGFiZWwoaW5mby1cdTAwM2VsYWJlbCk7XG4gXHRpZiAoaW5mby1cdTAwM2V0aW1lcikge1xuIFx0XHRpZiAoaW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlICE9IGluZm8tXHUwMDNldGltZXJfdHlwZSkge1xuLVx0XHRcdHByX2RlYnVnKFwiQWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcXG5cIik7XG4gXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuK1x0XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJBZGRpbmcvUmVwbGFjaW5nIHJ1bGUgd2l0aCBzYW1lIGxhYmVsIGFuZCBkaWZmZXJlbnQgdGltZXIgdHlwZSBpcyBub3QgYWxsb3dlZFxcblwiKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFxuQEAgLTM5MywyMSArMzY3LDE1IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRcdFx0a3RpbWVfdCB0b3V0ID0gYWxhcm1fZXhwaXJlc19yZW1haW5pbmcoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhbGFybSk7XG4gXHRcdFx0c3RydWN0IHRpbWVzcGVjNjQga3RpbWVzcGVjID0ga3RpbWVfdG9fdGltZXNwZWM2NCh0b3V0KTtcbiBcbi1cdFx0XHRpZiAoa3RpbWVzcGVjLnR2X3NlYyBcdTAwM2UgMCkge1xuLVx0XHRcdFx0cHJfZGVidWcoXCJ0aW1lX2V4cGlyeV9yZW1haW5pbmcgJWxsZFxcblwiLFxuLVx0XHRcdFx0XHQga3RpbWVzcGVjLnR2X3NlYyk7XG4rXHRcdFx0aWYgKGt0aW1lc3BlYy50dl9zZWMgXHUwMDNlIDApXG4gXHRcdFx0XHRpZGxldGltZXJfc3RhcnRfYWxhcm1fa3RpbWUoaW5mby1cdTAwM2V0aW1lciwgdG91dCk7XG4tXHRcdFx0fVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gXHRcdFx0XHRcdHNlY3NfdG9famlmZmllcyhpbmZvLVx1MDAzZXRpbWVvdXQpICsgamlmZmllcyk7XG4gXHRcdH1cbi1cdFx0cHJfZGVidWcoXCJpbmNyZWFzZWQgcmVmY250IG9mIHRpbWVyICVzIHRvICV1XFxuXCIsXG4tXHRcdFx0IGluZm8tXHUwMDNlbGFiZWwsIGluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250KTtcbiBcdH0gZWxzZSB7XG4gXHRcdHJldCA9IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoaW5mbyk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0XHRwcl9kZWJ1ZyhcImZhaWxlZCB0byBjcmVhdGUgdGltZXJcXG5cIik7XG4gXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbkBAIC00MjEsMTkgKzM4OSwxMyBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtICpwYXIpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIFxuLVx0cHJfZGVidWcoXCJkZXN0cm95IHRhcmdpbmZvICVzXFxuXCIsIGluZm8tXHUwMDNlbGFiZWwpO1xuLVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiBcbiBcdGlmICgtLWluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250IFx1MDAzZSAwKSB7XG4tXHRcdHByX2RlYnVnKFwiZGVjcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxcblwiLFxuLVx0XHRcdCBpbmZvLVx1MDAzZWxhYmVsLCBpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXJlZmNudCk7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0cHJfZGVidWcoXCJkZWxldGluZyB0aW1lciAlc1xcblwiLCBpbmZvLVx1MDAzZWxhYmVsKTtcbi1cbiBcdGxpc3RfZGVsKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlZW50cnkpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuQEAgLTQ0OCwxOSArNDEwLDEzIEBAIHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19kZXN0cm95X3YxKGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4tXHRwcl9kZWJ1ZyhcImRlc3Ryb3kgdGFyZ2luZm8gJXNcXG5cIiwgaW5mby1cdTAwM2VsYWJlbCk7XG4tXG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuIFx0aWYgKC0taW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQgXHUwMDNlIDApIHtcbi1cdFx0cHJfZGVidWcoXCJkZWNyZWFzZWQgcmVmY250IG9mIHRpbWVyICVzIHRvICV1XFxuXCIsXG4tXHRcdFx0IGluZm8tXHUwMDNlbGFiZWwsIGluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250KTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRwcl9kZWJ1ZyhcImRlbGV0aW5nIHRpbWVyICVzXFxuXCIsIGluZm8tXHUwMDNlbGFiZWwpO1xuLVxuIFx0bGlzdF9kZWwoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VlbnRyeSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gXG5AQCAtNTM0LDcgKzQ5MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGlkbGV0aW1lcl90Z19pbml0KHZvaWQpXG4gXHRpZGxldGltZXJfdGdfY2xhc3MgPSBjbGFzc19jcmVhdGUoXCJ4dF9pZGxldGltZXJcIik7XG4gXHRlcnIgPSBQVFJfRVJSKGlkbGV0aW1lcl90Z19jbGFzcyk7XG4gXHRpZiAoSVNfRVJSKGlkbGV0aW1lcl90Z19jbGFzcykpIHtcbi1cdFx0cHJfZGVidWcoXCJjb3VsZG4ndCByZWdpc3RlciBkZXZpY2UgY2xhc3NcXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJjb3VsZG4ndCByZWdpc3RlciBkZXZpY2UgY2xhc3NcXG5cIik7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTU0Miw3ICs0OTgsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBpZGxldGltZXJfdGdfaW5pdCh2b2lkKVxuIFx0XHRcdFx0XHQgICAgTUtERVYoMCwgMCksIE5VTEwsIFwidGltZXJzXCIpO1xuIFx0ZXJyID0gUFRSX0VSUihpZGxldGltZXJfdGdfZGV2aWNlKTtcbiBcdGlmIChJU19FUlIoaWRsZXRpbWVyX3RnX2RldmljZSkpIHtcbi1cdFx0cHJfZGVidWcoXCJjb3VsZG4ndCByZWdpc3RlciBzeXN0ZW0gZGV2aWNlXFxuXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiY291bGRuJ3QgcmVnaXN0ZXIgc3lzdGVtIGRldmljZVxcblwiKTtcbiBcdFx0Z290byBvdXRfY2xhc3M7XG4gXHR9XG4gXG5AQCAtNTUxLDcgKzUwNyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGlkbGV0aW1lcl90Z19pbml0KHZvaWQpXG4gXHRlcnIgPSB4dF9yZWdpc3Rlcl90YXJnZXRzKGlkbGV0aW1lcl90ZywgQVJSQVlfU0laRShpZGxldGltZXJfdGcpKTtcbiBcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbi1cdFx0cHJfZGVidWcoXCJjb3VsZG4ndCByZWdpc3RlciB4dCB0YXJnZXRcXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJjb3VsZG4ndCByZWdpc3RlciB4dCB0YXJnZXRcXG5cIik7XG4gXHRcdGdvdG8gb3V0X2RldjtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0xPRy5jIGIvbmV0L25ldGZpbHRlci94dF9MT0cuY1xuaW5kZXggZjM5MjQ0ZjljMGVkOS4uZGUzZjE3Njc5MmEwNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTE9HLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTE9HLmNcbkBAIC01MCwxMiArNTAsMTIgQEAgc3RhdGljIGludCBsb2dfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGxvZ2luZm8tXHUwMDNlbGV2ZWwgXHUwMDNlPSA4KSB7XG4tXHRcdHByX2RlYnVnKFwibGV2ZWwgJXUgXHUwMDNlPSA4XFxuXCIsIGxvZ2luZm8tXHUwMDNlbGV2ZWwpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwibGV2ZWwgJXUgXHUwMDNlPSA4XFxuXCIsIGxvZ2luZm8tXHUwMDNlbGV2ZWwpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGlmIChsb2dpbmZvLVx1MDAzZXByZWZpeFtzaXplb2YobG9naW5mby1cdTAwM2VwcmVmaXgpLTFdICE9ICdcXDAnKSB7XG4tXHRcdHByX2RlYnVnKFwicHJlZml4IGlzIG5vdCBudWxsLXRlcm1pbmF0ZWRcXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJwcmVmaXggaXMgbm90IG51bGwtdGVybWluYXRlZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9NQVNRVUVSQURFLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuY1xuaW5kZXggZWFlMDVjMTc4MzM2Ny4uY2VhNDg4Y2VjNTQ0NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTUFTUVVFUkFERS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuY1xuQEAgLTIxLDExICsyMSwxMSBAQCBzdGF0aWMgaW50IG1hc3F1ZXJhZGVfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3QgbmZfbmF0X2lwdjRfbXVsdGlfcmFuZ2VfY29tcGF0ICptciA9IHBhci1cdTAwM2V0YXJnaW5mbztcbiBcbiBcdGlmIChtci1cdTAwM2VyYW5nZVswXS5mbGFncyBcdTAwMjYgTkZfTkFUX1JBTkdFX01BUF9JUFMpIHtcbi1cdFx0cHJfZGVidWcoXCJiYWQgTUFQX0lQUy5cXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJiYWQgTUFQX0lQUy5cXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKG1yLVx1MDAzZXJhbmdlc2l6ZSAhPSAxKSB7XG4tXHRcdHByX2RlYnVnKFwiYmFkIHJhbmdlc2l6ZSAldVxcblwiLCBtci1cdTAwM2VyYW5nZXNpemUpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiYmFkIHJhbmdlc2l6ZSAldVxcblwiLCBtci1cdTAwM2VyYW5nZXNpemUpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiBuZl9jdF9uZXRuc19nZXQocGFyLVx1MDAzZW5ldCwgcGFyLVx1MDAzZWZhbWlseSk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9ORVRNQVAuYyBiL25ldC9uZXRmaWx0ZXIveHRfTkVUTUFQLmNcbmluZGV4IGNiMmVlODBkODRmYTguLjhjODZkOWE0MzM3M2EgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jXG5AQCAtMTA2LDExICsxMDYsMTEgQEAgc3RhdGljIGludCBuZXRtYXBfdGc0X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IG5mX25hdF9pcHY0X211bHRpX3JhbmdlX2NvbXBhdCAqbXIgPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4gXHRpZiAoIShtci1cdTAwM2VyYW5nZVswXS5mbGFncyBcdTAwMjYgTkZfTkFUX1JBTkdFX01BUF9JUFMpKSB7XG4tXHRcdHByX2RlYnVnKFwiYmFkIE1BUF9JUFMuXFxuXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiYmFkIE1BUF9JUFMuXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdGlmIChtci1cdTAwM2VyYW5nZXNpemUgIT0gMSkge1xuLVx0XHRwcl9kZWJ1ZyhcImJhZCByYW5nZXNpemUgJXUuXFxuXCIsIG1yLVx1MDAzZXJhbmdlc2l6ZSk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJiYWQgcmFuZ2VzaXplICV1LlxcblwiLCBtci1cdTAwM2VyYW5nZXNpemUpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiBuZl9jdF9uZXRuc19nZXQocGFyLVx1MDAzZW5ldCwgcGFyLVx1MDAzZWZhbWlseSk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jIGIvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jXG5pbmRleCBmZjY2YjU2YTNmOTdkLi4yN2JjMDU0NWM0Zjc0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X1JFRElSRUNULmNcbkBAIC01MSwxMSArNTEsMTEgQEAgc3RhdGljIGludCByZWRpcmVjdF90ZzRfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3QgbmZfbmF0X2lwdjRfbXVsdGlfcmFuZ2VfY29tcGF0ICptciA9IHBhci1cdTAwM2V0YXJnaW5mbztcbiBcbiBcdGlmIChtci1cdTAwM2VyYW5nZVswXS5mbGFncyBcdTAwMjYgTkZfTkFUX1JBTkdFX01BUF9JUFMpIHtcbi1cdFx0cHJfZGVidWcoXCJiYWQgTUFQX0lQUy5cXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJiYWQgTUFQX0lQUy5cXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKG1yLVx1MDAzZXJhbmdlc2l6ZSAhPSAxKSB7XG4tXHRcdHByX2RlYnVnKFwiYmFkIHJhbmdlc2l6ZSAldS5cXG5cIiwgbXItXHUwMDNlcmFuZ2VzaXplKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcImJhZCByYW5nZXNpemUgJXUuXFxuXCIsIG1yLVx1MDAzZXJhbmdlc2l6ZSk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0cmV0dXJuIG5mX2N0X25ldG5zX2dldChwYXItXHUwMDNlbmV0LCBwYXItXHUwMDNlZmFtaWx5KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1NFQ01BUksuYyBiL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jXG5pbmRleCA1YmM1ZWE1MDVlYjllLi4zOGU4ZTQxMGI0ZTgxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jXG5AQCAtNzksOCArNzksNyBAQCBzZWNtYXJrX3RnX2NoZWNrKGNvbnN0IGNoYXIgKnRhYmxlLCBzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfaW5mb192MSAqaW5mbylcbiBcbiBcdGlmIChzdHJjbXAodGFibGUsIFwibWFuZ2xlXCIpICE9IDAgXHUwMDI2XHUwMDI2XG4gXHQgICAgc3RyY21wKHRhYmxlLCBcInNlY3VyaXR5XCIpICE9IDApIHtcbi1cdFx0cHJfaW5mb19yYXRlbGltaXRlZChcIm9ubHkgdmFsaWQgaW4gXFwnbWFuZ2xlXFwnIG9yIFxcJ3NlY3VyaXR5XFwnIHRhYmxlLCBub3QgXFwnJXNcXCdcXG5cIixcbi1cdFx0XHRcdCAgICB0YWJsZSk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJvbmx5IHZhbGlkIGluIFxcJ21hbmdsZVxcJyBvciBcXCdzZWN1cml0eVxcJyB0YWJsZVxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jZ3JvdXAuYyBiL25ldC9uZXRmaWx0ZXIveHRfY2dyb3VwLmNcbmluZGV4IDQzZDJhZTJiZTYyOGQuLmFjMWI3ZTcxY2Q3ZjUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2Nncm91cC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nncm91cC5jXG5AQCAtMzMsNyArMzMsNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192MChjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHtcbi1cdFx0cHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIGludCBjZ3JvdXBfbXRfY2hlY2tfdjEoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKCFpbmZvLVx1MDAzZWhhc19wYXRoIFx1MDAyNlx1MDAyNiAhaW5mby1cdTAwM2VoYXNfY2xhc3NpZCkge1xuLVx0XHRwcl9pbmZvKFwieHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXFxuXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwieHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC01OSw3ICs1OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YxKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0fVxuIFxuIFx0aWYgKGluZm8tXHUwMDNlaGFzX2NsYXNzaWQgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQpKSB7XG4tXHRcdHByX2luZm8oTkVUX0NMU19DTEFTU0lEX0lOVkFMSURfTVNHKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YyKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmICghaW5mby1cdTAwM2VoYXNfcGF0aCBcdTAwMjZcdTAwMjYgIWluZm8tXHUwMDNlaGFzX2NsYXNzaWQpIHtcbi1cdFx0cHJfaW5mbyhcInh0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxcblwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcInh0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtOTksNyArOTksNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192Mihjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdH1cbiBcbiBcdGlmIChpbmZvLVx1MDAzZWhhc19jbGFzc2lkIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfQ0dST1VQX05FVF9DTEFTU0lEKSkge1xuLVx0XHRwcl9pbmZvKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoTkVUX0NMU19DTEFTU0lEX0lOVkFMSURfTVNHKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9lc3AuYyBiL25ldC9uZXRmaWx0ZXIveHRfZXNwLmNcbmluZGV4IDJhMWMwYWQwZmYwNzkuLjY4ZmQ3NTg4NDI2OGEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jXG5AQCAtMjUsMTIgKzI1LDcgQEAgTU9EVUxFX0FMSUFTKFwiaXA2dF9lc3BcIik7XG4gc3RhdGljIGlubGluZSBib29sXG4gc3BpX21hdGNoKHVfaW50MzJfdCBtaW4sIHVfaW50MzJfdCBtYXgsIHVfaW50MzJfdCBzcGksIGJvb2wgaW52ZXJ0KVxuIHtcbi1cdGJvb2wgcjtcbi1cdHByX2RlYnVnKFwic3BpX21hdGNoOiVjIDB4JXggXHUwMDNjPSAweCV4IFx1MDAzYz0gMHgleFxcblwiLFxuLVx0XHQgaW52ZXJ0ID8gJyEnIDogJyAnLCBtaW4sIHNwaSwgbWF4KTtcbi1cdHIgPSAoc3BpIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBzcGkgXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xuLVx0cHJfZGVidWcoXCIgcmVzdWx0ICVzXFxuXCIsIHIgPyBcIlBBU1NcIiA6IFwiRkFJTEVEXCIpO1xuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gKHNwaSBcdTAwM2U9IG1pbiBcdTAwMjZcdTAwMjYgc3BpIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgZXNwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbkBAIC00OCw3ICs0Myw2IEBAIHN0YXRpYyBib29sIGVzcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdC8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXG4gXHRcdCAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC5cbiBcdFx0ICovXG4tXHRcdHByX2RlYnVnKFwiRHJvcHBpbmcgZXZpbCBFU1AgdGlueWdyYW0uXFxuXCIpO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC02Miw3ICs1Niw3IEBAIHN0YXRpYyBpbnQgZXNwX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IHh0X2VzcCAqZXNwaW5mbyA9IHBhci1cdTAwM2VtYXRjaGluZm87XG4gXG4gXHRpZiAoZXNwaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgflhUX0VTUF9JTlZfTUFTSykge1xuLVx0XHRwcl9kZWJ1ZyhcInVua25vd24gZmxhZ3MgJVhcXG5cIiwgZXNwaW5mby1cdTAwM2VpbnZmbGFncyk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJ1bmtub3duIGZsYWdzICVYXFxuXCIsIGVzcGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2lwY29tcC5jIGIvbmV0L25ldGZpbHRlci94dF9pcGNvbXAuY1xuaW5kZXggNDcyZGE2MzlhMzJlMi4uMzI5OWMxZWE2MGY5ZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaXBjb21wLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaXBjb21wLmNcbkBAIC0yOSwxMiArMjksNyBAQCBNT0RVTEVfQUxJQVMoXCJpcDZ0X2lwY29tcFwiKTtcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpXG4ge1xuLVx0Ym9vbCByO1xuLVx0cHJfZGVidWcoXCJzcGlfbWF0Y2g6JWMgMHgleCBcdTAwM2M9IDB4JXggXHUwMDNjPSAweCV4XFxuXCIsXG4tXHRcdCBpbnZlcnQgPyAnIScgOiAnICcsIG1pbiwgc3BpLCBtYXgpO1xuLVx0ciA9IChzcGkgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IHNwaSBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4tXHRwcl9kZWJ1ZyhcIiByZXN1bHQgJXNcXG5cIiwgciA/IFwiUEFTU1wiIDogXCJGQUlMRURcIik7XG4tXHRyZXR1cm4gcjtcbitcdHJldHVybiAoc3BpIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBzcGkgXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBjb21wX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbkBAIC01Miw3ICs0Nyw2IEBAIHN0YXRpYyBib29sIGNvbXBfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHQvKiBXZSd2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZVxuIFx0XHQgKiBjYW4ndC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuXG4gXHRcdCAqL1xuLVx0XHRwcl9kZWJ1ZyhcIkRyb3BwaW5nIGV2aWwgSVBDb21wIHRpbnlncmFtLlxcblwiKTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuY1xuaW5kZXggMGM5ZTAxNGUzMGI0OS4uYmY2MTE0MWZiNzg1MCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuY1xuQEAgLTI0LDI3ICsyNCwxNSBAQCBpcHJhbmdlX210NChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdG0gID0gbnRvaGwoaXBoLVx1MDAzZXNhZGRyKSBcdTAwM2MgbnRvaGwoaW5mby1cdTAwM2VzcmNfbWluLmlwKTtcbiBcdFx0bSB8PSBudG9obChpcGgtXHUwMDNlc2FkZHIpIFx1MDAzZSBudG9obChpbmZvLVx1MDAzZXNyY19tYXguaXApO1xuIFx0XHRtIF49ICEhKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVik7XG4tXHRcdGlmIChtKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJzcmMgSVAgJXBJNCBOT1QgaW4gcmFuZ2UgJXMlcEk0LSVwSTRcXG5cIixcbi1cdFx0XHQgICAgICAgICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsXG4tXHRcdFx0ICAgICAgICAgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVikgPyBcIihJTlYpIFwiIDogXCJcIixcbi1cdFx0XHQgICAgICAgICBcdTAwMjZpbmZvLVx1MDAzZXNyY19taW4uaXAsXG4tXHRcdFx0ICAgICAgICAgXHUwMDI2aW5mby1cdTAwM2VzcmNfbWF4LmlwKTtcbitcdFx0aWYgKG0pXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHR9XG4gXHR9XG4gXHRpZiAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9EU1QpIHtcbiBcdFx0bSAgPSBudG9obChpcGgtXHUwMDNlZGFkZHIpIFx1MDAzYyBudG9obChpbmZvLVx1MDAzZWRzdF9taW4uaXApO1xuIFx0XHRtIHw9IG50b2hsKGlwaC1cdTAwM2VkYWRkcikgXHUwMDNlIG50b2hsKGluZm8tXHUwMDNlZHN0X21heC5pcCk7XG4gXHRcdG0gXj0gISEoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9EU1RfSU5WKTtcbi1cdFx0aWYgKG0pIHtcbi1cdFx0XHRwcl9kZWJ1ZyhcImRzdCBJUCAlcEk0IE5PVCBpbiByYW5nZSAlcyVwSTQtJXBJNFxcblwiLFxuLVx0XHRcdCAgICAgICAgIFx1MDAyNmlwaC1cdTAwM2VkYWRkcixcbi1cdFx0XHQgICAgICAgICAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9EU1RfSU5WKSA/IFwiKElOVikgXCIgOiBcIlwiLFxuLVx0XHRcdCAgICAgICAgIFx1MDAyNmluZm8tXHUwMDNlZHN0X21pbi5pcCxcbi1cdFx0XHQgICAgICAgICBcdTAwMjZpbmZvLVx1MDAzZWRzdF9tYXguaXApO1xuK1x0XHRpZiAobSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbiBcdH1cbiBcdHJldHVybiB0cnVlO1xuIH1cbkBAIC03MywyNyArNjEsMTUgQEAgaXByYW5nZV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRtICA9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmluZm8tXHUwMDNlc3JjX21pbi5pbjYpO1xuIFx0XHRtIHw9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpbmZvLVx1MDAzZXNyY19tYXguaW42LCBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuIFx0XHRtIF49ICEhKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVik7XG4tXHRcdGlmIChtKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJzcmMgSVAgJXBJNiBOT1QgaW4gcmFuZ2UgJXMlcEk2LSVwSTZcXG5cIixcbi1cdFx0XHRcdCBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHQgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVikgPyBcIihJTlYpIFwiIDogXCJcIixcbi1cdFx0XHRcdCBcdTAwMjZpbmZvLVx1MDAzZXNyY19taW4uaW42LFxuLVx0XHRcdFx0IFx1MDAyNmluZm8tXHUwMDNlc3JjX21heC5pbjYpO1xuK1x0XHRpZiAobSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbiBcdH1cbiBcdGlmIChpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUFJBTkdFX0RTVCkge1xuIFx0XHRtICA9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpcGgtXHUwMDNlZGFkZHIsIFx1MDAyNmluZm8tXHUwMDNlZHN0X21pbi5pbjYpO1xuIFx0XHRtIHw9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpbmZvLVx1MDAzZWRzdF9tYXguaW42LCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIpO1xuIFx0XHRtIF49ICEhKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfRFNUX0lOVik7XG4tXHRcdGlmIChtKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJkc3QgSVAgJXBJNiBOT1QgaW4gcmFuZ2UgJXMlcEk2LSVwSTZcXG5cIixcbi1cdFx0XHRcdCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHQgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfRFNUX0lOVikgPyBcIihJTlYpIFwiIDogXCJcIixcbi1cdFx0XHRcdCBcdTAwMjZpbmZvLVx1MDAzZWRzdF9taW4uaW42LFxuLVx0XHRcdFx0IFx1MDAyNmluZm8tXHUwMDNlZHN0X21heC5pbjYpO1xuK1x0XHRpZiAobSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbiBcdH1cbiBcdHJldHVybiB0cnVlO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2lwdnMuYyBiL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jXG5pbmRleCAyNTNjNzFjYzlhNjM0Li5lMTNjMGZmYjczYTlhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcHZzLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jXG5AQCAtMTQ4LDcgKzE0OCw2IEBAIGlwdnNfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIG91dF9wdXRfY3A6XG4gXHRfX2lwX3ZzX2Nvbm5fcHV0KGNwKTtcbiBvdXQ6XG4tXHRwcl9kZWJ1ZyhcIm1hdGNoPSVkXFxuXCIsIG1hdGNoKTtcbiBcdHJldHVybiBtYXRjaDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuYyBiL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmNcbmluZGV4IGExNjkxZmY0MDVkM2MuLmJmZjVmNTNhOWJlZmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jXG5AQCAtMzcsNyArMzcsNiBAQCBwb3J0c19tYXRjaF92MShjb25zdCBzdHJ1Y3QgeHRfbXVsdGlwb3J0X3YxICptaW5mbyxcbiBcdFx0aWYgKG1pbmZvLVx1MDAzZXBmbGFnc1tpXSkge1xuIFx0XHRcdC8qIHJhbmdlIHBvcnQgbWF0Y2hpbmcgKi9cbiBcdFx0XHRlID0gbWluZm8tXHUwMDNlcG9ydHNbKytpXTtcbi1cdFx0XHRwcl9kZWJ1ZyhcInNyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkLSVkP1xcblwiLCBzLCBlKTtcbiBcbiBcdFx0XHRzd2l0Y2ggKG1pbmZvLVx1MDAzZWZsYWdzKSB7XG4gXHRcdFx0Y2FzZSBYVF9NVUxUSVBPUlRfU09VUkNFOlxuQEAgLTU4LDggKzU3LDYgQEAgcG9ydHNfbWF0Y2hfdjEoY29uc3Qgc3RydWN0IHh0X211bHRpcG9ydF92MSAqbWluZm8sXG4gXHRcdFx0fVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIGV4YWN0IHBvcnQgbWF0Y2hpbmcgKi9cbi1cdFx0XHRwcl9kZWJ1ZyhcInNyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkP1xcblwiLCBzKTtcbi1cbiBcdFx0XHRzd2l0Y2ggKG1pbmZvLVx1MDAzZWZsYWdzKSB7XG4gXHRcdFx0Y2FzZSBYVF9NVUxUSVBPUlRfU09VUkNFOlxuIFx0XHRcdFx0aWYgKHNyYyA9PSBzKVxuQEAgLTk3LDcgKzk0LDYgQEAgbXVsdGlwb3J0X210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0LyogV2UndmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2VcbiBcdFx0ICogY2FuJ3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLlxuIFx0XHQgKi9cbi1cdFx0cHJfZGVidWcoXCJEcm9wcGluZyBldmlsIG9mZnNldD0wIHRpbnlncmFtLlxcblwiKTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuY1xuaW5kZXggYjQ2YTZhNTEyMDU4My4uZDM1YzIxZDk2NTFiMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuY1xuQEAgLTQ4LDMwICs0OCwxNyBAQCBtYXRjaF9wYWNrZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHN0cnVjdCB4dF9zY3RwX2ZsYWdfaW5mbyAqZmxhZ19pbmZvID0gaW5mby1cdTAwM2VmbGFnX2luZm87XG4gXHRpbnQgZmxhZ19jb3VudCA9IGluZm8tXHUwMDNlZmxhZ19jb3VudDtcbiBcbi0jaWZkZWYgREVCVUdcbi1cdGludCBpID0gMDtcbi0jZW5kaWZcbi1cbiBcdGlmIChjaHVua19tYXRjaF90eXBlID09IFNDVFBfQ0hVTktfTUFUQ0hfQUxMKVxuIFx0XHRTQ1RQX0NIVU5LTUFQX0NPUFkoY2h1bmttYXBjb3B5LCBpbmZvLVx1MDAzZWNodW5rbWFwKTtcbiBcbiBcdGRvIHtcbiBcdFx0c2NoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX3NjaCksIFx1MDAyNl9zY2gpO1xuIFx0XHRpZiAoc2NoID09IE5VTEwgfHwgc2NoLVx1MDAzZWxlbmd0aCA9PSAwKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJEcm9wcGluZyBpbnZhbGlkIFNDVFAgcGFja2V0LlxcblwiKTtcbiBcdFx0XHQqaG90ZHJvcCA9IHRydWU7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4tI2lmZGVmIERFQlVHXG4tXHRcdHByX2RlYnVnKFwiQ2h1bmsgbnVtOiAlZFxcdG9mZnNldDogJWRcXHR0eXBlOiAlZFxcdGxlbmd0aDogJWRcIlxuLVx0XHRcdCBcIlxcdGZsYWdzOiAleFxcblwiLFxuLVx0XHRcdCArK2ksIG9mZnNldCwgc2NoLVx1MDAzZXR5cGUsIGh0b25zKHNjaC1cdTAwM2VsZW5ndGgpLFxuLVx0XHRcdCBzY2gtXHUwMDNlZmxhZ3MpO1xuLSNlbmRpZlxuIFx0XHRvZmZzZXQgKz0gU0NUUF9QQUQ0KG50b2hzKHNjaC1cdTAwM2VsZW5ndGgpKTtcbiBcbi1cdFx0cHJfZGVidWcoXCJza2ItXHUwMDNlbGVuOiAlZFxcdG9mZnNldDogJWRcXG5cIiwgc2tiLVx1MDAzZWxlbiwgb2Zmc2V0KTtcbi1cbiBcdFx0aWYgKFNDVFBfQ0hVTktNQVBfSVNfU0VUKGluZm8tXHUwMDNlY2h1bmttYXAsIHNjaC1cdTAwM2V0eXBlKSkge1xuIFx0XHRcdHN3aXRjaCAoY2h1bmtfbWF0Y2hfdHlwZSkge1xuIFx0XHRcdGNhc2UgU0NUUF9DSFVOS19NQVRDSF9BTlk6XG5AQCAtMTIxLDE4ICsxMDgsMTQgQEAgc2N0cF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3Qgc2N0cGhkciAqc2g7XG4gXHRzdHJ1Y3Qgc2N0cGhkciBfc2g7XG4gXG4tXHRpZiAocGFyLVx1MDAzZWZyYWdvZmYgIT0gMCkge1xuLVx0XHRwcl9kZWJ1ZyhcIkRyb3BwaW5nIG5vbi1maXJzdCBmcmFnbWVudC4uIEZJWE1FXFxuXCIpO1xuK1x0aWYgKHBhci1cdTAwM2VmcmFnb2ZmICE9IDApXG4gXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbiBcbiBcdHNoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcGFyLVx1MDAzZXRob2ZmLCBzaXplb2YoX3NoKSwgXHUwMDI2X3NoKTtcbiBcdGlmIChzaCA9PSBOVUxMKSB7XG4tXHRcdHByX2RlYnVnKFwiRHJvcHBpbmcgZXZpbCBUQ1Agb2Zmc2V0PTAgdGlueWdyYW0uXFxuXCIpO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbi1cdHByX2RlYnVnKFwic3B0OiAlZFxcdGRwdDogJWRcXG5cIiwgbnRvaHMoc2gtXHUwMDNlc291cmNlKSwgbnRvaHMoc2gtXHUwMDNlZGVzdCkpO1xuIFxuIFx0cmV0dXJuICBTQ0NIRUNLKG50b2hzKHNoLVx1MDAzZXNvdXJjZSkgXHUwMDNlPSBpbmZvLVx1MDAzZXNwdHNbMF1cbiBcdFx0XHRcdTAwMjZcdTAwMjYgbnRvaHMoc2gtXHUwMDNlc291cmNlKSBcdTAwM2M9IGluZm8tXHUwMDNlc3B0c1sxXSxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3RjcHVkcC5jIGIvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuY1xuaW5kZXggZjc2Y2YxOGYxYTI0NC4uNzA2MDhiOGQwNmFiMiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmNcbkBAIC00NCw4ICs0NCw2IEBAIHRjcF9maW5kX29wdGlvbih1X2ludDhfdCBvcHRpb24sXG4gXHR1X2ludDhfdCBfb3B0WzYwIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpXTtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0cHJfZGVidWcoXCJmaW5kaW5nIG9wdGlvblxcblwiKTtcbi1cbiBcdGlmICghb3B0bGVuKVxuIFx0XHRyZXR1cm4gaW52ZXJ0O1xuIFxuQEAgLTgxLDEwICs3OSw4IEBAIHN0YXRpYyBib29sIHRjcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdCAgIGNhdXNlcyB0aGlzLiBJdHMgYSBjcmFja2VyIHRyeWluZyB0byBicmVhayBpbiBieSBkb2luZyBhXG4gXHRcdCAgIGZsYWcgb3ZlcndyaXRlIHRvIHBhc3MgdGhlIGRpcmVjdGlvbiBjaGVja3MuXG4gXHRcdCovXG4tXHRcdGlmIChwYXItXHUwMDNlZnJhZ29mZiA9PSAxKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJEcm9wcGluZyBldmlsIFRDUCBvZmZzZXQ9MSBmcmFnLlxcblwiKTtcbitcdFx0aWYgKHBhci1cdTAwM2VmcmFnb2ZmID09IDEpXG4gXHRcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuLVx0XHR9XG4gXHRcdC8qIE11c3Qgbm90IGJlIGEgZnJhZ21lbnQuICovXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC05Myw3ICs4OSw2IEBAIHN0YXRpYyBib29sIHRjcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRpZiAodGggPT0gTlVMTCkge1xuIFx0XHQvKiBXZSd2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZVxuIFx0XHQgICBjYW4ndC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuICovXG4tXHRcdHByX2RlYnVnKFwiRHJvcHBpbmcgZXZpbCBUQ1Agb2Zmc2V0PTAgdGlueWdyYW0uXFxuXCIpO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC0xNDUsNyArMTQwLDYgQEAgc3RhdGljIGJvb2wgdWRwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdGlmICh1aCA9PSBOVUxMKSB7XG4gXHRcdC8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXG4gXHRcdCAgIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4gKi9cbi1cdFx0cHJfZGVidWcoXCJEcm9wcGluZyBldmlsIFVEUCB0aW55Z3JhbS5cXG5cIik7XG4gXHRcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NDE6MzYuNDA1ODYyNDc4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTE2Mzk5NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE5ldGZpbHRlciBQYXRjaCBTZXJpZXM6IFByaW1hcmlseSBMb2dnaW5nIENsZWFudXAgd2l0aCBhIEdsaXRjaCoqXG5cbk9rYXksIGhlcmUncyB0aGUgZGVhbC4gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCB0aGUgbWFpbiB0aGluZyBpdCdzIGRvaW5nIGlzIHJlbW92aW5nIGEgYnVuY2ggb2YgYHByX2RlYnVnYCBjYWxscyBhbmQgY29udmVydGluZyBzb21lIG9mIHRoZW0gdG8gYHByX2luZm9fcmF0ZWxpbWl0ZWRgIGNhbGxzIGFjcm9zcyBhIGJ1bmNoIG9mIG5ldGZpbHRlciBtb2R1bGVzOiBgaXB0X2FoLmNgLCBgaXB0X3JwZmlsdGVyLmNgLCBgaXA2dF9haC5jYCwgZXRjLiBCYXNpY2FsbHksIGl0J3MgYSBjb2RlIGNsZWFudXAsIHdoaWNoIGlzIGZpbmUuIE5vdGhpbmcgdG9vIGV4Y2l0aW5nLCBqdXN0IG1ha2luZyB0aGluZ3MgYSBiaXQgbGVzcyBjaGF0dHkuXG5cblRoZW4gSSBoaXQgdGhpcyBvZGQgY2hhbmdlIGluIGB4dF9DVC5jYC4gVGhleSd2ZSBtZXNzZWQgd2l0aCB0aGUgY29kZSB0aGF0IGhhbmRsZXMgdGhlIGBoZWxwZXJgIHN0cmluZzpcblxuYGBgY1xuLVx0aWYgKGluZm8tXHUwMDNlaGVscGVyWzBdKSB7XG4rXHRpZiAoaW5mby1cdTAwM2VoZWxwZXJbMF0gXHUwMDI2XHUwMDI2XG4rXHQgICAgc3RybmxlbihpbmZvLVx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbmBgYFxuXG5JIHNlZSB0aGF0LiBBZGRpbmcgYHN0cm5sZW5gIGNvbmRpdGlvbiAqYmVmb3JlKiB0aGUgb3JpZ2luYWwgY29uZGl0aW9uLiBBbmQgdGhlbiB0aGVyZSdzIG1vcmUgYWZ0ZXI6XG5cbmBgYGNcblx0XHRpZiAoc3RybmxlbihpbmZvLVx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkgPT0gc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkge1xuXHRcdFx0cmV0ID0gLUVOQU1FVE9PTE9ORztcblx0XHRcdGdvdG8gZXJyMztcblx0XHR9XG5gYGBcblxuV2FpdCBhIHNlY29uZC4uLiBJZiB0aGF0IGBzdHJubGVuYCBpcyAqbGVzcyogdGhhbiBgc2l6ZW9mYCwgdGhlbiB0aGUgaW5uZXIgYGlmYCBjb25kaXRpb24gd2lsbCAqbmV2ZXIqIGJlIHRydWUsIHJpZ2h0PyBCZWNhdXNlIGlmIGl0J3MgbGVzcywgdGhlIHN0cmluZyBpcyBudWxsLXRlcm1pbmF0ZWQsIHNvIHRoZSBsZW5ndGggY2FuJ3QgYmUgZXF1YWwgdG8gdGhlIGJ1ZmZlciBzaXplLiBUaGF0IGlubmVyIGBpZmAgaXMgZXNzZW50aWFsbHkgZGVhZCBjb2RlIG5vdy4gU2VlbXMgbGlrZSBhIGxvZ2ljIGVycm9yLiBPcmlnaW5hbCBjb2RlIHNob3VsZCd2ZSByZXR1cm5lZCBgLUVOQU1FVE9PTE9OR2AgaWYgdGhlIHN0cmluZyB3YXNuJ3QgbnVsbC10ZXJtaW5hdGVkLiBCdXQgbm93LCB3aXRoIHRoZSBhZGRlZCBjaGVjaywgdGhhdCBjYXNlIGp1c3QgKmdldHMgc2tpcHBlZCouIElzIHRoZXJlIGEgS01TQU4gaXNzdWUgaGVyZT9cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvZGU6XG5gYGBjXG4tXHRpZiAoaW5mby1cdTAwM2VoZWxwZXJbMF0pIHtcbitcdGlmIChpbmZvLVx1MDAzZWhlbHBlclswXSBcdTAwMjZcdTAwMjZcbitcdCAgICBzdHJubGVuKGluZm8tXHUwMDNlaGVscGVyLCBzaXplb2YoaW5mby1cdTAwM2VoZWxwZXIpKSBcdTAwM2Mgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkge1xuIFx0XHRpZiAoc3RybmxlbihpbmZvLVx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkgPT0gc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkge1xuIFx0XHRcdHJldCA9IC1FTkFNRVRPT0xPTkc7XG4gXHRcdFx0Z290byBlcnIzO1xuIFx0XHR9XG5gYGBcblllYWghIElmIHRoZSBzdHJpbmcgaXMgbm90IG51bGwtdGVybWluYXRlZCwgaXQganVzdCBza2lwcyB0aGUgd2hvbGUgYmxvY2suIEl0IGRvZXNuJ3QgcmV0dXJuIHRoZSBgLUVOQU1FVE9PTE9OR2AgYXMgaXQgc2hvdWxkLiBUaGlzIHNlZW1zIGxpa2UgYSAqYnVnKiBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCwgbm90IGEgZml4LiBJdCBza2lwcyB0aGUgZXJyb3IgY2hlY2tpbmcgYW5kIHRoZSBoZWxwZXIgbG9hZGluZyB3aGVuIHRoZSBzdHJpbmcgaXNuJ3QgbnVsbC10ZXJtaW5hdGVkLlxuXG5Pa2F5LCBpcyB0aGVyZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGhlcmU/IExldCBtZSBjaGVjayB0aGUgZXhhY3QgZGlmZjpcbmBgYGNcbi1cdGlmIChpbmZvLVx1MDAzZWhlbHBlclswXSkge1xuK1x0aWYgKGluZm8tXHUwMDNlaGVscGVyWzBdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHN0cm5sZW4oaW5mby1cdTAwM2VoZWxwZXIsIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIFx1MDAzYyBzaXplb2YoaW5mby1cdTAwM2VoZWxwZXIpKSB7XG5gYGBcblxuTm8sIGl0IGRvZXNuJ3QgbG9vayBsaWtlIGl0IGJlY2F1c2UgaXQncyBzdGlsbCBjaGVja2luZyB0aGUgZmlyc3QgY2hhcmFjdGVyIGBpbmZvLVx1MDAzZWhlbHBlclswXWAuIFNvIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgdXNlcidzIHNpZGUsIGBzdHJubGVuYCB3aWxsIHN0aWxsIHJlYWQgaXQgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGguIEJ1dC4uLiB0aGUgbWVtb3J5IGZvciBgaW5mby1cdTAwM2VoZWxwZXJgIGNvbWVzIGZyb20gYHBhci1cdTAwM2V0YXJnaW5mb2AsIHJpZ2h0PyBUaGF0J3MgZnJvbSB1c2Vyc3BhY2UuIElmIGBpbmZvLVx1MDAzZWhlbHBlcmAgaXNuJ3QgbnVsbC10ZXJtaW5hdGVkLCBgc3RybmxlbmAgbWlnaHQgcmVhZCBpdC5cblxuSXMgYGluZm9gICpmdWxseSogaW5pdGlhbGl6ZWQgZnJvbSB1c2Vyc3BhY2U/IExldCBtZSBkb3VibGUtY2hlY2suIFRoZSBjb2RlIHVzZXMgYGNvcHlfZnJvbV91c2VyYC4gU28sIHllcyEgQmVjYXVzZSB1c2Vyc3BhY2UgaXMgd3JpdGluZyB0byB0aGUga2VybmVsLCBzbyBLTVNBTiBzaG91bGQgbm90IGNvbXBsYWluLCBhcyBpdCBtYXJrcyBhbGwgdGhlIG1lbW9yeSBjb3BpZWQgZnJvbSB1c2Vyc3BhY2UgYXMgaW5pdGlhbGl6ZWQhIFNvLCBpdCBpbml0aWFsaXplcyBpdCBhcyBmYXIgYXMgdGhlIGtlcm5lbCBpcyBjb25jZXJuZWQuXG5cbkxldCdzIGxvb2sgYXQgdGhlIG90aGVyIGNoYW5nZXMuLi4gcmVtb3ZpbmcgYHByX2RlYnVnYC4gTm90aGluZyB0byBzZWUgdGhlcmUuXG5cblNvLCBpbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGlzIG1vc3RseSBhIGNsZWFudXAsIHJlbW92aW5nIGBwcl9kZWJ1Z2AgYW5kIGNoYW5naW5nIHNvbWUgdG8gYHByX2luZm9fcmF0ZWxpbWl0ZWRgLiBUaGUgYHh0X0NULmNgIGNoYW5nZSAqZG9lcyogaGF2ZSBhIGxvZ2ljIGVycm9yLCBpbiB0aGF0IGl0IHNraXBzIGVycm9yIGNoZWNraW5nLiBJdCBtYWtlcyB0aGUgaW5uZXIgY2hlY2sgZGVhZCBjb2RlIGFuZCBjaGFuZ2VzIGJlaGF2aW9yIGZvciBub24tbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MuIEJ1dCBpdCAqZG9lc24ndCogaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gYGluZm8tXHUwMDNlaGVscGVyYCAqaXMqIGluaXRpYWxpemVkIGJlY2F1c2UgaXQgY29tZXMgZnJvbSBgY29weV9mcm9tX3VzZXJgLiBLTVNBTiBpcyBub3QgYW4gaXNzdWUgaGVyZS4gTm8gbmVlZCBmb3IgdGhhdCBmdXp6aW5nLiBUaGUgcGF0Y2ggaGFzIGEgbG9naWMgZmxhdywgdGhhdCdzIGFsbC4gQW5kIGl0J3MgcHJvYmFibHkgZnVuY3Rpb25hbCwgbm90IGEgc2VjdXJpdHkgaXNzdWVcblxuIiwiSW5wdXRUb2tlbnMiOjE2OTE4LCJPdXRwdXRUb2tlbnMiOjIyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo0MjowOC45MjIyNjU3OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHByaW1hcmlseSByZW1vdmVzIGBwcl9kZWJ1Z2Agc3RhdGVtZW50cyBhbmQgY29udmVydHMgc29tZSB0byBgcHJfaW5mb19yYXRlbGltaXRlZGAgYWNyb3NzIHZhcmlvdXMgbmV0ZmlsdGVyIG1vZHVsZXMuIFRoZXJlIGlzIGFsc28gYSBsb2dpY2FsIGNoYW5nZSBpbiBgeHRfQ1QuY2AgcmVnYXJkaW5nIHRoZSB2YWxpZGF0aW9uIG9mIGBpbmZvLVxcdTAwM2VoZWxwZXJgIGFuZCBgaW5mby1cXHUwMDNldGltZW91dGAgc3RyaW5ncywgd2hpY2ggaW50cm9kdWNlcyBkZWFkIGNvZGUgYW5kIGFsdGVycyB0aGUgZXJyb3IgaGFuZGxpbmcgZm9yIG5vbi1udWxsLXRlcm1pbmF0ZWQgc3RyaW5ncy4gSG93ZXZlciwgdGhlIGBpbmZvYCBzdHJ1Y3R1cmUgKGBwYXItXFx1MDAzZXRhcmdpbmZvYCkgaXMgcG9wdWxhdGVkIHZpYSBgY29weV9mcm9tX3VzZXJgIHdpdGggZGF0YSBwcm92aWRlZCBieSB1c2Vyc3BhY2UsIG1lYW5pbmcgdGhlIG1lbW9yeSBpcyBmdWxseSBpbml0aWFsaXplZCBmcm9tIHRoZSBrZXJuZWwncyBwZXJzcGVjdGl2ZS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhZGQgY29udHJvbCBmbG93IGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyB0aGUgbG9naWMgZmxhdyBpbiBgeHRfQ1QuY2ApIGFyZSBmdW5jdGlvbmFsIGFuZCBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcHJpbWFyaWx5IHJlbW92ZXMgYHByX2RlYnVnYCBzdGF0ZW1lbnRzIGFuZCBjb252ZXJ0cyBzb21lIHRvIGBwcl9pbmZvX3JhdGVsaW1pdGVkYCBhY3Jvc3MgdmFyaW91cyBuZXRmaWx0ZXIgbW9kdWxlcy4gVGhlcmUgaXMgYWxzbyBhIGxvZ2ljYWwgY2hhbmdlIGluIGB4dF9DVC5jYCByZWdhcmRpbmcgdGhlIHZhbGlkYXRpb24gb2YgYGluZm8tXFx1MDAzZWhlbHBlcmAgYW5kIGBpbmZvLVxcdTAwM2V0aW1lb3V0YCBzdHJpbmdzLCB3aGljaCBpbnRyb2R1Y2VzIGRlYWQgY29kZSBhbmQgYWx0ZXJzIHRoZSBlcnJvciBoYW5kbGluZyBmb3Igbm9uLW51bGwtdGVybWluYXRlZCBzdHJpbmdzLiBIb3dldmVyLCB0aGUgYGluZm9gIHN0cnVjdHVyZSAoYHBhci1cXHUwMDNldGFyZ2luZm9gKSBpcyBwb3B1bGF0ZWQgdmlhIGBjb3B5X2Zyb21fdXNlcmAgd2l0aCBkYXRhIHByb3ZpZGVkIGJ5IHVzZXJzcGFjZSwgbWVhbmluZyB0aGUgbWVtb3J5IGlzIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gdGhlIGtlcm5lbCdzIHBlcnNwZWN0aXZlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHRoZSBsb2dpYyBmbGF3IGluIGB4dF9DVC5jYCkgYXJlIGZ1bmN0aW9uYWwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowlkk2s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 14:21:39 +0000 UTC FinishedAt: 2026-08-18 14:42:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_XT_TARGET_CT", "NETFILTER_XT_TARGET_IDLETIMER", "NF_CONNTRACK", "IP_NF_RAW", "NETFILTER_ADVANCED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER_XT_TARGET_CT", "NETFILTER_XT_TARGET_IDLETIMER", "NF_CONNTRACK", "IP_NF_RAW", "NETFILTER_ADVANCED" ], "series_id": "a5e13ed6-9ed0-4c77-a101-4d738c809f3e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xt_ct_tg_check", "idletimer_tg_checkentry", "idletimer_tg_checkentry_v1" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9YVF9UQVJHRVRfQ1QmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVImIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O0lQX05GX1JBVyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4dF9jdF90Z19jaGVjayYjMzQ7LAogICAgJiMzNDtpZGxldGltZXJfdGdfY2hlY2tlbnRyeSYjMzQ7LAogICAgJiMzNDtpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgcmVtb3ZlcyBgcHJfZGVidWdgIHN0YXRlbWVudHMgYW5kIGNvbnZlcnRzIHNvbWUgdG8gYHByX2luZm9fcmF0ZWxpbWl0ZWRgIGFjcm9zcyB2YXJpb3VzIG5ldGZpbHRlciBtb2R1bGVzLiBUaGVyZSBpcyBhbHNvIGEgbG9naWNhbCBjaGFuZ2UgaW4gYHh0X0NULmNgIHJlZ2FyZGluZyB0aGUgdmFsaWRhdGlvbiBvZiBgaW5mby1cdTAwM2VoZWxwZXJgIGFuZCBgaW5mby1cdTAwM2V0aW1lb3V0YCBzdHJpbmdzLCB3aGljaCBpbnRyb2R1Y2VzIGRlYWQgY29kZSBhbmQgYWx0ZXJzIHRoZSBlcnJvciBoYW5kbGluZyBmb3Igbm9uLW51bGwtdGVybWluYXRlZCBzdHJpbmdzLiBIb3dldmVyLCB0aGUgYGluZm9gIHN0cnVjdHVyZSAoYHBhci1cdTAwM2V0YXJnaW5mb2ApIGlzIHBvcHVsYXRlZCB2aWEgYGNvcHlfZnJvbV91c2VyYCB3aXRoIGRhdGEgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUga2VybmVsJiMzOTtzIHBlcnNwZWN0aXZlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHRoZSBsb2dpYyBmbGF3IGluIGB4dF9DVC5jYCkgYXJlIGZ1bmN0aW9uYWwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgeHRfQ1QuY2AgdG8gY2hhbmdlIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgaW5mby1cdTAwM2VoZWxwZXJgIGFuZCBgaW5mby1cdTAwM2V0aW1lb3V0YC4gSWYgdGhleSBhcmUgbm90IG51bGwtdGVybWluYXRlZCwgdGhlIG5ldyBjb2RlIHNraXBzIHNldHRpbmcgdGhlbSBpbnN0ZWFkIG9mIHJldHVybmluZyBgLUVOQU1FVE9PTE9OR2AsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHRhcmdldCBpbml0aWFsaXphdGlvbiBsb2dpYy4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYHh0X0lETEVUSU1FUi5jYCB0byByZWxlYXNlIGEgbXV0ZXggYmVmb3JlIGxvZ2dpbmcsIHdoaWNoIGlzIGEgbWlub3IgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDkzMzhhZWM1NWNlMWVkMGZlZjAxOGIwYzg3YTZhZTM0MWI2YTZhNzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxNDozOToyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FoLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FoLmNcbmluZGV4IDE2MWJhNDEyY2IwOGIuLjcxMzFmMjk3YWRhMmUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfYWguY1xuQEAgLTE5LDEyICYjNDM7MTksNyBAQCBNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7WHRhYmxlczogSVB2NCBJUHNlYy1BSCBTUEkgbWF0Y2hcJiMzNDspO1xuIHN0YXRpYyBpbmxpbmUgYm9vbFxuIHNwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBib29sIGludmVydClcbiB7XG4tXHRib29sIHI7XG4tXHRwcl9kZWJ1ZyhcJiMzNDtzcGlfbWF0Y2g6JWMgMHgleCBcdTAwM2M9IDB4JXggXHUwMDNjPSAweCV4XFxuXCYjMzQ7LFxuLVx0XHQgaW52ZXJ0ID8gJiMzOTshJiMzOTsgOiAmIzM5OyAmIzM5OywgbWluLCBzcGksIG1heCk7XG4tXHRyID0gKHNwaSBcdTAwM2U9IG1pbiBcdTAwMjZcdTAwMjYgc3BpIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbi1cdHByX2RlYnVnKFwmIzM0OyByZXN1bHQgJXNcXG5cJiMzNDssIHIgPyBcJiMzNDtQQVNTXCYjMzQ7IDogXCYjMzQ7RkFJTEVEXCYjMzQ7KTtcbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiAoc3BpIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBzcGkgXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBhaF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG5AQCAtNDIsNyAmIzQzOzM3LDYgQEAgc3RhdGljIGJvb2wgYWhfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHQvKiBXZSYjMzk7dmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2VcbiBcdFx0ICogY2FuJiMzOTt0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC5cbiBcdFx0ICovXG4tXHRcdHByX2RlYnVnKFwmIzM0O0Ryb3BwaW5nIGV2aWwgQUggdGlueWdyYW0uXFxuXCYjMzQ7KTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5AQCAtNTgsNyAmIzQzOzUyLDcgQEAgc3RhdGljIGludCBhaF9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcbiBcdC8qIE11c3Qgc3BlY2lmeSBubyB1bmtub3duIGludmZsYWdzICovXG4gXHRpZiAoYWhpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiB+SVBUX0FIX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O3Vua25vd24gZmxhZ3MgJVhcXG5cJiMzNDssIGFoaW5mby1cdTAwM2VpbnZmbGFncyk7XG4mIzQzO1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O3Vua25vd24gZmxhZ3MgJVhcXG5cJiMzNDssIGFoaW5mby1cdTAwM2VpbnZmbGFncyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ycGZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ycGZpbHRlci5jXG5pbmRleCA2ZDliZjUxMDY4Njg0Li4yYzM4ZmQ2NjI0YWExIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ycGZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JwZmlsdGVyLmNcbkBAIC05NSw4ICYjNDM7OTUsNyBAQCBzdGF0aWMgaW50IHJwZmlsdGVyX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFxuIFx0aWYgKHN0cmNtcChwYXItXHUwMDNldGFibGUsIFwmIzM0O21hbmdsZVwmIzM0OykgIT0gMCBcdTAwMjZcdTAwMjZcbiBcdCAgICBzdHJjbXAocGFyLVx1MDAzZXRhYmxlLCBcJiMzNDtyYXdcJiMzNDspICE9IDApIHtcbi1cdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtvbmx5IHZhbGlkIGluIFxcJiMzOTtyYXdcXCYjMzk7IG9yIFxcJiMzOTttYW5nbGVcXCYjMzk7IHRhYmxlLCBub3QgXFwmIzM5OyVzXFwmIzM5O1xcblwmIzM0Oyxcbi1cdFx0XHRcdCAgICBwYXItXHUwMDNldGFibGUpO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtvbmx5IHZhbGlkIGluIFxcJiMzOTtyYXdcXCYjMzk7IG9yIFxcJiMzOTttYW5nbGVcXCYjMzk7IHRhYmxlXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmNcbmluZGV4IDEyNTg3ODNlZDg3NjIuLmRhYjdkYmM2YTY3NWMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jXG5AQCAtMjQsMTMgJiM0MzsyNCw3IEBAIE1PRFVMRV9BVVRIT1IoXCYjMzQ7QW5kcmFzIEtpcy1TemFibyBcdTAwM2NraXN6YUBzY2guYm1lLmh1XHUwMDNlXCYjMzQ7KTtcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpXG4ge1xuLVx0Ym9vbCByO1xuLVxuLVx0cHJfZGVidWcoXCYjMzQ7c3BpX21hdGNoOiVjIDB4JXggXHUwMDNjPSAweCV4IFx1MDAzYz0gMHgleFxcblwmIzM0Oyxcbi1cdFx0IGludmVydCA/ICYjMzk7ISYjMzk7IDogJiMzOTsgJiMzOTssIG1pbiwgc3BpLCBtYXgpO1xuLVx0ciA9IChzcGkgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IHNwaSBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4tXHRwcl9kZWJ1ZyhcJiMzNDsgcmVzdWx0ICVzXFxuXCYjMzQ7LCByID8gXCYjMzQ7UEFTU1wmIzM0OyA6IFwmIzM0O0ZBSUxFRFwmIzM0Oyk7XG4tXHRyZXR1cm4gcjtcbiYjNDM7XHRyZXR1cm4gKHNwaSBcdTAwM2U9IG1pbiBcdTAwMjZcdTAwMjYgc3BpIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgYWhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbkBAIC02MiwyMyAmIzQzOzU2LDYgQEAgc3RhdGljIGJvb2wgYWhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuLVx0cHJfZGVidWcoXCYjMzQ7SVB2NiBBSCBMRU4gJXUgJXUgXCYjMzQ7LCBoZHJsZW4sIGFoLVx1MDAzZWhkcmxlbik7XG4tXHRwcl9kZWJ1ZyhcJiMzNDtSRVMgJTA0WCBcJiMzNDssIGFoLVx1MDAzZXJlc2VydmVkKTtcbi1cdHByX2RlYnVnKFwmIzM0O1NQSSAldSAlMDhYXFxuXCYjMzQ7LCBudG9obChhaC1cdTAwM2VzcGkpLCBudG9obChhaC1cdTAwM2VzcGkpKTtcbi1cbi1cdHByX2RlYnVnKFwmIzM0O0lQdjYgQUggc3BpICUwMlggXCYjMzQ7LFxuLVx0XHQgc3BpX21hdGNoKGFoaW5mby1cdTAwM2VzcGlzWzBdLCBhaGluZm8tXHUwMDNlc3Bpc1sxXSxcbi1cdFx0XHQgICBudG9obChhaC1cdTAwM2VzcGkpLFxuLVx0XHRcdCAgICEhKGFoaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgSVA2VF9BSF9JTlZfU1BJKSkpO1xuLVx0cHJfZGVidWcoXCYjMzQ7bGVuICUwMlggJTA0WCAlMDJYIFwmIzM0Oyxcbi1cdFx0IGFoaW5mby1cdTAwM2VoZHJsZW4sIGhkcmxlbixcbi1cdFx0ICghYWhpbmZvLVx1MDAzZWhkcmxlbiB8fFxuLVx0XHQgIChhaGluZm8tXHUwMDNlaGRybGVuID09IGhkcmxlbikgXlxuLVx0XHQgICEhKGFoaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgSVA2VF9BSF9JTlZfTEVOKSkpO1xuLVx0cHJfZGVidWcoXCYjMzQ7cmVzICUwMlggJTA0WCAlMDJYXFxuXCYjMzQ7LFxuLVx0XHQgYWhpbmZvLVx1MDAzZWhkcnJlcywgYWgtXHUwMDNlcmVzZXJ2ZWQsXG4tXHRcdCAhKGFoaW5mby1cdTAwM2VoZHJyZXMgXHUwMDI2XHUwMDI2IGFoLVx1MDAzZXJlc2VydmVkKSk7XG4tXG4gXHRyZXR1cm4gc3BpX21hdGNoKGFoaW5mby1cdTAwM2VzcGlzWzBdLCBhaGluZm8tXHUwMDNlc3Bpc1sxXSxcbiBcdFx0XHQgIG50b2hsKGFoLVx1MDAzZXNwaSksXG4gXHRcdFx0ICAhIShhaGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IElQNlRfQUhfSU5WX1NQSSkpIFx1MDAyNlx1MDAyNlxuQEAgLTkzLDcgJiM0Mzs3MCw3IEBAIHN0YXRpYyBpbnQgYWhfbXQ2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IGlwNnRfYWggKmFoaW5mbyA9IHBhci1cdTAwM2VtYXRjaGluZm87XG4gXG4gXHRpZiAoYWhpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiB+SVA2VF9BSF9JTlZfTUFTSykge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDt1bmtub3duIGZsYWdzICVYXFxuXCYjMzQ7LCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDt1bmtub3duIGZsYWdzICVYXFxuXCYjMzQ7LCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuY1xuaW5kZXggM2FhZDY0MzkzODZiMS4uZjVmM2NmYjg3MDRjZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jXG5AQCAtMjMsMTIgJiM0MzsyMyw3IEBAIE1PRFVMRV9BVVRIT1IoXCYjMzQ7QW5kcmFzIEtpcy1TemFibyBcdTAwM2NraXN6YUBzY2guYm1lLmh1XHUwMDNlXCYjMzQ7KTtcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBpZF9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3QgaWQsIGJvb2wgaW52ZXJ0KVxuIHtcbi1cdGJvb2wgcjtcbi1cdHByX2RlYnVnKFwmIzM0O2lkX21hdGNoOiVjIDB4JXggXHUwMDNjPSAweCV4IFx1MDAzYz0gMHgleFxcblwmIzM0OywgaW52ZXJ0ID8gJiMzOTshJiMzOTsgOiAmIzM5OyAmIzM5Oyxcbi1cdFx0IG1pbiwgaWQsIG1heCk7XG4tXHRyID0gKGlkIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBpZCBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4tXHRwcl9kZWJ1ZyhcJiMzNDsgcmVzdWx0ICVzXFxuXCYjMzQ7LCByID8gXCYjMzQ7UEFTU1wmIzM0OyA6IFwmIzM0O0ZBSUxFRFwmIzM0Oyk7XG4tXHRyZXR1cm4gcjtcbiYjNDM7XHRyZXR1cm4gKGlkIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBpZCBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4gfVxuIFxuIHN0YXRpYyBib29sXG5AQCAtNTMsMzggJiM0Mzs0OCw2IEBAIGZyYWdfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuLVx0cHJfZGVidWcoXCYjMzQ7SU5GTyAlMDRYIFwmIzM0OywgZmgtXHUwMDNlZnJhZ19vZmYpO1xuLVx0cHJfZGVidWcoXCYjMzQ7T0ZGU0VUICUwNFggXCYjMzQ7LCBudG9ocyhmaC1cdTAwM2VmcmFnX29mZikgXHUwMDI2IH4weDcpO1xuLVx0cHJfZGVidWcoXCYjMzQ7UkVTICUwMlggJTA0WFwmIzM0OywgZmgtXHUwMDNlcmVzZXJ2ZWQsIG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgMHg2KTtcbi1cdHByX2RlYnVnKFwmIzM0O01GICUwNFggXCYjMzQ7LCBmaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVA2X01GKSk7XG4tXHRwcl9kZWJ1ZyhcJiMzNDtJRCAldSAlMDhYXFxuXCYjMzQ7LCBudG9obChmaC1cdTAwM2VpZGVudGlmaWNhdGlvbiksXG4tXHRcdCBudG9obChmaC1cdTAwM2VpZGVudGlmaWNhdGlvbikpO1xuLVxuLVx0cHJfZGVidWcoXCYjMzQ7SVB2NiBGUkFHIGlkICUwMlggXCYjMzQ7LFxuLVx0XHQgaWRfbWF0Y2goZnJhZ2luZm8tXHUwMDNlaWRzWzBdLCBmcmFnaW5mby1cdTAwM2VpZHNbMV0sXG4tXHRcdFx0ICBudG9obChmaC1cdTAwM2VpZGVudGlmaWNhdGlvbiksXG4tXHRcdFx0ICAhIShmcmFnaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgSVA2VF9GUkFHX0lOVl9JRFMpKSk7XG4tXHRwcl9kZWJ1ZyhcJiMzNDtyZXMgJTAyWCAlMDJYJTA0WCAlMDJYIFwmIzM0Oyxcbi1cdFx0IGZyYWdpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZUX0ZSQUdfUkVTLCBmaC1cdTAwM2VyZXNlcnZlZCxcbi1cdFx0IG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgMHg2LFxuLVx0XHQgISgoZnJhZ2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19SRVMpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAoZmgtXHUwMDNlcmVzZXJ2ZWQgfHwgKG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgMHgwNikpKSk7XG4tXHRwcl9kZWJ1ZyhcJiMzNDtmaXJzdCAlMDJYICUwMlggJTAyWCBcJiMzNDssXG4tXHRcdCBmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX0ZTVCxcbi1cdFx0IG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgfjB4Nyxcbi1cdFx0ICEoKGZyYWdpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZUX0ZSQUdfRlNUKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgKG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgfjB4NykpKTtcbi1cdHByX2RlYnVnKFwmIzM0O21mICUwMlggJTAyWCAlMDJYIFwmIzM0Oyxcbi1cdFx0IGZyYWdpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZUX0ZSQUdfTUYsXG4tXHRcdCBudG9ocyhmaC1cdTAwM2VmcmFnX29mZikgXHUwMDI2IElQNl9NRixcbi1cdFx0ICEoKGZyYWdpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZUX0ZSQUdfTUYpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAhKChudG9ocyhmaC1cdTAwM2VmcmFnX29mZikgXHUwMDI2IElQNl9NRikpKSk7XG4tXHRwcl9kZWJ1ZyhcJiMzNDtsYXN0ICUwMlggJTAyWCAlMDJYXFxuXCYjMzQ7LFxuLVx0XHQgZnJhZ2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19OTUYsXG4tXHRcdCBudG9ocyhmaC1cdTAwM2VmcmFnX29mZikgXHUwMDI2IElQNl9NRixcbi1cdFx0ICEoKGZyYWdpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZUX0ZSQUdfTk1GKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgKG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgSVA2X01GKSkpO1xuLVxuIFx0cmV0dXJuIGlkX21hdGNoKGZyYWdpbmZvLVx1MDAzZWlkc1swXSwgZnJhZ2luZm8tXHUwMDNlaWRzWzFdLFxuIFx0XHRcdCBudG9obChmaC1cdTAwM2VpZGVudGlmaWNhdGlvbiksXG4gXHRcdFx0ICEhKGZyYWdpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiBJUDZUX0ZSQUdfSU5WX0lEUykpIFx1MDAyNlx1MDAyNlxuQEAgLTEwMyw3ICYjNDM7NjYsNyBAQCBzdGF0aWMgaW50IGZyYWdfbXQ2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IGlwNnRfZnJhZyAqZnJhZ2luZm8gPSBwYXItXHUwMDNlbWF0Y2hpbmZvO1xuIFxuIFx0aWYgKGZyYWdpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiB+SVA2VF9GUkFHX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O3Vua25vd24gZmxhZ3MgJVhcXG5cJiMzNDssIGZyYWdpbmZvLVx1MDAzZWludmZsYWdzKTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7dW5rbm93biBmbGFncyAlWFxcblwmIzM0OywgZnJhZ2luZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmNcbmluZGV4IDZkMWE1ZDIwMjZhNjcuLjM3YzIwN2QzMTUyYTQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmNcbkBAIC03OSwxNCAmIzQzOzc5LDYgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbi1cdHByX2RlYnVnKFwmIzM0O0lQdjYgT1BUUyBMRU4gJXUgJXUgXCYjMzQ7LCBoZHJsZW4sIG9oLVx1MDAzZWhkcmxlbik7XG4tXG4tXHRwcl9kZWJ1ZyhcJiMzNDtsZW4gJTAyWCAlMDRYICUwMlggXCYjMzQ7LFxuLVx0XHQgb3B0aW5mby1cdTAwM2VoZHJsZW4sIGhkcmxlbixcbi1cdFx0ICghKG9wdGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfT1BUU19MRU4pIHx8XG4tXHRcdCAgKChvcHRpbmZvLVx1MDAzZWhkcmxlbiA9PSBoZHJsZW4pIF5cbi1cdFx0ICAgISEob3B0aW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgSVA2VF9PUFRTX0lOVl9MRU4pKSkpO1xuLVxuIFx0cmV0ID0gKCEob3B0aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9PUFRTX0xFTikgfHxcbiBcdCAgICAgICAoKG9wdGluZm8tXHUwMDNlaGRybGVuID09IGhkcmxlbikgXlxuIFx0XHQhIShvcHRpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiBJUDZUX09QVFNfSU5WX0xFTikpKTtcbkBAIC05Niw4ICYjNDM7ODgsNiBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdGlmICghKG9wdGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfT1BUU19PUFRTKSkge1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fSBlbHNlIHtcbi1cdFx0cHJfZGVidWcoXCYjMzQ7U3RyaWN0IFwmIzM0Oyk7XG4tXHRcdHByX2RlYnVnKFwmIzM0OyMlZCBcJiMzNDssIG9wdGluZm8tXHUwMDNlb3B0c25yKTtcbiBcdFx0Zm9yICh0ZW1wID0gMDsgdGVtcCBcdTAwM2Mgb3B0aW5mby1cdTAwM2VvcHRzbnI7IHRlbXAmIzQzOyYjNDM7KSB7XG4gXHRcdFx0LyogdHlwZSBmaWVsZCBleGlzdHMgPyAqL1xuIFx0XHRcdGlmIChoZHJsZW4gXHUwMDNjIDEpXG5AQCAtMTA4LDEzICYjNDM7OTgsOSBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRcdC8qIFR5cGUgY2hlY2sgKi9cbi1cdFx0XHRpZiAoKnRwICE9IChvcHRpbmZvLVx1MDAzZW9wdHNbdGVtcF0gXHUwMDI2IDB4RkYwMCkgXHUwMDNlXHUwMDNlIDgpIHtcbi1cdFx0XHRcdHByX2RlYnVnKFwmIzM0O1RiYWQgJTAyWCAlMDJYXFxuXCYjMzQ7LCAqdHAsXG4tXHRcdFx0XHRcdCAob3B0aW5mby1cdTAwM2VvcHRzW3RlbXBdIFx1MDAyNiAweEZGMDApIFx1MDAzZVx1MDAzZSA4KTtcbiYjNDM7XHRcdFx0aWYgKCp0cCAhPSAob3B0aW5mby1cdTAwM2VvcHRzW3RlbXBdIFx1MDAyNiAweEZGMDApIFx1MDAzZVx1MDAzZSA4KVxuIFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtUb2sgXCYjMzQ7KTtcbi1cdFx0XHR9XG4mIzQzO1xuIFx0XHRcdC8qIExlbmd0aCBjaGVjayAqL1xuIFx0XHRcdGlmICgqdHApIHtcbiBcdFx0XHRcdHUxNiBzcGVjX2xlbjtcbkBAIC0xMjksMjYgJiM0MzsxMTUsMTggQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0c3BlY19sZW4gPSBvcHRpbmZvLVx1MDAzZW9wdHNbdGVtcF0gXHUwMDI2IDB4MDBGRjtcbiBcbi1cdFx0XHRcdGlmIChzcGVjX2xlbiAhPSAweDAwRkYgXHUwMDI2XHUwMDI2IHNwZWNfbGVuICE9ICpscCkge1xuLVx0XHRcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtMYmFkICUwMlggJTA0WFxcblwmIzM0OywgKmxwLFxuLVx0XHRcdFx0XHRcdCBzcGVjX2xlbik7XG4mIzQzO1x0XHRcdFx0aWYgKHNwZWNfbGVuICE9IDB4MDBGRiBcdTAwMjZcdTAwMjYgc3BlY19sZW4gIT0gKmxwKVxuIFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtMb2sgXCYjMzQ7KTtcbiYjNDM7XG4gXHRcdFx0XHRvcHRsZW4gPSAqbHAgJiM0MzsgMjtcbiBcdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0cHJfZGVidWcoXCYjMzQ7UGFkMVxcblwmIzM0Oyk7XG4gXHRcdFx0XHRvcHRsZW4gPSAxO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHQvKiBTdGVwIHRvIHRoZSBuZXh0ICovXG4tXHRcdFx0cHJfZGVidWcoXCYjMzQ7bGVuJTA0WFxcblwmIzM0Oywgb3B0bGVuKTtcbi1cbiBcdFx0XHRpZiAoKHB0ciBcdTAwM2Ugc2tiLVx1MDAzZWxlbiAtIG9wdGxlbiB8fCBoZHJsZW4gXHUwMDNjIG9wdGxlbikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIHRlbXAgXHUwMDNjIG9wdGluZm8tXHUwMDNlb3B0c25yIC0gMSkge1xuLVx0XHRcdFx0cHJfZGVidWcoXCYjMzQ7bmV3IHBvaW50ZXIgaXMgdG9vIGxhcmdlIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdCAgICB0ZW1wIFx1MDAzYyBvcHRpbmZvLVx1MDAzZW9wdHNuciAtIDEpXG4gXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4mIzQzO1xuIFx0XHRcdHB0ciAmIzQzOz0gb3B0bGVuO1xuIFx0XHRcdGhkcmxlbiAtPSBvcHRsZW47XG4gXHRcdH1cbkBAIC0xNjYsMTYgJiM0MzsxNDQsMTYgQEAgc3RhdGljIGludCBoYmhfbXQ2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IGlwNnRfb3B0cyAqb3B0c2luZm8gPSBwYXItXHUwMDNlbWF0Y2hpbmZvO1xuIFxuIFx0aWYgKG9wdHNpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiB+SVA2VF9PUFRTX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O3Vua25vd24gZmxhZ3MgJVhcXG5cJiMzNDssIG9wdHNpbmZvLVx1MDAzZWludmZsYWdzKTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7dW5rbm93biBmbGFncyAlWFxcblwmIzM0Oywgb3B0c2luZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdGlmIChvcHRzaW5mby1cdTAwM2VvcHRzbnIgXHUwMDNlIElQNlRfT1BUU19PUFRTTlIpIHtcbi1cdFx0cHJfZGVidWcoXCYjMzQ7dG9vIG1hbnkgc3VwcG9ydGVkIG9wdHMgc3BlY2lmaWVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7dG9vIG1hbnkgc3VwcG9ydGVkIG9wdHMgc3BlY2lmaWVkXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRpZiAob3B0c2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfT1BUU19OU1RSSUNUKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O05vdCBzdHJpY3QgLSBub3QgaW1wbGVtZW50ZWRcJiMzNDspO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtOb3Qgc3RyaWN0IC0gbm90IGltcGxlbWVudGVkXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbWguYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X21oLmNcbmluZGV4IGZkNDkyYjY5YWNiYzAuLmJhNmRjYzc3OTFhMDkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9taC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9taC5jXG5AQCAtNDIsMTQgJiM0Mzs0MiwxMSBAQCBzdGF0aWMgYm9vbCBtaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0aWYgKG1oID09IE5VTEwpIHtcbiBcdFx0LyogV2UmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXG4gXHRcdCAgIGNhbiYjMzk7dC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuICovXG4tXHRcdHByX2RlYnVnKFwmIzM0O0Ryb3BwaW5nIGV2aWwgTUggdGlueWdyYW0uXFxuXCYjMzQ7KTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHRpZiAobWgtXHUwMDNlaXA2bWhfcHJvdG8gIT0gSVBQUk9UT19OT05FKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O0Ryb3BwaW5nIGludmFsaWQgTUggUGF5bG9hZCBQcm90bzogJXVcXG5cJiMzNDssXG4tXHRcdFx0IG1oLVx1MDAzZWlwNm1oX3Byb3RvKTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnBmaWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmNcbmluZGV4IDY3Yzg3YTg4Y2RlNGYuLmFmOGQxMGQ0OWRlODEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jXG5AQCAtMTE4LDcgJiM0MzsxMTgsNyBAQCBzdGF0aWMgaW50IHJwZmlsdGVyX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFxuIFx0aWYgKHN0cmNtcChwYXItXHUwMDNldGFibGUsIFwmIzM0O21hbmdsZVwmIzM0OykgIT0gMCBcdTAwMjZcdTAwMjZcbiBcdCAgICBzdHJjbXAocGFyLVx1MDAzZXRhYmxlLCBcJiMzNDtyYXdcJiMzNDspICE9IDApIHtcbi1cdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtvbmx5IHZhbGlkIGluIFxcJiMzOTtyYXdcXCYjMzk7IG9yIFxcJiMzOTttYW5nbGVcXCYjMzk7IHRhYmxlLCBub3QgXFwmIzM5OyVzXFwmIzM5O1xcblwmIzM0OyxcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7b25seSB2YWxpZCBpbiBcXCYjMzk7cmF3XFwmIzM5OyBvciBcXCYjMzk7bWFuZ2xlXFwmIzM5OyB0YWJsZVxcblwmIzM0OyxcbiBcdFx0XHRcdCAgICBwYXItXHUwMDNldGFibGUpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuY1xuaW5kZXggMjc4YjUyNzUyZjM2NC4uMGMwMWFjMjc0NmQxZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmNcbkBAIC0xNTUsMTggJiM0MzsxNTUsMTggQEAgc3RhdGljIGludCBydF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3QgaXA2dF9ydCAqcnRpbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiBcbiBcdGlmIChydGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IH5JUDZUX1JUX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O3Vua25vd24gZmxhZ3MgJVhcXG5cJiMzNDssIHJ0aW5mby1cdTAwM2VpbnZmbGFncyk7XG4mIzQzO1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O3Vua25vd24gZmxhZ3MgJVhcXG5cJiMzNDssIHJ0aW5mby1cdTAwM2VpbnZmbGFncyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKHJ0aW5mby1cdTAwM2VhZGRybnIgXHUwMDNlIElQNlRfUlRfSE9QUykge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDt0b28gbWFueSBhZGRyZXNzZXMgc3BlY2lmaWVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7dG9vIG1hbnkgYWRkcmVzc2VzIHNwZWNpZmllZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKChydGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IChJUDZUX1JUX1JFUyB8IElQNlRfUlRfRlNUX01BU0spKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAoIShydGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfUlRfVFlQKSB8fFxuIFx0ICAgICAocnRpbmZvLVx1MDAzZXJ0X3R5cGUgIT0gMCkgfHxcbiBcdCAgICAgKHJ0aW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgSVA2VF9SVF9JTlZfVFlQKSkpIHtcbi1cdFx0cHJfZGVidWcoXCYjMzQ7YC0tcnQtdHlwZSAwJiMzOTsgcmVxdWlyZWQgYmVmb3JlIGAtLXJ0LTAtKiYjMzk7XCYjMzQ7KTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7YC0tcnQtdHlwZSAwJiMzOTsgcmVxdWlyZWQgYmVmb3JlIGAtLXJ0LTAtKiYjMzk7XCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5jIGIvbmV0L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5jXG5pbmRleCAxNDk0YjNlZTMwZTExLi40ZTQ0MzZhOTEwNGI0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmNcbkBAIC04Nyw4ICYjNDM7ODcsNyBAQCBzdGF0aWMgaW50IGNvbm5zZWNtYXJrX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFxuIFx0aWYgKHN0cmNtcChwYXItXHUwMDNldGFibGUsIFwmIzM0O21hbmdsZVwmIzM0OykgIT0gMCBcdTAwMjZcdTAwMjZcbiBcdCAgICBzdHJjbXAocGFyLVx1MDAzZXRhYmxlLCBcJiMzNDtzZWN1cml0eVwmIzM0OykgIT0gMCkge1xuLVx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O29ubHkgdmFsaWQgaW4gXFwmIzM5O21hbmdsZVxcJiMzOTsgb3IgXFwmIzM5O3NlY3VyaXR5XFwmIzM5OyB0YWJsZSwgbm90IFxcJiMzOTslc1xcJiMzOTtcXG5cJiMzNDssXG4tXHRcdFx0XHQgICAgcGFyLVx1MDAzZXRhYmxlKTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7b25seSB2YWxpZCBpbiBcXCYjMzk7bWFuZ2xlXFwmIzM5OyBvciBcXCYjMzk7c2VjdXJpdHlcXCYjMzk7IHRhYmxlXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DVC5jIGIvbmV0L25ldGZpbHRlci94dF9DVC5jXG5pbmRleCBlNzg2NjBkZmRmNGI2Li45MTMyNjAxNGFkZTFjIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9DVC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X0NULmNcbkBAIC0xOTUsNyAmIzQzOzE5NSw4IEBAIHN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsXG4gXHRcdGdvdG8gZXJyMztcbiBcdH1cbiBcbi1cdGlmIChpbmZvLVx1MDAzZWhlbHBlclswXSkge1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZWhlbHBlclswXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc3RybmxlbihpbmZvLVx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiBcdFx0aWYgKHN0cm5sZW4oaW5mby1cdTAwM2VoZWxwZXIsIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpID09IHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiBcdFx0XHRyZXQgPSAtRU5BTUVUT09MT05HO1xuIFx0XHRcdGdvdG8gZXJyMztcbkBAIC0yMDYsNyAmIzQzOzIwNyw4IEBAIHN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsXG4gXHRcdFx0Z290byBlcnIzO1xuIFx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNldGltZW91dFswXSkge1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZXRpbWVvdXRbMF0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHN0cm5sZW4oaW5mby1cdTAwM2V0aW1lb3V0LCBzaXplb2YoaW5mby1cdTAwM2V0aW1lb3V0KSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gXHRcdGlmIChzdHJubGVuKGluZm8tXHUwMDNldGltZW91dCwgc2l6ZW9mKGluZm8tXHUwMDNldGltZW91dCkpID09IHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gXHRcdFx0cmV0ID0gLUVOQU1FVE9PTE9ORztcbiBcdFx0XHRnb3RvIGVycjQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcbmluZGV4IGJmY2YyZDQ0ZTkzZGIuLjE1YjY5OGVhOThhYTYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG5AQCAtMTAyLDggJiM0MzsxMDIsNiBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZXhwaXJlZChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiB7XG4gXHRzdHJ1Y3QgaWRsZXRpbWVyX3RnICp0aW1lciA9IHRpbWVyX2NvbnRhaW5lcl9vZih0aW1lciwgdCwgdGltZXIpO1xuIFxuLVx0cHJfZGVidWcoXCYjMzQ7dGltZXIgJXMgZXhwaXJlZFxcblwmIzM0OywgdGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpO1xuLVxuIFx0c2NoZWR1bGVfd29yayhcdTAwMjZ0aW1lci1cdTAwM2V3b3JrKTtcbiB9XG4gXG5AQCAtMTExLDcgJiM0MzsxMDksNiBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfYWxhcm1wcm9jKHN0cnVjdCBhbGFybSAqYWxhcm0sIGt0aW1lX3Qgbm93KVxuIHtcbiBcdHN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyID0gYWxhcm0tXHUwMDNlZGF0YTtcbiBcbi1cdHByX2RlYnVnKFwmIzM0O2FsYXJtICVzIGV4cGlyZWRcXG5cJiMzNDssIHRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lKTtcbiBcdHNjaGVkdWxlX3dvcmsoXHUwMDI2dGltZXItXHUwMDNld29yayk7XG4gfVxuIFxuQEAgLTE3MSw3ICYjNDM7MTY4LDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbylcbiBcbiBcdHJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKGlkbGV0aW1lcl90Z19rb2JqLCBcdTAwMjZpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZWF0dHIuYXR0cik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O2NvdWxkbiYjMzk7dCBhZGQgZmlsZSB0byBzeXNmc1wmIzM0Oyk7XG4mIzQzO1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O2NvdWxkbiYjMzk7dCBhZGQgZmlsZSB0byBzeXNmc1wmIzM0Oyk7XG4gXHRcdGdvdG8gb3V0X2ZyZWVfYXR0cjtcbiBcdH1cbiBcbkBAIC0yMjAsNyAmIzQzOzIxNyw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXG4gXG4gXHRyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShpZGxldGltZXJfdGdfa29iaiwgXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIpO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtjb3VsZG4mIzM5O3QgYWRkIGZpbGUgdG8gc3lzZnNcJiMzNDspO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtjb3VsZG4mIzM5O3QgYWRkIGZpbGUgdG8gc3lzZnNcJiMzNDspO1xuIFx0XHRnb3RvIG91dF9mcmVlX2F0dHI7XG4gXHR9XG4gXG5AQCAtMjI4LDcgJiM0MzsyMjUsNiBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvKVxuIFx0a29iamVjdF91ZXZlbnQoaWRsZXRpbWVyX3RnX2tvYmosS09CSl9BREQpO1xuIFxuIFx0bGlzdF9hZGQoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VlbnRyeSwgXHUwMDI2aWRsZXRpbWVyX3RnX2xpc3QpO1xuLVx0cHJfZGVidWcoXCYjMzQ7dGltZXIgdHlwZSB2YWx1ZSBpcyAldVwmIzM0OywgaW5mby1cdTAwM2V0aW1lcl90eXBlKTtcbiBcdGluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXJfdHlwZSA9IGluZm8tXHUwMDNldGltZXJfdHlwZTtcbiBcdGluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250ID0gMTtcbiBcbkBAIC0yNjMsOSAmIzQzOzI1OSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaWRsZXRpbWVyX3RnX3RhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIHtcbiBcdGNvbnN0IHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbyA9IHBhci1cdTAwM2V0YXJnaW5mbztcbiBcbi1cdHByX2RlYnVnKFwmIzM0O3Jlc2V0dGluZyB0aW1lciAlcywgdGltZW91dCBwZXJpb2QgJXVcXG5cJiMzNDssXG4tXHRcdCBpbmZvLVx1MDAzZWxhYmVsLCBpbmZvLVx1MDAzZXRpbWVvdXQpO1xuLVxuIFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gXHRcdCAgc2Vjc190b19qaWZmaWVzKGluZm8tXHUwMDNldGltZW91dCkgJiM0MzsgamlmZmllcyk7XG4gXG5AQCAtMjgwLDkgJiM0MzsyNzMsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4tXHRwcl9kZWJ1ZyhcJiMzNDtyZXNldHRpbmcgdGltZXIgJXMsIHRpbWVvdXQgcGVyaW9kICV1XFxuXCYjMzQ7LFxuLVx0XHQgaW5mby1cdTAwM2VsYWJlbCwgaW5mby1cdTAwM2V0aW1lb3V0KTtcbi1cbiBcdGlmIChpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXRpbWVyX3R5cGUgXHUwMDI2IFhUX0lETEVUSU1FUl9BTEFSTSkge1xuIFx0XHRpZGxldGltZXJfc3RhcnRfYWxhcm1fc2VjKGluZm8tXHUwMDNldGltZXIsIGluZm8tXHUwMDNldGltZW91dCk7XG4gXHR9IGVsc2Uge1xuQEAgLTI5NiwxNyAmIzQzOzI4NiwxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19oZWxwZXIoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKVxuIHtcbiBcdGlmIChpbmZvLVx1MDAzZXRpbWVvdXQgPT0gMCkge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDt0aW1lb3V0IHZhbHVlIGlzIHplcm9cXG5cJiMzNDspO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDt0aW1lb3V0IHZhbHVlIGlzIHplcm9cXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdGlmIChpbmZvLVx1MDAzZXRpbWVvdXQgXHUwMDNlPSBJTlRfTUFYIC8gMTAwMCkge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDt0aW1lb3V0IHZhbHVlIGlzIHRvbyBiaWdcXG5cJiMzNDspO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDt0aW1lb3V0IHZhbHVlIGlzIHRvbyBiaWdcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdGlmIChpbmZvLVx1MDAzZWxhYmVsWzBdID09ICYjMzk7XFwwJiMzOTsgfHxcbiBcdCAgICBzdHJubGVuKGluZm8tXHUwMDNlbGFiZWwsXG4gXHRcdCAgICBNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkUpID09IE1BWF9JRExFVElNRVJfTEFCRUxfU0laRSkge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtsYWJlbCBpcyBlbXB0eSBvciBub3QgbnVsLXRlcm1pbmF0ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtsYWJlbCBpcyBlbXB0eSBvciBub3QgbnVsLXRlcm1pbmF0ZWRcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiAwO1xuQEAgLTMxOCwzNCAmIzQzOzMwOCwyNSBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFx0c3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIFx0aW50IHJldDtcbiBcbi1cdHByX2RlYnVnKFwmIzM0O2NoZWNrZW50cnkgdGFyZ2luZm8lc1xcblwmIzM0OywgaW5mby1cdTAwM2VsYWJlbCk7XG4tXG4gXHRyZXQgPSBpZGxldGltZXJfdGdfaGVscGVyKGluZm8pO1xuIFx0aWYocmV0IFx1MDAzYyAwKVxuLVx0e1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtjaGVja2VudHJ5IGhlbHBlciByZXR1cm4gaW52YWxpZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiBcbiBcdGluZm8tXHUwMDNldGltZXIgPSBfX2lkbGV0aW1lcl90Z19maW5kX2J5X2xhYmVsKGluZm8tXHUwMDNlbGFiZWwpO1xuIFx0aWYgKGluZm8tXHUwMDNldGltZXIpIHtcbiBcdFx0aWYgKGluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXJfdHlwZSBcdTAwMjYgWFRfSURMRVRJTUVSX0FMQVJNKSB7XG4tXHRcdFx0cHJfZGVidWcoXCYjMzQ7QWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcXG5cJiMzNDspO1xuIFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiYjNDM7XHRcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtBZGRpbmcvUmVwbGFjaW5nIHJ1bGUgd2l0aCBzYW1lIGxhYmVsIGFuZCBkaWZmZXJlbnQgdGltZXIgdHlwZSBpcyBub3QgYWxsb3dlZFxcblwmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcbiBcdFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQmIzQzOyYjNDM7O1xuIFx0XHRtb2RfdGltZXIoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcixcbiBcdFx0XHQgIHNlY3NfdG9famlmZmllcyhpbmZvLVx1MDAzZXRpbWVvdXQpICYjNDM7IGppZmZpZXMpO1xuLVxuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtpbmNyZWFzZWQgcmVmY250IG9mIHRpbWVyICVzIHRvICV1XFxuXCYjMzQ7LFxuLVx0XHRcdCBpbmZvLVx1MDAzZWxhYmVsLCBpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXJlZmNudCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRyZXQgPSBpZGxldGltZXJfdGdfY3JlYXRlKGluZm8pO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdFx0cHJfZGVidWcoXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSB0aW1lclxcblwmIzM0Oyk7XG4gXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbkBAIC0zNjAsMzAgJiM0MzszNDEsMjMgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MShjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbiBcdHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbyA9IHBhci1cdTAwM2V0YXJnaW5mbztcbiBcdGludCByZXQ7XG4gXG4tXHRwcl9kZWJ1ZyhcJiMzNDtjaGVja2VudHJ5IHRhcmdpbmZvJXNcXG5cJiMzNDssIGluZm8tXHUwMDNlbGFiZWwpO1xuLVxuIFx0aWYgKGluZm8tXHUwMDNlc2VuZF9ubF9tc2cpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHJldCA9IGlkbGV0aW1lcl90Z19oZWxwZXIoKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqKWluZm8pO1xuIFx0aWYocmV0IFx1MDAzYyAwKVxuLVx0e1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtjaGVja2VudHJ5IGhlbHBlciByZXR1cm4gaW52YWxpZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNldGltZXJfdHlwZSBcdTAwM2UgWFRfSURMRVRJTUVSX0FMQVJNKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O2ludmFsaWQgdmFsdWUgZm9yIHRpbWVyIHR5cGVcXG5cJiMzNDspO1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZXRpbWVyX3R5cGUgXHUwMDNlIFhUX0lETEVUSU1FUl9BTEFSTSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuIFx0aW5mby1cdTAwM2V0aW1lciA9IF9faWRsZXRpbWVyX3RnX2ZpbmRfYnlfbGFiZWwoaW5mby1cdTAwM2VsYWJlbCk7XG4gXHRpZiAoaW5mby1cdTAwM2V0aW1lcikge1xuIFx0XHRpZiAoaW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlICE9IGluZm8tXHUwMDNldGltZXJfdHlwZSkge1xuLVx0XHRcdHByX2RlYnVnKFwmIzM0O0FkZGluZy9SZXBsYWNpbmcgcnVsZSB3aXRoIHNhbWUgbGFiZWwgYW5kIGRpZmZlcmVudCB0aW1lciB0eXBlIGlzIG5vdCBhbGxvd2VkXFxuXCYjMzQ7KTtcbiBcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4mIzQzO1x0XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7QWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcXG5cJiMzNDspO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXG5AQCAtMzkzLDIxICYjNDM7MzY3LDE1IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRcdFx0a3RpbWVfdCB0b3V0ID0gYWxhcm1fZXhwaXJlc19yZW1haW5pbmcoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhbGFybSk7XG4gXHRcdFx0c3RydWN0IHRpbWVzcGVjNjQga3RpbWVzcGVjID0ga3RpbWVfdG9fdGltZXNwZWM2NCh0b3V0KTtcbiBcbi1cdFx0XHRpZiAoa3RpbWVzcGVjLnR2X3NlYyBcdTAwM2UgMCkge1xuLVx0XHRcdFx0cHJfZGVidWcoXCYjMzQ7dGltZV9leHBpcnlfcmVtYWluaW5nICVsbGRcXG5cJiMzNDssXG4tXHRcdFx0XHRcdCBrdGltZXNwZWMudHZfc2VjKTtcbiYjNDM7XHRcdFx0aWYgKGt0aW1lc3BlYy50dl9zZWMgXHUwMDNlIDApXG4gXHRcdFx0XHRpZGxldGltZXJfc3RhcnRfYWxhcm1fa3RpbWUoaW5mby1cdTAwM2V0aW1lciwgdG91dCk7XG4tXHRcdFx0fVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gXHRcdFx0XHRcdHNlY3NfdG9famlmZmllcyhpbmZvLVx1MDAzZXRpbWVvdXQpICYjNDM7IGppZmZpZXMpO1xuIFx0XHR9XG4tXHRcdHByX2RlYnVnKFwmIzM0O2luY3JlYXNlZCByZWZjbnQgb2YgdGltZXIgJXMgdG8gJXVcXG5cJiMzNDssXG4tXHRcdFx0IGluZm8tXHUwMDNlbGFiZWwsIGluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250KTtcbiBcdH0gZWxzZSB7XG4gXHRcdHJldCA9IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoaW5mbyk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0XHRwcl9kZWJ1ZyhcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIHRpbWVyXFxuXCYjMzQ7KTtcbiBcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuQEAgLTQyMSwxOSAmIzQzOzM4OSwxMyBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtICpwYXIpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIFxuLVx0cHJfZGVidWcoXCYjMzQ7ZGVzdHJveSB0YXJnaW5mbyAlc1xcblwmIzM0OywgaW5mby1cdTAwM2VsYWJlbCk7XG4tXG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuIFx0aWYgKC0taW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQgXHUwMDNlIDApIHtcbi1cdFx0cHJfZGVidWcoXCYjMzQ7ZGVjcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxcblwmIzM0Oyxcbi1cdFx0XHQgaW5mby1cdTAwM2VsYWJlbCwgaW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQpO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHByX2RlYnVnKFwmIzM0O2RlbGV0aW5nIHRpbWVyICVzXFxuXCYjMzQ7LCBpbmZvLVx1MDAzZWxhYmVsKTtcbi1cbiBcdGxpc3RfZGVsKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlZW50cnkpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuQEAgLTQ0OCwxOSAmIzQzOzQxMCwxMyBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZGVzdHJveV92MShjb25zdCBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtICpwYXIpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIFxuLVx0cHJfZGVidWcoXCYjMzQ7ZGVzdHJveSB0YXJnaW5mbyAlc1xcblwmIzM0OywgaW5mby1cdTAwM2VsYWJlbCk7XG4tXG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuIFx0aWYgKC0taW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQgXHUwMDNlIDApIHtcbi1cdFx0cHJfZGVidWcoXCYjMzQ7ZGVjcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxcblwmIzM0Oyxcbi1cdFx0XHQgaW5mby1cdTAwM2VsYWJlbCwgaW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQpO1xuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHByX2RlYnVnKFwmIzM0O2RlbGV0aW5nIHRpbWVyICVzXFxuXCYjMzQ7LCBpbmZvLVx1MDAzZWxhYmVsKTtcbi1cbiBcdGxpc3RfZGVsKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlZW50cnkpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuQEAgLTUzNCw3ICYjNDM7NDkwLDcgQEAgc3RhdGljIGludCBfX2luaXQgaWRsZXRpbWVyX3RnX2luaXQodm9pZClcbiBcdGlkbGV0aW1lcl90Z19jbGFzcyA9IGNsYXNzX2NyZWF0ZShcJiMzNDt4dF9pZGxldGltZXJcJiMzNDspO1xuIFx0ZXJyID0gUFRSX0VSUihpZGxldGltZXJfdGdfY2xhc3MpO1xuIFx0aWYgKElTX0VSUihpZGxldGltZXJfdGdfY2xhc3MpKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O2NvdWxkbiYjMzk7dCByZWdpc3RlciBkZXZpY2UgY2xhc3NcXG5cJiMzNDspO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtjb3VsZG4mIzM5O3QgcmVnaXN0ZXIgZGV2aWNlIGNsYXNzXFxuXCYjMzQ7KTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG5AQCAtNTQyLDcgJiM0Mzs0OTgsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBpZGxldGltZXJfdGdfaW5pdCh2b2lkKVxuIFx0XHRcdFx0XHQgICAgTUtERVYoMCwgMCksIE5VTEwsIFwmIzM0O3RpbWVyc1wmIzM0Oyk7XG4gXHRlcnIgPSBQVFJfRVJSKGlkbGV0aW1lcl90Z19kZXZpY2UpO1xuIFx0aWYgKElTX0VSUihpZGxldGltZXJfdGdfZGV2aWNlKSkge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtjb3VsZG4mIzM5O3QgcmVnaXN0ZXIgc3lzdGVtIGRldmljZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O2NvdWxkbiYjMzk7dCByZWdpc3RlciBzeXN0ZW0gZGV2aWNlXFxuXCYjMzQ7KTtcbiBcdFx0Z290byBvdXRfY2xhc3M7XG4gXHR9XG4gXG5AQCAtNTUxLDcgJiM0Mzs1MDcsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBpZGxldGltZXJfdGdfaW5pdCh2b2lkKVxuIFx0ZXJyID0geHRfcmVnaXN0ZXJfdGFyZ2V0cyhpZGxldGltZXJfdGcsIEFSUkFZX1NJWkUoaWRsZXRpbWVyX3RnKSk7XG4gXG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O2NvdWxkbiYjMzk7dCByZWdpc3RlciB4dCB0YXJnZXRcXG5cJiMzNDspO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtjb3VsZG4mIzM5O3QgcmVnaXN0ZXIgeHQgdGFyZ2V0XFxuXCYjMzQ7KTtcbiBcdFx0Z290byBvdXRfZGV2O1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfTE9HLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0xPRy5jXG5pbmRleCBmMzkyNDRmOWMwZWQ5Li5kZTNmMTc2NzkyYTA3IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9MT0cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9MT0cuY1xuQEAgLTUwLDEyICYjNDM7NTAsMTIgQEAgc3RhdGljIGludCBsb2dfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGxvZ2luZm8tXHUwMDNlbGV2ZWwgXHUwMDNlPSA4KSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O2xldmVsICV1IFx1MDAzZT0gOFxcblwmIzM0OywgbG9naW5mby1cdTAwM2VsZXZlbCk7XG4mIzQzO1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O2xldmVsICV1IFx1MDAzZT0gOFxcblwmIzM0OywgbG9naW5mby1cdTAwM2VsZXZlbCk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuIFx0aWYgKGxvZ2luZm8tXHUwMDNlcHJlZml4W3NpemVvZihsb2dpbmZvLVx1MDAzZXByZWZpeCktMV0gIT0gJiMzOTtcXDAmIzM5Oykge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtwcmVmaXggaXMgbm90IG51bGwtdGVybWluYXRlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O3ByZWZpeCBpcyBub3QgbnVsbC10ZXJtaW5hdGVkXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9NQVNRVUVSQURFLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuY1xuaW5kZXggZWFlMDVjMTc4MzM2Ny4uY2VhNDg4Y2VjNTQ0NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTUFTUVVFUkFERS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuY1xuQEAgLTIxLDExICYjNDM7MjEsMTEgQEAgc3RhdGljIGludCBtYXNxdWVyYWRlX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IG5mX25hdF9pcHY0X211bHRpX3JhbmdlX2NvbXBhdCAqbXIgPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4gXHRpZiAobXItXHUwMDNlcmFuZ2VbMF0uZmxhZ3MgXHUwMDI2IE5GX05BVF9SQU5HRV9NQVBfSVBTKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O2JhZCBNQVBfSVBTLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O2JhZCBNQVBfSVBTLlxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKG1yLVx1MDAzZXJhbmdlc2l6ZSAhPSAxKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O2JhZCByYW5nZXNpemUgJXVcXG5cJiMzNDssIG1yLVx1MDAzZXJhbmdlc2l6ZSk7XG4mIzQzO1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O2JhZCByYW5nZXNpemUgJXVcXG5cJiMzNDssIG1yLVx1MDAzZXJhbmdlc2l6ZSk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0cmV0dXJuIG5mX2N0X25ldG5zX2dldChwYXItXHUwMDNlbmV0LCBwYXItXHUwMDNlZmFtaWx5KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jIGIvbmV0L25ldGZpbHRlci94dF9ORVRNQVAuY1xuaW5kZXggY2IyZWU4MGQ4NGZhOC4uOGM4NmQ5YTQzMzczYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTkVUTUFQLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfTkVUTUFQLmNcbkBAIC0xMDYsMTEgJiM0MzsxMDYsMTEgQEAgc3RhdGljIGludCBuZXRtYXBfdGc0X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IG5mX25hdF9pcHY0X211bHRpX3JhbmdlX2NvbXBhdCAqbXIgPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4gXHRpZiAoIShtci1cdTAwM2VyYW5nZVswXS5mbGFncyBcdTAwMjYgTkZfTkFUX1JBTkdFX01BUF9JUFMpKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O2JhZCBNQVBfSVBTLlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O2JhZCBNQVBfSVBTLlxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKG1yLVx1MDAzZXJhbmdlc2l6ZSAhPSAxKSB7XG4tXHRcdHByX2RlYnVnKFwmIzM0O2JhZCByYW5nZXNpemUgJXUuXFxuXCYjMzQ7LCBtci1cdTAwM2VyYW5nZXNpemUpO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtiYWQgcmFuZ2VzaXplICV1LlxcblwmIzM0OywgbXItXHUwMDNlcmFuZ2VzaXplKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRyZXR1cm4gbmZfY3RfbmV0bnNfZ2V0KHBhci1cdTAwM2VuZXQsIHBhci1cdTAwM2VmYW1pbHkpO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfUkVESVJFQ1QuYyBiL25ldC9uZXRmaWx0ZXIveHRfUkVESVJFQ1QuY1xuaW5kZXggZmY2NmI1NmEzZjk3ZC4uMjdiYzA1NDVjNGY3NCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfUkVESVJFQ1QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jXG5AQCAtNTEsMTEgJiM0Mzs1MSwxMSBAQCBzdGF0aWMgaW50IHJlZGlyZWN0X3RnNF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbiBcdGNvbnN0IHN0cnVjdCBuZl9uYXRfaXB2NF9tdWx0aV9yYW5nZV9jb21wYXQgKm1yID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIFxuIFx0aWYgKG1yLVx1MDAzZXJhbmdlWzBdLmZsYWdzIFx1MDAyNiBORl9OQVRfUkFOR0VfTUFQX0lQUykge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtiYWQgTUFQX0lQUy5cXG5cJiMzNDspO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtiYWQgTUFQX0lQUy5cXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdGlmIChtci1cdTAwM2VyYW5nZXNpemUgIT0gMSkge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtiYWQgcmFuZ2VzaXplICV1LlxcblwmIzM0OywgbXItXHUwMDNlcmFuZ2VzaXplKTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7YmFkIHJhbmdlc2l6ZSAldS5cXG5cJiMzNDssIG1yLVx1MDAzZXJhbmdlc2l6ZSk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0cmV0dXJuIG5mX2N0X25ldG5zX2dldChwYXItXHUwMDNlbmV0LCBwYXItXHUwMDNlZmFtaWx5KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1NFQ01BUksuYyBiL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jXG5pbmRleCA1YmM1ZWE1MDVlYjllLi4zOGU4ZTQxMGI0ZTgxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jXG5AQCAtNzksOCAmIzQzOzc5LDcgQEAgc2VjbWFya190Z19jaGVjayhjb25zdCBjaGFyICp0YWJsZSwgc3RydWN0IHh0X3NlY21hcmtfdGFyZ2V0X2luZm9fdjEgKmluZm8pXG4gXG4gXHRpZiAoc3RyY21wKHRhYmxlLCBcJiMzNDttYW5nbGVcJiMzNDspICE9IDAgXHUwMDI2XHUwMDI2XG4gXHQgICAgc3RyY21wKHRhYmxlLCBcJiMzNDtzZWN1cml0eVwmIzM0OykgIT0gMCkge1xuLVx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O29ubHkgdmFsaWQgaW4gXFwmIzM5O21hbmdsZVxcJiMzOTsgb3IgXFwmIzM5O3NlY3VyaXR5XFwmIzM5OyB0YWJsZSwgbm90IFxcJiMzOTslc1xcJiMzOTtcXG5cJiMzNDssXG4tXHRcdFx0XHQgICAgdGFibGUpO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcJiMzNDtvbmx5IHZhbGlkIGluIFxcJiMzOTttYW5nbGVcXCYjMzk7IG9yIFxcJiMzOTtzZWN1cml0eVxcJiMzOTsgdGFibGVcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2Nncm91cC5jIGIvbmV0L25ldGZpbHRlci94dF9jZ3JvdXAuY1xuaW5kZXggNDNkMmFlMmJlNjI4ZC4uYWMxYjdlNzFjZDdmNSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfY2dyb3VwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfY2dyb3VwLmNcbkBAIC0zMyw3ICYjNDM7MzMsNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192MChjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHtcbi1cdFx0cHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC00OSw3ICYjNDM7NDksNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192MShjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIWluZm8tXHUwMDNlaGFzX3BhdGggXHUwMDI2XHUwMDI2ICFpbmZvLVx1MDAzZWhhc19jbGFzc2lkKSB7XG4tXHRcdHByX2luZm8oXCYjMzQ7eHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7eHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtNTksNyAmIzQzOzU5LDcgQEAgc3RhdGljIGludCBjZ3JvdXBfbXRfY2hlY2tfdjEoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHR9XG4gXG4gXHRpZiAoaW5mby1cdTAwM2VoYXNfY2xhc3NpZCBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHtcbi1cdFx0cHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC04OSw3ICYjNDM7ODksNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192Mihjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIWluZm8tXHUwMDNlaGFzX3BhdGggXHUwMDI2XHUwMDI2ICFpbmZvLVx1MDAzZWhhc19jbGFzc2lkKSB7XG4tXHRcdHByX2luZm8oXCYjMzQ7eHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7eHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtOTksNyAmIzQzOzk5LDcgQEAgc3RhdGljIGludCBjZ3JvdXBfbXRfY2hlY2tfdjIoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHR9XG4gXG4gXHRpZiAoaW5mby1cdTAwM2VoYXNfY2xhc3NpZCBcdTAwMjZcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHtcbi1cdFx0cHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuJiM0MztcdFx0cHJfaW5mb19yYXRlbGltaXRlZChORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jIGIvbmV0L25ldGZpbHRlci94dF9lc3AuY1xuaW5kZXggMmExYzBhZDBmZjA3OS4uNjhmZDc1ODg0MjY4YSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfZXNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfZXNwLmNcbkBAIC0yNSwxMiAmIzQzOzI1LDcgQEAgTU9EVUxFX0FMSUFTKFwmIzM0O2lwNnRfZXNwXCYjMzQ7KTtcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpXG4ge1xuLVx0Ym9vbCByO1xuLVx0cHJfZGVidWcoXCYjMzQ7c3BpX21hdGNoOiVjIDB4JXggXHUwMDNjPSAweCV4IFx1MDAzYz0gMHgleFxcblwmIzM0Oyxcbi1cdFx0IGludmVydCA/ICYjMzk7ISYjMzk7IDogJiMzOTsgJiMzOTssIG1pbiwgc3BpLCBtYXgpO1xuLVx0ciA9IChzcGkgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IHNwaSBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4tXHRwcl9kZWJ1ZyhcJiMzNDsgcmVzdWx0ICVzXFxuXCYjMzQ7LCByID8gXCYjMzQ7UEFTU1wmIzM0OyA6IFwmIzM0O0ZBSUxFRFwmIzM0Oyk7XG4tXHRyZXR1cm4gcjtcbiYjNDM7XHRyZXR1cm4gKHNwaSBcdTAwM2U9IG1pbiBcdTAwMjZcdTAwMjYgc3BpIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgZXNwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbkBAIC00OCw3ICYjNDM7NDMsNiBAQCBzdGF0aWMgYm9vbCBlc3BfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHQvKiBXZSYjMzk7dmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2VcbiBcdFx0ICogY2FuJiMzOTt0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC5cbiBcdFx0ICovXG4tXHRcdHByX2RlYnVnKFwmIzM0O0Ryb3BwaW5nIGV2aWwgRVNQIHRpbnlncmFtLlxcblwmIzM0Oyk7XG4gXHRcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuQEAgLTYyLDcgJiM0Mzs1Niw3IEBAIHN0YXRpYyBpbnQgZXNwX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IHh0X2VzcCAqZXNwaW5mbyA9IHBhci1cdTAwM2VtYXRjaGluZm87XG4gXG4gXHRpZiAoZXNwaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgflhUX0VTUF9JTlZfTUFTSykge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDt1bmtub3duIGZsYWdzICVYXFxuXCYjMzQ7LCBlc3BpbmZvLVx1MDAzZWludmZsYWdzKTtcbiYjNDM7XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCYjMzQ7dW5rbm93biBmbGFncyAlWFxcblwmIzM0OywgZXNwaW5mby1cdTAwM2VpbnZmbGFncyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaXBjb21wLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwY29tcC5jXG5pbmRleCA0NzJkYTYzOWEzMmUyLi4zMjk5YzFlYTYwZjllIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcGNvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9pcGNvbXAuY1xuQEAgLTI5LDEyICYjNDM7MjksNyBAQCBNT0RVTEVfQUxJQVMoXCYjMzQ7aXA2dF9pcGNvbXBcJiMzNDspO1xuIHN0YXRpYyBpbmxpbmUgYm9vbFxuIHNwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBib29sIGludmVydClcbiB7XG4tXHRib29sIHI7XG4tXHRwcl9kZWJ1ZyhcJiMzNDtzcGlfbWF0Y2g6JWMgMHgleCBcdTAwM2M9IDB4JXggXHUwMDNjPSAweCV4XFxuXCYjMzQ7LFxuLVx0XHQgaW52ZXJ0ID8gJiMzOTshJiMzOTsgOiAmIzM5OyAmIzM5OywgbWluLCBzcGksIG1heCk7XG4tXHRyID0gKHNwaSBcdTAwM2U9IG1pbiBcdTAwMjZcdTAwMjYgc3BpIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbi1cdHByX2RlYnVnKFwmIzM0OyByZXN1bHQgJXNcXG5cJiMzNDssIHIgPyBcJiMzNDtQQVNTXCYjMzQ7IDogXCYjMzQ7RkFJTEVEXCYjMzQ7KTtcbi1cdHJldHVybiByO1xuJiM0MztcdHJldHVybiAoc3BpIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBzcGkgXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBjb21wX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbkBAIC01Miw3ICYjNDM7NDcsNiBAQCBzdGF0aWMgYm9vbCBjb21wX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0LyogV2UmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXG4gXHRcdCAqIGNhbiYjMzk7dC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuXG4gXHRcdCAqL1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtEcm9wcGluZyBldmlsIElQQ29tcCB0aW55Z3JhbS5cXG5cJiMzNDspO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYyBiL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jXG5pbmRleCAwYzllMDE0ZTMwYjQ5Li5iZjYxMTQxZmI3ODUwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jXG5AQCAtMjQsMjcgJiM0MzsyNCwxNSBAQCBpcHJhbmdlX210NChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdG0gID0gbnRvaGwoaXBoLVx1MDAzZXNhZGRyKSBcdTAwM2MgbnRvaGwoaW5mby1cdTAwM2VzcmNfbWluLmlwKTtcbiBcdFx0bSB8PSBudG9obChpcGgtXHUwMDNlc2FkZHIpIFx1MDAzZSBudG9obChpbmZvLVx1MDAzZXNyY19tYXguaXApO1xuIFx0XHRtIF49ICEhKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVik7XG4tXHRcdGlmIChtKSB7XG4tXHRcdFx0cHJfZGVidWcoXCYjMzQ7c3JjIElQICVwSTQgTk9UIGluIHJhbmdlICVzJXBJNC0lcEk0XFxuXCYjMzQ7LFxuLVx0XHRcdCAgICAgICAgIFx1MDAyNmlwaC1cdTAwM2VzYWRkcixcbi1cdFx0XHQgICAgICAgICAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9TUkNfSU5WKSA/IFwmIzM0OyhJTlYpIFwmIzM0OyA6IFwmIzM0O1wmIzM0Oyxcbi1cdFx0XHQgICAgICAgICBcdTAwMjZpbmZvLVx1MDAzZXNyY19taW4uaXAsXG4tXHRcdFx0ICAgICAgICAgXHUwMDI2aW5mby1cdTAwM2VzcmNfbWF4LmlwKTtcbiYjNDM7XHRcdGlmIChtKVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0fVxuIFx0fVxuIFx0aWYgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfRFNUKSB7XG4gXHRcdG0gID0gbnRvaGwoaXBoLVx1MDAzZWRhZGRyKSBcdTAwM2MgbnRvaGwoaW5mby1cdTAwM2Vkc3RfbWluLmlwKTtcbiBcdFx0bSB8PSBudG9obChpcGgtXHUwMDNlZGFkZHIpIFx1MDAzZSBudG9obChpbmZvLVx1MDAzZWRzdF9tYXguaXApO1xuIFx0XHRtIF49ICEhKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfRFNUX0lOVik7XG4tXHRcdGlmIChtKSB7XG4tXHRcdFx0cHJfZGVidWcoXCYjMzQ7ZHN0IElQICVwSTQgTk9UIGluIHJhbmdlICVzJXBJNC0lcEk0XFxuXCYjMzQ7LFxuLVx0XHRcdCAgICAgICAgIFx1MDAyNmlwaC1cdTAwM2VkYWRkcixcbi1cdFx0XHQgICAgICAgICAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9EU1RfSU5WKSA/IFwmIzM0OyhJTlYpIFwmIzM0OyA6IFwmIzM0O1wmIzM0Oyxcbi1cdFx0XHQgICAgICAgICBcdTAwMjZpbmZvLVx1MDAzZWRzdF9taW4uaXAsXG4tXHRcdFx0ICAgICAgICAgXHUwMDI2aW5mby1cdTAwM2Vkc3RfbWF4LmlwKTtcbiYjNDM7XHRcdGlmIChtKVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0fVxuIFx0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuQEAgLTczLDI3ICYjNDM7NjEsMTUgQEAgaXByYW5nZV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRtICA9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmluZm8tXHUwMDNlc3JjX21pbi5pbjYpO1xuIFx0XHRtIHw9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpbmZvLVx1MDAzZXNyY19tYXguaW42LCBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuIFx0XHRtIF49ICEhKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVik7XG4tXHRcdGlmIChtKSB7XG4tXHRcdFx0cHJfZGVidWcoXCYjMzQ7c3JjIElQICVwSTYgTk9UIGluIHJhbmdlICVzJXBJNi0lcEk2XFxuXCYjMzQ7LFxuLVx0XHRcdFx0IFx1MDAyNmlwaC1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdCAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9TUkNfSU5WKSA/IFwmIzM0OyhJTlYpIFwmIzM0OyA6IFwmIzM0O1wmIzM0Oyxcbi1cdFx0XHRcdCBcdTAwMjZpbmZvLVx1MDAzZXNyY19taW4uaW42LFxuLVx0XHRcdFx0IFx1MDAyNmluZm8tXHUwMDNlc3JjX21heC5pbjYpO1xuJiM0MztcdFx0aWYgKG0pXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHR9XG4gXHR9XG4gXHRpZiAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9EU1QpIHtcbiBcdFx0bSAgPSBpcHJhbmdlX2lwdjZfbHQoXHUwMDI2aXBoLVx1MDAzZWRhZGRyLCBcdTAwMjZpbmZvLVx1MDAzZWRzdF9taW4uaW42KTtcbiBcdFx0bSB8PSBpcHJhbmdlX2lwdjZfbHQoXHUwMDI2aW5mby1cdTAwM2Vkc3RfbWF4LmluNiwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyKTtcbiBcdFx0bSBePSAhIShpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUFJBTkdFX0RTVF9JTlYpO1xuLVx0XHRpZiAobSkge1xuLVx0XHRcdHByX2RlYnVnKFwmIzM0O2RzdCBJUCAlcEk2IE5PVCBpbiByYW5nZSAlcyVwSTYtJXBJNlxcblwmIzM0Oyxcbi1cdFx0XHRcdCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHQgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfRFNUX0lOVikgPyBcJiMzNDsoSU5WKSBcJiMzNDsgOiBcJiMzNDtcJiMzNDssXG4tXHRcdFx0XHQgXHUwMDI2aW5mby1cdTAwM2Vkc3RfbWluLmluNixcbi1cdFx0XHRcdCBcdTAwMjZpbmZvLVx1MDAzZWRzdF9tYXguaW42KTtcbiYjNDM7XHRcdGlmIChtKVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0fVxuIFx0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jIGIvbmV0L25ldGZpbHRlci94dF9pcHZzLmNcbmluZGV4IDI1M2M3MWNjOWE2MzQuLmUxM2MwZmZiNzNhOWEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2lwdnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9pcHZzLmNcbkBAIC0xNDgsNyAmIzQzOzE0OCw2IEBAIGlwdnNfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIG91dF9wdXRfY3A6XG4gXHRfX2lwX3ZzX2Nvbm5fcHV0KGNwKTtcbiBvdXQ6XG4tXHRwcl9kZWJ1ZyhcJiMzNDttYXRjaD0lZFxcblwmIzM0OywgbWF0Y2gpO1xuIFx0cmV0dXJuIG1hdGNoO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jIGIvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuY1xuaW5kZXggYTE2OTFmZjQwNWQzYy4uYmZmNWY1M2E5YmVmYiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmNcbkBAIC0zNyw3ICYjNDM7MzcsNiBAQCBwb3J0c19tYXRjaF92MShjb25zdCBzdHJ1Y3QgeHRfbXVsdGlwb3J0X3YxICptaW5mbyxcbiBcdFx0aWYgKG1pbmZvLVx1MDAzZXBmbGFnc1tpXSkge1xuIFx0XHRcdC8qIHJhbmdlIHBvcnQgbWF0Y2hpbmcgKi9cbiBcdFx0XHRlID0gbWluZm8tXHUwMDNlcG9ydHNbJiM0MzsmIzQzO2ldO1xuLVx0XHRcdHByX2RlYnVnKFwmIzM0O3NyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkLSVkP1xcblwmIzM0OywgcywgZSk7XG4gXG4gXHRcdFx0c3dpdGNoIChtaW5mby1cdTAwM2VmbGFncykge1xuIFx0XHRcdGNhc2UgWFRfTVVMVElQT1JUX1NPVVJDRTpcbkBAIC01OCw4ICYjNDM7NTcsNiBAQCBwb3J0c19tYXRjaF92MShjb25zdCBzdHJ1Y3QgeHRfbXVsdGlwb3J0X3YxICptaW5mbyxcbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0LyogZXhhY3QgcG9ydCBtYXRjaGluZyAqL1xuLVx0XHRcdHByX2RlYnVnKFwmIzM0O3NyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkP1xcblwmIzM0Oywgcyk7XG4tXG4gXHRcdFx0c3dpdGNoIChtaW5mby1cdTAwM2VmbGFncykge1xuIFx0XHRcdGNhc2UgWFRfTVVMVElQT1JUX1NPVVJDRTpcbiBcdFx0XHRcdGlmIChzcmMgPT0gcylcbkBAIC05Nyw3ICYjNDM7OTQsNiBAQCBtdWx0aXBvcnRfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHQvKiBXZSYjMzk7dmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2VcbiBcdFx0ICogY2FuJiMzOTt0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC5cbiBcdFx0ICovXG4tXHRcdHByX2RlYnVnKFwmIzM0O0Ryb3BwaW5nIGV2aWwgb2Zmc2V0PTAgdGlueWdyYW0uXFxuXCYjMzQ7KTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuY1xuaW5kZXggYjQ2YTZhNTEyMDU4My4uZDM1YzIxZDk2NTFiMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuY1xuQEAgLTQ4LDMwICYjNDM7NDgsMTcgQEAgbWF0Y2hfcGFja2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjb25zdCBzdHJ1Y3QgeHRfc2N0cF9mbGFnX2luZm8gKmZsYWdfaW5mbyA9IGluZm8tXHUwMDNlZmxhZ19pbmZvO1xuIFx0aW50IGZsYWdfY291bnQgPSBpbmZvLVx1MDAzZWZsYWdfY291bnQ7XG4gXG4tI2lmZGVmIERFQlVHXG4tXHRpbnQgaSA9IDA7XG4tI2VuZGlmXG4tXG4gXHRpZiAoY2h1bmtfbWF0Y2hfdHlwZSA9PSBTQ1RQX0NIVU5LX01BVENIX0FMTClcbiBcdFx0U0NUUF9DSFVOS01BUF9DT1BZKGNodW5rbWFwY29weSwgaW5mby1cdTAwM2VjaHVua21hcCk7XG4gXG4gXHRkbyB7XG4gXHRcdHNjaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9zY2gpLCBcdTAwMjZfc2NoKTtcbiBcdFx0aWYgKHNjaCA9PSBOVUxMIHx8IHNjaC1cdTAwM2VsZW5ndGggPT0gMCkge1xuLVx0XHRcdHByX2RlYnVnKFwmIzM0O0Ryb3BwaW5nIGludmFsaWQgU0NUUCBwYWNrZXQuXFxuXCYjMzQ7KTtcbiBcdFx0XHQqaG90ZHJvcCA9IHRydWU7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4tI2lmZGVmIERFQlVHXG4tXHRcdHByX2RlYnVnKFwmIzM0O0NodW5rIG51bTogJWRcXHRvZmZzZXQ6ICVkXFx0dHlwZTogJWRcXHRsZW5ndGg6ICVkXCYjMzQ7XG4tXHRcdFx0IFwmIzM0O1xcdGZsYWdzOiAleFxcblwmIzM0Oyxcbi1cdFx0XHQgJiM0MzsmIzQzO2ksIG9mZnNldCwgc2NoLVx1MDAzZXR5cGUsIGh0b25zKHNjaC1cdTAwM2VsZW5ndGgpLFxuLVx0XHRcdCBzY2gtXHUwMDNlZmxhZ3MpO1xuLSNlbmRpZlxuIFx0XHRvZmZzZXQgJiM0Mzs9IFNDVFBfUEFENChudG9ocyhzY2gtXHUwMDNlbGVuZ3RoKSk7XG4gXG4tXHRcdHByX2RlYnVnKFwmIzM0O3NrYi1cdTAwM2VsZW46ICVkXFx0b2Zmc2V0OiAlZFxcblwmIzM0Oywgc2tiLVx1MDAzZWxlbiwgb2Zmc2V0KTtcbi1cbiBcdFx0aWYgKFNDVFBfQ0hVTktNQVBfSVNfU0VUKGluZm8tXHUwMDNlY2h1bmttYXAsIHNjaC1cdTAwM2V0eXBlKSkge1xuIFx0XHRcdHN3aXRjaCAoY2h1bmtfbWF0Y2hfdHlwZSkge1xuIFx0XHRcdGNhc2UgU0NUUF9DSFVOS19NQVRDSF9BTlk6XG5AQCAtMTIxLDE4ICYjNDM7MTA4LDE0IEBAIHNjdHBfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IHNjdHBoZHIgKnNoO1xuIFx0c3RydWN0IHNjdHBoZHIgX3NoO1xuIFxuLVx0aWYgKHBhci1cdTAwM2VmcmFnb2ZmICE9IDApIHtcbi1cdFx0cHJfZGVidWcoXCYjMzQ7RHJvcHBpbmcgbm9uLWZpcnN0IGZyYWdtZW50Li4gRklYTUVcXG5cJiMzNDspO1xuJiM0MztcdGlmIChwYXItXHUwMDNlZnJhZ29mZiAhPSAwKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4tXHR9XG4gXG4gXHRzaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHBhci1cdTAwM2V0aG9mZiwgc2l6ZW9mKF9zaCksIFx1MDAyNl9zaCk7XG4gXHRpZiAoc2ggPT0gTlVMTCkge1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtEcm9wcGluZyBldmlsIFRDUCBvZmZzZXQ9MCB0aW55Z3JhbS5cXG5cJiMzNDspO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbi1cdHByX2RlYnVnKFwmIzM0O3NwdDogJWRcXHRkcHQ6ICVkXFxuXCYjMzQ7LCBudG9ocyhzaC1cdTAwM2Vzb3VyY2UpLCBudG9ocyhzaC1cdTAwM2VkZXN0KSk7XG4gXG4gXHRyZXR1cm4gIFNDQ0hFQ0sobnRvaHMoc2gtXHUwMDNlc291cmNlKSBcdTAwM2U9IGluZm8tXHUwMDNlc3B0c1swXVxuIFx0XHRcdFx1MDAyNlx1MDAyNiBudG9ocyhzaC1cdTAwM2Vzb3VyY2UpIFx1MDAzYz0gaW5mby1cdTAwM2VzcHRzWzFdLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3RjcHVkcC5jXG5pbmRleCBmNzZjZjE4ZjFhMjQ0Li43MDYwOGI4ZDA2YWIyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuY1xuQEAgLTQ0LDggJiM0Mzs0NCw2IEBAIHRjcF9maW5kX29wdGlvbih1X2ludDhfdCBvcHRpb24sXG4gXHR1X2ludDhfdCBfb3B0WzYwIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpXTtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0cHJfZGVidWcoXCYjMzQ7ZmluZGluZyBvcHRpb25cXG5cJiMzNDspO1xuLVxuIFx0aWYgKCFvcHRsZW4pXG4gXHRcdHJldHVybiBpbnZlcnQ7XG4gXG5AQCAtODEsMTAgJiM0Mzs3OSw4IEBAIHN0YXRpYyBib29sIHRjcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdCAgIGNhdXNlcyB0aGlzLiBJdHMgYSBjcmFja2VyIHRyeWluZyB0byBicmVhayBpbiBieSBkb2luZyBhXG4gXHRcdCAgIGZsYWcgb3ZlcndyaXRlIHRvIHBhc3MgdGhlIGRpcmVjdGlvbiBjaGVja3MuXG4gXHRcdCovXG4tXHRcdGlmIChwYXItXHUwMDNlZnJhZ29mZiA9PSAxKSB7XG4tXHRcdFx0cHJfZGVidWcoXCYjMzQ7RHJvcHBpbmcgZXZpbCBUQ1Agb2Zmc2V0PTEgZnJhZy5cXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKHBhci1cdTAwM2VmcmFnb2ZmID09IDEpXG4gXHRcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuLVx0XHR9XG4gXHRcdC8qIE11c3Qgbm90IGJlIGEgZnJhZ21lbnQuICovXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC05Myw3ICYjNDM7ODksNiBAQCBzdGF0aWMgYm9vbCB0Y3BfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0aWYgKHRoID09IE5VTEwpIHtcbiBcdFx0LyogV2UmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXG4gXHRcdCAgIGNhbiYjMzk7dC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuICovXG4tXHRcdHByX2RlYnVnKFwmIzM0O0Ryb3BwaW5nIGV2aWwgVENQIG9mZnNldD0wIHRpbnlncmFtLlxcblwmIzM0Oyk7XG4gXHRcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuQEAgLTE0NSw3ICYjNDM7MTQwLDYgQEAgc3RhdGljIGJvb2wgdWRwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdGlmICh1aCA9PSBOVUxMKSB7XG4gXHRcdC8qIFdlJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZVxuIFx0XHQgICBjYW4mIzM5O3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLiAqL1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtEcm9wcGluZyBldmlsIFVEUCB0aW55Z3JhbS5cXG5cJiMzNDspO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDozOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9DVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUiYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7SVBfTkZfUkFXJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3h0X2N0X3RnX2NoZWNrJiMzNDssCiAgICAmIzM0O2lkbGV0aW1lcl90Z19jaGVja2VudHJ5JiMzNDssCiAgICAmIzM0O2lkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB4dF9DVC5jYCB0byBjaGFuZ2UgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBpbmZvLVx1MDAzZWhlbHBlcmAgYW5kIGBpbmZvLVx1MDAzZXRpbWVvdXRgLiBJZiB0aGV5IGFyZSBub3QgbnVsbC10ZXJtaW5hdGVkLCB0aGUgbmV3IGNvZGUgc2tpcHMgc2V0dGluZyB0aGVtIGluc3RlYWQgb2YgcmV0dXJuaW5nIGAtRU5BTUVUT09MT05HYCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdGFyZ2V0IGluaXRpYWxpemF0aW9uIGxvZ2ljLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgeHRfSURMRVRJTUVSLmNgIHRvIHJlbGVhc2UgYSBtdXRleCBiZWZvcmUgbG9nZ2luZywgd2hpY2ggaXMgYSBtaW5vciBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlc2UgY2hhbmdlcyBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBjb25maWd1cmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTMzOGFlYzU1Y2UxZWQwZmVmMDE4YjBjODdhNmFlMzQxYjZhNmE3NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDE0OjM5OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jCmluZGV4IDE2MWJhNDEyY2IwOGIuLjcxMzFmMjk3YWRhMmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfYWguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FoLmMKQEAgLTE5LDEyICYjNDM7MTksNyBAQCBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtYdGFibGVzOiBJUHY0IElQc2VjLUFIIFNQSSBtYXRjaCYjMzQ7KTsKIHN0YXRpYyBpbmxpbmUgYm9vbAogc3BpX21hdGNoKHVfaW50MzJfdCBtaW4sIHVfaW50MzJfdCBtYXgsIHVfaW50MzJfdCBzcGksIGJvb2wgaW52ZXJ0KQogewotCWJvb2wgcjsKLQlwcl9kZWJ1ZygmIzM0O3NwaV9tYXRjaDolYyAweCV4ICZsdDs9IDB4JXggJmx0Oz0gMHgleFxuJiMzNDssCi0JCSBpbnZlcnQgPyAmIzM5OyEmIzM5OyA6ICYjMzk7ICYjMzk7LCBtaW4sIHNwaSwgbWF4KTsKLQlyID0gKHNwaSAmZ3Q7PSBtaW4gJmFtcDsmYW1wOyBzcGkgJmx0Oz0gbWF4KSBeIGludmVydDsKLQlwcl9kZWJ1ZygmIzM0OyByZXN1bHQgJXNcbiYjMzQ7LCByID8gJiMzNDtQQVNTJiMzNDsgOiAmIzM0O0ZBSUxFRCYjMzQ7KTsKLQlyZXR1cm4gcjsKJiM0MzsJcmV0dXJuIChzcGkgJmd0Oz0gbWluICZhbXA7JmFtcDsgc3BpICZsdDs9IG1heCkgXiBpbnZlcnQ7CiB9CiAKIHN0YXRpYyBib29sIGFoX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKQEAgLTQyLDcgJiM0MzszNyw2IEBAIHN0YXRpYyBib29sIGFoX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJLyogV2UmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlCiAJCSAqIGNhbiYjMzk7dC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuCiAJCSAqLwotCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGV2aWwgQUggdGlueWdyYW0uXG4mIzM0Oyk7CiAJCXBhci0mZ3Q7aG90ZHJvcCA9IHRydWU7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC01OCw3ICYjNDM7NTIsNyBAQCBzdGF0aWMgaW50IGFoX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogCiAJLyogTXVzdCBzcGVjaWZ5IG5vIHVua25vd24gaW52ZmxhZ3MgKi8KIAlpZiAoYWhpbmZvLSZndDtpbnZmbGFncyAmYW1wOyB+SVBUX0FIX0lOVl9NQVNLKSB7Ci0JCXByX2RlYnVnKCYjMzQ7dW5rbm93biBmbGFncyAlWFxuJiMzNDssIGFoaW5mby0mZ3Q7aW52ZmxhZ3MpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3Vua25vd24gZmxhZ3MgJVhcbiYjMzQ7LCBhaGluZm8tJmd0O2ludmZsYWdzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ycGZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ycGZpbHRlci5jCmluZGV4IDZkOWJmNTEwNjg2ODQuLjJjMzhmZDY2MjRhYTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JwZmlsdGVyLmMKQEAgLTk1LDggJiM0Mzs5NSw3IEBAIHN0YXRpYyBpbnQgcnBmaWx0ZXJfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAKIAlpZiAoc3RyY21wKHBhci0mZ3Q7dGFibGUsICYjMzQ7bWFuZ2xlJiMzNDspICE9IDAgJmFtcDsmYW1wOwogCSAgICBzdHJjbXAocGFyLSZndDt0YWJsZSwgJiMzNDtyYXcmIzM0OykgIT0gMCkgewotCQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7b25seSB2YWxpZCBpbiBcJiMzOTtyYXdcJiMzOTsgb3IgXCYjMzk7bWFuZ2xlXCYjMzk7IHRhYmxlLCBub3QgXCYjMzk7JXNcJiMzOTtcbiYjMzQ7LAotCQkJCSAgICBwYXItJmd0O3RhYmxlKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtvbmx5IHZhbGlkIGluIFwmIzM5O3Jhd1wmIzM5OyBvciBcJiMzOTttYW5nbGVcJiMzOTsgdGFibGVcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguYwppbmRleCAxMjU4NzgzZWQ4NzYyLi5kYWI3ZGJjNmE2NzVjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmMKQEAgLTI0LDEzICYjNDM7MjQsNyBAQCBNT0RVTEVfQVVUSE9SKCYjMzQ7QW5kcmFzIEtpcy1TemFibyAmbHQ7a2lzemFAc2NoLmJtZS5odSZndDsmIzM0Oyk7CiBzdGF0aWMgaW5saW5lIGJvb2wKIHNwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBib29sIGludmVydCkKIHsKLQlib29sIHI7Ci0KLQlwcl9kZWJ1ZygmIzM0O3NwaV9tYXRjaDolYyAweCV4ICZsdDs9IDB4JXggJmx0Oz0gMHgleFxuJiMzNDssCi0JCSBpbnZlcnQgPyAmIzM5OyEmIzM5OyA6ICYjMzk7ICYjMzk7LCBtaW4sIHNwaSwgbWF4KTsKLQlyID0gKHNwaSAmZ3Q7PSBtaW4gJmFtcDsmYW1wOyBzcGkgJmx0Oz0gbWF4KSBeIGludmVydDsKLQlwcl9kZWJ1ZygmIzM0OyByZXN1bHQgJXNcbiYjMzQ7LCByID8gJiMzNDtQQVNTJiMzNDsgOiAmIzM0O0ZBSUxFRCYjMzQ7KTsKLQlyZXR1cm4gcjsKJiM0MzsJcmV0dXJuIChzcGkgJmd0Oz0gbWluICZhbXA7JmFtcDsgc3BpICZsdDs9IG1heCkgXiBpbnZlcnQ7CiB9CiAKIHN0YXRpYyBib29sIGFoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCkBAIC02MiwyMyAmIzQzOzU2LDYgQEAgc3RhdGljIGJvb2wgYWhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXByX2RlYnVnKCYjMzQ7SVB2NiBBSCBMRU4gJXUgJXUgJiMzNDssIGhkcmxlbiwgYWgtJmd0O2hkcmxlbik7Ci0JcHJfZGVidWcoJiMzNDtSRVMgJTA0WCAmIzM0OywgYWgtJmd0O3Jlc2VydmVkKTsKLQlwcl9kZWJ1ZygmIzM0O1NQSSAldSAlMDhYXG4mIzM0OywgbnRvaGwoYWgtJmd0O3NwaSksIG50b2hsKGFoLSZndDtzcGkpKTsKLQotCXByX2RlYnVnKCYjMzQ7SVB2NiBBSCBzcGkgJTAyWCAmIzM0OywKLQkJIHNwaV9tYXRjaChhaGluZm8tJmd0O3NwaXNbMF0sIGFoaW5mby0mZ3Q7c3Bpc1sxXSwKLQkJCSAgIG50b2hsKGFoLSZndDtzcGkpLAotCQkJICAgISEoYWhpbmZvLSZndDtpbnZmbGFncyAmYW1wOyBJUDZUX0FIX0lOVl9TUEkpKSk7Ci0JcHJfZGVidWcoJiMzNDtsZW4gJTAyWCAlMDRYICUwMlggJiMzNDssCi0JCSBhaGluZm8tJmd0O2hkcmxlbiwgaGRybGVuLAotCQkgKCFhaGluZm8tJmd0O2hkcmxlbiB8fAotCQkgIChhaGluZm8tJmd0O2hkcmxlbiA9PSBoZHJsZW4pIF4KLQkJICAhIShhaGluZm8tJmd0O2ludmZsYWdzICZhbXA7IElQNlRfQUhfSU5WX0xFTikpKTsKLQlwcl9kZWJ1ZygmIzM0O3JlcyAlMDJYICUwNFggJTAyWFxuJiMzNDssCi0JCSBhaGluZm8tJmd0O2hkcnJlcywgYWgtJmd0O3Jlc2VydmVkLAotCQkgIShhaGluZm8tJmd0O2hkcnJlcyAmYW1wOyZhbXA7IGFoLSZndDtyZXNlcnZlZCkpOwotCiAJcmV0dXJuIHNwaV9tYXRjaChhaGluZm8tJmd0O3NwaXNbMF0sIGFoaW5mby0mZ3Q7c3Bpc1sxXSwKIAkJCSAgbnRvaGwoYWgtJmd0O3NwaSksCiAJCQkgICEhKGFoaW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgSVA2VF9BSF9JTlZfU1BJKSkgJmFtcDsmYW1wOwpAQCAtOTMsNyAmIzQzOzcwLDcgQEAgc3RhdGljIGludCBhaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJY29uc3Qgc3RydWN0IGlwNnRfYWggKmFoaW5mbyA9IHBhci0mZ3Q7bWF0Y2hpbmZvOwogCiAJaWYgKGFoaW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgfklQNlRfQUhfSU5WX01BU0spIHsKLQkJcHJfZGVidWcoJiMzNDt1bmtub3duIGZsYWdzICVYXG4mIzM0OywgYWhpbmZvLSZndDtpbnZmbGFncyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7dW5rbm93biBmbGFncyAlWFxuJiMzNDssIGFoaW5mby0mZ3Q7aW52ZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9mcmFnLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9mcmFnLmMKaW5kZXggM2FhZDY0MzkzODZiMS4uZjVmM2NmYjg3MDRjZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuYwpAQCAtMjMsMTIgJiM0MzsyMyw3IEBAIE1PRFVMRV9BVVRIT1IoJiMzNDtBbmRyYXMgS2lzLVN6YWJvICZsdDtraXN6YUBzY2guYm1lLmh1Jmd0OyYjMzQ7KTsKIHN0YXRpYyBpbmxpbmUgYm9vbAogaWRfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IGlkLCBib29sIGludmVydCkKIHsKLQlib29sIHI7Ci0JcHJfZGVidWcoJiMzNDtpZF9tYXRjaDolYyAweCV4ICZsdDs9IDB4JXggJmx0Oz0gMHgleFxuJiMzNDssIGludmVydCA/ICYjMzk7ISYjMzk7IDogJiMzOTsgJiMzOTssCi0JCSBtaW4sIGlkLCBtYXgpOwotCXIgPSAoaWQgJmd0Oz0gbWluICZhbXA7JmFtcDsgaWQgJmx0Oz0gbWF4KSBeIGludmVydDsKLQlwcl9kZWJ1ZygmIzM0OyByZXN1bHQgJXNcbiYjMzQ7LCByID8gJiMzNDtQQVNTJiMzNDsgOiAmIzM0O0ZBSUxFRCYjMzQ7KTsKLQlyZXR1cm4gcjsKJiM0MzsJcmV0dXJuIChpZCAmZ3Q7PSBtaW4gJmFtcDsmYW1wOyBpZCAmbHQ7PSBtYXgpIF4gaW52ZXJ0OwogfQogCiBzdGF0aWMgYm9vbApAQCAtNTMsMzggJiM0Mzs0OCw2IEBAIGZyYWdfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXByX2RlYnVnKCYjMzQ7SU5GTyAlMDRYICYjMzQ7LCBmaC0mZ3Q7ZnJhZ19vZmYpOwotCXByX2RlYnVnKCYjMzQ7T0ZGU0VUICUwNFggJiMzNDssIG50b2hzKGZoLSZndDtmcmFnX29mZikgJmFtcDsgfjB4Nyk7Ci0JcHJfZGVidWcoJiMzNDtSRVMgJTAyWCAlMDRYJiMzNDssIGZoLSZndDtyZXNlcnZlZCwgbnRvaHMoZmgtJmd0O2ZyYWdfb2ZmKSAmYW1wOyAweDYpOwotCXByX2RlYnVnKCYjMzQ7TUYgJTA0WCAmIzM0OywgZmgtJmd0O2ZyYWdfb2ZmICZhbXA7IGh0b25zKElQNl9NRikpOwotCXByX2RlYnVnKCYjMzQ7SUQgJXUgJTA4WFxuJiMzNDssIG50b2hsKGZoLSZndDtpZGVudGlmaWNhdGlvbiksCi0JCSBudG9obChmaC0mZ3Q7aWRlbnRpZmljYXRpb24pKTsKLQotCXByX2RlYnVnKCYjMzQ7SVB2NiBGUkFHIGlkICUwMlggJiMzNDssCi0JCSBpZF9tYXRjaChmcmFnaW5mby0mZ3Q7aWRzWzBdLCBmcmFnaW5mby0mZ3Q7aWRzWzFdLAotCQkJICBudG9obChmaC0mZ3Q7aWRlbnRpZmljYXRpb24pLAotCQkJICAhIShmcmFnaW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgSVA2VF9GUkFHX0lOVl9JRFMpKSk7Ci0JcHJfZGVidWcoJiMzNDtyZXMgJTAyWCAlMDJYJTA0WCAlMDJYICYjMzQ7LAotCQkgZnJhZ2luZm8tJmd0O2ZsYWdzICZhbXA7IElQNlRfRlJBR19SRVMsIGZoLSZndDtyZXNlcnZlZCwKLQkJIG50b2hzKGZoLSZndDtmcmFnX29mZikgJmFtcDsgMHg2LAotCQkgISgoZnJhZ2luZm8tJmd0O2ZsYWdzICZhbXA7IElQNlRfRlJBR19SRVMpICZhbXA7JmFtcDsKLQkJICAgKGZoLSZndDtyZXNlcnZlZCB8fCAobnRvaHMoZmgtJmd0O2ZyYWdfb2ZmKSAmYW1wOyAweDA2KSkpKTsKLQlwcl9kZWJ1ZygmIzM0O2ZpcnN0ICUwMlggJTAyWCAlMDJYICYjMzQ7LAotCQkgZnJhZ2luZm8tJmd0O2ZsYWdzICZhbXA7IElQNlRfRlJBR19GU1QsCi0JCSBudG9ocyhmaC0mZ3Q7ZnJhZ19vZmYpICZhbXA7IH4weDcsCi0JCSAhKChmcmFnaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9GUkFHX0ZTVCkgJmFtcDsmYW1wOwotCQkgICAobnRvaHMoZmgtJmd0O2ZyYWdfb2ZmKSAmYW1wOyB+MHg3KSkpOwotCXByX2RlYnVnKCYjMzQ7bWYgJTAyWCAlMDJYICUwMlggJiMzNDssCi0JCSBmcmFnaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9GUkFHX01GLAotCQkgbnRvaHMoZmgtJmd0O2ZyYWdfb2ZmKSAmYW1wOyBJUDZfTUYsCi0JCSAhKChmcmFnaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9GUkFHX01GKSAmYW1wOyZhbXA7Ci0JCSAgICEoKG50b2hzKGZoLSZndDtmcmFnX29mZikgJmFtcDsgSVA2X01GKSkpKTsKLQlwcl9kZWJ1ZygmIzM0O2xhc3QgJTAyWCAlMDJYICUwMlhcbiYjMzQ7LAotCQkgZnJhZ2luZm8tJmd0O2ZsYWdzICZhbXA7IElQNlRfRlJBR19OTUYsCi0JCSBudG9ocyhmaC0mZ3Q7ZnJhZ19vZmYpICZhbXA7IElQNl9NRiwKLQkJICEoKGZyYWdpbmZvLSZndDtmbGFncyAmYW1wOyBJUDZUX0ZSQUdfTk1GKSAmYW1wOyZhbXA7Ci0JCSAgIChudG9ocyhmaC0mZ3Q7ZnJhZ19vZmYpICZhbXA7IElQNl9NRikpKTsKLQogCXJldHVybiBpZF9tYXRjaChmcmFnaW5mby0mZ3Q7aWRzWzBdLCBmcmFnaW5mby0mZ3Q7aWRzWzFdLAogCQkJIG50b2hsKGZoLSZndDtpZGVudGlmaWNhdGlvbiksCiAJCQkgISEoZnJhZ2luZm8tJmd0O2ludmZsYWdzICZhbXA7IElQNlRfRlJBR19JTlZfSURTKSkgJmFtcDsmYW1wOwpAQCAtMTAzLDcgJiM0Mzs2Niw3IEBAIHN0YXRpYyBpbnQgZnJhZ19tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJY29uc3Qgc3RydWN0IGlwNnRfZnJhZyAqZnJhZ2luZm8gPSBwYXItJmd0O21hdGNoaW5mbzsKIAogCWlmIChmcmFnaW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgfklQNlRfRlJBR19JTlZfTUFTSykgewotCQlwcl9kZWJ1ZygmIzM0O3Vua25vd24gZmxhZ3MgJVhcbiYjMzQ7LCBmcmFnaW5mby0mZ3Q7aW52ZmxhZ3MpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3Vua25vd24gZmxhZ3MgJVhcbiYjMzQ7LCBmcmFnaW5mby0mZ3Q7aW52ZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jCmluZGV4IDZkMWE1ZDIwMjZhNjcuLjM3YzIwN2QzMTUyYTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jCkBAIC03OSwxNCAmIzQzOzc5LDYgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlwcl9kZWJ1ZygmIzM0O0lQdjYgT1BUUyBMRU4gJXUgJXUgJiMzNDssIGhkcmxlbiwgb2gtJmd0O2hkcmxlbik7Ci0KLQlwcl9kZWJ1ZygmIzM0O2xlbiAlMDJYICUwNFggJTAyWCAmIzM0OywKLQkJIG9wdGluZm8tJmd0O2hkcmxlbiwgaGRybGVuLAotCQkgKCEob3B0aW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9PUFRTX0xFTikgfHwKLQkJICAoKG9wdGluZm8tJmd0O2hkcmxlbiA9PSBoZHJsZW4pIF4KLQkJICAgISEob3B0aW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgSVA2VF9PUFRTX0lOVl9MRU4pKSkpOwotCiAJcmV0ID0gKCEob3B0aW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9PUFRTX0xFTikgfHwKIAkgICAgICAgKChvcHRpbmZvLSZndDtoZHJsZW4gPT0gaGRybGVuKSBeCiAJCSEhKG9wdGluZm8tJmd0O2ludmZsYWdzICZhbXA7IElQNlRfT1BUU19JTlZfTEVOKSkpOwpAQCAtOTYsOCAmIzQzOzg4LDYgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJaWYgKCEob3B0aW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9PUFRTX09QVFMpKSB7CiAJCXJldHVybiByZXQ7CiAJfSBlbHNlIHsKLQkJcHJfZGVidWcoJiMzNDtTdHJpY3QgJiMzNDspOwotCQlwcl9kZWJ1ZygmIzM0OyMlZCAmIzM0Oywgb3B0aW5mby0mZ3Q7b3B0c25yKTsKIAkJZm9yICh0ZW1wID0gMDsgdGVtcCAmbHQ7IG9wdGluZm8tJmd0O29wdHNucjsgdGVtcCYjNDM7JiM0MzspIHsKIAkJCS8qIHR5cGUgZmllbGQgZXhpc3RzID8gKi8KIAkJCWlmIChoZHJsZW4gJmx0OyAxKQpAQCAtMTA4LDEzICYjNDM7OTgsOSBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJCQlicmVhazsKIAogCQkJLyogVHlwZSBjaGVjayAqLwotCQkJaWYgKCp0cCAhPSAob3B0aW5mby0mZ3Q7b3B0c1t0ZW1wXSAmYW1wOyAweEZGMDApICZndDsmZ3Q7IDgpIHsKLQkJCQlwcl9kZWJ1ZygmIzM0O1RiYWQgJTAyWCAlMDJYXG4mIzM0OywgKnRwLAotCQkJCQkgKG9wdGluZm8tJmd0O29wdHNbdGVtcF0gJmFtcDsgMHhGRjAwKSAmZ3Q7Jmd0OyA4KTsKJiM0MzsJCQlpZiAoKnRwICE9IChvcHRpbmZvLSZndDtvcHRzW3RlbXBdICZhbXA7IDB4RkYwMCkgJmd0OyZndDsgOCkKIAkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9IGVsc2UgewotCQkJCXByX2RlYnVnKCYjMzQ7VG9rICYjMzQ7KTsKLQkJCX0KJiM0MzsKIAkJCS8qIExlbmd0aCBjaGVjayAqLwogCQkJaWYgKCp0cCkgewogCQkJCXUxNiBzcGVjX2xlbjsKQEAgLTEyOSwyNiAmIzQzOzExNSwxOCBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJCQkJYnJlYWs7CiAJCQkJc3BlY19sZW4gPSBvcHRpbmZvLSZndDtvcHRzW3RlbXBdICZhbXA7IDB4MDBGRjsKIAotCQkJCWlmIChzcGVjX2xlbiAhPSAweDAwRkYgJmFtcDsmYW1wOyBzcGVjX2xlbiAhPSAqbHApIHsKLQkJCQkJcHJfZGVidWcoJiMzNDtMYmFkICUwMlggJTA0WFxuJiMzNDssICpscCwKLQkJCQkJCSBzcGVjX2xlbik7CiYjNDM7CQkJCWlmIChzcGVjX2xlbiAhPSAweDAwRkYgJmFtcDsmYW1wOyBzcGVjX2xlbiAhPSAqbHApCiAJCQkJCXJldHVybiBmYWxzZTsKLQkJCQl9Ci0JCQkJcHJfZGVidWcoJiMzNDtMb2sgJiMzNDspOwomIzQzOwogCQkJCW9wdGxlbiA9ICpscCAmIzQzOyAyOwogCQkJfSBlbHNlIHsKLQkJCQlwcl9kZWJ1ZygmIzM0O1BhZDFcbiYjMzQ7KTsKIAkJCQlvcHRsZW4gPSAxOwogCQkJfQogCi0JCQkvKiBTdGVwIHRvIHRoZSBuZXh0ICovCi0JCQlwcl9kZWJ1ZygmIzM0O2xlbiUwNFhcbiYjMzQ7LCBvcHRsZW4pOwotCiAJCQlpZiAoKHB0ciAmZ3Q7IHNrYi0mZ3Q7bGVuIC0gb3B0bGVuIHx8IGhkcmxlbiAmbHQ7IG9wdGxlbikgJmFtcDsmYW1wOwotCQkJICAgIHRlbXAgJmx0OyBvcHRpbmZvLSZndDtvcHRzbnIgLSAxKSB7Ci0JCQkJcHJfZGVidWcoJiMzNDtuZXcgcG9pbnRlciBpcyB0b28gbGFyZ2UhXG4mIzM0Oyk7CiYjNDM7CQkJICAgIHRlbXAgJmx0OyBvcHRpbmZvLSZndDtvcHRzbnIgLSAxKQogCQkJCWJyZWFrOwotCQkJfQomIzQzOwogCQkJcHRyICYjNDM7PSBvcHRsZW47CiAJCQloZHJsZW4gLT0gb3B0bGVuOwogCQl9CkBAIC0xNjYsMTYgJiM0MzsxNDQsMTYgQEAgc3RhdGljIGludCBoYmhfbXQ2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogCWNvbnN0IHN0cnVjdCBpcDZ0X29wdHMgKm9wdHNpbmZvID0gcGFyLSZndDttYXRjaGluZm87CiAKIAlpZiAob3B0c2luZm8tJmd0O2ludmZsYWdzICZhbXA7IH5JUDZUX09QVFNfSU5WX01BU0spIHsKLQkJcHJfZGVidWcoJiMzNDt1bmtub3duIGZsYWdzICVYXG4mIzM0Oywgb3B0c2luZm8tJmd0O2ludmZsYWdzKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDt1bmtub3duIGZsYWdzICVYXG4mIzM0Oywgb3B0c2luZm8tJmd0O2ludmZsYWdzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChvcHRzaW5mby0mZ3Q7b3B0c25yICZndDsgSVA2VF9PUFRTX09QVFNOUikgewotCQlwcl9kZWJ1ZygmIzM0O3RvbyBtYW55IHN1cHBvcnRlZCBvcHRzIHNwZWNpZmllZFxuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3RvbyBtYW55IHN1cHBvcnRlZCBvcHRzIHNwZWNpZmllZFxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAob3B0c2luZm8tJmd0O2ZsYWdzICZhbXA7IElQNlRfT1BUU19OU1RSSUNUKSB7Ci0JCXByX2RlYnVnKCYjMzQ7Tm90IHN0cmljdCAtIG5vdCBpbXBsZW1lbnRlZCYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtOb3Qgc3RyaWN0IC0gbm90IGltcGxlbWVudGVkJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X21oLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9taC5jCmluZGV4IGZkNDkyYjY5YWNiYzAuLmJhNmRjYzc3OTFhMDkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X21oLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbWguYwpAQCAtNDIsMTQgJiM0Mzs0MiwxMSBAQCBzdGF0aWMgYm9vbCBtaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCWlmIChtaCA9PSBOVUxMKSB7CiAJCS8qIFdlJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZQogCQkgICBjYW4mIzM5O3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLiAqLwotCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGV2aWwgTUggdGlueWdyYW0uXG4mIzM0Oyk7CiAJCXBhci0mZ3Q7aG90ZHJvcCA9IHRydWU7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlpZiAobWgtJmd0O2lwNm1oX3Byb3RvICE9IElQUFJPVE9fTk9ORSkgewotCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGludmFsaWQgTUggUGF5bG9hZCBQcm90bzogJXVcbiYjMzQ7LAotCQkJIG1oLSZndDtpcDZtaF9wcm90byk7CiAJCXBhci0mZ3Q7aG90ZHJvcCA9IHRydWU7CiAJCXJldHVybiBmYWxzZTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnBmaWx0ZXIuYwppbmRleCA2N2M4N2E4OGNkZTRmLi5hZjhkMTBkNDlkZTgxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmMKQEAgLTExOCw3ICYjNDM7MTE4LDcgQEAgc3RhdGljIGludCBycGZpbHRlcl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAogCWlmIChzdHJjbXAocGFyLSZndDt0YWJsZSwgJiMzNDttYW5nbGUmIzM0OykgIT0gMCAmYW1wOyZhbXA7CiAJICAgIHN0cmNtcChwYXItJmd0O3RhYmxlLCAmIzM0O3JhdyYjMzQ7KSAhPSAwKSB7Ci0JCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtvbmx5IHZhbGlkIGluIFwmIzM5O3Jhd1wmIzM5OyBvciBcJiMzOTttYW5nbGVcJiMzOTsgdGFibGUsIG5vdCBcJiMzOTslc1wmIzM5O1xuJiMzNDssCiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7b25seSB2YWxpZCBpbiBcJiMzOTtyYXdcJiMzOTsgb3IgXCYjMzk7bWFuZ2xlXCYjMzk7IHRhYmxlXG4mIzM0OywKIAkJCQkgICAgcGFyLSZndDt0YWJsZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jCmluZGV4IDI3OGI1Mjc1MmYzNjQuLjBjMDFhYzI3NDZkMWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYwpAQCAtMTU1LDE4ICYjNDM7MTU1LDE4IEBAIHN0YXRpYyBpbnQgcnRfbXQ2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogCWNvbnN0IHN0cnVjdCBpcDZ0X3J0ICpydGluZm8gPSBwYXItJmd0O21hdGNoaW5mbzsKIAogCWlmIChydGluZm8tJmd0O2ludmZsYWdzICZhbXA7IH5JUDZUX1JUX0lOVl9NQVNLKSB7Ci0JCXByX2RlYnVnKCYjMzQ7dW5rbm93biBmbGFncyAlWFxuJiMzNDssIHJ0aW5mby0mZ3Q7aW52ZmxhZ3MpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3Vua25vd24gZmxhZ3MgJVhcbiYjMzQ7LCBydGluZm8tJmd0O2ludmZsYWdzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChydGluZm8tJmd0O2FkZHJuciAmZ3Q7IElQNlRfUlRfSE9QUykgewotCQlwcl9kZWJ1ZygmIzM0O3RvbyBtYW55IGFkZHJlc3NlcyBzcGVjaWZpZWRcbiYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDt0b28gbWFueSBhZGRyZXNzZXMgc3BlY2lmaWVkXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoKHJ0aW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgKElQNlRfUlRfUkVTIHwgSVA2VF9SVF9GU1RfTUFTSykpICZhbXA7JmFtcDsKIAkgICAgKCEocnRpbmZvLSZndDtmbGFncyAmYW1wOyBJUDZUX1JUX1RZUCkgfHwKIAkgICAgIChydGluZm8tJmd0O3J0X3R5cGUgIT0gMCkgfHwKIAkgICAgIChydGluZm8tJmd0O2ludmZsYWdzICZhbXA7IElQNlRfUlRfSU5WX1RZUCkpKSB7Ci0JCXByX2RlYnVnKCYjMzQ7YC0tcnQtdHlwZSAwJiMzOTsgcmVxdWlyZWQgYmVmb3JlIGAtLXJ0LTAtKiYjMzk7JiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2AtLXJ0LXR5cGUgMCYjMzk7IHJlcXVpcmVkIGJlZm9yZSBgLS1ydC0wLSomIzM5OyYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMKaW5kZXggMTQ5NGIzZWUzMGUxMS4uNGU0NDM2YTkxMDRiNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuYwpAQCAtODcsOCAmIzQzOzg3LDcgQEAgc3RhdGljIGludCBjb25uc2VjbWFya190Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcikKIAogCWlmIChzdHJjbXAocGFyLSZndDt0YWJsZSwgJiMzNDttYW5nbGUmIzM0OykgIT0gMCAmYW1wOyZhbXA7CiAJICAgIHN0cmNtcChwYXItJmd0O3RhYmxlLCAmIzM0O3NlY3VyaXR5JiMzNDspICE9IDApIHsKLQkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O29ubHkgdmFsaWQgaW4gXCYjMzk7bWFuZ2xlXCYjMzk7IG9yIFwmIzM5O3NlY3VyaXR5XCYjMzk7IHRhYmxlLCBub3QgXCYjMzk7JXNcJiMzOTtcbiYjMzQ7LAotCQkJCSAgICBwYXItJmd0O3RhYmxlKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtvbmx5IHZhbGlkIGluIFwmIzM5O21hbmdsZVwmIzM5OyBvciBcJiMzOTtzZWN1cml0eVwmIzM5OyB0YWJsZVxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfQ1QuYyBiL25ldC9uZXRmaWx0ZXIveHRfQ1QuYwppbmRleCBlNzg2NjBkZmRmNGI2Li45MTMyNjAxNGFkZTFjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0NULmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9DVC5jCkBAIC0xOTUsNyAmIzQzOzE5NSw4IEBAIHN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsCiAJCWdvdG8gZXJyMzsKIAl9CiAKLQlpZiAoaW5mby0mZ3Q7aGVscGVyWzBdKSB7CiYjNDM7CWlmIChpbmZvLSZndDtoZWxwZXJbMF0gJmFtcDsmYW1wOwomIzQzOwkgICAgc3RybmxlbihpbmZvLSZndDtoZWxwZXIsIHNpemVvZihpbmZvLSZndDtoZWxwZXIpKSAmbHQ7IHNpemVvZihpbmZvLSZndDtoZWxwZXIpKSB7CiAJCWlmIChzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpID09IHNpemVvZihpbmZvLSZndDtoZWxwZXIpKSB7CiAJCQlyZXQgPSAtRU5BTUVUT09MT05HOwogCQkJZ290byBlcnIzOwpAQCAtMjA2LDcgJiM0MzsyMDcsOCBAQCBzdGF0aWMgaW50IHh0X2N0X3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyLAogCQkJZ290byBlcnIzOwogCX0KIAotCWlmIChpbmZvLSZndDt0aW1lb3V0WzBdKSB7CiYjNDM7CWlmIChpbmZvLSZndDt0aW1lb3V0WzBdICZhbXA7JmFtcDsKJiM0MzsJICAgIHN0cm5sZW4oaW5mby0mZ3Q7dGltZW91dCwgc2l6ZW9mKGluZm8tJmd0O3RpbWVvdXQpKSAmbHQ7IHNpemVvZihpbmZvLSZndDt0aW1lb3V0KSkgewogCQlpZiAoc3RybmxlbihpbmZvLSZndDt0aW1lb3V0LCBzaXplb2YoaW5mby0mZ3Q7dGltZW91dCkpID09IHNpemVvZihpbmZvLSZndDt0aW1lb3V0KSkgewogCQkJcmV0ID0gLUVOQU1FVE9PTE9ORzsKIAkJCWdvdG8gZXJyNDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jCmluZGV4IGJmY2YyZDQ0ZTkzZGIuLjE1YjY5OGVhOThhYTYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYwpAQCAtMTAyLDggJiM0MzsxMDIsNiBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZXhwaXJlZChzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKIHsKIAlzdHJ1Y3QgaWRsZXRpbWVyX3RnICp0aW1lciA9IHRpbWVyX2NvbnRhaW5lcl9vZih0aW1lciwgdCwgdGltZXIpOwogCi0JcHJfZGVidWcoJiMzNDt0aW1lciAlcyBleHBpcmVkXG4mIzM0OywgdGltZXItJmd0O2F0dHIuYXR0ci5uYW1lKTsKLQogCXNjaGVkdWxlX3dvcmsoJmFtcDt0aW1lci0mZ3Q7d29yayk7CiB9CiAKQEAgLTExMSw3ICYjNDM7MTA5LDYgQEAgc3RhdGljIHZvaWQgaWRsZXRpbWVyX3RnX2FsYXJtcHJvYyhzdHJ1Y3QgYWxhcm0gKmFsYXJtLCBrdGltZV90IG5vdykKIHsKIAlzdHJ1Y3QgaWRsZXRpbWVyX3RnICp0aW1lciA9IGFsYXJtLSZndDtkYXRhOwogCi0JcHJfZGVidWcoJiMzNDthbGFybSAlcyBleHBpcmVkXG4mIzM0OywgdGltZXItJmd0O2F0dHIuYXR0ci5uYW1lKTsKIAlzY2hlZHVsZV93b3JrKCZhbXA7dGltZXItJmd0O3dvcmspOwogfQogCkBAIC0xNzEsNyAmIzQzOzE2OCw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8pCiAKIAlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShpZGxldGltZXJfdGdfa29iaiwgJmFtcDtpbmZvLSZndDt0aW1lci0mZ3Q7YXR0ci5hdHRyKTsKIAlpZiAocmV0ICZsdDsgMCkgewotCQlwcl9kZWJ1ZygmIzM0O2NvdWxkbiYjMzk7dCBhZGQgZmlsZSB0byBzeXNmcyYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtjb3VsZG4mIzM5O3QgYWRkIGZpbGUgdG8gc3lzZnMmIzM0Oyk7CiAJCWdvdG8gb3V0X2ZyZWVfYXR0cjsKIAl9CiAKQEAgLTIyMCw3ICYjNDM7MjE3LDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbykKIAogCXJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKGlkbGV0aW1lcl90Z19rb2JqLCAmYW1wO2luZm8tJmd0O3RpbWVyLSZndDthdHRyLmF0dHIpOwogCWlmIChyZXQgJmx0OyAwKSB7Ci0JCXByX2RlYnVnKCYjMzQ7Y291bGRuJiMzOTt0IGFkZCBmaWxlIHRvIHN5c2ZzJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2NvdWxkbiYjMzk7dCBhZGQgZmlsZSB0byBzeXNmcyYjMzQ7KTsKIAkJZ290byBvdXRfZnJlZV9hdHRyOwogCX0KIApAQCAtMjI4LDcgJiM0MzsyMjUsNiBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvKQogCWtvYmplY3RfdWV2ZW50KGlkbGV0aW1lcl90Z19rb2JqLEtPQkpfQUREKTsKIAogCWxpc3RfYWRkKCZhbXA7aW5mby0mZ3Q7dGltZXItJmd0O2VudHJ5LCAmYW1wO2lkbGV0aW1lcl90Z19saXN0KTsKLQlwcl9kZWJ1ZygmIzM0O3RpbWVyIHR5cGUgdmFsdWUgaXMgJXUmIzM0OywgaW5mby0mZ3Q7dGltZXJfdHlwZSk7CiAJaW5mby0mZ3Q7dGltZXItJmd0O3RpbWVyX3R5cGUgPSBpbmZvLSZndDt0aW1lcl90eXBlOwogCWluZm8tJmd0O3RpbWVyLSZndDtyZWZjbnQgPSAxOwogCkBAIC0yNjMsOSAmIzQzOzI1OSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaWRsZXRpbWVyX3RnX3RhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogewogCWNvbnN0IHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbyA9IHBhci0mZ3Q7dGFyZ2luZm87CiAKLQlwcl9kZWJ1ZygmIzM0O3Jlc2V0dGluZyB0aW1lciAlcywgdGltZW91dCBwZXJpb2QgJXVcbiYjMzQ7LAotCQkgaW5mby0mZ3Q7bGFiZWwsIGluZm8tJmd0O3RpbWVvdXQpOwotCiAJbW9kX3RpbWVyKCZhbXA7aW5mby0mZ3Q7dGltZXItJmd0O3RpbWVyLAogCQkgIHNlY3NfdG9famlmZmllcyhpbmZvLSZndDt0aW1lb3V0KSAmIzQzOyBqaWZmaWVzKTsKIApAQCAtMjgwLDkgJiM0MzsyNzMsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIHsKIAljb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItJmd0O3RhcmdpbmZvOwogCi0JcHJfZGVidWcoJiMzNDtyZXNldHRpbmcgdGltZXIgJXMsIHRpbWVvdXQgcGVyaW9kICV1XG4mIzM0OywKLQkJIGluZm8tJmd0O2xhYmVsLCBpbmZvLSZndDt0aW1lb3V0KTsKLQogCWlmIChpbmZvLSZndDt0aW1lci0mZ3Q7dGltZXJfdHlwZSAmYW1wOyBYVF9JRExFVElNRVJfQUxBUk0pIHsKIAkJaWRsZXRpbWVyX3N0YXJ0X2FsYXJtX3NlYyhpbmZvLSZndDt0aW1lciwgaW5mby0mZ3Q7dGltZW91dCk7CiAJfSBlbHNlIHsKQEAgLTI5NiwxNyAmIzQzOzI4NiwxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2hlbHBlcihzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8pCiB7CiAJaWYgKGluZm8tJmd0O3RpbWVvdXQgPT0gMCkgewotCQlwcl9kZWJ1ZygmIzM0O3RpbWVvdXQgdmFsdWUgaXMgemVyb1xuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3RpbWVvdXQgdmFsdWUgaXMgemVyb1xuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGluZm8tJmd0O3RpbWVvdXQgJmd0Oz0gSU5UX01BWCAvIDEwMDApIHsKLQkJcHJfZGVidWcoJiMzNDt0aW1lb3V0IHZhbHVlIGlzIHRvbyBiaWdcbiYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDt0aW1lb3V0IHZhbHVlIGlzIHRvbyBiaWdcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChpbmZvLSZndDtsYWJlbFswXSA9PSAmIzM5O1wwJiMzOTsgfHwKIAkgICAgc3RybmxlbihpbmZvLSZndDtsYWJlbCwKIAkJICAgIE1BWF9JRExFVElNRVJfTEFCRUxfU0laRSkgPT0gTUFYX0lETEVUSU1FUl9MQUJFTF9TSVpFKSB7Ci0JCXByX2RlYnVnKCYjMzQ7bGFiZWwgaXMgZW1wdHkgb3Igbm90IG51bC10ZXJtaW5hdGVkXG4mIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7bGFiZWwgaXMgZW1wdHkgb3Igbm90IG51bC10ZXJtaW5hdGVkXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKQEAgLTMxOCwzNCAmIzQzOzMwOCwyNSBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQogCXN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbyA9IHBhci0mZ3Q7dGFyZ2luZm87CiAJaW50IHJldDsKIAotCXByX2RlYnVnKCYjMzQ7Y2hlY2tlbnRyeSB0YXJnaW5mbyVzXG4mIzM0OywgaW5mby0mZ3Q7bGFiZWwpOwotCiAJcmV0ID0gaWRsZXRpbWVyX3RnX2hlbHBlcihpbmZvKTsKIAlpZihyZXQgJmx0OyAwKQotCXsKLQkJcHJfZGVidWcoJiMzNDtjaGVja2VudHJ5IGhlbHBlciByZXR1cm4gaW52YWxpZFxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAJbXV0ZXhfbG9jaygmYW1wO2xpc3RfbXV0ZXgpOwogCiAJaW5mby0mZ3Q7dGltZXIgPSBfX2lkbGV0aW1lcl90Z19maW5kX2J5X2xhYmVsKGluZm8tJmd0O2xhYmVsKTsKIAlpZiAoaW5mby0mZ3Q7dGltZXIpIHsKIAkJaWYgKGluZm8tJmd0O3RpbWVyLSZndDt0aW1lcl90eXBlICZhbXA7IFhUX0lETEVUSU1FUl9BTEFSTSkgewotCQkJcHJfZGVidWcoJiMzNDtBZGRpbmcvUmVwbGFjaW5nIHJ1bGUgd2l0aCBzYW1lIGxhYmVsIGFuZCBkaWZmZXJlbnQgdGltZXIgdHlwZSBpcyBub3QgYWxsb3dlZFxuJiMzNDspOwogCQkJbXV0ZXhfdW5sb2NrKCZhbXA7bGlzdF9tdXRleCk7CiYjNDM7CQkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O0FkZGluZy9SZXBsYWNpbmcgcnVsZSB3aXRoIHNhbWUgbGFiZWwgYW5kIGRpZmZlcmVudCB0aW1lciB0eXBlIGlzIG5vdCBhbGxvd2VkXG4mIzM0Oyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCWluZm8tJmd0O3RpbWVyLSZndDtyZWZjbnQmIzQzOyYjNDM7OwogCQltb2RfdGltZXIoJmFtcDtpbmZvLSZndDt0aW1lci0mZ3Q7dGltZXIsCiAJCQkgIHNlY3NfdG9famlmZmllcyhpbmZvLSZndDt0aW1lb3V0KSAmIzQzOyBqaWZmaWVzKTsKLQotCQlwcl9kZWJ1ZygmIzM0O2luY3JlYXNlZCByZWZjbnQgb2YgdGltZXIgJXMgdG8gJXVcbiYjMzQ7LAotCQkJIGluZm8tJmd0O2xhYmVsLCBpbmZvLSZndDt0aW1lci0mZ3Q7cmVmY250KTsKIAl9IGVsc2UgewogCQlyZXQgPSBpZGxldGltZXJfdGdfY3JlYXRlKGluZm8pOwogCQlpZiAocmV0ICZsdDsgMCkgewotCQkJcHJfZGVidWcoJiMzNDtmYWlsZWQgdG8gY3JlYXRlIHRpbWVyXG4mIzM0Oyk7CiAJCQltdXRleF91bmxvY2soJmFtcDtsaXN0X211dGV4KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTM2MCwzMCAmIzQzOzM0MSwyMyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQogCXN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbyA9IHBhci0mZ3Q7dGFyZ2luZm87CiAJaW50IHJldDsKIAotCXByX2RlYnVnKCYjMzQ7Y2hlY2tlbnRyeSB0YXJnaW5mbyVzXG4mIzM0OywgaW5mby0mZ3Q7bGFiZWwpOwotCiAJaWYgKGluZm8tJmd0O3NlbmRfbmxfbXNnKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlyZXQgPSBpZGxldGltZXJfdGdfaGVscGVyKChzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKilpbmZvKTsKIAlpZihyZXQgJmx0OyAwKQotCXsKLQkJcHJfZGVidWcoJiMzNDtjaGVja2VudHJ5IGhlbHBlciByZXR1cm4gaW52YWxpZFxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKLQlpZiAoaW5mby0mZ3Q7dGltZXJfdHlwZSAmZ3Q7IFhUX0lETEVUSU1FUl9BTEFSTSkgewotCQlwcl9kZWJ1ZygmIzM0O2ludmFsaWQgdmFsdWUgZm9yIHRpbWVyIHR5cGVcbiYjMzQ7KTsKJiM0MzsJaWYgKGluZm8tJmd0O3RpbWVyX3R5cGUgJmd0OyBYVF9JRExFVElNRVJfQUxBUk0pCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAogCW11dGV4X2xvY2soJmFtcDtsaXN0X211dGV4KTsKIAogCWluZm8tJmd0O3RpbWVyID0gX19pZGxldGltZXJfdGdfZmluZF9ieV9sYWJlbChpbmZvLSZndDtsYWJlbCk7CiAJaWYgKGluZm8tJmd0O3RpbWVyKSB7CiAJCWlmIChpbmZvLSZndDt0aW1lci0mZ3Q7dGltZXJfdHlwZSAhPSBpbmZvLSZndDt0aW1lcl90eXBlKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O0FkZGluZy9SZXBsYWNpbmcgcnVsZSB3aXRoIHNhbWUgbGFiZWwgYW5kIGRpZmZlcmVudCB0aW1lciB0eXBlIGlzIG5vdCBhbGxvd2VkXG4mIzM0Oyk7CiAJCQltdXRleF91bmxvY2soJmFtcDtsaXN0X211dGV4KTsKJiM0MzsJCQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7QWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcbiYjMzQ7KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTM5MywyMSAmIzQzOzM2NywxNSBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQogCQkJa3RpbWVfdCB0b3V0ID0gYWxhcm1fZXhwaXJlc19yZW1haW5pbmcoJmFtcDtpbmZvLSZndDt0aW1lci0mZ3Q7YWxhcm0pOwogCQkJc3RydWN0IHRpbWVzcGVjNjQga3RpbWVzcGVjID0ga3RpbWVfdG9fdGltZXNwZWM2NCh0b3V0KTsKIAotCQkJaWYgKGt0aW1lc3BlYy50dl9zZWMgJmd0OyAwKSB7Ci0JCQkJcHJfZGVidWcoJiMzNDt0aW1lX2V4cGlyeV9yZW1haW5pbmcgJWxsZFxuJiMzNDssCi0JCQkJCSBrdGltZXNwZWMudHZfc2VjKTsKJiM0MzsJCQlpZiAoa3RpbWVzcGVjLnR2X3NlYyAmZ3Q7IDApCiAJCQkJaWRsZXRpbWVyX3N0YXJ0X2FsYXJtX2t0aW1lKGluZm8tJmd0O3RpbWVyLCB0b3V0KTsKLQkJCX0KIAkJfSBlbHNlIHsKIAkJCQltb2RfdGltZXIoJmFtcDtpbmZvLSZndDt0aW1lci0mZ3Q7dGltZXIsCiAJCQkJCXNlY3NfdG9famlmZmllcyhpbmZvLSZndDt0aW1lb3V0KSAmIzQzOyBqaWZmaWVzKTsKIAkJfQotCQlwcl9kZWJ1ZygmIzM0O2luY3JlYXNlZCByZWZjbnQgb2YgdGltZXIgJXMgdG8gJXVcbiYjMzQ7LAotCQkJIGluZm8tJmd0O2xhYmVsLCBpbmZvLSZndDt0aW1lci0mZ3Q7cmVmY250KTsKIAl9IGVsc2UgewogCQlyZXQgPSBpZGxldGltZXJfdGdfY3JlYXRlX3YxKGluZm8pOwogCQlpZiAocmV0ICZsdDsgMCkgewotCQkJcHJfZGVidWcoJiMzNDtmYWlsZWQgdG8gY3JlYXRlIHRpbWVyXG4mIzM0Oyk7CiAJCQltdXRleF91bmxvY2soJmFtcDtsaXN0X211dGV4KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTQyMSwxOSAmIzQzOzM4OSwxMyBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtICpwYXIpCiB7CiAJY29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLSZndDt0YXJnaW5mbzsKIAotCXByX2RlYnVnKCYjMzQ7ZGVzdHJveSB0YXJnaW5mbyAlc1xuJiMzNDssIGluZm8tJmd0O2xhYmVsKTsKLQogCW11dGV4X2xvY2soJmFtcDtsaXN0X211dGV4KTsKIAogCWlmICgtLWluZm8tJmd0O3RpbWVyLSZndDtyZWZjbnQgJmd0OyAwKSB7Ci0JCXByX2RlYnVnKCYjMzQ7ZGVjcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxuJiMzNDssCi0JCQkgaW5mby0mZ3Q7bGFiZWwsIGluZm8tJmd0O3RpbWVyLSZndDtyZWZjbnQpOwogCQltdXRleF91bmxvY2soJmFtcDtsaXN0X211dGV4KTsKIAkJcmV0dXJuOwogCX0KIAotCXByX2RlYnVnKCYjMzQ7ZGVsZXRpbmcgdGltZXIgJXNcbiYjMzQ7LCBpbmZvLSZndDtsYWJlbCk7Ci0KIAlsaXN0X2RlbCgmYW1wO2luZm8tJmd0O3RpbWVyLSZndDtlbnRyeSk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7bGlzdF9tdXRleCk7CiAKQEAgLTQ0OCwxOSAmIzQzOzQxMCwxMyBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZGVzdHJveV92MShjb25zdCBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtICpwYXIpCiB7CiAJY29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvID0gcGFyLSZndDt0YXJnaW5mbzsKIAotCXByX2RlYnVnKCYjMzQ7ZGVzdHJveSB0YXJnaW5mbyAlc1xuJiMzNDssIGluZm8tJmd0O2xhYmVsKTsKLQogCW11dGV4X2xvY2soJmFtcDtsaXN0X211dGV4KTsKIAogCWlmICgtLWluZm8tJmd0O3RpbWVyLSZndDtyZWZjbnQgJmd0OyAwKSB7Ci0JCXByX2RlYnVnKCYjMzQ7ZGVjcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxuJiMzNDssCi0JCQkgaW5mby0mZ3Q7bGFiZWwsIGluZm8tJmd0O3RpbWVyLSZndDtyZWZjbnQpOwogCQltdXRleF91bmxvY2soJmFtcDtsaXN0X211dGV4KTsKIAkJcmV0dXJuOwogCX0KIAotCXByX2RlYnVnKCYjMzQ7ZGVsZXRpbmcgdGltZXIgJXNcbiYjMzQ7LCBpbmZvLSZndDtsYWJlbCk7Ci0KIAlsaXN0X2RlbCgmYW1wO2luZm8tJmd0O3RpbWVyLSZndDtlbnRyeSk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7bGlzdF9tdXRleCk7CiAKQEAgLTUzNCw3ICYjNDM7NDkwLDcgQEAgc3RhdGljIGludCBfX2luaXQgaWRsZXRpbWVyX3RnX2luaXQodm9pZCkKIAlpZGxldGltZXJfdGdfY2xhc3MgPSBjbGFzc19jcmVhdGUoJiMzNDt4dF9pZGxldGltZXImIzM0Oyk7CiAJZXJyID0gUFRSX0VSUihpZGxldGltZXJfdGdfY2xhc3MpOwogCWlmIChJU19FUlIoaWRsZXRpbWVyX3RnX2NsYXNzKSkgewotCQlwcl9kZWJ1ZygmIzM0O2NvdWxkbiYjMzk7dCByZWdpc3RlciBkZXZpY2UgY2xhc3NcbiYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtjb3VsZG4mIzM5O3QgcmVnaXN0ZXIgZGV2aWNlIGNsYXNzXG4mIzM0Oyk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNTQyLDcgJiM0Mzs0OTgsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBpZGxldGltZXJfdGdfaW5pdCh2b2lkKQogCQkJCQkgICAgTUtERVYoMCwgMCksIE5VTEwsICYjMzQ7dGltZXJzJiMzNDspOwogCWVyciA9IFBUUl9FUlIoaWRsZXRpbWVyX3RnX2RldmljZSk7CiAJaWYgKElTX0VSUihpZGxldGltZXJfdGdfZGV2aWNlKSkgewotCQlwcl9kZWJ1ZygmIzM0O2NvdWxkbiYjMzk7dCByZWdpc3RlciBzeXN0ZW0gZGV2aWNlXG4mIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7Y291bGRuJiMzOTt0IHJlZ2lzdGVyIHN5c3RlbSBkZXZpY2VcbiYjMzQ7KTsKIAkJZ290byBvdXRfY2xhc3M7CiAJfQogCkBAIC01NTEsNyAmIzQzOzUwNyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGlkbGV0aW1lcl90Z19pbml0KHZvaWQpCiAJZXJyID0geHRfcmVnaXN0ZXJfdGFyZ2V0cyhpZGxldGltZXJfdGcsIEFSUkFZX1NJWkUoaWRsZXRpbWVyX3RnKSk7CiAKIAlpZiAoZXJyICZsdDsgMCkgewotCQlwcl9kZWJ1ZygmIzM0O2NvdWxkbiYjMzk7dCByZWdpc3RlciB4dCB0YXJnZXRcbiYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtjb3VsZG4mIzM5O3QgcmVnaXN0ZXIgeHQgdGFyZ2V0XG4mIzM0Oyk7CiAJCWdvdG8gb3V0X2RldjsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfTE9HLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0xPRy5jCmluZGV4IGYzOTI0NGY5YzBlZDkuLmRlM2YxNzY3OTJhMDcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTE9HLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9MT0cuYwpAQCAtNTAsMTIgJiM0Mzs1MCwxMiBAQCBzdGF0aWMgaW50IGxvZ190Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAobG9naW5mby0mZ3Q7bGV2ZWwgJmd0Oz0gOCkgewotCQlwcl9kZWJ1ZygmIzM0O2xldmVsICV1ICZndDs9IDhcbiYjMzQ7LCBsb2dpbmZvLSZndDtsZXZlbCk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7bGV2ZWwgJXUgJmd0Oz0gOFxuJiMzNDssIGxvZ2luZm8tJmd0O2xldmVsKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGxvZ2luZm8tJmd0O3ByZWZpeFtzaXplb2YobG9naW5mby0mZ3Q7cHJlZml4KS0xXSAhPSAmIzM5O1wwJiMzOTspIHsKLQkJcHJfZGVidWcoJiMzNDtwcmVmaXggaXMgbm90IG51bGwtdGVybWluYXRlZFxuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3ByZWZpeCBpcyBub3QgbnVsbC10ZXJtaW5hdGVkXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9NQVNRVUVSQURFLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuYwppbmRleCBlYWUwNWMxNzgzMzY3Li5jZWE0ODhjZWM1NDQ1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuYwpAQCAtMjEsMTEgJiM0MzsyMSwxMSBAQCBzdGF0aWMgaW50IG1hc3F1ZXJhZGVfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCiAJY29uc3Qgc3RydWN0IG5mX25hdF9pcHY0X211bHRpX3JhbmdlX2NvbXBhdCAqbXIgPSBwYXItJmd0O3RhcmdpbmZvOwogCiAJaWYgKG1yLSZndDtyYW5nZVswXS5mbGFncyAmYW1wOyBORl9OQVRfUkFOR0VfTUFQX0lQUykgewotCQlwcl9kZWJ1ZygmIzM0O2JhZCBNQVBfSVBTLlxuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2JhZCBNQVBfSVBTLlxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKG1yLSZndDtyYW5nZXNpemUgIT0gMSkgewotCQlwcl9kZWJ1ZygmIzM0O2JhZCByYW5nZXNpemUgJXVcbiYjMzQ7LCBtci0mZ3Q7cmFuZ2VzaXplKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtiYWQgcmFuZ2VzaXplICV1XG4mIzM0OywgbXItJmd0O3Jhbmdlc2l6ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gbmZfY3RfbmV0bnNfZ2V0KHBhci0mZ3Q7bmV0LCBwYXItJmd0O2ZhbWlseSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jIGIvbmV0L25ldGZpbHRlci94dF9ORVRNQVAuYwppbmRleCBjYjJlZTgwZDg0ZmE4Li44Yzg2ZDlhNDMzNzNhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfTkVUTUFQLmMKQEAgLTEwNiwxMSAmIzQzOzEwNiwxMSBAQCBzdGF0aWMgaW50IG5ldG1hcF90ZzRfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCiAJY29uc3Qgc3RydWN0IG5mX25hdF9pcHY0X211bHRpX3JhbmdlX2NvbXBhdCAqbXIgPSBwYXItJmd0O3RhcmdpbmZvOwogCiAJaWYgKCEobXItJmd0O3JhbmdlWzBdLmZsYWdzICZhbXA7IE5GX05BVF9SQU5HRV9NQVBfSVBTKSkgewotCQlwcl9kZWJ1ZygmIzM0O2JhZCBNQVBfSVBTLlxuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2JhZCBNQVBfSVBTLlxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKG1yLSZndDtyYW5nZXNpemUgIT0gMSkgewotCQlwcl9kZWJ1ZygmIzM0O2JhZCByYW5nZXNpemUgJXUuXG4mIzM0OywgbXItJmd0O3Jhbmdlc2l6ZSk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7YmFkIHJhbmdlc2l6ZSAldS5cbiYjMzQ7LCBtci0mZ3Q7cmFuZ2VzaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiBuZl9jdF9uZXRuc19nZXQocGFyLSZndDtuZXQsIHBhci0mZ3Q7ZmFtaWx5KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfUkVESVJFQ1QuYyBiL25ldC9uZXRmaWx0ZXIveHRfUkVESVJFQ1QuYwppbmRleCBmZjY2YjU2YTNmOTdkLi4yN2JjMDU0NWM0Zjc0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X1JFRElSRUNULmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jCkBAIC01MSwxMSAmIzQzOzUxLDExIEBAIHN0YXRpYyBpbnQgcmVkaXJlY3RfdGc0X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQogCWNvbnN0IHN0cnVjdCBuZl9uYXRfaXB2NF9tdWx0aV9yYW5nZV9jb21wYXQgKm1yID0gcGFyLSZndDt0YXJnaW5mbzsKIAogCWlmIChtci0mZ3Q7cmFuZ2VbMF0uZmxhZ3MgJmFtcDsgTkZfTkFUX1JBTkdFX01BUF9JUFMpIHsKLQkJcHJfZGVidWcoJiMzNDtiYWQgTUFQX0lQUy5cbiYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtiYWQgTUFQX0lQUy5cbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChtci0mZ3Q7cmFuZ2VzaXplICE9IDEpIHsKLQkJcHJfZGVidWcoJiMzNDtiYWQgcmFuZ2VzaXplICV1LlxuJiMzNDssIG1yLSZndDtyYW5nZXNpemUpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2JhZCByYW5nZXNpemUgJXUuXG4mIzM0OywgbXItJmd0O3Jhbmdlc2l6ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gbmZfY3RfbmV0bnNfZ2V0KHBhci0mZ3Q7bmV0LCBwYXItJmd0O2ZhbWlseSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1NFQ01BUksuYyBiL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jCmluZGV4IDViYzVlYTUwNWViOWUuLjM4ZThlNDEwYjRlODEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jCkBAIC03OSw4ICYjNDM7NzksNyBAQCBzZWNtYXJrX3RnX2NoZWNrKGNvbnN0IGNoYXIgKnRhYmxlLCBzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfaW5mb192MSAqaW5mbykKIAogCWlmIChzdHJjbXAodGFibGUsICYjMzQ7bWFuZ2xlJiMzNDspICE9IDAgJmFtcDsmYW1wOwogCSAgICBzdHJjbXAodGFibGUsICYjMzQ7c2VjdXJpdHkmIzM0OykgIT0gMCkgewotCQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7b25seSB2YWxpZCBpbiBcJiMzOTttYW5nbGVcJiMzOTsgb3IgXCYjMzk7c2VjdXJpdHlcJiMzOTsgdGFibGUsIG5vdCBcJiMzOTslc1wmIzM5O1xuJiMzNDssCi0JCQkJICAgIHRhYmxlKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtvbmx5IHZhbGlkIGluIFwmIzM5O21hbmdsZVwmIzM5OyBvciBcJiMzOTtzZWN1cml0eVwmIzM5OyB0YWJsZVxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfY2dyb3VwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nncm91cC5jCmluZGV4IDQzZDJhZTJiZTYyOGQuLmFjMWI3ZTcxY2Q3ZjUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfY2dyb3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9jZ3JvdXAuYwpAQCAtMzMsNyAmIzQzOzMzLDcgQEAgc3RhdGljIGludCBjZ3JvdXBfbXRfY2hlY2tfdjAoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFJU19FTkFCTEVEKENPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQpKSB7Ci0JCXByX2luZm8oTkVUX0NMU19DTEFTU0lEX0lOVkFMSURfTVNHKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoTkVUX0NMU19DTEFTU0lEX0lOVkFMSURfTVNHKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00OSw3ICYjNDM7NDksNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192MShjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIWluZm8tJmd0O2hhc19wYXRoICZhbXA7JmFtcDsgIWluZm8tJmd0O2hhc19jbGFzc2lkKSB7Ci0JCXByX2luZm8oJiMzNDt4dF9jZ3JvdXA6IG5vIHBhdGggb3IgY2xhc3NpZCBzcGVjaWZpZWRcbiYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDt4dF9jZ3JvdXA6IG5vIHBhdGggb3IgY2xhc3NpZCBzcGVjaWZpZWRcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC01OSw3ICYjNDM7NTksNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192MShjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAl9CiAKIAlpZiAoaW5mby0mZ3Q7aGFzX2NsYXNzaWQgJmFtcDsmYW1wOyAhSVNfRU5BQkxFRChDT05GSUdfQ0dST1VQX05FVF9DTEFTU0lEKSkgewotCQlwcl9pbmZvKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODksNyAmIzQzOzg5LDcgQEAgc3RhdGljIGludCBjZ3JvdXBfbXRfY2hlY2tfdjIoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFpbmZvLSZndDtoYXNfcGF0aCAmYW1wOyZhbXA7ICFpbmZvLSZndDtoYXNfY2xhc3NpZCkgewotCQlwcl9pbmZvKCYjMzQ7eHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXG4mIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7eHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTksNyAmIzQzOzk5LDcgQEAgc3RhdGljIGludCBjZ3JvdXBfbXRfY2hlY2tfdjIoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJfQogCiAJaWYgKGluZm8tJmd0O2hhc19jbGFzc2lkICZhbXA7JmFtcDsgIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHsKLQkJcHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZChORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfZXNwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jCmluZGV4IDJhMWMwYWQwZmYwNzkuLjY4ZmQ3NTg4NDI2OGEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfZXNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9lc3AuYwpAQCAtMjUsMTIgJiM0MzsyNSw3IEBAIE1PRFVMRV9BTElBUygmIzM0O2lwNnRfZXNwJiMzNDspOwogc3RhdGljIGlubGluZSBib29sCiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpCiB7Ci0JYm9vbCByOwotCXByX2RlYnVnKCYjMzQ7c3BpX21hdGNoOiVjIDB4JXggJmx0Oz0gMHgleCAmbHQ7PSAweCV4XG4mIzM0OywKLQkJIGludmVydCA/ICYjMzk7ISYjMzk7IDogJiMzOTsgJiMzOTssIG1pbiwgc3BpLCBtYXgpOwotCXIgPSAoc3BpICZndDs9IG1pbiAmYW1wOyZhbXA7IHNwaSAmbHQ7PSBtYXgpIF4gaW52ZXJ0OwotCXByX2RlYnVnKCYjMzQ7IHJlc3VsdCAlc1xuJiMzNDssIHIgPyAmIzM0O1BBU1MmIzM0OyA6ICYjMzQ7RkFJTEVEJiMzNDspOwotCXJldHVybiByOwomIzQzOwlyZXR1cm4gKHNwaSAmZ3Q7PSBtaW4gJmFtcDsmYW1wOyBzcGkgJmx0Oz0gbWF4KSBeIGludmVydDsKIH0KIAogc3RhdGljIGJvb2wgZXNwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKQEAgLTQ4LDcgJiM0Mzs0Myw2IEBAIHN0YXRpYyBib29sIGVzcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJCS8qIFdlJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZQogCQkgKiBjYW4mIzM5O3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLgogCQkgKi8KLQkJcHJfZGVidWcoJiMzNDtEcm9wcGluZyBldmlsIEVTUCB0aW55Z3JhbS5cbiYjMzQ7KTsKIAkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTYyLDcgJiM0Mzs1Niw3IEBAIHN0YXRpYyBpbnQgZXNwX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogCWNvbnN0IHN0cnVjdCB4dF9lc3AgKmVzcGluZm8gPSBwYXItJmd0O21hdGNoaW5mbzsKIAogCWlmIChlc3BpbmZvLSZndDtpbnZmbGFncyAmYW1wOyB+WFRfRVNQX0lOVl9NQVNLKSB7Ci0JCXByX2RlYnVnKCYjMzQ7dW5rbm93biBmbGFncyAlWFxuJiMzNDssIGVzcGluZm8tJmd0O2ludmZsYWdzKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDt1bmtub3duIGZsYWdzICVYXG4mIzM0OywgZXNwaW5mby0mZ3Q7aW52ZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaXBjb21wLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwY29tcC5jCmluZGV4IDQ3MmRhNjM5YTMyZTIuLjMyOTljMWVhNjBmOWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaXBjb21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9pcGNvbXAuYwpAQCAtMjksMTIgJiM0MzsyOSw3IEBAIE1PRFVMRV9BTElBUygmIzM0O2lwNnRfaXBjb21wJiMzNDspOwogc3RhdGljIGlubGluZSBib29sCiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpCiB7Ci0JYm9vbCByOwotCXByX2RlYnVnKCYjMzQ7c3BpX21hdGNoOiVjIDB4JXggJmx0Oz0gMHgleCAmbHQ7PSAweCV4XG4mIzM0OywKLQkJIGludmVydCA/ICYjMzk7ISYjMzk7IDogJiMzOTsgJiMzOTssIG1pbiwgc3BpLCBtYXgpOwotCXIgPSAoc3BpICZndDs9IG1pbiAmYW1wOyZhbXA7IHNwaSAmbHQ7PSBtYXgpIF4gaW52ZXJ0OwotCXByX2RlYnVnKCYjMzQ7IHJlc3VsdCAlc1xuJiMzNDssIHIgPyAmIzM0O1BBU1MmIzM0OyA6ICYjMzQ7RkFJTEVEJiMzNDspOwotCXJldHVybiByOwomIzQzOwlyZXR1cm4gKHNwaSAmZ3Q7PSBtaW4gJmFtcDsmYW1wOyBzcGkgJmx0Oz0gbWF4KSBeIGludmVydDsKIH0KIAogc3RhdGljIGJvb2wgY29tcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCkBAIC01Miw3ICYjNDM7NDcsNiBAQCBzdGF0aWMgYm9vbCBjb21wX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJLyogV2UmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlCiAJCSAqIGNhbiYjMzk7dC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuCiAJCSAqLwotCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGV2aWwgSVBDb21wIHRpbnlncmFtLlxuJiMzNDspOwogCQlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYwppbmRleCAwYzllMDE0ZTMwYjQ5Li5iZjYxMTQxZmI3ODUwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYwpAQCAtMjQsMjcgJiM0MzsyNCwxNSBAQCBpcHJhbmdlX210NChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJCW0gID0gbnRvaGwoaXBoLSZndDtzYWRkcikgJmx0OyBudG9obChpbmZvLSZndDtzcmNfbWluLmlwKTsKIAkJbSB8PSBudG9obChpcGgtJmd0O3NhZGRyKSAmZ3Q7IG50b2hsKGluZm8tJmd0O3NyY19tYXguaXApOwogCQltIF49ICEhKGluZm8tJmd0O2ZsYWdzICZhbXA7IElQUkFOR0VfU1JDX0lOVik7Ci0JCWlmIChtKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O3NyYyBJUCAlcEk0IE5PVCBpbiByYW5nZSAlcyVwSTQtJXBJNFxuJiMzNDssCi0JCQkgICAgICAgICAmYW1wO2lwaC0mZ3Q7c2FkZHIsCi0JCQkgICAgICAgICAoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVBSQU5HRV9TUkNfSU5WKSA/ICYjMzQ7KElOVikgJiMzNDsgOiAmIzM0OyYjMzQ7LAotCQkJICAgICAgICAgJmFtcDtpbmZvLSZndDtzcmNfbWluLmlwLAotCQkJICAgICAgICAgJmFtcDtpbmZvLSZndDtzcmNfbWF4LmlwKTsKJiM0MzsJCWlmIChtKQogCQkJcmV0dXJuIGZhbHNlOwotCQl9CiAJfQogCWlmIChpbmZvLSZndDtmbGFncyAmYW1wOyBJUFJBTkdFX0RTVCkgewogCQltICA9IG50b2hsKGlwaC0mZ3Q7ZGFkZHIpICZsdDsgbnRvaGwoaW5mby0mZ3Q7ZHN0X21pbi5pcCk7CiAJCW0gfD0gbnRvaGwoaXBoLSZndDtkYWRkcikgJmd0OyBudG9obChpbmZvLSZndDtkc3RfbWF4LmlwKTsKIAkJbSBePSAhIShpbmZvLSZndDtmbGFncyAmYW1wOyBJUFJBTkdFX0RTVF9JTlYpOwotCQlpZiAobSkgewotCQkJcHJfZGVidWcoJiMzNDtkc3QgSVAgJXBJNCBOT1QgaW4gcmFuZ2UgJXMlcEk0LSVwSTRcbiYjMzQ7LAotCQkJICAgICAgICAgJmFtcDtpcGgtJmd0O2RhZGRyLAotCQkJICAgICAgICAgKGluZm8tJmd0O2ZsYWdzICZhbXA7IElQUkFOR0VfRFNUX0lOVikgPyAmIzM0OyhJTlYpICYjMzQ7IDogJiMzNDsmIzM0OywKLQkJCSAgICAgICAgICZhbXA7aW5mby0mZ3Q7ZHN0X21pbi5pcCwKLQkJCSAgICAgICAgICZhbXA7aW5mby0mZ3Q7ZHN0X21heC5pcCk7CiYjNDM7CQlpZiAobSkKIAkJCXJldHVybiBmYWxzZTsKLQkJfQogCX0KIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTczLDI3ICYjNDM7NjEsMTUgQEAgaXByYW5nZV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQltICA9IGlwcmFuZ2VfaXB2Nl9sdCgmYW1wO2lwaC0mZ3Q7c2FkZHIsICZhbXA7aW5mby0mZ3Q7c3JjX21pbi5pbjYpOwogCQltIHw9IGlwcmFuZ2VfaXB2Nl9sdCgmYW1wO2luZm8tJmd0O3NyY19tYXguaW42LCAmYW1wO2lwaC0mZ3Q7c2FkZHIpOwogCQltIF49ICEhKGluZm8tJmd0O2ZsYWdzICZhbXA7IElQUkFOR0VfU1JDX0lOVik7Ci0JCWlmIChtKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O3NyYyBJUCAlcEk2IE5PVCBpbiByYW5nZSAlcyVwSTYtJXBJNlxuJiMzNDssCi0JCQkJICZhbXA7aXBoLSZndDtzYWRkciwKLQkJCQkgKGluZm8tJmd0O2ZsYWdzICZhbXA7IElQUkFOR0VfU1JDX0lOVikgPyAmIzM0OyhJTlYpICYjMzQ7IDogJiMzNDsmIzM0OywKLQkJCQkgJmFtcDtpbmZvLSZndDtzcmNfbWluLmluNiwKLQkJCQkgJmFtcDtpbmZvLSZndDtzcmNfbWF4LmluNik7CiYjNDM7CQlpZiAobSkKIAkJCXJldHVybiBmYWxzZTsKLQkJfQogCX0KIAlpZiAoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVBSQU5HRV9EU1QpIHsKIAkJbSAgPSBpcHJhbmdlX2lwdjZfbHQoJmFtcDtpcGgtJmd0O2RhZGRyLCAmYW1wO2luZm8tJmd0O2RzdF9taW4uaW42KTsKIAkJbSB8PSBpcHJhbmdlX2lwdjZfbHQoJmFtcDtpbmZvLSZndDtkc3RfbWF4LmluNiwgJmFtcDtpcGgtJmd0O2RhZGRyKTsKIAkJbSBePSAhIShpbmZvLSZndDtmbGFncyAmYW1wOyBJUFJBTkdFX0RTVF9JTlYpOwotCQlpZiAobSkgewotCQkJcHJfZGVidWcoJiMzNDtkc3QgSVAgJXBJNiBOT1QgaW4gcmFuZ2UgJXMlcEk2LSVwSTZcbiYjMzQ7LAotCQkJCSAmYW1wO2lwaC0mZ3Q7ZGFkZHIsCi0JCQkJIChpbmZvLSZndDtmbGFncyAmYW1wOyBJUFJBTkdFX0RTVF9JTlYpID8gJiMzNDsoSU5WKSAmIzM0OyA6ICYjMzQ7JiMzNDssCi0JCQkJICZhbXA7aW5mby0mZ3Q7ZHN0X21pbi5pbjYsCi0JCQkJICZhbXA7aW5mby0mZ3Q7ZHN0X21heC5pbjYpOwomIzQzOwkJaWYgKG0pCiAJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KIAl9CiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2lwdnMuYyBiL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jCmluZGV4IDI1M2M3MWNjOWE2MzQuLmUxM2MwZmZiNzNhOWEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jCkBAIC0xNDgsNyAmIzQzOzE0OCw2IEBAIGlwdnNfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogb3V0X3B1dF9jcDoKIAlfX2lwX3ZzX2Nvbm5fcHV0KGNwKTsKIG91dDoKLQlwcl9kZWJ1ZygmIzM0O21hdGNoPSVkXG4mIzM0OywgbWF0Y2gpOwogCXJldHVybiBtYXRjaDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuYyBiL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmMKaW5kZXggYTE2OTFmZjQwNWQzYy4uYmZmNWY1M2E5YmVmYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jCkBAIC0zNyw3ICYjNDM7MzcsNiBAQCBwb3J0c19tYXRjaF92MShjb25zdCBzdHJ1Y3QgeHRfbXVsdGlwb3J0X3YxICptaW5mbywKIAkJaWYgKG1pbmZvLSZndDtwZmxhZ3NbaV0pIHsKIAkJCS8qIHJhbmdlIHBvcnQgbWF0Y2hpbmcgKi8KIAkJCWUgPSBtaW5mby0mZ3Q7cG9ydHNbJiM0MzsmIzQzO2ldOwotCQkJcHJfZGVidWcoJiMzNDtzcmMgb3IgZHN0IG1hdGNoZXMgd2l0aCAlZC0lZD9cbiYjMzQ7LCBzLCBlKTsKIAogCQkJc3dpdGNoIChtaW5mby0mZ3Q7ZmxhZ3MpIHsKIAkJCWNhc2UgWFRfTVVMVElQT1JUX1NPVVJDRToKQEAgLTU4LDggJiM0Mzs1Nyw2IEBAIHBvcnRzX21hdGNoX3YxKGNvbnN0IHN0cnVjdCB4dF9tdWx0aXBvcnRfdjEgKm1pbmZvLAogCQkJfQogCQl9IGVsc2UgewogCQkJLyogZXhhY3QgcG9ydCBtYXRjaGluZyAqLwotCQkJcHJfZGVidWcoJiMzNDtzcmMgb3IgZHN0IG1hdGNoZXMgd2l0aCAlZD9cbiYjMzQ7LCBzKTsKLQogCQkJc3dpdGNoIChtaW5mby0mZ3Q7ZmxhZ3MpIHsKIAkJCWNhc2UgWFRfTVVMVElQT1JUX1NPVVJDRToKIAkJCQlpZiAoc3JjID09IHMpCkBAIC05Nyw3ICYjNDM7OTQsNiBAQCBtdWx0aXBvcnRfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkvKiBXZSYjMzk7dmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2UKIAkJICogY2FuJiMzOTt0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4KIAkJICovCi0JCXByX2RlYnVnKCYjMzQ7RHJvcHBpbmcgZXZpbCBvZmZzZXQ9MCB0aW55Z3JhbS5cbiYjMzQ7KTsKIAkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jIGIvbmV0L25ldGZpbHRlci94dF9zY3RwLmMKaW5kZXggYjQ2YTZhNTEyMDU4My4uZDM1YzIxZDk2NTFiMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9zY3RwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9zY3RwLmMKQEAgLTQ4LDMwICYjNDM7NDgsMTcgQEAgbWF0Y2hfcGFja2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJY29uc3Qgc3RydWN0IHh0X3NjdHBfZmxhZ19pbmZvICpmbGFnX2luZm8gPSBpbmZvLSZndDtmbGFnX2luZm87CiAJaW50IGZsYWdfY291bnQgPSBpbmZvLSZndDtmbGFnX2NvdW50OwogCi0jaWZkZWYgREVCVUcKLQlpbnQgaSA9IDA7Ci0jZW5kaWYKLQogCWlmIChjaHVua19tYXRjaF90eXBlID09IFNDVFBfQ0hVTktfTUFUQ0hfQUxMKQogCQlTQ1RQX0NIVU5LTUFQX0NPUFkoY2h1bmttYXBjb3B5LCBpbmZvLSZndDtjaHVua21hcCk7CiAKIAlkbyB7CiAJCXNjaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9zY2gpLCAmYW1wO19zY2gpOwogCQlpZiAoc2NoID09IE5VTEwgfHwgc2NoLSZndDtsZW5ndGggPT0gMCkgewotCQkJcHJfZGVidWcoJiMzNDtEcm9wcGluZyBpbnZhbGlkIFNDVFAgcGFja2V0LlxuJiMzNDspOwogCQkJKmhvdGRyb3AgPSB0cnVlOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9Ci0jaWZkZWYgREVCVUcKLQkJcHJfZGVidWcoJiMzNDtDaHVuayBudW06ICVkXHRvZmZzZXQ6ICVkXHR0eXBlOiAlZFx0bGVuZ3RoOiAlZCYjMzQ7Ci0JCQkgJiMzNDtcdGZsYWdzOiAleFxuJiMzNDssCi0JCQkgJiM0MzsmIzQzO2ksIG9mZnNldCwgc2NoLSZndDt0eXBlLCBodG9ucyhzY2gtJmd0O2xlbmd0aCksCi0JCQkgc2NoLSZndDtmbGFncyk7Ci0jZW5kaWYKIAkJb2Zmc2V0ICYjNDM7PSBTQ1RQX1BBRDQobnRvaHMoc2NoLSZndDtsZW5ndGgpKTsKIAotCQlwcl9kZWJ1ZygmIzM0O3NrYi0mZ3Q7bGVuOiAlZFx0b2Zmc2V0OiAlZFxuJiMzNDssIHNrYi0mZ3Q7bGVuLCBvZmZzZXQpOwotCiAJCWlmIChTQ1RQX0NIVU5LTUFQX0lTX1NFVChpbmZvLSZndDtjaHVua21hcCwgc2NoLSZndDt0eXBlKSkgewogCQkJc3dpdGNoIChjaHVua19tYXRjaF90eXBlKSB7CiAJCQljYXNlIFNDVFBfQ0hVTktfTUFUQ0hfQU5ZOgpAQCAtMTIxLDE4ICYjNDM7MTA4LDE0IEBAIHNjdHBfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCWNvbnN0IHN0cnVjdCBzY3RwaGRyICpzaDsKIAlzdHJ1Y3Qgc2N0cGhkciBfc2g7CiAKLQlpZiAocGFyLSZndDtmcmFnb2ZmICE9IDApIHsKLQkJcHJfZGVidWcoJiMzNDtEcm9wcGluZyBub24tZmlyc3QgZnJhZ21lbnQuLiBGSVhNRVxuJiMzNDspOwomIzQzOwlpZiAocGFyLSZndDtmcmFnb2ZmICE9IDApCiAJCXJldHVybiBmYWxzZTsKLQl9CiAKIAlzaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHBhci0mZ3Q7dGhvZmYsIHNpemVvZihfc2gpLCAmYW1wO19zaCk7CiAJaWYgKHNoID09IE5VTEwpIHsKLQkJcHJfZGVidWcoJiMzNDtEcm9wcGluZyBldmlsIFRDUCBvZmZzZXQ9MCB0aW55Z3JhbS5cbiYjMzQ7KTsKIAkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQlwcl9kZWJ1ZygmIzM0O3NwdDogJWRcdGRwdDogJWRcbiYjMzQ7LCBudG9ocyhzaC0mZ3Q7c291cmNlKSwgbnRvaHMoc2gtJmd0O2Rlc3QpKTsKIAogCXJldHVybiAgU0NDSEVDSyhudG9ocyhzaC0mZ3Q7c291cmNlKSAmZ3Q7PSBpbmZvLSZndDtzcHRzWzBdCiAJCQkmYW1wOyZhbXA7IG50b2hzKHNoLSZndDtzb3VyY2UpICZsdDs9IGluZm8tJmd0O3NwdHNbMV0sCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3RjcHVkcC5jIGIvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuYwppbmRleCBmNzZjZjE4ZjFhMjQ0Li43MDYwOGI4ZDA2YWIyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3RjcHVkcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmMKQEAgLTQ0LDggJiM0Mzs0NCw2IEBAIHRjcF9maW5kX29wdGlvbih1X2ludDhfdCBvcHRpb24sCiAJdV9pbnQ4X3QgX29wdFs2MCAtIHNpemVvZihzdHJ1Y3QgdGNwaGRyKV07CiAJdW5zaWduZWQgaW50IGk7CiAKLQlwcl9kZWJ1ZygmIzM0O2ZpbmRpbmcgb3B0aW9uXG4mIzM0Oyk7Ci0KIAlpZiAoIW9wdGxlbikKIAkJcmV0dXJuIGludmVydDsKIApAQCAtODEsMTAgJiM0Mzs3OSw4IEBAIHN0YXRpYyBib29sIHRjcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJCSAgIGNhdXNlcyB0aGlzLiBJdHMgYSBjcmFja2VyIHRyeWluZyB0byBicmVhayBpbiBieSBkb2luZyBhCiAJCSAgIGZsYWcgb3ZlcndyaXRlIHRvIHBhc3MgdGhlIGRpcmVjdGlvbiBjaGVja3MuCiAJCSovCi0JCWlmIChwYXItJmd0O2ZyYWdvZmYgPT0gMSkgewotCQkJcHJfZGVidWcoJiMzNDtEcm9wcGluZyBldmlsIFRDUCBvZmZzZXQ9MSBmcmFnLlxuJiMzNDspOwomIzQzOwkJaWYgKHBhci0mZ3Q7ZnJhZ29mZiA9PSAxKQogCQkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKLQkJfQogCQkvKiBNdXN0IG5vdCBiZSBhIGZyYWdtZW50LiAqLwogCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtOTMsNyAmIzQzOzg5LDYgQEAgc3RhdGljIGJvb2wgdGNwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAlpZiAodGggPT0gTlVMTCkgewogCQkvKiBXZSYjMzk7dmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2UKIAkJICAgY2FuJiMzOTt0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4gKi8KLQkJcHJfZGVidWcoJiMzNDtEcm9wcGluZyBldmlsIFRDUCBvZmZzZXQ9MCB0aW55Z3JhbS5cbiYjMzQ7KTsKIAkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTE0NSw3ICYjNDM7MTQwLDYgQEAgc3RhdGljIGJvb2wgdWRwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAlpZiAodWggPT0gTlVMTCkgewogCQkvKiBXZSYjMzk7dmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2UKIAkJICAgY2FuJiMzOTt0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4gKi8KLQkJcHJfZGVidWcoJiMzNDtEcm9wcGluZyBldmlsIFVEUCB0aW55Z3JhbS5cbiYjMzQ7KTsKIAkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MjEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogT3B0aW1pemF0aW9uIGFuZCBQb3RlbnRpYWwgTG9naWMgRmxhdyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgcXVpY2sgc2NhbiwgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBuZXRmaWx0ZXIgZmlsZXMg4oCTIGBuZXQvaXB2NC9uZXRmaWx0ZXIvYCwgYG5ldC9pcHY2L25ldGZpbHRlci9gLCBhbmQgYG5ldC9uZXRmaWx0ZXIvYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlc2UgYXJlIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2VzOiBtYWlubHksIHNvbWUgZGVidWdnaW5nIG91dHB1dCBpcyBiZWluZyB0b25lZCBkb3duIGJ5IHJlbW92aW5nIGBwcl9kZWJ1Z2Agc3RhdGVtZW50cywgcmVwbGFjaW5nIGRlYnVnIG9yIGluZm9ybWF0aW9uYWwgcHJpbnRzIHdpdGggcmF0ZS1saW1pdGVkIHZlcnNpb25zIHVzaW5nIGBwcl9pbmZvX3JhdGVsaW1pdGVkYCBpbiB0aGUgYF9jaGVja2AgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBvcHRpbWl6YXRpb24uCgpUaGVuLCB0aGVyZeKAmXMgc29tZXRoaW5nIG5ldyBpbiBgeHRfQ1QuY2AuIEkgc2VlIHRoYXQgYSBsZW5ndGggY2hlY2sgaGFzIGJlZW4gYWRkZWQgZm9yIGBpbmZvLSZndDtoZWxwZXJgIGFuZCBgaW5mby0mZ3Q7dGltZW91dGAgd2hpY2ggaXMgZ29vZCBwcmFjdGljZS4gSeKAmXZlIG5vdGljZWQgYSBwb3NzaWJsZSBidWcsIHNvIGxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNvZGU6CmBgYGMKQEAgLTE5NSw3ICYjNDM7MTk1LDggQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhciwKIAkJZ290byBlcnIzOwogCX0KIAotCWlmIChpbmZvLSZndDtoZWxwZXJbMF0pIHsKJiM0MzsJaWYgKGluZm8tJmd0O2hlbHBlclswXSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpICZsdDsgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKIAkJaWYgKHN0cm5sZW4oaW5mby0mZ3Q7aGVscGVyLCBzaXplb2YoaW5mby0mZ3Q7aGVscGVyKSkgPT0gc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKIAkJCXJldCA9IC1FTkFNRVRPT0xPTkc7CiAJCQlnb3RvIGVycjM7CkBAIC0yMDYsNyAmIzQzOzIwNyw4IEBAIHN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsCiAJCQlnb3RvIGVycjM7CiAJfQogCi0JaWYgKGluZm8tJmd0O3RpbWVvdXRbMF0pIHsKJiM0MzsJaWYgKGluZm8tJmd0O3RpbWVvdXRbMF0gJmFtcDsmYW1wOwomIzQzOwkgICAgc3RybmxlbihpbmZvLSZndDt0aW1lb3V0LCBzaXplb2YoaW5mby0mZ3Q7dGltZW91dCkpICZsdDsgc2l6ZW9mKGluZm8tJmd0O3RpbWVvdXQpKSB7CiAJCWlmIChzdHJubGVuKGluZm8tJmd0O3RpbWVvdXQsIHNpemVvZihpbmZvLSZndDt0aW1lb3V0KSkgPT0gc2l6ZW9mKGluZm8tJmd0O3RpbWVvdXQpKSB7CiAJCQlyZXQgPSAtRU5BTUVUT09MT05HOwogCQkJZ290byBlcnI0OwpgYGAKTm93LCBjb21wYXJpbmcgdGhlIG9yaWdpbmFsIGNvZGUgdG8gdGhlIG5ldyBjb2RlLi4uIEkgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGUgb3JpZ2luYWwgYGlmYCBjb25kaXRpb24gd2FzOgoKYGBgYwoJaWYgKGluZm8tJmd0O2hlbHBlclswXSkgewoJCWlmIChzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpID09IHNpemVvZihpbmZvLSZndDtoZWxwZXIpKSB7CmBgYAoKVGhlIGFkZGVkIGNoZWNrIGlzOgpgYGBjCglpZiAoaW5mby0mZ3Q7aGVscGVyWzBdICZhbXA7JmFtcDsKCSAgICBzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpICZsdDsgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKCQlpZiAoc3RybmxlbihpbmZvLSZndDtoZWxwZXIsIHNpemVvZihpbmZvLSZndDtoZWxwZXIpKSA9PSBzaXplb2YoaW5mby0mZ3Q7aGVscGVyKSkgewpgYGAKVGhlIGxvZ2ljIGhlcmUgbG9va3MgZmxhd2VkLiBJZiB0aGUgY29uZGl0aW9uIGBzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpICZsdDsgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcilgIGlzICp0cnVlKiwgdGhlbiB0aGUgaW5uZXIgY29uZGl0aW9uIGBzdHJubGVuKC4uLikgPT0gc2l6ZW9mKC4uLilgIHdpbGwgKm5ldmVyKiBiZSB0cnVlLiBUaGUgY29kZSBhZGRlZCBhIHJlZHVuZGFuY3kgY2hlY2sgZm9yIGxlbmd0aCB0aGF0IG1ha2VzIHRoZSBzZWNvbmQgY29uZGl0aW9uIGltcG9zc2libGUsIGFuZCB0aGUgd2hvbGUgY29kZSBibG9jayBjb3VsZCBiZSBza2lwcGVkLiBJdCYjMzk7cyBhIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgaXNzdWU7IHRoYXQgY29uZGl0aW9uYWwgY2hlY2sgaXMgZG9pbmcgbm90aGluZy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIHJlc3Qgb2YgdGhlIHBhdGNoIGluIGBuZXQvbmV0ZmlsdGVyL3h0X0NULmNgIHRvIHNlZSBpZiB0aGF0IGhhcHBlbnMgZWxzZXdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci94dF9DVC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcdHpvbmUuaWQgPSBpbmZvLVx1MDAzZXpvbmU7XG4gMTgxOlx0XHR6b25lLmRpciA9IHh0X2N0X2ZsYWdzX3RvX2RpcihpbmZvKTtcbiAxODI6XHRcdGlmIChpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBYVF9DVF9aT05FX01BUkspXG4gMTgzOlx0XHRcdHpvbmUuZmxhZ3MgfD0gTkZfQ1RfRkxBR19NQVJLO1xuIDE4NDpcdFxuIDE4NTpcdFx0Y3QgPSBuZl9jdF90bXBsX2FsbG9jKHBhci1cdTAwM2VuZXQsIFx1MDAyNnpvbmUsIEdGUF9LRVJORUwpO1xuIDE4NjpcdFx0aWYgKCFjdCkge1xuIDE4NzpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIDE4ODpcdFx0XHRnb3RvIGVycjI7XG4gMTg5Olx0XHR9XG4gMTkwOlx0XG4gMTkxOlx0XHRpZiAoKGluZm8tXHUwMDNlY3RfZXZlbnRzIHx8IGluZm8tXHUwMDNlZXhwX2V2ZW50cykgXHUwMDI2XHUwMDI2XG4gMTkyOlx0XHQgICAgIW5mX2N0X2VjYWNoZV9leHRfYWRkKGN0LCBpbmZvLVx1MDAzZWN0X2V2ZW50cywgaW5mby1cdTAwM2VleHBfZXZlbnRzLFxuIDE5MzpcdFx0XHRcdFx0ICBHRlBfS0VSTkVMKSkge1xuIDE5NDpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDE5NTpcdFx0XHRnb3RvIGVycjM7XG4gMTk2Olx0XHR9XG4gMTk3Olx0XG4gMTk4Olx0XHRpZiAoaW5mby1cdTAwM2VoZWxwZXJbMF0gXHUwMDI2XHUwMDI2XG4gMTk5Olx0XHQgICAgc3RybmxlbihpbmZvLVx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiAyMDA6XHRcdFx0aWYgKHN0cm5sZW4oaW5mby1cdTAwM2VoZWxwZXIsIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpID09IHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiAyMDE6XHRcdFx0XHRyZXQgPSAtRU5BTUVUT09MT05HO1xuIDIwMjpcdFx0XHRcdGdvdG8gZXJyMztcbiAyMDM6XHRcdFx0fVxuIDIwNDpcdFxuIDIwNTpcdFx0XHRyZXQgPSB4dF9jdF9zZXRfaGVscGVyKGN0LCBpbmZvLVx1MDAzZWhlbHBlciwgcGFyKTtcbiAyMDY6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAyMDc6XHRcdFx0XHRnb3RvIGVycjM7XG4gMjA4Olx0XHR9XG4gMjA5Olx0XG4gMjEwOlx0XHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0WzBdIFx1MDAyNlx1MDAyNlxuIDIxMTpcdFx0ICAgIHN0cm5sZW4oaW5mby1cdTAwM2V0aW1lb3V0LCBzaXplb2YoaW5mby1cdTAwM2V0aW1lb3V0KSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gMjEyOlx0XHRcdGlmIChzdHJubGVuKGluZm8tXHUwMDNldGltZW91dCwgc2l6ZW9mKGluZm8tXHUwMDNldGltZW91dCkpID09IHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gMjEzOlx0XHRcdFx0cmV0ID0gLUVOQU1FVE9PTE9ORztcbiAyMTQ6XHRcdFx0XHRnb3RvIGVycjQ7XG4gMjE1Olx0XHRcdH1cbiAyMTY6XHRcbiAyMTc6XHRcdFx0cmV0ID0geHRfY3Rfc2V0X3RpbWVvdXQoY3QsIHBhciwgaW5mby1cdTAwM2V0aW1lb3V0KTtcbiAyMTg6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAyMTk6XHRcdFx0XHRnb3RvIGVycjQ7XG4gMjIwOlx0XHR9XG4gMjIxOlx0XHRfX3NldF9iaXQoSVBTX0NPTkZJUk1FRF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cyk7XG4gMjIyOlx0b3V0OlxuIDIyMzpcdFx0aW5mby1cdTAwM2VjdCA9IGN0O1xuIDIyNDpcdFx0cmV0dXJuIDA7XG4gMjI1Olx0XG4gMjI2Olx0ZXJyNDpcbiAyMjc6XHRcdGhlbHAgPSBuZmN0X2hlbHAoY3QpO1xuIDIyODpcdFx0eHRfY3RfcHV0X2hlbHBlcihoZWxwKTtcbiAyMjk6XHRlcnIzOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTIzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IEEgQmVoYXZpb3JhbCBTaGlmdCBpbiB4dF9DVC5jKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlIGluIHRoZSBgeHRfQ1QuY2AgbW9kdWxlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgeHRfY3RfdGdfY2hlY2tgIGZ1bmN0aW9uLiBUaGUgYWRkaXRpb24gb2YgYCZhbXA7JmFtcDsgc3RybmxlbihpbmZvLSZndDtoZWxwZXIsIHNpemVvZihpbmZvLSZndDtoZWxwZXIpKSAmbHQ7IHNpemVvZihpbmZvLSZndDtoZWxwZXIpYCB0byB0aGUgYGlmYCBjb25kaXRpb24gaW1tZWRpYXRlbHkgY2F1Z2h0IG15IGV5ZS4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpZiBgc3RybmxlbmAgcmV0dXJucyB0aGUgbWF4aW11bSBidWZmZXIgc2l6ZSAobWVhbmluZyBgaW5mby0mZ3Q7aGVscGVyYCBpc24mIzM5O3QgbnVsbC10ZXJtaW5hdGVkKSwgdGhlIGVudGlyZSBibG9jayBpcyBub3cgc2tpcHBlZC4gVGhpcyBpcyBhIGNydWNpYWwgZGV0YWlsLiBUaGUgY29uc2VxdWVuY2UgaXMgdGhhdCBpbnN0ZWFkIG9mIHJldHVybmluZyBgLUVOQU1FVE9PTE9OR2AgYW5kIGV4aXRpbmcgdmlhIGBlcnIzYCwgdGhlIGNvZGUgbm93ICpzaWxlbnRseSogaWdub3JlcyB0aGUgaGVscGVyIHN0cmluZy4gRWZmZWN0aXZlbHksIHRoaXMgYWx0ZXJzIHRoZSB0YXJnZXQmIzM5O3MgYmVoYXZpb3Igd2hlbiBlbmNvdW50ZXJpbmcgYSBoZWxwZXIgc3RyaW5nIHRoYXQgZXhjZWVkcyB0aGUgZXhwZWN0ZWQgbGVuZ3RoIG9yIGlzIG5vdCBwcm9wZXJseSBudWxsLXRlcm1pbmF0ZWQuIEl0IGJ5cGFzc2VzIHRoZSBlcnJvciBjaGVjay4KCkkgd2VudCBiYWNrIGFuZCBkb3VibGUtY2hlY2tlZCB0aGUgb3JpZ2luYWwgY29kZS4gV2l0aG91dCB0aGUgbmV3IGNvbmRpdGlvbiwgdGhlIG9yaWdpbmFsIGNvZGUgKmRpZCogY2F0Y2ggdGhpcyBub24tbnVsbC10ZXJtaW5hdGVkIGhlbHBlciB3aXRoIHRoZSBgc3RybmxlbmAgY2hlY2sgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgY29kZS4gVGh1cywgdGhlIHBhdGNoIGhhcyBkZWZpbml0ZWx5IGNoYW5nZWQgdGhlIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yLiBUaGUgcGF0Y2ggbWFrZXMgYW4gaW1wbGljaXQgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgYnVnLgoKSSBxdWlja2x5IGxvb2tlZCBhdCB0aGUgY2hhbmdlIGluIGBuZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jYCBhbmQgc2F3IHRoZSBwbGFjZW1lbnQgb2YgYSBgbXV0ZXhfdW5sb2NrYCBiZWluZyBjaGFuZ2VkLCBidXQgaXQgc2VlbXMgYmVuaWduLgoKVGhpcyBiZWhhdmlvcmFsIGNoYW5nZSBpcyB3b3J0aCBpbnZlc3RpZ2F0aW5nIGZ1cnRoZXIsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gZnV6ei4gVGhlIG9yaWdpbmFsIGNvZGUgcHJvdmlkZWQgZXJyb3IgY2hlY2tpbmcgYW5kIHRoZSBwYXRjaCByZW1vdmVkIGl0LiBUaGlzIGlzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGFuIGFyZWEgdGhhdCBjYW4gYmUgYSBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTtsbCBuZWVkIHRvIGNyYWZ0IHNvbWUgc3BlY2lmaWMgdGVzdCBjYXNlcyB0byBleHBsb3JlIHRoaXMgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4dF9jdF90Z19jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIveHRfQ1QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL3h0X0NULmM9MTQwPXN0YXRpYyB2b2lkIHh0X2N0X3B1dF9oZWxwZXIoc3RydWN0IG5mX2Nvbm5faGVscCAqaGVscClcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMTU0LVxubmV0L25ldGZpbHRlci94dF9DVC5jOjE1NTpzdGF0aWMgaW50IHh0X2N0X3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyLFxubmV0L25ldGZpbHRlci94dF9DVC5jLTE1Ni1cdFx0XHQgIHN0cnVjdCB4dF9jdF90YXJnZXRfaW5mb192MSAqaW5mbylcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMjM2LVxubmV0L25ldGZpbHRlci94dF9DVC5jOjIzNzpzdGF0aWMgaW50IHh0X2N0X3RnX2NoZWNrX3YwKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxubmV0L25ldGZpbHRlci94dF9DVC5jLTIzOC17XG4tLVxubmV0L25ldGZpbHRlci94dF9DVC5jLTI1Mi1cbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYzoyNTM6XHRyZXQgPSB4dF9jdF90Z19jaGVjayhwYXIsIFx1MDAyNmluZm9fdjEpO1xubmV0L25ldGZpbHRlci94dF9DVC5jLTI1NC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci94dF9DVC5jLTI2MS1cbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYzoyNjI6c3RhdGljIGludCB4dF9jdF90Z19jaGVja192MShjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yNjMte1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yNjgtXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmM6MjY5Olx0cmV0dXJuIHh0X2N0X3RnX2NoZWNrKHBhciwgcGFyLVx1MDAzZXRhcmdpbmZvKTtcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yNzAtfVxubmV0L25ldGZpbHRlci94dF9DVC5jLTI3MS1cbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYzoyNzI6c3RhdGljIGludCB4dF9jdF90Z19jaGVja192Mihjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yNzMte1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yNzgtXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmM6Mjc5Olx0cmV0dXJuIHh0X2N0X3RnX2NoZWNrKHBhciwgcGFyLVx1MDAzZXRhcmdpbmZvKTtcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yODAtfVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYz0zMzE9c3RhdGljIHN0cnVjdCB4dF90YXJnZXQgeHRfY3RfdGdfcmVnW10gX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMzQ0LVx0XHQudXNlcnNpemVcdD0gb2Zmc2V0b2Yoc3RydWN0IHh0X2N0X3RhcmdldF9pbmZvLCBjdCksXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmM6MzQ1Olx0XHQuY2hlY2tlbnRyeVx0PSB4dF9jdF90Z19jaGVja192MCxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0zNDYtXHRcdC5kZXN0cm95XHQ9IHh0X2N0X3RnX2Rlc3Ryb3lfdjAsXG4tLVxubmV0L25ldGZpbHRlci94dF9DVC5jLTM1Ni1cdFx0LnVzZXJzaXplXHQ9IG9mZnNldG9mKHN0cnVjdCB4dF9jdF90YXJnZXRfaW5mb192MSwgY3QpLFxubmV0L25ldGZpbHRlci94dF9DVC5jOjM1NzpcdFx0LmNoZWNrZW50cnlcdD0geHRfY3RfdGdfY2hlY2tfdjEsXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMzU4LVx0XHQuZGVzdHJveVx0PSB4dF9jdF90Z19kZXN0cm95X3YxLFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0zNjgtXHRcdC51c2Vyc2l6ZVx0PSBvZmZzZXRvZihzdHJ1Y3QgeHRfY3RfdGFyZ2V0X2luZm9fdjEsIGN0KSxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYzozNjk6XHRcdC5jaGVja2VudHJ5XHQ9IHh0X2N0X3RnX2NoZWNrX3YyLFxubmV0L25ldGZpbHRlci94dF9DVC5jLTM3MC1cdFx0LmRlc3Ryb3lcdD0geHRfY3RfdGdfZGVzdHJveV92MSxcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMzg4LVx0XHQudXNlcnNpemVcdD0gb2Zmc2V0b2Yoc3RydWN0IHh0X2N0X3RhcmdldF9pbmZvLCBjdCksXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmM6Mzg5Olx0XHQuY2hlY2tlbnRyeVx0PSB4dF9jdF90Z19jaGVja192MCxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0zOTAtXHRcdC5kZXN0cm95XHQ9IHh0X2N0X3RnX2Rlc3Ryb3lfdjAsXG4tLVxubmV0L25ldGZpbHRlci94dF9DVC5jLTQwMC1cdFx0LnVzZXJzaXplXHQ9IG9mZnNldG9mKHN0cnVjdCB4dF9jdF90YXJnZXRfaW5mb192MSwgY3QpLFxubmV0L25ldGZpbHRlci94dF9DVC5jOjQwMTpcdFx0LmNoZWNrZW50cnlcdD0geHRfY3RfdGdfY2hlY2tfdjEsXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtNDAyLVx0XHQuZGVzdHJveVx0PSB4dF9jdF90Z19kZXN0cm95X3YxLFxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy00MTItXHRcdC51c2Vyc2l6ZVx0PSBvZmZzZXRvZihzdHJ1Y3QgeHRfY3RfdGFyZ2V0X2luZm9fdjEsIGN0KSxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYzo0MTM6XHRcdC5jaGVja2VudHJ5XHQ9IHh0X2N0X3RnX2NoZWNrX3YyLFxubmV0L25ldGZpbHRlci94dF9DVC5jLTQxNC1cdFx0LmRlc3Ryb3lcdD0geHRfY3RfdGdfZGVzdHJveV92MSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTY5OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU1ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgYSBOZXRmaWx0ZXIgUGF0Y2g6IEZ1bmN0aW9uYWwgQ2hhbmdlIGluIGB4dF9DVC5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCYjMzk7cyBwcmltYXJpbHkgYWJvdXQgY2xlYW51cCAtIHJlbW92aW5nIGEgYnVuY2ggb2YgYHByX2RlYnVnYCBjYWxscyBhbmQgY29uc29saWRhdGluZyB0aGVtLCBwcmVzdW1hYmx5IGZvciBhIGxlc3Mgbm9pc3kga2VybmVsIGxvZy4gVGhhdCYjMzk7cyBmaW5lLCBjb3NtZXRpYyBtb3N0bHksIHdvbiYjMzk7dCBmb2N1cyBvbiB0aGF0LiBUaGUgc2lnbmlmaWNhbnQgY2hhbmdlIGlzIGluIGB4dF9DVC5jYC4gTXkgZXhwZXJ0IGV5ZSBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGlzIG1vZGlmaWNhdGlvbjoKCmBgYGMKLQlpZiAoaW5mby0mZ3Q7aGVscGVyWzBdKSB7CiYjNDM7CWlmIChpbmZvLSZndDtoZWxwZXJbMF0gJmFtcDsmYW1wOwomIzQzOwkgICAgc3RybmxlbihpbmZvLSZndDtoZWxwZXIsIHNpemVvZihpbmZvLSZndDtoZWxwZXIpKSAmbHQ7IHNpemVvZihpbmZvLSZndDtoZWxwZXIpKSB7CgkJaWYgKHN0cm5sZW4oaW5mby0mZ3Q7aGVscGVyLCBzaXplb2YoaW5mby0mZ3Q7aGVscGVyKSkgPT0gc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKCQkJcmV0ID0gLUVOQU1FVE9PTE9ORzsKCQkJZ290byBlcnIzOwoJCX0KCgkJcmV0ID0geHRfY3Rfc2V0X2hlbHBlcihjdCwgaW5mby0mZ3Q7aGVscGVyLCBwYXIpOwoJCWlmIChyZXQgJmx0OyAwKQoJCQlnb3RvIGVycjM7Cgl9CmBgYAoKVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgb3JpZ2luYWwgY29kZSBjaGVja2VkIGlmIGBpbmZvLSZndDtoZWxwZXJgIGV4aXN0ZWQuIElmIGl0IGRpZCwgYW5kIGlmIHRoZSBzdHJpbmcgd2FzIG5vdCBudWxsIHRlcm1pbmF0ZWQsIHRoZSBvbGQgY29kZSByZXR1cm5lZCBgLUVOQU1FVE9PTE9OR2AuIFRoZSBuZXcgY29kZSBhZGRzIGEgKnNlY29uZCogY2hlY2ssIGlmIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBpcyBsZXNzIHRoYW4gdGhlIGJ1ZmZlci4gTm93LCAqaWYqIHRoZSBzdHJpbmcgaXNuJiMzOTt0IG51bGwtdGVybWluYXRlZCwgYHN0cm5sZW5gIHdpbGwgcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBidWZmZXIuIFNvLCB0aGUgbmV3IGNvbmRpdGlvbiwgYHN0cm5sZW4oLi4uKSAmbHQ7IHNpemVvZiguLi4pYCwgaXMgZmFsc2UsIGFuZCB0aGUgY29kZSBzaW1wbHkgc2tpcHMgdGhlIGhlbHBlciBjb25maWd1cmF0aW9uLiBOb3csICpwcmV2aW91c2x5KiBpdCB3b3VsZCBoYXZlIHJldHVybmVkIGFuIGVycm9yLCBzcGVjaWZpY2FsbHkgYC1FTkFNRVRPT0xPTkdgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0IG1lYW5zLCB0aGF0IGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSBlcnJvciwgdGhlIGhlbHBlciBpcyAqc2lsZW50bHkqIGlnbm9yZWQuCgpUaGlzIGxvb2tzIGxpa2UgYSBwb3RlbnRpYWwgYnVnIGZpeCBnb25lIHdyb25nLCBvciBhIG1pc3VuZGVyc3RhbmRpbmcgb2YgdGhlIG9yaWdpbmFsIGxvZ2ljLiBQZXJoYXBzIHRoZSBhdXRob3Igd2FzIHRyeWluZyB0byBwcmV2ZW50IGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBidXQgY3JlYXRlZCBkZWFkIGNvZGUsIGFuZCBjaGFuZ2VkIGJlaGF2aW91ciBpbiB0aGUgcHJvY2Vzcy4KCkxldCBtZSB0aGlua+KApiB0aGUgY29kZSBpcyAqc3VwcG9zZWQqIHRvIGJlIHJlY2VpdmluZyBpbmZvcm1hdGlvbiBmcm9tIHVzZXJzcGFjZS4gSWYgSSBwcm92aWRlIGEgbm9uLW51bGwtdGVybWluYXRlZCBgaGVscGVyYCBuYW1lLCB0aGUgb3JpZ2luYWwgY29kZSB3b3VsZCBoYXZlIGZsYWdnZWQgaXQgYXMgYW4gZXJyb3IuIE5vdywgaXQganVzdCBzaWxlbnRseSAqZG9lc24mIzM5O3Qgc2V0KiB0aGUgaGVscGVyLiBObyBlcnJvciBpcyByYWlzZWQsIHRoZSBoZWxwZXIgc2ltcGx5IGRvZXNuJiMzOTt0IGdldCBjb25maWd1cmVkLiBJcyB0aGF0IHdoYXQgd2Ugd2FudD8gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY2hhbmdlIHRoYXQgaW1wYWN0cyBwcm9ncmFtIGZsb3csIGVzcGVjaWFsbHkgaWYgYSB1c2VyICpleHBlY3RzKiB0aGF0IGVycm9yIG1lc3NhZ2UuCgpJIGNhbiYjMzk7dCBzZWUgYW55IGltbWVkaWF0ZSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IG9yIG1lbW9yeSBjb3JydXB0aW9uIGhlcmUsIGJ1dCB0aGlzIGlzIGEgKmJlaGF2aW9yYWwqIGNoYW5nZSwgYW5kIGEgc2lsZW50IG9uZS4gSSBuZWVkIHRvIG5vdGUgdGhpcyBoYXMgZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMgdGhhdCBhcmUgdGVzdGFibGUuIFNvLCAqeWVzKiwgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgZnV6emVyIG1pZ2h0IG5vdCB0cmlnZ2VyIGEgY3Jhc2ggb3IgY29ycnVwdGlvbiwgYnV0IGl0IHdpbGwgZGlzY292ZXIgdGhhdCB0aGlzIGxvZ2ljIHBhdGggaXMgZGlmZmVyZW50LgoKV29ydGhGdXp6aW5nPXRydWUKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9DVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9ODQ5PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTg2MC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4NjE6Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1Rcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04NjItXHR0cmlzdGF0ZSAmIzM5O1wmIzM0O0NUXCYjMzQ7IHRhcmdldCBzdXBwb3J0JiMzOTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODA1MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVwZW5kZW5jeSBEZWVwIERpdmU6IE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1QqKgoKT2theSwgc28gYE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHRoaW5nIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHB1bGxpbmcgdXAgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgdGhlIHVzdWFsIHN1c3BlY3RzIC0gdGhlIEtjb25maWcgZmlsZXMsIHRoZSBNYWtlZmlsZXMsIGFuZCBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbi4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVyZSB3aWxsIGxpa2VseSBiZSBzZXZlcmFsIGxheWVycyBvZiBkZXBlbmRlbmNpZXMgdG8gdW5yYXZlbC4KCkZpcnN0LCBhcmUgdGhlcmUgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXMgbGlzdGVkIGluIHRoZSBLY29uZmlnIGZpbGUgaXRzZWxmPyBTb21ldGltZXMgaXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkLCBidXQgbW9yZSBvZnRlbiBpdCYjMzk7cyBhIHdlYiBvZiBjb25uZWN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciB0aGluZ3MgbGlrZSBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBvciBldmVuIGltcGxpY2l0IGRlcGVuZGVuY2llcyBiYXNlZCBvbiBzaGFyZWQgb3B0aW9ucy4KCk5leHQsIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhpbmdzIHRocm91Z2ggdGhlIGJ1aWxkIHN5c3RlbS4gQXJlIHRoZXJlIGFueSBNYWtlZmlsZXMgdGhhdCBnZXQgaW5jbHVkZWQsIG9yIHBlcmhhcHMgb3RoZXIgdGFyZ2V0cyB0aGF0IGBORVRGSUxURVJfWFRfVEFSR0VUX0NUYCByZWxpZXMgb24/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGhlYWRlciBmaWxlIGluY2x1c2lvbnMsIG9iamVjdCBmaWxlIGRlcGVuZGVuY2llcywgYW5kIGFueSBidWlsZCBmbGFncyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgZmluYWwgb3V0Y29tZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtb2R1bGVzIGludm9sdmVkIGFuZCBhbnkgb3RoZXIgbW9kdWxlcyB0aGF0ICptaWdodCogYmUgcmVsZXZhbnQgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBDVGAuCgpGaW5hbGx5LCBJJiMzOTtsbCByZXZpZXcgYW55IGtlcm5lbCBkb2N1bWVudGF0aW9uIG9yIG1haWxpbmcgbGlzdCBkaXNjdXNzaW9ucy4gSXQmIzM5O3MgcG9zc2libGUgdGhlcmUgYXJlIG5vbi1vYnZpb3VzIHJlbGF0aW9uc2hpcHMgb3IgcmVxdWlyZW1lbnRzIHRoYXQgYXJlbiYjMzk7dCBpbW1lZGlhdGVseSBhcHBhcmVudCBmcm9tIHRoZSBjb2RlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgY2F2ZWF0cyBvciBnb3RjaGFzIHRoYXQgY291bGQgYml0ZSBtZSBsYXRlci4gTXkgZ29hbCBoZXJlIGlzIGEgY29tcGxldGUgYW5kIGFjY3VyYXRlIHVuZGVyc3RhbmRpbmcgb2YgZXZlcnl0aGluZyB0aGF0IGhhcyB0byBiZSBpbiBwbGFjZSBmb3IgdGhpcyBvcHRpb24gdG8gd29yaywgbm90IGp1c3QgdGhlIGJhc2ljcy4KCldpdGggYWxsIG9mIHRoaXMgZG9uZSwgSSB3aWxsIGhhdmUgdGhlIG5lZWRlZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24sIHNvIEkmIzM5O2xsIGJlIGFibGUgdG8gcHJvY2VlZCB3aXRoIHRoZSBuZXh0IHRhc2sgd2l0aCBjb25maWRlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODYwOlx0XG4gODYxOlx0Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RcbiA4NjI6XHRcdHRyaXN0YXRlICYjMzk7XCYjMzQ7Q1RcJiMzNDsgdGFyZ2V0IHN1cHBvcnQmIzM5O1xuIDg2MzpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbiA4NjQ6XHRcdGRlcGVuZHMgb24gSVBfTkZfUkFXIHx8IElQNl9ORl9SQVcgfHwgTkZUX0NPTVBBVFxuIDg2NTpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiA4NjY6XHRcdGhlbHBcbiA4Njc6XHRcdCAgVGhpcyBvcHRpb25zIGFkZHMgYSBgQ1QmIzM5OyB0YXJnZXQsIHdoaWNoIGFsbG93cyB0byBzcGVjaWZ5IGluaXRpYWxcbiA4Njg6XHRcdCAgY29ubmVjdGlvbiB0cmFja2luZyBwYXJhbWV0ZXJzIGxpa2UgZXZlbnRzIHRvIGJlIGRlbGl2ZXJlZCBhbmRcbiA4Njk6XHRcdCAgdGhlIGhlbHBlciB0byBiZSB1c2VkLlxuIDg3MDpcdFxuIDg3MTpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiA4NzI6XHRcbiA4NzM6XHRjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQXG4gODc0Olx0XHR0cmlzdGF0ZSAmIzM5O1wmIzM0O0RTQ1BcJiMzNDsgYW5kIFwmIzM0O1RPU1wmIzM0OyB0YXJnZXQgc3VwcG9ydCYjMzk7XG4gODc1Olx0XHRkZXBlbmRzIG9uIElQX05GX01BTkdMRSB8fCBJUDZfTkZfTUFOR0xFIHx8IE5GVF9DT01QQVRcbiA4NzY6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gODc3Olx0XHRoZWxwXG4gODc4Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgYSBgRFNDUCYjMzk7IHRhcmdldCwgd2hpY2ggYWxsb3dzIHlvdSB0byBtYW5pcHVsYXRlXG4gODc5Olx0XHQgIHRoZSBJUHY0L0lQdjYgaGVhZGVyIERTQ1AgZmllbGQgKGRpZmZlcmVudGlhdGVkIHNlcnZpY2VzIGNvZGVwb2ludCkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODQzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWcgcmVxdWlyZW1lbnRzLCBicm9rZW4gZG93biBmcm9tIGEgbmV0d29ya2luZyBrZXJuZWwgcGVyc3BlY3RpdmU6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgdGhpcyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQgbWUgcXVpY2tseSBzdW1tYXJpemUgd2hhdCBJJiMzOTttIHNlZWluZyBoZXJlLiBCYXNlZCBvbiB0aGlzIHBhdGNoLCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gbmVlZHMgdG8gaW5jbHVkZSBhIGZldyBrZXkgY29tcG9uZW50cy4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBORVRGSUxURVJfWFRfVEFSR0VUX0NUYCBpcyBlbmFibGVkOyBjbGVhcmx5LCBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGEgY2VudHJhbCBwaWVjZS4gSSYjMzk7bGwgbmVlZCBgTkZfQ09OTlRSQUNLYCBhcyB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIGluZnJhc3RydWN0dXJlIGlzIGVzc2VudGlhbC4gV2UgaGF2ZSBib3RoIElQdjQgYW5kIElQdjYgY29uc2lkZXJhdGlvbnMsIHNvIGBJUF9ORl9SQVdgIG9yIGBJUDZfTkZfUkFXYCwgb3IgcGVyaGFwcyBgTkZUX0NPTVBBVGAgYXJlIGltcG9ydGFudCBmb3IgaW50ZWdyYXRpbmcgd2l0aCB0aGUgcmF3IHRhYmxlLCBhbmQgbGV0JiMzOTtzIG5vdCBmb3JnZXQgYE5FVEZJTFRFUl9BRFZBTkNFRGAgYXMgYSBwcmVyZXF1aXNpdGUgZm9yIG1vcmUgYWR2YW5jZWQgbmV0ZmlsdGVyIGZlYXR1cmVzLgoKSG1tLCB3YWl0IGEgbW9tZW50IHRob3VnaCwgdGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYHh0X0lETEVUSU1FUi5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBpZGxlIHRpbWVyIGZ1bmN0aW9uYWxpdHkgaXMgcHJvcGVybHkgY29uZmlndXJlZCB0b28sIHNvIGxldCBtZSBxdWlja2x5IGNyb3NzLWNoZWNrIGl0cyBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgYmVmb3JlIHByb2NlZWRpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFueSBpbXBsaWNhdGlvbnMgdGhhdCBtYXkgYXJpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9OTA0PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTkxNy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo5MTg6Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctOTE5LVx0dHJpc3RhdGUgIFwmIzM0O0lETEVUSU1FUiB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTI4OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUmAgcmVsaWVzIG9uLiBVbmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBicmVhayBhbnl0aGluZyB3aGVuIEkgZW5hYmxlLCBkaXNhYmxlLCBvciBtb2RpZnkgdGhpcyB0YXJnZXQuIEl0JiMzOTtzIHRoZSBrZXJuZWwsIHNvIEkgaGF2ZSB0byBiZSBjYXJlZnVsLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgcmVsZXZhbnQgbWFrZWZpbGVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCB0aGUgYnVpbGQgc3lzdGVtIHRvIHNlZSB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIG1vZHVsZXMgYXJlIGxpbmtlZCB3aXRoIG9yIHJlcXVpcmVkIGJ5IHRoaXMgYElETEVUSU1FUmAgdGFyZ2V0LiBBcmUgdGhlcmUgYW55IG90aGVyIGtlcm5lbCBmZWF0dXJlcyB0aGF0IHJlbHkgb24gdGhlIGlkbGUgdGltZXIgbG9naWMsIGZvciBleGFtcGxlPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlbiBiYWNrIG91dCBmcm9tIHRoZXJlLCBvciB1c2UgYG1ha2UgbWVudWNvbmZpZ2Agb3IgYGRlZmNvbmZpZ2AgdG8gY2hlY2suIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZSDigJMgYHh0YWJsZXNgLCBgaXB0YWJsZXNgLCBhbmQgYW55IG90aGVyIHRhcmdldCBtb2R1bGVzIHRoYXQgbWlnaHQgYmUgdXNlZCBhbG9uZ3NpZGUgaXQuIFRoZSBnb2FsIGlzIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLCBhbmQgYW55IGNvbmZsaWN0cyBvciBwcmVyZXF1aXNpdGVzIGl0IG1pZ2h0IGludHJvZHVjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkxNzpcdFxuIDkxODpcdGNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUlxuIDkxOTpcdFx0dHJpc3RhdGUgIFwmIzM0O0lETEVUSU1FUiB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuIDkyMDpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiA5MjE6XHRcdGhlbHBcbiA5MjI6XHRcbiA5MjM6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgYElETEVUSU1FUiYjMzk7IHRhcmdldC4gIEVhY2ggbWF0Y2hpbmcgcGFja2V0XG4gOTI0Olx0XHQgIHJlc2V0cyB0aGUgdGltZXIgYXNzb2NpYXRlZCB3aXRoIGxhYmVsIHNwZWNpZmllZCB3aGVuIHRoZSBydWxlIGlzXG4gOTI1Olx0XHQgIGFkZGVkLiAgV2hlbiB0aGUgdGltZXIgZXhwaXJlcywgaXQgdHJpZ2dlcnMgYSBzeXNmcyBub3RpZmljYXRpb24uXG4gOTI2Olx0XHQgIFRoZSByZW1haW5pbmcgdGltZSBmb3IgZXhwaXJhdGlvbiBjYW4gYmUgcmVhZCB2aWEgc3lzZnMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NzcyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjkxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQYXRjaCBDaGFuZ2VzIC0gQSBGb2N1c2VkIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IGdvbmUgdGhyb3VnaCB0aGlzIGRpZmYuIE15IGluaXRpYWwgZm9jdXMgd2FzIG9uIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgZnVuY3Rpb25hbCByZWdyZXNzaW9ucyBpbnRyb2R1Y2VkLCBwYXJ0aWN1bGFybHkgaW4gdGhlIG5ldGZpbHRlciBjb2RlLgoKSGVyZSYjMzk7cyBteSBicmVha2Rvd246CgoqICAgKipgeHRfSURMRVRJTUVSLmNgIENoYW5nZToqKiBIb25lc3RseSwgdGhlIGB4dF9JRExFVElNRVIuY2AgY2hhbmdlIGlzIG1pbm9yLiBNb3ZpbmcgYG11dGV4X3VubG9ja2AgYmVmb3JlIHRoZSBgcHJfaW5mb19yYXRlbGltaXRlZGAgY2FsbCBpcyBhIHZhbGlkIG9wdGltaXphdGlvbuKAlHJlbGVhc2luZyB0aGUgbG9jayBlYXJsaWVy4oCUYW5kIHdoaWxlIGl0IG1vZGlmaWVzIGJlaGF2aW91ciwgaXQgaXMgdW5saWtlbHkgdG8gaW50cm9kdWNlIHNpZ25pZmljYW50IG5ldyBiZWhhdmlvdXIuCgoqICAgKipgeHRfQ1QuY2AgLSBUaGUgUmVhbCBQcm9ibGVtOioqIFRoZSBgeHRfQ1QuY2AgY2hhbmdlIGltbWVkaWF0ZWx5IGNhdWdodCBteSBhdHRlbnRpb24uIEl0IG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBgaW5mby0mZ3Q7aGVscGVyYCBhbmQgYGluZm8tJmd0O3RpbWVvdXRgIHBhcmFtZXRlcnMgdXNlZCBieSB0aGUgY29ubmVjdGlvbiB0cmFja2luZyB0YXJnZXQuIEl0ICpsb29rcyogbGlrZSB0aGUgYXV0aG9yIHRyaWVkIHRvIGFkZHJlc3MgYSBwb3RlbnRpYWwgYHN0cm5sZW5gIG91dC1vZi1ib3VuZHMgcmVhZCwgYnV0IGluIGRvaW5nIHNvLCB0aGV5JiMzOTt2ZSBpbnRyb2R1Y2VkIGEgKipkZWZpbml0ZSBidWcqKi4gVGhlIGxvZ2ljIG5vdyAqKnNraXBzIHZhbGlkYXRpb24qKiB3aGVuIHRoZSBgaW5mby0mZ3Q7aGVscGVyYCBidWZmZXIgaXMgKm5vdCogbnVsbC10ZXJtaW5hdGVkLiBQcmV2aW91c2x5LCBhIG5vbi1udWxsLXRlcm1pbmF0ZWQgYnVmZmVyIHJlc3VsdGVkIGluIGFuIGVycm9yLCBzbyB0aGUgY2hhbmdlcyBsZWFkIHRvIGFuIHVuZGVmaW5lZCBzdGF0ZSB3aGVyZSB0aGVyZSBjb3VsZCBiZSBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIG90aGVyIHBvdGVudGlhbCBpc3N1ZXMuIFRoaXMgaXMgYSBjbGVhciBjYXNlIGZvciBmdXp6aW5nLiBUaGUga2V5IGZ1bmN0aW9uIHRvIHRhcmdldCBpcyBgeHRfY3RfdGdfY2hlY2tgLgoKKiAgICoqT3RoZXIgQ2hhbmdlczogTW9zdGx5IExvZ2dpbmc6KiogVGhlIHJlbWFpbmluZyBjaGFuZ2Vz4oCUaW4gYHh0X2Nncm91cC5jYCwgYHh0X0xPRy5jYCwgYHh0X01BU1FVRVJBREUuY2AsIGB4dF9ORVRNQVAuY2AsIGB4dF9SRURJUkVDVC5jYCwgYHh0X1NFQ01BUksuY2AsIGB4dF9DT05OU0VDTUFSSy5jYCwgYGlwdF9ycGZpbHRlci5jYCwgYW5kIGBpcDZ0X3JwZmlsdGVyLmNg4oCUYXJlIHByZWRvbWluYW50bHkgYWJvdXQgY2hhbmdpbmcgYHByX2RlYnVnYCBjYWxscyB0byBgcHJfaW5mb19yYXRlbGltaXRlZGAgb3Igc2ltcGxpZnlpbmcgZXJyb3IgbWVzc2FnZXMuIFRoZXNlIGFyZSBnZW5lcmFsbHkgb2theSwgb3IgZXZlbiBpbXByb3ZlbWVudHMgZm9yIG1lc3NhZ2UgZmxvb2QgcmVkdWN0aW9uLCBidXQgdGhleSBkb24mIzM5O3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIHJlZ3Jlc3Npb25zIHRoYXQgSSBjYW4gaW1tZWRpYXRlbHkgc2VlLgoKKiAgICoqQWN0aW9uYWJsZSBOZXh0IFN0ZXBzOioqIFRoZSAqY3JpdGljYWwqIHRoaW5nIHRvIGRvIG5vdyBpcyB0byBmb2N1cyBvbiB0aGUgYHh0X0NULmNgIGNoYW5nZS4gVGhpcyBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLiBUaGUgZm9jdXMgc2hvdWxkIGJlIG9uIGNyYWZ0aW5nIGlucHV0cyB3aGVyZSBgaW5mby0mZ3Q7aGVscGVyYCBpcyAqbm90KiBudWxsLXRlcm1pbmF0ZWQuIFdlIG5lZWQgdG8gZXhwbG9yZSB0aGUgZXhhY3QgY29uc2VxdWVuY2VzIG9mIHRoaXMgY2hhbmdlIGluIHRoZSBrZXJuZWzigJlzIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMuIFRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBzdGFydCBkaWdnaW5nIHdpdGggYSB0YXJnZXRlZCBmdXp6aW5nIGNhbXBhaWduLiBUaGUgY29uZmlncyBJIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byBhcmUgYE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGVpdGhlciBgSVBfTkZfUkFXYCBvciBgSVA2X05GX1JBV2AsIGFsb25nIHdpdGggYE5FVEZJTFRFUl9BRFZBTkNFRGAuCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX05GX1JBVyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTI5MT1jb25maWcgSVBfTkZfVEFSR0VUX1RUTFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTMwMC0jIHJhdyAmIzQzOyBzcGVjaWZpYyB0YXJnZXRzXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzozMDE6Y29uZmlnIElQX05GX1JBV1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMzAyLVx0dHJpc3RhdGUgICYjMzk7cmF3IHRhYmxlIHN1cHBvcnQgKHJlcXVpcmVkIGZvciBOT1RSQUNLL1RSQUNFKSYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDI4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBJUHY2IFJhdyBTb2NrZXQgRmlsdGVyaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgYElQNl9ORl9SQVdgIHRoaW5nIHdvcmtzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBqdW1wIGludG8gYEtjb25maWdgLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgd2hlbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhIGtlcm5lbCBmZWF0dXJlJiMzOTtzIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSBgSVA2X05GX1JBV2AgaXMgZGVmaW5lZCwgd2hpY2ggZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHBlcmhhcHMgZXZlbiB3aGF0IGNvbnRleHQgc3Vycm91bmRzIGl0LiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCB3aGVyZSBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBJUHY2IHJhdyBzb2NrZXQgZmlsdGVyaW5nIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yay4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSB0ZWxscyBtZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQNl9ORl9SQVcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0yMzQ9Y29uZmlnIElQNl9ORl9NQU5HTEVcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yNDQtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyNDU6Y29uZmlnIElQNl9ORl9SQVdcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTI0Ni1cdHRyaXN0YXRlICAmIzM5O3JhdyB0YWJsZSBzdXBwb3J0IChyZXF1aXJlZCBmb3IgVFJBQ0UpJiMzOTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3MzkKCQkJCQkJCW91dHB1dDogMjE3CgkJCQkJCQl0aG91Z2h0czogMTA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFzb25pbmcgVGhyb3VnaCB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbCBSZXF1aXJlbWVudHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gVGhlIGluaXRpYWwgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFuZCByZWxldmFudCBzeW1ib2xzIGZvciBhIHNwZWNpZmljIG5ldGZpbHRlciB0YXJnZXQsIGxpa2VseSByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRoZSBwcm9tcHQgc3BlY2lmaWVzIHRoZSBvdXRwdXQgZm9ybWF0IGZvciBjb25maWd1cmF0aW9ucywgc28gSSBuZWVkIHRvIGF2b2lkIHRoZSBgQ09ORklHX2AgcHJlZml4LgoKRmlyc3QsIEkgaWRlbnRpZmllZCB0aGUgaW5pdGlhbCBzZXQgb2YgcG90ZW50aWFsbHkgbmVlZGVkIGNvbmZpZ3VyYXRpb25zOiBgTkVURklMVEVSX1hUX1RBUkdFVF9DVGAsIGBORl9DT05OVFJBQ0tgLCBgSVBfTkZfUkFXYCwgYW5kIGBORVRGSUxURVJfQURWQU5DRURgLiBUaGUgcHJvbXB0JiMzOTtzIHJlcXVpcmVtZW50IGlzIGNsZWFyOiBqdXN0IHRoZSBiYXJlIG5hbWVzLgoKTm93LCBsZXQmIzM5O3MgZGlnIGRlZXBlciB0byBzZWUgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxhdGVkIHRvIGB4dF9DVGAuIFVwb24gZXhhbWluYXRpb24sIEkgc2VlIHRoZSBgeHRfSURMRVRJTUVSLmNgIGZpbGUgaXMgYWxzbyB0b3VjaGVkIGluIHRoZSBwYXRjaCwgc28gYE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSYCBzaG91bGQgYWxzbyBiZSBpbmNsdWRlZCBiZWNhdXNlIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuCgpOZXh0LCB0aGUgcHJvbXB0IHdhbnRzIHN5bWJvbHMuIFRoZSBmdW5jdGlvbnMgdGhhdCBzZWVtIGNlbnRyYWwgdG8gdGhlIHRhcmdldCYjMzk7cyBvcGVyYXRpb24gYXJlIGB4dF9jdF90Z19jaGVja2AgYW5kIGBpZGxldGltZXJfdGdfY2hlY2tlbnRyeWAuIEhvd2V2ZXIsIHRoZSBwcm9tcHQgZW1waGFzaXplcyB0aGUgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5IHBvaW50cy4gVGhhdCBnaXZlcyBtZSBwYXVzZS4KClVwb24gY2xvc2VyIGluc3BlY3Rpb24sIEkgY29uZmlybSB0aGF0IGJvdGggYHh0X2N0X3RnX2NoZWNrYCBpcyBhY3R1YWxseSBzdGF0aWMuIEhvd2V2ZXIsIGl0JiMzOTtzIGNhbGxlZCBieSBgeHRfY3RfdGdfY2hlY2tfdjBgLCBgeHRfY3RfdGdfY2hlY2tfdjFgLCBgeHRfY3RfdGdfY2hlY2tfdjJgLiBUaGVzZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSByZWdpc3RlcmVkIGluIGB4dF9jdF90Z19yZWdgIGFycmF5LCB3aGljaCBpcyBwYXNzZWQgdG8gYHh0X3JlZ2lzdGVyX3RhcmdldHNgLiBUaGUgZW50cnkgcG9pbnQgZnJvbSB1c2Vyc3BhY2UgaXMgYHh0X2NoZWNrX3RhcmdldGAsIGJ1dCBgeHRfY3RfdGdfY2hlY2tgIGlzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbi4gU2luY2UgdGhlIGZ1bmN0aW9uIGlzIG5vdCBpbmxpbmVkLCBJJiMzOTtsbCBwcm92aWRlIGB4dF9jdF90Z19jaGVja2AgZm9yIG5vdyBhbmQgc2VlIGlmIHRoZSBmdXp6ZXIgY2FuIHJlc29sdmUgdGhlIHN0YXRpYyBmdW5jdGlvbnMuCgpUaGUgcGF0Y2gmIzM5O3MgZnVuY3Rpb25hbCBjaGFuZ2VzIGludm9sdmUgY2hhbmdlcyB0byB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYGluZm8tJmd0O2hlbHBlcmAgYW5kIGBpbmZvLSZndDt0aW1lb3V0YCBhbmQgbW9kaWZ5aW5nIGB4dF9JRExFVElNRVIuY2AgdG8gcmVsZWFzZSBhIG11dGV4LCB3aGljaCBpbXBhY3RzIHRoZSBleGVjdXRpb24gZmxvdy4gVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgcmVhY2hhYmxlIHZpYSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbiwgbWFraW5nIHRoZW0gcmVsZXZhbnQgdG8gdGhlIG92ZXJhbGwgdGFyZ2V0IGJlaGF2aW9yLgoKVGhlcmVmb3JlLCBteSBmaW5hbCBsaXN0IGlzOgoKQ29uZmlnczoKYE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RgCmBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUmAKYE5GX0NPTk5UUkFDS2AKYElQX05GX1JBV2AKYE5FVEZJTFRFUl9BRFZBTkNFRGAKClN5bWJvbHM6CmB4dF9jdF90Z19jaGVja2AKCkxldCYjMzk7cyBwcm9jZWVkIHdpdGggdGhlc2UgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUl9YVF9UQVJHRVRfQ1QmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVImIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O0lQX05GX1JBVyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfQURWQU5DRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4dF9jdF90Z19jaGVjayYjMzQ7LAogICAgJiMzNDtpZGxldGltZXJfdGdfY2hlY2tlbnRyeSYjMzQ7LAogICAgJiMzNDtpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgeHRfQ1QuY2AgdG8gY2hhbmdlIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgaW5mby1cdTAwM2VoZWxwZXJgIGFuZCBgaW5mby1cdTAwM2V0aW1lb3V0YC4gSWYgdGhleSBhcmUgbm90IG51bGwtdGVybWluYXRlZCwgdGhlIG5ldyBjb2RlIHNraXBzIHNldHRpbmcgdGhlbSBpbnN0ZWFkIG9mIHJldHVybmluZyBgLUVOQU1FVE9PTE9OR2AsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHRhcmdldCBpbml0aWFsaXphdGlvbiBsb2dpYy4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYHh0X0lETEVUSU1FUi5jYCB0byByZWxlYXNlIGEgbXV0ZXggYmVmb3JlIGxvZ2dpbmcsIHdoaWNoIGlzIGEgbWlub3IgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9DVCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUiYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7SVBfTkZfUkFXJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9BRFZBTkNFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3h0X2N0X3RnX2NoZWNrJiMzNDssCiAgICAmIzM0O2lkbGV0aW1lcl90Z19jaGVja2VudHJ5JiMzNDssCiAgICAmIzM0O2lkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB4dF9DVC5jYCB0byBjaGFuZ2UgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBpbmZvLVx1MDAzZWhlbHBlcmAgYW5kIGBpbmZvLVx1MDAzZXRpbWVvdXRgLiBJZiB0aGV5IGFyZSBub3QgbnVsbC10ZXJtaW5hdGVkLCB0aGUgbmV3IGNvZGUgc2tpcHMgc2V0dGluZyB0aGVtIGluc3RlYWQgb2YgcmV0dXJuaW5nIGAtRU5BTUVUT09MT05HYCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdGFyZ2V0IGluaXRpYWxpemF0aW9uIGxvZ2ljLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgeHRfSURMRVRJTUVSLmNgIHRvIHJlbGVhc2UgYSBtdXRleCBiZWZvcmUgbG9nZ2luZywgd2hpY2ggaXMgYSBtaW5vciBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlc2UgY2hhbmdlcyBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBjb25maWd1cmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgcmVtb3ZlcyBgcHJfZGVidWdgIHN0YXRlbWVudHMgYW5kIGNvbnZlcnRzIHNvbWUgdG8gYHByX2luZm9fcmF0ZWxpbWl0ZWRgIGFjcm9zcyB2YXJpb3VzIG5ldGZpbHRlciBtb2R1bGVzLiBUaGVyZSBpcyBhbHNvIGEgbG9naWNhbCBjaGFuZ2UgaW4gYHh0X0NULmNgIHJlZ2FyZGluZyB0aGUgdmFsaWRhdGlvbiBvZiBgaW5mby1cdTAwM2VoZWxwZXJgIGFuZCBgaW5mby1cdTAwM2V0aW1lb3V0YCBzdHJpbmdzLCB3aGljaCBpbnRyb2R1Y2VzIGRlYWQgY29kZSBhbmQgYWx0ZXJzIHRoZSBlcnJvciBoYW5kbGluZyBmb3Igbm9uLW51bGwtdGVybWluYXRlZCBzdHJpbmdzLiBIb3dldmVyLCB0aGUgYGluZm9gIHN0cnVjdHVyZSAoYHBhci1cdTAwM2V0YXJnaW5mb2ApIGlzIHBvcHVsYXRlZCB2aWEgYGNvcHlfZnJvbV91c2VyYCB3aXRoIGRhdGEgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUga2VybmVsJiMzOTtzIHBlcnNwZWN0aXZlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHRoZSBsb2dpYyBmbGF3IGluIGB4dF9DVC5jYCkgYXJlIGZ1bmN0aW9uYWwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MzM4YWVjNTVjZTFlZDBmZWYwMThiMGM4N2E2YWUzNDFiNmE2YTc3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTQ6Mzk6MjAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FoLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FoLmMKaW5kZXggMTYxYmE0MTJjYjA4Yi4uNzEzMWYyOTdhZGEyZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfYWguYwpAQCAtMTksMTIgJiM0MzsxOSw3IEBAIE1PRFVMRV9ERVNDUklQVElPTigmIzM0O1h0YWJsZXM6IElQdjQgSVBzZWMtQUggU1BJIG1hdGNoJiMzNDspOwogc3RhdGljIGlubGluZSBib29sCiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpCiB7Ci0JYm9vbCByOwotCXByX2RlYnVnKCYjMzQ7c3BpX21hdGNoOiVjIDB4JXggJmx0Oz0gMHgleCAmbHQ7PSAweCV4XG4mIzM0OywKLQkJIGludmVydCA/ICYjMzk7ISYjMzk7IDogJiMzOTsgJiMzOTssIG1pbiwgc3BpLCBtYXgpOwotCXIgPSAoc3BpICZndDs9IG1pbiAmYW1wOyZhbXA7IHNwaSAmbHQ7PSBtYXgpIF4gaW52ZXJ0OwotCXByX2RlYnVnKCYjMzQ7IHJlc3VsdCAlc1xuJiMzNDssIHIgPyAmIzM0O1BBU1MmIzM0OyA6ICYjMzQ7RkFJTEVEJiMzNDspOwotCXJldHVybiByOwomIzQzOwlyZXR1cm4gKHNwaSAmZ3Q7PSBtaW4gJmFtcDsmYW1wOyBzcGkgJmx0Oz0gbWF4KSBeIGludmVydDsKIH0KIAogc3RhdGljIGJvb2wgYWhfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQpAQCAtNDIsNyAmIzQzOzM3LDYgQEAgc3RhdGljIGJvb2wgYWhfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkvKiBXZSYjMzk7dmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2UKIAkJICogY2FuJiMzOTt0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4KIAkJICovCi0JCXByX2RlYnVnKCYjMzQ7RHJvcHBpbmcgZXZpbCBBSCB0aW55Z3JhbS5cbiYjMzQ7KTsKIAkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTU4LDcgJiM0Mzs1Miw3IEBAIHN0YXRpYyBpbnQgYWhfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAKIAkvKiBNdXN0IHNwZWNpZnkgbm8gdW5rbm93biBpbnZmbGFncyAqLwogCWlmIChhaGluZm8tJmd0O2ludmZsYWdzICZhbXA7IH5JUFRfQUhfSU5WX01BU0spIHsKLQkJcHJfZGVidWcoJiMzNDt1bmtub3duIGZsYWdzICVYXG4mIzM0OywgYWhpbmZvLSZndDtpbnZmbGFncyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7dW5rbm93biBmbGFncyAlWFxuJiMzNDssIGFoaW5mby0mZ3Q7aW52ZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JwZmlsdGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JwZmlsdGVyLmMKaW5kZXggNmQ5YmY1MTA2ODY4NC4uMmMzOGZkNjYyNGFhMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ycGZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuYwpAQCAtOTUsOCAmIzQzOzk1LDcgQEAgc3RhdGljIGludCBycGZpbHRlcl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAogCWlmIChzdHJjbXAocGFyLSZndDt0YWJsZSwgJiMzNDttYW5nbGUmIzM0OykgIT0gMCAmYW1wOyZhbXA7CiAJICAgIHN0cmNtcChwYXItJmd0O3RhYmxlLCAmIzM0O3JhdyYjMzQ7KSAhPSAwKSB7Ci0JCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtvbmx5IHZhbGlkIGluIFwmIzM5O3Jhd1wmIzM5OyBvciBcJiMzOTttYW5nbGVcJiMzOTsgdGFibGUsIG5vdCBcJiMzOTslc1wmIzM5O1xuJiMzNDssCi0JCQkJICAgIHBhci0mZ3Q7dGFibGUpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O29ubHkgdmFsaWQgaW4gXCYjMzk7cmF3XCYjMzk7IG9yIFwmIzM5O21hbmdsZVwmIzM5OyB0YWJsZVxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jCmluZGV4IDEyNTg3ODNlZDg3NjIuLmRhYjdkYmM2YTY3NWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguYwpAQCAtMjQsMTMgJiM0MzsyNCw3IEBAIE1PRFVMRV9BVVRIT1IoJiMzNDtBbmRyYXMgS2lzLVN6YWJvICZsdDtraXN6YUBzY2guYm1lLmh1Jmd0OyYjMzQ7KTsKIHN0YXRpYyBpbmxpbmUgYm9vbAogc3BpX21hdGNoKHVfaW50MzJfdCBtaW4sIHVfaW50MzJfdCBtYXgsIHVfaW50MzJfdCBzcGksIGJvb2wgaW52ZXJ0KQogewotCWJvb2wgcjsKLQotCXByX2RlYnVnKCYjMzQ7c3BpX21hdGNoOiVjIDB4JXggJmx0Oz0gMHgleCAmbHQ7PSAweCV4XG4mIzM0OywKLQkJIGludmVydCA/ICYjMzk7ISYjMzk7IDogJiMzOTsgJiMzOTssIG1pbiwgc3BpLCBtYXgpOwotCXIgPSAoc3BpICZndDs9IG1pbiAmYW1wOyZhbXA7IHNwaSAmbHQ7PSBtYXgpIF4gaW52ZXJ0OwotCXByX2RlYnVnKCYjMzQ7IHJlc3VsdCAlc1xuJiMzNDssIHIgPyAmIzM0O1BBU1MmIzM0OyA6ICYjMzQ7RkFJTEVEJiMzNDspOwotCXJldHVybiByOwomIzQzOwlyZXR1cm4gKHNwaSAmZ3Q7PSBtaW4gJmFtcDsmYW1wOyBzcGkgJmx0Oz0gbWF4KSBeIGludmVydDsKIH0KIAogc3RhdGljIGJvb2wgYWhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKQEAgLTYyLDIzICYjNDM7NTYsNiBAQCBzdGF0aWMgYm9vbCBhaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JcHJfZGVidWcoJiMzNDtJUHY2IEFIIExFTiAldSAldSAmIzM0OywgaGRybGVuLCBhaC0mZ3Q7aGRybGVuKTsKLQlwcl9kZWJ1ZygmIzM0O1JFUyAlMDRYICYjMzQ7LCBhaC0mZ3Q7cmVzZXJ2ZWQpOwotCXByX2RlYnVnKCYjMzQ7U1BJICV1ICUwOFhcbiYjMzQ7LCBudG9obChhaC0mZ3Q7c3BpKSwgbnRvaGwoYWgtJmd0O3NwaSkpOwotCi0JcHJfZGVidWcoJiMzNDtJUHY2IEFIIHNwaSAlMDJYICYjMzQ7LAotCQkgc3BpX21hdGNoKGFoaW5mby0mZ3Q7c3Bpc1swXSwgYWhpbmZvLSZndDtzcGlzWzFdLAotCQkJICAgbnRvaGwoYWgtJmd0O3NwaSksCi0JCQkgICAhIShhaGluZm8tJmd0O2ludmZsYWdzICZhbXA7IElQNlRfQUhfSU5WX1NQSSkpKTsKLQlwcl9kZWJ1ZygmIzM0O2xlbiAlMDJYICUwNFggJTAyWCAmIzM0OywKLQkJIGFoaW5mby0mZ3Q7aGRybGVuLCBoZHJsZW4sCi0JCSAoIWFoaW5mby0mZ3Q7aGRybGVuIHx8Ci0JCSAgKGFoaW5mby0mZ3Q7aGRybGVuID09IGhkcmxlbikgXgotCQkgICEhKGFoaW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgSVA2VF9BSF9JTlZfTEVOKSkpOwotCXByX2RlYnVnKCYjMzQ7cmVzICUwMlggJTA0WCAlMDJYXG4mIzM0OywKLQkJIGFoaW5mby0mZ3Q7aGRycmVzLCBhaC0mZ3Q7cmVzZXJ2ZWQsCi0JCSAhKGFoaW5mby0mZ3Q7aGRycmVzICZhbXA7JmFtcDsgYWgtJmd0O3Jlc2VydmVkKSk7Ci0KIAlyZXR1cm4gc3BpX21hdGNoKGFoaW5mby0mZ3Q7c3Bpc1swXSwgYWhpbmZvLSZndDtzcGlzWzFdLAogCQkJICBudG9obChhaC0mZ3Q7c3BpKSwKIAkJCSAgISEoYWhpbmZvLSZndDtpbnZmbGFncyAmYW1wOyBJUDZUX0FIX0lOVl9TUEkpKSAmYW1wOyZhbXA7CkBAIC05Myw3ICYjNDM7NzAsNyBAQCBzdGF0aWMgaW50IGFoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAljb25zdCBzdHJ1Y3QgaXA2dF9haCAqYWhpbmZvID0gcGFyLSZndDttYXRjaGluZm87CiAKIAlpZiAoYWhpbmZvLSZndDtpbnZmbGFncyAmYW1wOyB+SVA2VF9BSF9JTlZfTUFTSykgewotCQlwcl9kZWJ1ZygmIzM0O3Vua25vd24gZmxhZ3MgJVhcbiYjMzQ7LCBhaGluZm8tJmd0O2ludmZsYWdzKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDt1bmtub3duIGZsYWdzICVYXG4mIzM0OywgYWhpbmZvLSZndDtpbnZmbGFncyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuYwppbmRleCAzYWFkNjQzOTM4NmIxLi5mNWYzY2ZiODcwNGNmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9mcmFnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jCkBAIC0yMywxMiAmIzQzOzIzLDcgQEAgTU9EVUxFX0FVVEhPUigmIzM0O0FuZHJhcyBLaXMtU3phYm8gJmx0O2tpc3phQHNjaC5ibWUuaHUmZ3Q7JiMzNDspOwogc3RhdGljIGlubGluZSBib29sCiBpZF9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3QgaWQsIGJvb2wgaW52ZXJ0KQogewotCWJvb2wgcjsKLQlwcl9kZWJ1ZygmIzM0O2lkX21hdGNoOiVjIDB4JXggJmx0Oz0gMHgleCAmbHQ7PSAweCV4XG4mIzM0OywgaW52ZXJ0ID8gJiMzOTshJiMzOTsgOiAmIzM5OyAmIzM5OywKLQkJIG1pbiwgaWQsIG1heCk7Ci0JciA9IChpZCAmZ3Q7PSBtaW4gJmFtcDsmYW1wOyBpZCAmbHQ7PSBtYXgpIF4gaW52ZXJ0OwotCXByX2RlYnVnKCYjMzQ7IHJlc3VsdCAlc1xuJiMzNDssIHIgPyAmIzM0O1BBU1MmIzM0OyA6ICYjMzQ7RkFJTEVEJiMzNDspOwotCXJldHVybiByOwomIzQzOwlyZXR1cm4gKGlkICZndDs9IG1pbiAmYW1wOyZhbXA7IGlkICZsdDs9IG1heCkgXiBpbnZlcnQ7CiB9CiAKIHN0YXRpYyBib29sCkBAIC01MywzOCAmIzQzOzQ4LDYgQEAgZnJhZ19tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JcHJfZGVidWcoJiMzNDtJTkZPICUwNFggJiMzNDssIGZoLSZndDtmcmFnX29mZik7Ci0JcHJfZGVidWcoJiMzNDtPRkZTRVQgJTA0WCAmIzM0OywgbnRvaHMoZmgtJmd0O2ZyYWdfb2ZmKSAmYW1wOyB+MHg3KTsKLQlwcl9kZWJ1ZygmIzM0O1JFUyAlMDJYICUwNFgmIzM0OywgZmgtJmd0O3Jlc2VydmVkLCBudG9ocyhmaC0mZ3Q7ZnJhZ19vZmYpICZhbXA7IDB4Nik7Ci0JcHJfZGVidWcoJiMzNDtNRiAlMDRYICYjMzQ7LCBmaC0mZ3Q7ZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVA2X01GKSk7Ci0JcHJfZGVidWcoJiMzNDtJRCAldSAlMDhYXG4mIzM0OywgbnRvaGwoZmgtJmd0O2lkZW50aWZpY2F0aW9uKSwKLQkJIG50b2hsKGZoLSZndDtpZGVudGlmaWNhdGlvbikpOwotCi0JcHJfZGVidWcoJiMzNDtJUHY2IEZSQUcgaWQgJTAyWCAmIzM0OywKLQkJIGlkX21hdGNoKGZyYWdpbmZvLSZndDtpZHNbMF0sIGZyYWdpbmZvLSZndDtpZHNbMV0sCi0JCQkgIG50b2hsKGZoLSZndDtpZGVudGlmaWNhdGlvbiksCi0JCQkgICEhKGZyYWdpbmZvLSZndDtpbnZmbGFncyAmYW1wOyBJUDZUX0ZSQUdfSU5WX0lEUykpKTsKLQlwcl9kZWJ1ZygmIzM0O3JlcyAlMDJYICUwMlglMDRYICUwMlggJiMzNDssCi0JCSBmcmFnaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9GUkFHX1JFUywgZmgtJmd0O3Jlc2VydmVkLAotCQkgbnRvaHMoZmgtJmd0O2ZyYWdfb2ZmKSAmYW1wOyAweDYsCi0JCSAhKChmcmFnaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9GUkFHX1JFUykgJmFtcDsmYW1wOwotCQkgICAoZmgtJmd0O3Jlc2VydmVkIHx8IChudG9ocyhmaC0mZ3Q7ZnJhZ19vZmYpICZhbXA7IDB4MDYpKSkpOwotCXByX2RlYnVnKCYjMzQ7Zmlyc3QgJTAyWCAlMDJYICUwMlggJiMzNDssCi0JCSBmcmFnaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9GUkFHX0ZTVCwKLQkJIG50b2hzKGZoLSZndDtmcmFnX29mZikgJmFtcDsgfjB4NywKLQkJICEoKGZyYWdpbmZvLSZndDtmbGFncyAmYW1wOyBJUDZUX0ZSQUdfRlNUKSAmYW1wOyZhbXA7Ci0JCSAgIChudG9ocyhmaC0mZ3Q7ZnJhZ19vZmYpICZhbXA7IH4weDcpKSk7Ci0JcHJfZGVidWcoJiMzNDttZiAlMDJYICUwMlggJTAyWCAmIzM0OywKLQkJIGZyYWdpbmZvLSZndDtmbGFncyAmYW1wOyBJUDZUX0ZSQUdfTUYsCi0JCSBudG9ocyhmaC0mZ3Q7ZnJhZ19vZmYpICZhbXA7IElQNl9NRiwKLQkJICEoKGZyYWdpbmZvLSZndDtmbGFncyAmYW1wOyBJUDZUX0ZSQUdfTUYpICZhbXA7JmFtcDsKLQkJICAgISgobnRvaHMoZmgtJmd0O2ZyYWdfb2ZmKSAmYW1wOyBJUDZfTUYpKSkpOwotCXByX2RlYnVnKCYjMzQ7bGFzdCAlMDJYICUwMlggJTAyWFxuJiMzNDssCi0JCSBmcmFnaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9GUkFHX05NRiwKLQkJIG50b2hzKGZoLSZndDtmcmFnX29mZikgJmFtcDsgSVA2X01GLAotCQkgISgoZnJhZ2luZm8tJmd0O2ZsYWdzICZhbXA7IElQNlRfRlJBR19OTUYpICZhbXA7JmFtcDsKLQkJICAgKG50b2hzKGZoLSZndDtmcmFnX29mZikgJmFtcDsgSVA2X01GKSkpOwotCiAJcmV0dXJuIGlkX21hdGNoKGZyYWdpbmZvLSZndDtpZHNbMF0sIGZyYWdpbmZvLSZndDtpZHNbMV0sCiAJCQkgbnRvaGwoZmgtJmd0O2lkZW50aWZpY2F0aW9uKSwKIAkJCSAhIShmcmFnaW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgSVA2VF9GUkFHX0lOVl9JRFMpKSAmYW1wOyZhbXA7CkBAIC0xMDMsNyAmIzQzOzY2LDcgQEAgc3RhdGljIGludCBmcmFnX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAljb25zdCBzdHJ1Y3QgaXA2dF9mcmFnICpmcmFnaW5mbyA9IHBhci0mZ3Q7bWF0Y2hpbmZvOwogCiAJaWYgKGZyYWdpbmZvLSZndDtpbnZmbGFncyAmYW1wOyB+SVA2VF9GUkFHX0lOVl9NQVNLKSB7Ci0JCXByX2RlYnVnKCYjMzQ7dW5rbm93biBmbGFncyAlWFxuJiMzNDssIGZyYWdpbmZvLSZndDtpbnZmbGFncyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7dW5rbm93biBmbGFncyAlWFxuJiMzNDssIGZyYWdpbmZvLSZndDtpbnZmbGFncyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMKaW5kZXggNmQxYTVkMjAyNmE2Ny4uMzdjMjA3ZDMxNTJhNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMKQEAgLTc5LDE0ICYjNDM7NzksNiBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXByX2RlYnVnKCYjMzQ7SVB2NiBPUFRTIExFTiAldSAldSAmIzM0OywgaGRybGVuLCBvaC0mZ3Q7aGRybGVuKTsKLQotCXByX2RlYnVnKCYjMzQ7bGVuICUwMlggJTA0WCAlMDJYICYjMzQ7LAotCQkgb3B0aW5mby0mZ3Q7aGRybGVuLCBoZHJsZW4sCi0JCSAoIShvcHRpbmZvLSZndDtmbGFncyAmYW1wOyBJUDZUX09QVFNfTEVOKSB8fAotCQkgICgob3B0aW5mby0mZ3Q7aGRybGVuID09IGhkcmxlbikgXgotCQkgICAhIShvcHRpbmZvLSZndDtpbnZmbGFncyAmYW1wOyBJUDZUX09QVFNfSU5WX0xFTikpKSk7Ci0KIAlyZXQgPSAoIShvcHRpbmZvLSZndDtmbGFncyAmYW1wOyBJUDZUX09QVFNfTEVOKSB8fAogCSAgICAgICAoKG9wdGluZm8tJmd0O2hkcmxlbiA9PSBoZHJsZW4pIF4KIAkJISEob3B0aW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgSVA2VF9PUFRTX0lOVl9MRU4pKSk7CkBAIC05Niw4ICYjNDM7ODgsNiBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAlpZiAoIShvcHRpbmZvLSZndDtmbGFncyAmYW1wOyBJUDZUX09QVFNfT1BUUykpIHsKIAkJcmV0dXJuIHJldDsKIAl9IGVsc2UgewotCQlwcl9kZWJ1ZygmIzM0O1N0cmljdCAmIzM0Oyk7Ci0JCXByX2RlYnVnKCYjMzQ7IyVkICYjMzQ7LCBvcHRpbmZvLSZndDtvcHRzbnIpOwogCQlmb3IgKHRlbXAgPSAwOyB0ZW1wICZsdDsgb3B0aW5mby0mZ3Q7b3B0c25yOyB0ZW1wJiM0MzsmIzQzOykgewogCQkJLyogdHlwZSBmaWVsZCBleGlzdHMgPyAqLwogCQkJaWYgKGhkcmxlbiAmbHQ7IDEpCkBAIC0xMDgsMTMgJiM0Mzs5OCw5IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkJCWJyZWFrOwogCiAJCQkvKiBUeXBlIGNoZWNrICovCi0JCQlpZiAoKnRwICE9IChvcHRpbmZvLSZndDtvcHRzW3RlbXBdICZhbXA7IDB4RkYwMCkgJmd0OyZndDsgOCkgewotCQkJCXByX2RlYnVnKCYjMzQ7VGJhZCAlMDJYICUwMlhcbiYjMzQ7LCAqdHAsCi0JCQkJCSAob3B0aW5mby0mZ3Q7b3B0c1t0ZW1wXSAmYW1wOyAweEZGMDApICZndDsmZ3Q7IDgpOwomIzQzOwkJCWlmICgqdHAgIT0gKG9wdGluZm8tJmd0O29wdHNbdGVtcF0gJmFtcDsgMHhGRjAwKSAmZ3Q7Jmd0OyA4KQogCQkJCXJldHVybiBmYWxzZTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJfZGVidWcoJiMzNDtUb2sgJiMzNDspOwotCQkJfQomIzQzOwogCQkJLyogTGVuZ3RoIGNoZWNrICovCiAJCQlpZiAoKnRwKSB7CiAJCQkJdTE2IHNwZWNfbGVuOwpAQCAtMTI5LDI2ICYjNDM7MTE1LDE4IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkJCQlicmVhazsKIAkJCQlzcGVjX2xlbiA9IG9wdGluZm8tJmd0O29wdHNbdGVtcF0gJmFtcDsgMHgwMEZGOwogCi0JCQkJaWYgKHNwZWNfbGVuICE9IDB4MDBGRiAmYW1wOyZhbXA7IHNwZWNfbGVuICE9ICpscCkgewotCQkJCQlwcl9kZWJ1ZygmIzM0O0xiYWQgJTAyWCAlMDRYXG4mIzM0OywgKmxwLAotCQkJCQkJIHNwZWNfbGVuKTsKJiM0MzsJCQkJaWYgKHNwZWNfbGVuICE9IDB4MDBGRiAmYW1wOyZhbXA7IHNwZWNfbGVuICE9ICpscCkKIAkJCQkJcmV0dXJuIGZhbHNlOwotCQkJCX0KLQkJCQlwcl9kZWJ1ZygmIzM0O0xvayAmIzM0Oyk7CiYjNDM7CiAJCQkJb3B0bGVuID0gKmxwICYjNDM7IDI7CiAJCQl9IGVsc2UgewotCQkJCXByX2RlYnVnKCYjMzQ7UGFkMVxuJiMzNDspOwogCQkJCW9wdGxlbiA9IDE7CiAJCQl9CiAKLQkJCS8qIFN0ZXAgdG8gdGhlIG5leHQgKi8KLQkJCXByX2RlYnVnKCYjMzQ7bGVuJTA0WFxuJiMzNDssIG9wdGxlbik7Ci0KIAkJCWlmICgocHRyICZndDsgc2tiLSZndDtsZW4gLSBvcHRsZW4gfHwgaGRybGVuICZsdDsgb3B0bGVuKSAmYW1wOyZhbXA7Ci0JCQkgICAgdGVtcCAmbHQ7IG9wdGluZm8tJmd0O29wdHNuciAtIDEpIHsKLQkJCQlwcl9kZWJ1ZygmIzM0O25ldyBwb2ludGVyIGlzIHRvbyBsYXJnZSFcbiYjMzQ7KTsKJiM0MzsJCQkgICAgdGVtcCAmbHQ7IG9wdGluZm8tJmd0O29wdHNuciAtIDEpCiAJCQkJYnJlYWs7Ci0JCQl9CiYjNDM7CiAJCQlwdHIgJiM0Mzs9IG9wdGxlbjsKIAkJCWhkcmxlbiAtPSBvcHRsZW47CiAJCX0KQEAgLTE2NiwxNiAmIzQzOzE0NCwxNiBAQCBzdGF0aWMgaW50IGhiaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJY29uc3Qgc3RydWN0IGlwNnRfb3B0cyAqb3B0c2luZm8gPSBwYXItJmd0O21hdGNoaW5mbzsKIAogCWlmIChvcHRzaW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgfklQNlRfT1BUU19JTlZfTUFTSykgewotCQlwcl9kZWJ1ZygmIzM0O3Vua25vd24gZmxhZ3MgJVhcbiYjMzQ7LCBvcHRzaW5mby0mZ3Q7aW52ZmxhZ3MpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3Vua25vd24gZmxhZ3MgJVhcbiYjMzQ7LCBvcHRzaW5mby0mZ3Q7aW52ZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKG9wdHNpbmZvLSZndDtvcHRzbnIgJmd0OyBJUDZUX09QVFNfT1BUU05SKSB7Ci0JCXByX2RlYnVnKCYjMzQ7dG9vIG1hbnkgc3VwcG9ydGVkIG9wdHMgc3BlY2lmaWVkXG4mIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7dG9vIG1hbnkgc3VwcG9ydGVkIG9wdHMgc3BlY2lmaWVkXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChvcHRzaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2VF9PUFRTX05TVFJJQ1QpIHsKLQkJcHJfZGVidWcoJiMzNDtOb3Qgc3RyaWN0IC0gbm90IGltcGxlbWVudGVkJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O05vdCBzdHJpY3QgLSBub3QgaW1wbGVtZW50ZWQmIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbWguYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X21oLmMKaW5kZXggZmQ0OTJiNjlhY2JjMC4uYmE2ZGNjNzc5MWEwOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbWguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9taC5jCkBAIC00MiwxNCAmIzQzOzQyLDExIEBAIHN0YXRpYyBib29sIG1oX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJaWYgKG1oID09IE5VTEwpIHsKIAkJLyogV2UmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlCiAJCSAgIGNhbiYjMzk7dC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuICovCi0JCXByX2RlYnVnKCYjMzQ7RHJvcHBpbmcgZXZpbCBNSCB0aW55Z3JhbS5cbiYjMzQ7KTsKIAkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAogCWlmIChtaC0mZ3Q7aXA2bWhfcHJvdG8gIT0gSVBQUk9UT19OT05FKSB7Ci0JCXByX2RlYnVnKCYjMzQ7RHJvcHBpbmcgaW52YWxpZCBNSCBQYXlsb2FkIFByb3RvOiAldVxuJiMzNDssCi0JCQkgbWgtJmd0O2lwNm1oX3Byb3RvKTsKIAkJcGFyLSZndDtob3Rkcm9wID0gdHJ1ZTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jCmluZGV4IDY3Yzg3YTg4Y2RlNGYuLmFmOGQxMGQ0OWRlODEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnBmaWx0ZXIuYwpAQCAtMTE4LDcgJiM0MzsxMTgsNyBAQCBzdGF0aWMgaW50IHJwZmlsdGVyX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogCiAJaWYgKHN0cmNtcChwYXItJmd0O3RhYmxlLCAmIzM0O21hbmdsZSYjMzQ7KSAhPSAwICZhbXA7JmFtcDsKIAkgICAgc3RyY21wKHBhci0mZ3Q7dGFibGUsICYjMzQ7cmF3JiMzNDspICE9IDApIHsKLQkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O29ubHkgdmFsaWQgaW4gXCYjMzk7cmF3XCYjMzk7IG9yIFwmIzM5O21hbmdsZVwmIzM5OyB0YWJsZSwgbm90IFwmIzM5OyVzXCYjMzk7XG4mIzM0OywKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtvbmx5IHZhbGlkIGluIFwmIzM5O3Jhd1wmIzM5OyBvciBcJiMzOTttYW5nbGVcJiMzOTsgdGFibGVcbiYjMzQ7LAogCQkJCSAgICBwYXItJmd0O3RhYmxlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmMKaW5kZXggMjc4YjUyNzUyZjM2NC4uMGMwMWFjMjc0NmQxZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jCkBAIC0xNTUsMTggJiM0MzsxNTUsMTggQEAgc3RhdGljIGludCBydF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJY29uc3Qgc3RydWN0IGlwNnRfcnQgKnJ0aW5mbyA9IHBhci0mZ3Q7bWF0Y2hpbmZvOwogCiAJaWYgKHJ0aW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgfklQNlRfUlRfSU5WX01BU0spIHsKLQkJcHJfZGVidWcoJiMzNDt1bmtub3duIGZsYWdzICVYXG4mIzM0OywgcnRpbmZvLSZndDtpbnZmbGFncyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7dW5rbm93biBmbGFncyAlWFxuJiMzNDssIHJ0aW5mby0mZ3Q7aW52ZmxhZ3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKHJ0aW5mby0mZ3Q7YWRkcm5yICZndDsgSVA2VF9SVF9IT1BTKSB7Ci0JCXByX2RlYnVnKCYjMzQ7dG9vIG1hbnkgYWRkcmVzc2VzIHNwZWNpZmllZFxuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3RvbyBtYW55IGFkZHJlc3NlcyBzcGVjaWZpZWRcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmICgocnRpbmZvLSZndDtmbGFncyAmYW1wOyAoSVA2VF9SVF9SRVMgfCBJUDZUX1JUX0ZTVF9NQVNLKSkgJmFtcDsmYW1wOwogCSAgICAoIShydGluZm8tJmd0O2ZsYWdzICZhbXA7IElQNlRfUlRfVFlQKSB8fAogCSAgICAgKHJ0aW5mby0mZ3Q7cnRfdHlwZSAhPSAwKSB8fAogCSAgICAgKHJ0aW5mby0mZ3Q7aW52ZmxhZ3MgJmFtcDsgSVA2VF9SVF9JTlZfVFlQKSkpIHsKLQkJcHJfZGVidWcoJiMzNDtgLS1ydC10eXBlIDAmIzM5OyByZXF1aXJlZCBiZWZvcmUgYC0tcnQtMC0qJiMzOTsmIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7YC0tcnQtdHlwZSAwJiMzOTsgcmVxdWlyZWQgYmVmb3JlIGAtLXJ0LTAtKiYjMzk7JiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuYyBiL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuYwppbmRleCAxNDk0YjNlZTMwZTExLi40ZTQ0MzZhOTEwNGI0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5jCkBAIC04Nyw4ICYjNDM7ODcsNyBAQCBzdGF0aWMgaW50IGNvbm5zZWNtYXJrX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQogCiAJaWYgKHN0cmNtcChwYXItJmd0O3RhYmxlLCAmIzM0O21hbmdsZSYjMzQ7KSAhPSAwICZhbXA7JmFtcDsKIAkgICAgc3RyY21wKHBhci0mZ3Q7dGFibGUsICYjMzQ7c2VjdXJpdHkmIzM0OykgIT0gMCkgewotCQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7b25seSB2YWxpZCBpbiBcJiMzOTttYW5nbGVcJiMzOTsgb3IgXCYjMzk7c2VjdXJpdHlcJiMzOTsgdGFibGUsIG5vdCBcJiMzOTslc1wmIzM5O1xuJiMzNDssCi0JCQkJICAgIHBhci0mZ3Q7dGFibGUpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O29ubHkgdmFsaWQgaW4gXCYjMzk7bWFuZ2xlXCYjMzk7IG9yIFwmIzM5O3NlY3VyaXR5XCYjMzk7IHRhYmxlXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DVC5jIGIvbmV0L25ldGZpbHRlci94dF9DVC5jCmluZGV4IGU3ODY2MGRmZGY0YjYuLjkxMzI2MDE0YWRlMWMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfQ1QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X0NULmMKQEAgLTE5NSw3ICYjNDM7MTk1LDggQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhciwKIAkJZ290byBlcnIzOwogCX0KIAotCWlmIChpbmZvLSZndDtoZWxwZXJbMF0pIHsKJiM0MzsJaWYgKGluZm8tJmd0O2hlbHBlclswXSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpICZsdDsgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKIAkJaWYgKHN0cm5sZW4oaW5mby0mZ3Q7aGVscGVyLCBzaXplb2YoaW5mby0mZ3Q7aGVscGVyKSkgPT0gc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKIAkJCXJldCA9IC1FTkFNRVRPT0xPTkc7CiAJCQlnb3RvIGVycjM7CkBAIC0yMDYsNyAmIzQzOzIwNyw4IEBAIHN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsCiAJCQlnb3RvIGVycjM7CiAJfQogCi0JaWYgKGluZm8tJmd0O3RpbWVvdXRbMF0pIHsKJiM0MzsJaWYgKGluZm8tJmd0O3RpbWVvdXRbMF0gJmFtcDsmYW1wOwomIzQzOwkgICAgc3RybmxlbihpbmZvLSZndDt0aW1lb3V0LCBzaXplb2YoaW5mby0mZ3Q7dGltZW91dCkpICZsdDsgc2l6ZW9mKGluZm8tJmd0O3RpbWVvdXQpKSB7CiAJCWlmIChzdHJubGVuKGluZm8tJmd0O3RpbWVvdXQsIHNpemVvZihpbmZvLSZndDt0aW1lb3V0KSkgPT0gc2l6ZW9mKGluZm8tJmd0O3RpbWVvdXQpKSB7CiAJCQlyZXQgPSAtRU5BTUVUT09MT05HOwogCQkJZ290byBlcnI0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmMKaW5kZXggYmZjZjJkNDRlOTNkYi4uMTViNjk4ZWE5OGFhNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jCkBAIC0xMDIsOCAmIzQzOzEwMiw2IEBAIHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19leHBpcmVkKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogewogCXN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyID0gdGltZXJfY29udGFpbmVyX29mKHRpbWVyLCB0LCB0aW1lcik7CiAKLQlwcl9kZWJ1ZygmIzM0O3RpbWVyICVzIGV4cGlyZWRcbiYjMzQ7LCB0aW1lci0mZ3Q7YXR0ci5hdHRyLm5hbWUpOwotCiAJc2NoZWR1bGVfd29yaygmYW1wO3RpbWVyLSZndDt3b3JrKTsKIH0KIApAQCAtMTExLDcgJiM0MzsxMDksNiBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfYWxhcm1wcm9jKHN0cnVjdCBhbGFybSAqYWxhcm0sIGt0aW1lX3Qgbm93KQogewogCXN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyID0gYWxhcm0tJmd0O2RhdGE7CiAKLQlwcl9kZWJ1ZygmIzM0O2FsYXJtICVzIGV4cGlyZWRcbiYjMzQ7LCB0aW1lci0mZ3Q7YXR0ci5hdHRyLm5hbWUpOwogCXNjaGVkdWxlX3dvcmsoJmFtcDt0aW1lci0mZ3Q7d29yayk7CiB9CiAKQEAgLTE3MSw3ICYjNDM7MTY4LDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbykKIAogCXJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKGlkbGV0aW1lcl90Z19rb2JqLCAmYW1wO2luZm8tJmd0O3RpbWVyLSZndDthdHRyLmF0dHIpOwogCWlmIChyZXQgJmx0OyAwKSB7Ci0JCXByX2RlYnVnKCYjMzQ7Y291bGRuJiMzOTt0IGFkZCBmaWxlIHRvIHN5c2ZzJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2NvdWxkbiYjMzk7dCBhZGQgZmlsZSB0byBzeXNmcyYjMzQ7KTsKIAkJZ290byBvdXRfZnJlZV9hdHRyOwogCX0KIApAQCAtMjIwLDcgJiM0MzsyMTcsNyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvKQogCiAJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosICZhbXA7aW5mby0mZ3Q7dGltZXItJmd0O2F0dHIuYXR0cik7CiAJaWYgKHJldCAmbHQ7IDApIHsKLQkJcHJfZGVidWcoJiMzNDtjb3VsZG4mIzM5O3QgYWRkIGZpbGUgdG8gc3lzZnMmIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7Y291bGRuJiMzOTt0IGFkZCBmaWxlIHRvIHN5c2ZzJiMzNDspOwogCQlnb3RvIG91dF9mcmVlX2F0dHI7CiAJfQogCkBAIC0yMjgsNyAmIzQzOzIyNSw2IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pCiAJa29iamVjdF91ZXZlbnQoaWRsZXRpbWVyX3RnX2tvYmosS09CSl9BREQpOwogCiAJbGlzdF9hZGQoJmFtcDtpbmZvLSZndDt0aW1lci0mZ3Q7ZW50cnksICZhbXA7aWRsZXRpbWVyX3RnX2xpc3QpOwotCXByX2RlYnVnKCYjMzQ7dGltZXIgdHlwZSB2YWx1ZSBpcyAldSYjMzQ7LCBpbmZvLSZndDt0aW1lcl90eXBlKTsKIAlpbmZvLSZndDt0aW1lci0mZ3Q7dGltZXJfdHlwZSA9IGluZm8tJmd0O3RpbWVyX3R5cGU7CiAJaW5mby0mZ3Q7dGltZXItJmd0O3JlZmNudCA9IDE7CiAKQEAgLTI2Myw5ICYjNDM7MjU5LDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBpZGxldGltZXJfdGdfdGFyZ2V0KHN0cnVjdCBza19idWZmICpza2IsCiB7CiAJY29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLSZndDt0YXJnaW5mbzsKIAotCXByX2RlYnVnKCYjMzQ7cmVzZXR0aW5nIHRpbWVyICVzLCB0aW1lb3V0IHBlcmlvZCAldVxuJiMzNDssCi0JCSBpbmZvLSZndDtsYWJlbCwgaW5mby0mZ3Q7dGltZW91dCk7Ci0KIAltb2RfdGltZXIoJmFtcDtpbmZvLSZndDt0aW1lci0mZ3Q7dGltZXIsCiAJCSAgc2Vjc190b19qaWZmaWVzKGluZm8tJmd0O3RpbWVvdXQpICYjNDM7IGppZmZpZXMpOwogCkBAIC0yODAsOSAmIzQzOzI3Myw2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaWRsZXRpbWVyX3RnX3RhcmdldF92MShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogewogCWNvbnN0IHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbyA9IHBhci0mZ3Q7dGFyZ2luZm87CiAKLQlwcl9kZWJ1ZygmIzM0O3Jlc2V0dGluZyB0aW1lciAlcywgdGltZW91dCBwZXJpb2QgJXVcbiYjMzQ7LAotCQkgaW5mby0mZ3Q7bGFiZWwsIGluZm8tJmd0O3RpbWVvdXQpOwotCiAJaWYgKGluZm8tJmd0O3RpbWVyLSZndDt0aW1lcl90eXBlICZhbXA7IFhUX0lETEVUSU1FUl9BTEFSTSkgewogCQlpZGxldGltZXJfc3RhcnRfYWxhcm1fc2VjKGluZm8tJmd0O3RpbWVyLCBpbmZvLSZndDt0aW1lb3V0KTsKIAl9IGVsc2UgewpAQCAtMjk2LDE3ICYjNDM7Mjg2LDE3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaWRsZXRpbWVyX3RnX3RhcmdldF92MShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogc3RhdGljIGludCBpZGxldGltZXJfdGdfaGVscGVyKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbykKIHsKIAlpZiAoaW5mby0mZ3Q7dGltZW91dCA9PSAwKSB7Ci0JCXByX2RlYnVnKCYjMzQ7dGltZW91dCB2YWx1ZSBpcyB6ZXJvXG4mIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7dGltZW91dCB2YWx1ZSBpcyB6ZXJvXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoaW5mby0mZ3Q7dGltZW91dCAmZ3Q7PSBJTlRfTUFYIC8gMTAwMCkgewotCQlwcl9kZWJ1ZygmIzM0O3RpbWVvdXQgdmFsdWUgaXMgdG9vIGJpZ1xuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3RpbWVvdXQgdmFsdWUgaXMgdG9vIGJpZ1xuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGluZm8tJmd0O2xhYmVsWzBdID09ICYjMzk7XDAmIzM5OyB8fAogCSAgICBzdHJubGVuKGluZm8tJmd0O2xhYmVsLAogCQkgICAgTUFYX0lETEVUSU1FUl9MQUJFTF9TSVpFKSA9PSBNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkUpIHsKLQkJcHJfZGVidWcoJiMzNDtsYWJlbCBpcyBlbXB0eSBvciBub3QgbnVsLXRlcm1pbmF0ZWRcbiYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtsYWJlbCBpcyBlbXB0eSBvciBub3QgbnVsLXRlcm1pbmF0ZWRcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpAQCAtMzE4LDM0ICYjNDM7MzA4LDI1IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCiAJc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLSZndDt0YXJnaW5mbzsKIAlpbnQgcmV0OwogCi0JcHJfZGVidWcoJiMzNDtjaGVja2VudHJ5IHRhcmdpbmZvJXNcbiYjMzQ7LCBpbmZvLSZndDtsYWJlbCk7Ci0KIAlyZXQgPSBpZGxldGltZXJfdGdfaGVscGVyKGluZm8pOwogCWlmKHJldCAmbHQ7IDApCi0JewotCQlwcl9kZWJ1ZygmIzM0O2NoZWNrZW50cnkgaGVscGVyIHJldHVybiBpbnZhbGlkXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAltdXRleF9sb2NrKCZhbXA7bGlzdF9tdXRleCk7CiAKIAlpbmZvLSZndDt0aW1lciA9IF9faWRsZXRpbWVyX3RnX2ZpbmRfYnlfbGFiZWwoaW5mby0mZ3Q7bGFiZWwpOwogCWlmIChpbmZvLSZndDt0aW1lcikgewogCQlpZiAoaW5mby0mZ3Q7dGltZXItJmd0O3RpbWVyX3R5cGUgJmFtcDsgWFRfSURMRVRJTUVSX0FMQVJNKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O0FkZGluZy9SZXBsYWNpbmcgcnVsZSB3aXRoIHNhbWUgbGFiZWwgYW5kIGRpZmZlcmVudCB0aW1lciB0eXBlIGlzIG5vdCBhbGxvd2VkXG4mIzM0Oyk7CiAJCQltdXRleF91bmxvY2soJmFtcDtsaXN0X211dGV4KTsKJiM0MzsJCQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7QWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcbiYjMzQ7KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJaW5mby0mZ3Q7dGltZXItJmd0O3JlZmNudCYjNDM7JiM0Mzs7CiAJCW1vZF90aW1lcigmYW1wO2luZm8tJmd0O3RpbWVyLSZndDt0aW1lciwKIAkJCSAgc2Vjc190b19qaWZmaWVzKGluZm8tJmd0O3RpbWVvdXQpICYjNDM7IGppZmZpZXMpOwotCi0JCXByX2RlYnVnKCYjMzQ7aW5jcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxuJiMzNDssCi0JCQkgaW5mby0mZ3Q7bGFiZWwsIGluZm8tJmd0O3RpbWVyLSZndDtyZWZjbnQpOwogCX0gZWxzZSB7CiAJCXJldCA9IGlkbGV0aW1lcl90Z19jcmVhdGUoaW5mbyk7CiAJCWlmIChyZXQgJmx0OyAwKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O2ZhaWxlZCB0byBjcmVhdGUgdGltZXJcbiYjMzQ7KTsKIAkJCW11dGV4X3VubG9jaygmYW1wO2xpc3RfbXV0ZXgpOwogCQkJcmV0dXJuIHJldDsKIAkJfQpAQCAtMzYwLDMwICYjNDM7MzQxLDIzIEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCiAJc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvID0gcGFyLSZndDt0YXJnaW5mbzsKIAlpbnQgcmV0OwogCi0JcHJfZGVidWcoJiMzNDtjaGVja2VudHJ5IHRhcmdpbmZvJXNcbiYjMzQ7LCBpbmZvLSZndDtsYWJlbCk7Ci0KIAlpZiAoaW5mby0mZ3Q7c2VuZF9ubF9tc2cpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXJldCA9IGlkbGV0aW1lcl90Z19oZWxwZXIoKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqKWluZm8pOwogCWlmKHJldCAmbHQ7IDApCi0JewotCQlwcl9kZWJ1ZygmIzM0O2NoZWNrZW50cnkgaGVscGVyIHJldHVybiBpbnZhbGlkXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAotCWlmIChpbmZvLSZndDt0aW1lcl90eXBlICZndDsgWFRfSURMRVRJTUVSX0FMQVJNKSB7Ci0JCXByX2RlYnVnKCYjMzQ7aW52YWxpZCB2YWx1ZSBmb3IgdGltZXIgdHlwZVxuJiMzNDspOwomIzQzOwlpZiAoaW5mby0mZ3Q7dGltZXJfdHlwZSAmZ3Q7IFhUX0lETEVUSU1FUl9BTEFSTSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJbXV0ZXhfbG9jaygmYW1wO2xpc3RfbXV0ZXgpOwogCiAJaW5mby0mZ3Q7dGltZXIgPSBfX2lkbGV0aW1lcl90Z19maW5kX2J5X2xhYmVsKGluZm8tJmd0O2xhYmVsKTsKIAlpZiAoaW5mby0mZ3Q7dGltZXIpIHsKIAkJaWYgKGluZm8tJmd0O3RpbWVyLSZndDt0aW1lcl90eXBlICE9IGluZm8tJmd0O3RpbWVyX3R5cGUpIHsKLQkJCXByX2RlYnVnKCYjMzQ7QWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcbiYjMzQ7KTsKIAkJCW11dGV4X3VubG9jaygmYW1wO2xpc3RfbXV0ZXgpOwomIzQzOwkJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtBZGRpbmcvUmVwbGFjaW5nIHJ1bGUgd2l0aCBzYW1lIGxhYmVsIGFuZCBkaWZmZXJlbnQgdGltZXIgdHlwZSBpcyBub3QgYWxsb3dlZFxuJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApAQCAtMzkzLDIxICYjNDM7MzY3LDE1IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCiAJCQlrdGltZV90IHRvdXQgPSBhbGFybV9leHBpcmVzX3JlbWFpbmluZygmYW1wO2luZm8tJmd0O3RpbWVyLSZndDthbGFybSk7CiAJCQlzdHJ1Y3QgdGltZXNwZWM2NCBrdGltZXNwZWMgPSBrdGltZV90b190aW1lc3BlYzY0KHRvdXQpOwogCi0JCQlpZiAoa3RpbWVzcGVjLnR2X3NlYyAmZ3Q7IDApIHsKLQkJCQlwcl9kZWJ1ZygmIzM0O3RpbWVfZXhwaXJ5X3JlbWFpbmluZyAlbGxkXG4mIzM0OywKLQkJCQkJIGt0aW1lc3BlYy50dl9zZWMpOwomIzQzOwkJCWlmIChrdGltZXNwZWMudHZfc2VjICZndDsgMCkKIAkJCQlpZGxldGltZXJfc3RhcnRfYWxhcm1fa3RpbWUoaW5mby0mZ3Q7dGltZXIsIHRvdXQpOwotCQkJfQogCQl9IGVsc2UgewogCQkJCW1vZF90aW1lcigmYW1wO2luZm8tJmd0O3RpbWVyLSZndDt0aW1lciwKIAkJCQkJc2Vjc190b19qaWZmaWVzKGluZm8tJmd0O3RpbWVvdXQpICYjNDM7IGppZmZpZXMpOwogCQl9Ci0JCXByX2RlYnVnKCYjMzQ7aW5jcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxuJiMzNDssCi0JCQkgaW5mby0mZ3Q7bGFiZWwsIGluZm8tJmd0O3RpbWVyLSZndDtyZWZjbnQpOwogCX0gZWxzZSB7CiAJCXJldCA9IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoaW5mbyk7CiAJCWlmIChyZXQgJmx0OyAwKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O2ZhaWxlZCB0byBjcmVhdGUgdGltZXJcbiYjMzQ7KTsKIAkJCW11dGV4X3VubG9jaygmYW1wO2xpc3RfbXV0ZXgpOwogCQkJcmV0dXJuIHJldDsKIAkJfQpAQCAtNDIxLDE5ICYjNDM7Mzg5LDEzIEBAIHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcikKIHsKIAljb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8gPSBwYXItJmd0O3RhcmdpbmZvOwogCi0JcHJfZGVidWcoJiMzNDtkZXN0cm95IHRhcmdpbmZvICVzXG4mIzM0OywgaW5mby0mZ3Q7bGFiZWwpOwotCiAJbXV0ZXhfbG9jaygmYW1wO2xpc3RfbXV0ZXgpOwogCiAJaWYgKC0taW5mby0mZ3Q7dGltZXItJmd0O3JlZmNudCAmZ3Q7IDApIHsKLQkJcHJfZGVidWcoJiMzNDtkZWNyZWFzZWQgcmVmY250IG9mIHRpbWVyICVzIHRvICV1XG4mIzM0OywKLQkJCSBpbmZvLSZndDtsYWJlbCwgaW5mby0mZ3Q7dGltZXItJmd0O3JlZmNudCk7CiAJCW11dGV4X3VubG9jaygmYW1wO2xpc3RfbXV0ZXgpOwogCQlyZXR1cm47CiAJfQogCi0JcHJfZGVidWcoJiMzNDtkZWxldGluZyB0aW1lciAlc1xuJiMzNDssIGluZm8tJmd0O2xhYmVsKTsKLQogCWxpc3RfZGVsKCZhbXA7aW5mby0mZ3Q7dGltZXItJmd0O2VudHJ5KTsKIAltdXRleF91bmxvY2soJmFtcDtsaXN0X211dGV4KTsKIApAQCAtNDQ4LDE5ICYjNDM7NDEwLDEzIEBAIHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19kZXN0cm95X3YxKGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcikKIHsKIAljb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItJmd0O3RhcmdpbmZvOwogCi0JcHJfZGVidWcoJiMzNDtkZXN0cm95IHRhcmdpbmZvICVzXG4mIzM0OywgaW5mby0mZ3Q7bGFiZWwpOwotCiAJbXV0ZXhfbG9jaygmYW1wO2xpc3RfbXV0ZXgpOwogCiAJaWYgKC0taW5mby0mZ3Q7dGltZXItJmd0O3JlZmNudCAmZ3Q7IDApIHsKLQkJcHJfZGVidWcoJiMzNDtkZWNyZWFzZWQgcmVmY250IG9mIHRpbWVyICVzIHRvICV1XG4mIzM0OywKLQkJCSBpbmZvLSZndDtsYWJlbCwgaW5mby0mZ3Q7dGltZXItJmd0O3JlZmNudCk7CiAJCW11dGV4X3VubG9jaygmYW1wO2xpc3RfbXV0ZXgpOwogCQlyZXR1cm47CiAJfQogCi0JcHJfZGVidWcoJiMzNDtkZWxldGluZyB0aW1lciAlc1xuJiMzNDssIGluZm8tJmd0O2xhYmVsKTsKLQogCWxpc3RfZGVsKCZhbXA7aW5mby0mZ3Q7dGltZXItJmd0O2VudHJ5KTsKIAltdXRleF91bmxvY2soJmFtcDtsaXN0X211dGV4KTsKIApAQCAtNTM0LDcgJiM0Mzs0OTAsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBpZGxldGltZXJfdGdfaW5pdCh2b2lkKQogCWlkbGV0aW1lcl90Z19jbGFzcyA9IGNsYXNzX2NyZWF0ZSgmIzM0O3h0X2lkbGV0aW1lciYjMzQ7KTsKIAllcnIgPSBQVFJfRVJSKGlkbGV0aW1lcl90Z19jbGFzcyk7CiAJaWYgKElTX0VSUihpZGxldGltZXJfdGdfY2xhc3MpKSB7Ci0JCXByX2RlYnVnKCYjMzQ7Y291bGRuJiMzOTt0IHJlZ2lzdGVyIGRldmljZSBjbGFzc1xuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2NvdWxkbiYjMzk7dCByZWdpc3RlciBkZXZpY2UgY2xhc3NcbiYjMzQ7KTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC01NDIsNyAmIzQzOzQ5OCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGlkbGV0aW1lcl90Z19pbml0KHZvaWQpCiAJCQkJCSAgICBNS0RFVigwLCAwKSwgTlVMTCwgJiMzNDt0aW1lcnMmIzM0Oyk7CiAJZXJyID0gUFRSX0VSUihpZGxldGltZXJfdGdfZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGlkbGV0aW1lcl90Z19kZXZpY2UpKSB7Ci0JCXByX2RlYnVnKCYjMzQ7Y291bGRuJiMzOTt0IHJlZ2lzdGVyIHN5c3RlbSBkZXZpY2VcbiYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtjb3VsZG4mIzM5O3QgcmVnaXN0ZXIgc3lzdGVtIGRldmljZVxuJiMzNDspOwogCQlnb3RvIG91dF9jbGFzczsKIAl9CiAKQEAgLTU1MSw3ICYjNDM7NTA3LDcgQEAgc3RhdGljIGludCBfX2luaXQgaWRsZXRpbWVyX3RnX2luaXQodm9pZCkKIAllcnIgPSB4dF9yZWdpc3Rlcl90YXJnZXRzKGlkbGV0aW1lcl90ZywgQVJSQVlfU0laRShpZGxldGltZXJfdGcpKTsKIAogCWlmIChlcnIgJmx0OyAwKSB7Ci0JCXByX2RlYnVnKCYjMzQ7Y291bGRuJiMzOTt0IHJlZ2lzdGVyIHh0IHRhcmdldFxuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2NvdWxkbiYjMzk7dCByZWdpc3RlciB4dCB0YXJnZXRcbiYjMzQ7KTsKIAkJZ290byBvdXRfZGV2OwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9MT0cuYyBiL25ldC9uZXRmaWx0ZXIveHRfTE9HLmMKaW5kZXggZjM5MjQ0ZjljMGVkOS4uZGUzZjE3Njc5MmEwNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9MT0cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X0xPRy5jCkBAIC01MCwxMiAmIzQzOzUwLDEyIEBAIHN0YXRpYyBpbnQgbG9nX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChsb2dpbmZvLSZndDtsZXZlbCAmZ3Q7PSA4KSB7Ci0JCXByX2RlYnVnKCYjMzQ7bGV2ZWwgJXUgJmd0Oz0gOFxuJiMzNDssIGxvZ2luZm8tJmd0O2xldmVsKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtsZXZlbCAldSAmZ3Q7PSA4XG4mIzM0OywgbG9naW5mby0mZ3Q7bGV2ZWwpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAobG9naW5mby0mZ3Q7cHJlZml4W3NpemVvZihsb2dpbmZvLSZndDtwcmVmaXgpLTFdICE9ICYjMzk7XDAmIzM5OykgewotCQlwcl9kZWJ1ZygmIzM0O3ByZWZpeCBpcyBub3QgbnVsbC10ZXJtaW5hdGVkXG4mIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7cHJlZml4IGlzIG5vdCBudWxsLXRlcm1pbmF0ZWRcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuYyBiL25ldC9uZXRmaWx0ZXIveHRfTUFTUVVFUkFERS5jCmluZGV4IGVhZTA1YzE3ODMzNjcuLmNlYTQ4OGNlYzU0NDUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTUFTUVVFUkFERS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfTUFTUVVFUkFERS5jCkBAIC0yMSwxMSAmIzQzOzIxLDExIEBAIHN0YXRpYyBpbnQgbWFzcXVlcmFkZV90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcikKIAljb25zdCBzdHJ1Y3QgbmZfbmF0X2lwdjRfbXVsdGlfcmFuZ2VfY29tcGF0ICptciA9IHBhci0mZ3Q7dGFyZ2luZm87CiAKIAlpZiAobXItJmd0O3JhbmdlWzBdLmZsYWdzICZhbXA7IE5GX05BVF9SQU5HRV9NQVBfSVBTKSB7Ci0JCXByX2RlYnVnKCYjMzQ7YmFkIE1BUF9JUFMuXG4mIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7YmFkIE1BUF9JUFMuXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAobXItJmd0O3Jhbmdlc2l6ZSAhPSAxKSB7Ci0JCXByX2RlYnVnKCYjMzQ7YmFkIHJhbmdlc2l6ZSAldVxuJiMzNDssIG1yLSZndDtyYW5nZXNpemUpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2JhZCByYW5nZXNpemUgJXVcbiYjMzQ7LCBtci0mZ3Q7cmFuZ2VzaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiBuZl9jdF9uZXRuc19nZXQocGFyLSZndDtuZXQsIHBhci0mZ3Q7ZmFtaWx5KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfTkVUTUFQLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jCmluZGV4IGNiMmVlODBkODRmYTguLjhjODZkOWE0MzM3M2EgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTkVUTUFQLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9ORVRNQVAuYwpAQCAtMTA2LDExICYjNDM7MTA2LDExIEBAIHN0YXRpYyBpbnQgbmV0bWFwX3RnNF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcikKIAljb25zdCBzdHJ1Y3QgbmZfbmF0X2lwdjRfbXVsdGlfcmFuZ2VfY29tcGF0ICptciA9IHBhci0mZ3Q7dGFyZ2luZm87CiAKIAlpZiAoIShtci0mZ3Q7cmFuZ2VbMF0uZmxhZ3MgJmFtcDsgTkZfTkFUX1JBTkdFX01BUF9JUFMpKSB7Ci0JCXByX2RlYnVnKCYjMzQ7YmFkIE1BUF9JUFMuXG4mIzM0Oyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7YmFkIE1BUF9JUFMuXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAobXItJmd0O3Jhbmdlc2l6ZSAhPSAxKSB7Ci0JCXByX2RlYnVnKCYjMzQ7YmFkIHJhbmdlc2l6ZSAldS5cbiYjMzQ7LCBtci0mZ3Q7cmFuZ2VzaXplKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtiYWQgcmFuZ2VzaXplICV1LlxuJiMzNDssIG1yLSZndDtyYW5nZXNpemUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIG5mX2N0X25ldG5zX2dldChwYXItJmd0O25ldCwgcGFyLSZndDtmYW1pbHkpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jIGIvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jCmluZGV4IGZmNjZiNTZhM2Y5N2QuLjI3YmMwNTQ1YzRmNzQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfUkVESVJFQ1QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X1JFRElSRUNULmMKQEAgLTUxLDExICYjNDM7NTEsMTEgQEAgc3RhdGljIGludCByZWRpcmVjdF90ZzRfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCiAJY29uc3Qgc3RydWN0IG5mX25hdF9pcHY0X211bHRpX3JhbmdlX2NvbXBhdCAqbXIgPSBwYXItJmd0O3RhcmdpbmZvOwogCiAJaWYgKG1yLSZndDtyYW5nZVswXS5mbGFncyAmYW1wOyBORl9OQVRfUkFOR0VfTUFQX0lQUykgewotCQlwcl9kZWJ1ZygmIzM0O2JhZCBNQVBfSVBTLlxuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O2JhZCBNQVBfSVBTLlxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKG1yLSZndDtyYW5nZXNpemUgIT0gMSkgewotCQlwcl9kZWJ1ZygmIzM0O2JhZCByYW5nZXNpemUgJXUuXG4mIzM0OywgbXItJmd0O3Jhbmdlc2l6ZSk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKCYjMzQ7YmFkIHJhbmdlc2l6ZSAldS5cbiYjMzQ7LCBtci0mZ3Q7cmFuZ2VzaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiBuZl9jdF9uZXRuc19nZXQocGFyLSZndDtuZXQsIHBhci0mZ3Q7ZmFtaWx5KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jIGIvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmMKaW5kZXggNWJjNWVhNTA1ZWI5ZS4uMzhlOGU0MTBiNGU4MSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmMKQEAgLTc5LDggJiM0Mzs3OSw3IEBAIHNlY21hcmtfdGdfY2hlY2soY29uc3QgY2hhciAqdGFibGUsIHN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9pbmZvX3YxICppbmZvKQogCiAJaWYgKHN0cmNtcCh0YWJsZSwgJiMzNDttYW5nbGUmIzM0OykgIT0gMCAmYW1wOyZhbXA7CiAJICAgIHN0cmNtcCh0YWJsZSwgJiMzNDtzZWN1cml0eSYjMzQ7KSAhPSAwKSB7Ci0JCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDtvbmx5IHZhbGlkIGluIFwmIzM5O21hbmdsZVwmIzM5OyBvciBcJiMzOTtzZWN1cml0eVwmIzM5OyB0YWJsZSwgbm90IFwmIzM5OyVzXCYjMzk7XG4mIzM0OywKLQkJCQkgICAgdGFibGUpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O29ubHkgdmFsaWQgaW4gXCYjMzk7bWFuZ2xlXCYjMzk7IG9yIFwmIzM5O3NlY3VyaXR5XCYjMzk7IHRhYmxlXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jZ3JvdXAuYyBiL25ldC9uZXRmaWx0ZXIveHRfY2dyb3VwLmMKaW5kZXggNDNkMmFlMmJlNjI4ZC4uYWMxYjdlNzFjZDdmNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nncm91cC5jCkBAIC0zMyw3ICYjNDM7MzMsNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192MChjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHsKLQkJcHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZChORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQ5LDcgJiM0Mzs0OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YxKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghaW5mby0mZ3Q7aGFzX3BhdGggJmFtcDsmYW1wOyAhaW5mby0mZ3Q7aGFzX2NsYXNzaWQpIHsKLQkJcHJfaW5mbygmIzM0O3h0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxuJiMzNDspOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3h0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxuJiMzNDspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTU5LDcgJiM0Mzs1OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YxKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogCX0KIAogCWlmIChpbmZvLSZndDtoYXNfY2xhc3NpZCAmYW1wOyZhbXA7ICFJU19FTkFCTEVEKENPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQpKSB7Ci0JCXByX2luZm8oTkVUX0NMU19DTEFTU0lEX0lOVkFMSURfTVNHKTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoTkVUX0NMU19DTEFTU0lEX0lOVkFMSURfTVNHKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC04OSw3ICYjNDM7ODksNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192Mihjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIWluZm8tJmd0O2hhc19wYXRoICZhbXA7JmFtcDsgIWluZm8tJmd0O2hhc19jbGFzc2lkKSB7Ci0JCXByX2luZm8oJiMzNDt4dF9jZ3JvdXA6IG5vIHBhdGggb3IgY2xhc3NpZCBzcGVjaWZpZWRcbiYjMzQ7KTsKJiM0MzsJCXByX2luZm9fcmF0ZWxpbWl0ZWQoJiMzNDt4dF9jZ3JvdXA6IG5vIHBhdGggb3IgY2xhc3NpZCBzcGVjaWZpZWRcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC05OSw3ICYjNDM7OTksNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192Mihjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIAl9CiAKIAlpZiAoaW5mby0mZ3Q7aGFzX2NsYXNzaWQgJmFtcDsmYW1wOyAhSVNfRU5BQkxFRChDT05GSUdfQ0dST1VQX05FVF9DTEFTU0lEKSkgewotCQlwcl9pbmZvKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7CiYjNDM7CQlwcl9pbmZvX3JhdGVsaW1pdGVkKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9lc3AuYyBiL25ldC9uZXRmaWx0ZXIveHRfZXNwLmMKaW5kZXggMmExYzBhZDBmZjA3OS4uNjhmZDc1ODg0MjY4YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9lc3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jCkBAIC0yNSwxMiAmIzQzOzI1LDcgQEAgTU9EVUxFX0FMSUFTKCYjMzQ7aXA2dF9lc3AmIzM0Oyk7CiBzdGF0aWMgaW5saW5lIGJvb2wKIHNwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBib29sIGludmVydCkKIHsKLQlib29sIHI7Ci0JcHJfZGVidWcoJiMzNDtzcGlfbWF0Y2g6JWMgMHgleCAmbHQ7PSAweCV4ICZsdDs9IDB4JXhcbiYjMzQ7LAotCQkgaW52ZXJ0ID8gJiMzOTshJiMzOTsgOiAmIzM5OyAmIzM5OywgbWluLCBzcGksIG1heCk7Ci0JciA9IChzcGkgJmd0Oz0gbWluICZhbXA7JmFtcDsgc3BpICZsdDs9IG1heCkgXiBpbnZlcnQ7Ci0JcHJfZGVidWcoJiMzNDsgcmVzdWx0ICVzXG4mIzM0OywgciA/ICYjMzQ7UEFTUyYjMzQ7IDogJiMzNDtGQUlMRUQmIzM0Oyk7Ci0JcmV0dXJuIHI7CiYjNDM7CXJldHVybiAoc3BpICZndDs9IG1pbiAmYW1wOyZhbXA7IHNwaSAmbHQ7PSBtYXgpIF4gaW52ZXJ0OwogfQogCiBzdGF0aWMgYm9vbCBlc3BfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQpAQCAtNDgsNyAmIzQzOzQzLDYgQEAgc3RhdGljIGJvb2wgZXNwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJLyogV2UmIzM5O3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlCiAJCSAqIGNhbiYjMzk7dC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuCiAJCSAqLwotCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGV2aWwgRVNQIHRpbnlncmFtLlxuJiMzNDspOwogCQlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtNjIsNyAmIzQzOzU2LDcgQEAgc3RhdGljIGludCBlc3BfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiAJY29uc3Qgc3RydWN0IHh0X2VzcCAqZXNwaW5mbyA9IHBhci0mZ3Q7bWF0Y2hpbmZvOwogCiAJaWYgKGVzcGluZm8tJmd0O2ludmZsYWdzICZhbXA7IH5YVF9FU1BfSU5WX01BU0spIHsKLQkJcHJfZGVidWcoJiMzNDt1bmtub3duIGZsYWdzICVYXG4mIzM0OywgZXNwaW5mby0mZ3Q7aW52ZmxhZ3MpOwomIzQzOwkJcHJfaW5mb19yYXRlbGltaXRlZCgmIzM0O3Vua25vd24gZmxhZ3MgJVhcbiYjMzQ7LCBlc3BpbmZvLSZndDtpbnZmbGFncyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcGNvbXAuYyBiL25ldC9uZXRmaWx0ZXIveHRfaXBjb21wLmMKaW5kZXggNDcyZGE2MzlhMzJlMi4uMzI5OWMxZWE2MGY5ZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcGNvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwY29tcC5jCkBAIC0yOSwxMiAmIzQzOzI5LDcgQEAgTU9EVUxFX0FMSUFTKCYjMzQ7aXA2dF9pcGNvbXAmIzM0Oyk7CiBzdGF0aWMgaW5saW5lIGJvb2wKIHNwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBib29sIGludmVydCkKIHsKLQlib29sIHI7Ci0JcHJfZGVidWcoJiMzNDtzcGlfbWF0Y2g6JWMgMHgleCAmbHQ7PSAweCV4ICZsdDs9IDB4JXhcbiYjMzQ7LAotCQkgaW52ZXJ0ID8gJiMzOTshJiMzOTsgOiAmIzM5OyAmIzM5OywgbWluLCBzcGksIG1heCk7Ci0JciA9IChzcGkgJmd0Oz0gbWluICZhbXA7JmFtcDsgc3BpICZsdDs9IG1heCkgXiBpbnZlcnQ7Ci0JcHJfZGVidWcoJiMzNDsgcmVzdWx0ICVzXG4mIzM0OywgciA/ICYjMzQ7UEFTUyYjMzQ7IDogJiMzNDtGQUlMRUQmIzM0Oyk7Ci0JcmV0dXJuIHI7CiYjNDM7CXJldHVybiAoc3BpICZndDs9IG1pbiAmYW1wOyZhbXA7IHNwaSAmbHQ7PSBtYXgpIF4gaW52ZXJ0OwogfQogCiBzdGF0aWMgYm9vbCBjb21wX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKQEAgLTUyLDcgJiM0Mzs0Nyw2IEBAIHN0YXRpYyBib29sIGNvbXBfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCQkvKiBXZSYjMzk7dmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2UKIAkJICogY2FuJiMzOTt0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4KIAkJICovCi0JCXByX2RlYnVnKCYjMzQ7RHJvcHBpbmcgZXZpbCBJUENvbXAgdGlueWdyYW0uXG4mIzM0Oyk7CiAJCXBhci0mZ3Q7aG90ZHJvcCA9IHRydWU7CiAJCXJldHVybiBmYWxzZTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYyBiL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jCmluZGV4IDBjOWUwMTRlMzBiNDkuLmJmNjExNDFmYjc4NTAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jCkBAIC0yNCwyNyAmIzQzOzI0LDE1IEBAIGlwcmFuZ2VfbXQ0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJbSAgPSBudG9obChpcGgtJmd0O3NhZGRyKSAmbHQ7IG50b2hsKGluZm8tJmd0O3NyY19taW4uaXApOwogCQltIHw9IG50b2hsKGlwaC0mZ3Q7c2FkZHIpICZndDsgbnRvaGwoaW5mby0mZ3Q7c3JjX21heC5pcCk7CiAJCW0gXj0gISEoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVBSQU5HRV9TUkNfSU5WKTsKLQkJaWYgKG0pIHsKLQkJCXByX2RlYnVnKCYjMzQ7c3JjIElQICVwSTQgTk9UIGluIHJhbmdlICVzJXBJNC0lcEk0XG4mIzM0OywKLQkJCSAgICAgICAgICZhbXA7aXBoLSZndDtzYWRkciwKLQkJCSAgICAgICAgIChpbmZvLSZndDtmbGFncyAmYW1wOyBJUFJBTkdFX1NSQ19JTlYpID8gJiMzNDsoSU5WKSAmIzM0OyA6ICYjMzQ7JiMzNDssCi0JCQkgICAgICAgICAmYW1wO2luZm8tJmd0O3NyY19taW4uaXAsCi0JCQkgICAgICAgICAmYW1wO2luZm8tJmd0O3NyY19tYXguaXApOwomIzQzOwkJaWYgKG0pCiAJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KIAl9CiAJaWYgKGluZm8tJmd0O2ZsYWdzICZhbXA7IElQUkFOR0VfRFNUKSB7CiAJCW0gID0gbnRvaGwoaXBoLSZndDtkYWRkcikgJmx0OyBudG9obChpbmZvLSZndDtkc3RfbWluLmlwKTsKIAkJbSB8PSBudG9obChpcGgtJmd0O2RhZGRyKSAmZ3Q7IG50b2hsKGluZm8tJmd0O2RzdF9tYXguaXApOwogCQltIF49ICEhKGluZm8tJmd0O2ZsYWdzICZhbXA7IElQUkFOR0VfRFNUX0lOVik7Ci0JCWlmIChtKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O2RzdCBJUCAlcEk0IE5PVCBpbiByYW5nZSAlcyVwSTQtJXBJNFxuJiMzNDssCi0JCQkgICAgICAgICAmYW1wO2lwaC0mZ3Q7ZGFkZHIsCi0JCQkgICAgICAgICAoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVBSQU5HRV9EU1RfSU5WKSA/ICYjMzQ7KElOVikgJiMzNDsgOiAmIzM0OyYjMzQ7LAotCQkJICAgICAgICAgJmFtcDtpbmZvLSZndDtkc3RfbWluLmlwLAotCQkJICAgICAgICAgJmFtcDtpbmZvLSZndDtkc3RfbWF4LmlwKTsKJiM0MzsJCWlmIChtKQogCQkJcmV0dXJuIGZhbHNlOwotCQl9CiAJfQogCXJldHVybiB0cnVlOwogfQpAQCAtNzMsMjcgJiM0Mzs2MSwxNSBAQCBpcHJhbmdlX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJCW0gID0gaXByYW5nZV9pcHY2X2x0KCZhbXA7aXBoLSZndDtzYWRkciwgJmFtcDtpbmZvLSZndDtzcmNfbWluLmluNik7CiAJCW0gfD0gaXByYW5nZV9pcHY2X2x0KCZhbXA7aW5mby0mZ3Q7c3JjX21heC5pbjYsICZhbXA7aXBoLSZndDtzYWRkcik7CiAJCW0gXj0gISEoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVBSQU5HRV9TUkNfSU5WKTsKLQkJaWYgKG0pIHsKLQkJCXByX2RlYnVnKCYjMzQ7c3JjIElQICVwSTYgTk9UIGluIHJhbmdlICVzJXBJNi0lcEk2XG4mIzM0OywKLQkJCQkgJmFtcDtpcGgtJmd0O3NhZGRyLAotCQkJCSAoaW5mby0mZ3Q7ZmxhZ3MgJmFtcDsgSVBSQU5HRV9TUkNfSU5WKSA/ICYjMzQ7KElOVikgJiMzNDsgOiAmIzM0OyYjMzQ7LAotCQkJCSAmYW1wO2luZm8tJmd0O3NyY19taW4uaW42LAotCQkJCSAmYW1wO2luZm8tJmd0O3NyY19tYXguaW42KTsKJiM0MzsJCWlmIChtKQogCQkJcmV0dXJuIGZhbHNlOwotCQl9CiAJfQogCWlmIChpbmZvLSZndDtmbGFncyAmYW1wOyBJUFJBTkdFX0RTVCkgewogCQltICA9IGlwcmFuZ2VfaXB2Nl9sdCgmYW1wO2lwaC0mZ3Q7ZGFkZHIsICZhbXA7aW5mby0mZ3Q7ZHN0X21pbi5pbjYpOwogCQltIHw9IGlwcmFuZ2VfaXB2Nl9sdCgmYW1wO2luZm8tJmd0O2RzdF9tYXguaW42LCAmYW1wO2lwaC0mZ3Q7ZGFkZHIpOwogCQltIF49ICEhKGluZm8tJmd0O2ZsYWdzICZhbXA7IElQUkFOR0VfRFNUX0lOVik7Ci0JCWlmIChtKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O2RzdCBJUCAlcEk2IE5PVCBpbiByYW5nZSAlcyVwSTYtJXBJNlxuJiMzNDssCi0JCQkJICZhbXA7aXBoLSZndDtkYWRkciwKLQkJCQkgKGluZm8tJmd0O2ZsYWdzICZhbXA7IElQUkFOR0VfRFNUX0lOVikgPyAmIzM0OyhJTlYpICYjMzQ7IDogJiMzNDsmIzM0OywKLQkJCQkgJmFtcDtpbmZvLSZndDtkc3RfbWluLmluNiwKLQkJCQkgJmFtcDtpbmZvLSZndDtkc3RfbWF4LmluNik7CiYjNDM7CQlpZiAobSkKIAkJCXJldHVybiBmYWxzZTsKLQkJfQogCX0KIAlyZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jIGIvbmV0L25ldGZpbHRlci94dF9pcHZzLmMKaW5kZXggMjUzYzcxY2M5YTYzNC4uZTEzYzBmZmI3M2E5YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcHZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF9pcHZzLmMKQEAgLTE0OCw3ICYjNDM7MTQ4LDYgQEAgaXB2c19tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiBvdXRfcHV0X2NwOgogCV9faXBfdnNfY29ubl9wdXQoY3ApOwogb3V0OgotCXByX2RlYnVnKCYjMzQ7bWF0Y2g9JWRcbiYjMzQ7LCBtYXRjaCk7CiAJcmV0dXJuIG1hdGNoOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jIGIvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuYwppbmRleCBhMTY5MWZmNDA1ZDNjLi5iZmY1ZjUzYTliZWZiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmMKQEAgLTM3LDcgJiM0MzszNyw2IEBAIHBvcnRzX21hdGNoX3YxKGNvbnN0IHN0cnVjdCB4dF9tdWx0aXBvcnRfdjEgKm1pbmZvLAogCQlpZiAobWluZm8tJmd0O3BmbGFnc1tpXSkgewogCQkJLyogcmFuZ2UgcG9ydCBtYXRjaGluZyAqLwogCQkJZSA9IG1pbmZvLSZndDtwb3J0c1smIzQzOyYjNDM7aV07Ci0JCQlwcl9kZWJ1ZygmIzM0O3NyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkLSVkP1xuJiMzNDssIHMsIGUpOwogCiAJCQlzd2l0Y2ggKG1pbmZvLSZndDtmbGFncykgewogCQkJY2FzZSBYVF9NVUxUSVBPUlRfU09VUkNFOgpAQCAtNTgsOCAmIzQzOzU3LDYgQEAgcG9ydHNfbWF0Y2hfdjEoY29uc3Qgc3RydWN0IHh0X211bHRpcG9ydF92MSAqbWluZm8sCiAJCQl9CiAJCX0gZWxzZSB7CiAJCQkvKiBleGFjdCBwb3J0IG1hdGNoaW5nICovCi0JCQlwcl9kZWJ1ZygmIzM0O3NyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkP1xuJiMzNDssIHMpOwotCiAJCQlzd2l0Y2ggKG1pbmZvLSZndDtmbGFncykgewogCQkJY2FzZSBYVF9NVUxUSVBPUlRfU09VUkNFOgogCQkJCWlmIChzcmMgPT0gcykKQEAgLTk3LDcgJiM0Mzs5NCw2IEBAIG11bHRpcG9ydF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJCS8qIFdlJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZQogCQkgKiBjYW4mIzM5O3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLgogCQkgKi8KLQkJcHJfZGVidWcoJiMzNDtEcm9wcGluZyBldmlsIG9mZnNldD0wIHRpbnlncmFtLlxuJiMzNDspOwogCQlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuYwppbmRleCBiNDZhNmE1MTIwNTgzLi5kMzVjMjFkOTY1MWIwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuYwpAQCAtNDgsMzAgJiM0Mzs0OCwxNyBAQCBtYXRjaF9wYWNrZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAljb25zdCBzdHJ1Y3QgeHRfc2N0cF9mbGFnX2luZm8gKmZsYWdfaW5mbyA9IGluZm8tJmd0O2ZsYWdfaW5mbzsKIAlpbnQgZmxhZ19jb3VudCA9IGluZm8tJmd0O2ZsYWdfY291bnQ7CiAKLSNpZmRlZiBERUJVRwotCWludCBpID0gMDsKLSNlbmRpZgotCiAJaWYgKGNodW5rX21hdGNoX3R5cGUgPT0gU0NUUF9DSFVOS19NQVRDSF9BTEwpCiAJCVNDVFBfQ0hVTktNQVBfQ09QWShjaHVua21hcGNvcHksIGluZm8tJmd0O2NodW5rbWFwKTsKIAogCWRvIHsKIAkJc2NoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX3NjaCksICZhbXA7X3NjaCk7CiAJCWlmIChzY2ggPT0gTlVMTCB8fCBzY2gtJmd0O2xlbmd0aCA9PSAwKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGludmFsaWQgU0NUUCBwYWNrZXQuXG4mIzM0Oyk7CiAJCQkqaG90ZHJvcCA9IHRydWU7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KLSNpZmRlZiBERUJVRwotCQlwcl9kZWJ1ZygmIzM0O0NodW5rIG51bTogJWRcdG9mZnNldDogJWRcdHR5cGU6ICVkXHRsZW5ndGg6ICVkJiMzNDsKLQkJCSAmIzM0O1x0ZmxhZ3M6ICV4XG4mIzM0OywKLQkJCSAmIzQzOyYjNDM7aSwgb2Zmc2V0LCBzY2gtJmd0O3R5cGUsIGh0b25zKHNjaC0mZ3Q7bGVuZ3RoKSwKLQkJCSBzY2gtJmd0O2ZsYWdzKTsKLSNlbmRpZgogCQlvZmZzZXQgJiM0Mzs9IFNDVFBfUEFENChudG9ocyhzY2gtJmd0O2xlbmd0aCkpOwogCi0JCXByX2RlYnVnKCYjMzQ7c2tiLSZndDtsZW46ICVkXHRvZmZzZXQ6ICVkXG4mIzM0Oywgc2tiLSZndDtsZW4sIG9mZnNldCk7Ci0KIAkJaWYgKFNDVFBfQ0hVTktNQVBfSVNfU0VUKGluZm8tJmd0O2NodW5rbWFwLCBzY2gtJmd0O3R5cGUpKSB7CiAJCQlzd2l0Y2ggKGNodW5rX21hdGNoX3R5cGUpIHsKIAkJCWNhc2UgU0NUUF9DSFVOS19NQVRDSF9BTlk6CkBAIC0xMjEsMTggJiM0MzsxMDgsMTQgQEAgc2N0cF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCiAJY29uc3Qgc3RydWN0IHNjdHBoZHIgKnNoOwogCXN0cnVjdCBzY3RwaGRyIF9zaDsKIAotCWlmIChwYXItJmd0O2ZyYWdvZmYgIT0gMCkgewotCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIG5vbi1maXJzdCBmcmFnbWVudC4uIEZJWE1FXG4mIzM0Oyk7CiYjNDM7CWlmIChwYXItJmd0O2ZyYWdvZmYgIT0gMCkKIAkJcmV0dXJuIGZhbHNlOwotCX0KIAogCXNoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcGFyLSZndDt0aG9mZiwgc2l6ZW9mKF9zaCksICZhbXA7X3NoKTsKIAlpZiAoc2ggPT0gTlVMTCkgewotCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGV2aWwgVENQIG9mZnNldD0wIHRpbnlncmFtLlxuJiMzNDspOwogCQlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwogCQlyZXR1cm4gZmFsc2U7CiAJfQotCXByX2RlYnVnKCYjMzQ7c3B0OiAlZFx0ZHB0OiAlZFxuJiMzNDssIG50b2hzKHNoLSZndDtzb3VyY2UpLCBudG9ocyhzaC0mZ3Q7ZGVzdCkpOwogCiAJcmV0dXJuICBTQ0NIRUNLKG50b2hzKHNoLSZndDtzb3VyY2UpICZndDs9IGluZm8tJmd0O3NwdHNbMF0KIAkJCSZhbXA7JmFtcDsgbnRvaHMoc2gtJmd0O3NvdXJjZSkgJmx0Oz0gaW5mby0mZ3Q7c3B0c1sxXSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3RjcHVkcC5jCmluZGV4IGY3NmNmMThmMWEyNDQuLjcwNjA4YjhkMDZhYjIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuYwpAQCAtNDQsOCAmIzQzOzQ0LDYgQEAgdGNwX2ZpbmRfb3B0aW9uKHVfaW50OF90IG9wdGlvbiwKIAl1X2ludDhfdCBfb3B0WzYwIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpXTsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCXByX2RlYnVnKCYjMzQ7ZmluZGluZyBvcHRpb25cbiYjMzQ7KTsKLQogCWlmICghb3B0bGVuKQogCQlyZXR1cm4gaW52ZXJ0OwogCkBAIC04MSwxMCAmIzQzOzc5LDggQEAgc3RhdGljIGJvb2wgdGNwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKIAkJICAgY2F1c2VzIHRoaXMuIEl0cyBhIGNyYWNrZXIgdHJ5aW5nIHRvIGJyZWFrIGluIGJ5IGRvaW5nIGEKIAkJICAgZmxhZyBvdmVyd3JpdGUgdG8gcGFzcyB0aGUgZGlyZWN0aW9uIGNoZWNrcy4KIAkJKi8KLQkJaWYgKHBhci0mZ3Q7ZnJhZ29mZiA9PSAxKSB7Ci0JCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGV2aWwgVENQIG9mZnNldD0xIGZyYWcuXG4mIzM0Oyk7CiYjNDM7CQlpZiAocGFyLSZndDtmcmFnb2ZmID09IDEpCiAJCQlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwotCQl9CiAJCS8qIE11c3Qgbm90IGJlIGEgZnJhZ21lbnQuICovCiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC05Myw3ICYjNDM7ODksNiBAQCBzdGF0aWMgYm9vbCB0Y3BfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCWlmICh0aCA9PSBOVUxMKSB7CiAJCS8qIFdlJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZQogCQkgICBjYW4mIzM5O3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLiAqLwotCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGV2aWwgVENQIG9mZnNldD0wIHRpbnlncmFtLlxuJiMzNDspOwogCQlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtMTQ1LDcgJiM0MzsxNDAsNiBAQCBzdGF0aWMgYm9vbCB1ZHBfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQogCWlmICh1aCA9PSBOVUxMKSB7CiAJCS8qIFdlJiMzOTt2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZQogCQkgICBjYW4mIzM5O3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLiAqLwotCQlwcl9kZWJ1ZygmIzM0O0Ryb3BwaW5nIGV2aWwgVURQIHRpbnlncmFtLlxuJiMzNDspOwogCQlwYXItJmd0O2hvdGRyb3AgPSB0cnVlOwogCQlyZXR1cm4gZmFsc2U7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MTgKCQkJCQkJCW91dHB1dDogMjIyCgkJCQkJCQl0aG91Z2h0czogMzA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBOZXRmaWx0ZXIgUGF0Y2ggU2VyaWVzOiBQcmltYXJpbHkgTG9nZ2luZyBDbGVhbnVwIHdpdGggYSBHbGl0Y2gqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgZGVhbC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgdGhlIG1haW4gdGhpbmcgaXQmIzM5O3MgZG9pbmcgaXMgcmVtb3ZpbmcgYSBidW5jaCBvZiBgcHJfZGVidWdgIGNhbGxzIGFuZCBjb252ZXJ0aW5nIHNvbWUgb2YgdGhlbSB0byBgcHJfaW5mb19yYXRlbGltaXRlZGAgY2FsbHMgYWNyb3NzIGEgYnVuY2ggb2YgbmV0ZmlsdGVyIG1vZHVsZXM6IGBpcHRfYWguY2AsIGBpcHRfcnBmaWx0ZXIuY2AsIGBpcDZ0X2FoLmNgLCBldGMuIEJhc2ljYWxseSwgaXQmIzM5O3MgYSBjb2RlIGNsZWFudXAsIHdoaWNoIGlzIGZpbmUuIE5vdGhpbmcgdG9vIGV4Y2l0aW5nLCBqdXN0IG1ha2luZyB0aGluZ3MgYSBiaXQgbGVzcyBjaGF0dHkuCgpUaGVuIEkgaGl0IHRoaXMgb2RkIGNoYW5nZSBpbiBgeHRfQ1QuY2AuIFRoZXkmIzM5O3ZlIG1lc3NlZCB3aXRoIHRoZSBjb2RlIHRoYXQgaGFuZGxlcyB0aGUgYGhlbHBlcmAgc3RyaW5nOgoKYGBgYwotCWlmIChpbmZvLSZndDtoZWxwZXJbMF0pIHsKJiM0MzsJaWYgKGluZm8tJmd0O2hlbHBlclswXSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpICZsdDsgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKYGBgCgpJIHNlZSB0aGF0LiBBZGRpbmcgYHN0cm5sZW5gIGNvbmRpdGlvbiAqYmVmb3JlKiB0aGUgb3JpZ2luYWwgY29uZGl0aW9uLiBBbmQgdGhlbiB0aGVyZSYjMzk7cyBtb3JlIGFmdGVyOgoKYGBgYwoJCWlmIChzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpID09IHNpemVvZihpbmZvLSZndDtoZWxwZXIpKSB7CgkJCXJldCA9IC1FTkFNRVRPT0xPTkc7CgkJCWdvdG8gZXJyMzsKCQl9CmBgYAoKV2FpdCBhIHNlY29uZC4uLiBJZiB0aGF0IGBzdHJubGVuYCBpcyAqbGVzcyogdGhhbiBgc2l6ZW9mYCwgdGhlbiB0aGUgaW5uZXIgYGlmYCBjb25kaXRpb24gd2lsbCAqbmV2ZXIqIGJlIHRydWUsIHJpZ2h0PyBCZWNhdXNlIGlmIGl0JiMzOTtzIGxlc3MsIHRoZSBzdHJpbmcgaXMgbnVsbC10ZXJtaW5hdGVkLCBzbyB0aGUgbGVuZ3RoIGNhbiYjMzk7dCBiZSBlcXVhbCB0byB0aGUgYnVmZmVyIHNpemUuIFRoYXQgaW5uZXIgYGlmYCBpcyBlc3NlbnRpYWxseSBkZWFkIGNvZGUgbm93LiBTZWVtcyBsaWtlIGEgbG9naWMgZXJyb3IuIE9yaWdpbmFsIGNvZGUgc2hvdWxkJiMzOTt2ZSByZXR1cm5lZCBgLUVOQU1FVE9PTE9OR2AgaWYgdGhlIHN0cmluZyB3YXNuJiMzOTt0IG51bGwtdGVybWluYXRlZC4gQnV0IG5vdywgd2l0aCB0aGUgYWRkZWQgY2hlY2ssIHRoYXQgY2FzZSBqdXN0ICpnZXRzIHNraXBwZWQqLiBJcyB0aGVyZSBhIEtNU0FOIGlzc3VlIGhlcmU/CgpJIG5lZWQgdG8gY29uZmlybSB0aGUgY29kZToKYGBgYwotCWlmIChpbmZvLSZndDtoZWxwZXJbMF0pIHsKJiM0MzsJaWYgKGluZm8tJmd0O2hlbHBlclswXSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpICZsdDsgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKIAkJaWYgKHN0cm5sZW4oaW5mby0mZ3Q7aGVscGVyLCBzaXplb2YoaW5mby0mZ3Q7aGVscGVyKSkgPT0gc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKIAkJCXJldCA9IC1FTkFNRVRPT0xPTkc7CiAJCQlnb3RvIGVycjM7CiAJCX0KYGBgClllYWghIElmIHRoZSBzdHJpbmcgaXMgbm90IG51bGwtdGVybWluYXRlZCwgaXQganVzdCBza2lwcyB0aGUgd2hvbGUgYmxvY2suIEl0IGRvZXNuJiMzOTt0IHJldHVybiB0aGUgYC1FTkFNRVRPT0xPTkdgIGFzIGl0IHNob3VsZC4gVGhpcyBzZWVtcyBsaWtlIGEgKmJ1ZyogaW50cm9kdWNlZCBieSB0aGUgcGF0Y2gsIG5vdCBhIGZpeC4gSXQgc2tpcHMgdGhlIGVycm9yIGNoZWNraW5nIGFuZCB0aGUgaGVscGVyIGxvYWRpbmcgd2hlbiB0aGUgc3RyaW5nIGlzbiYjMzk7dCBudWxsLXRlcm1pbmF0ZWQuCgpPa2F5LCBpcyB0aGVyZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGhlcmU/IExldCBtZSBjaGVjayB0aGUgZXhhY3QgZGlmZjoKYGBgYwotCWlmIChpbmZvLSZndDtoZWxwZXJbMF0pIHsKJiM0MzsJaWYgKGluZm8tJmd0O2hlbHBlclswXSAmYW1wOyZhbXA7CiYjNDM7CSAgICBzdHJubGVuKGluZm8tJmd0O2hlbHBlciwgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpICZsdDsgc2l6ZW9mKGluZm8tJmd0O2hlbHBlcikpIHsKYGBgCgpObywgaXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIGl0IGJlY2F1c2UgaXQmIzM5O3Mgc3RpbGwgY2hlY2tpbmcgdGhlIGZpcnN0IGNoYXJhY3RlciBgaW5mby0mZ3Q7aGVscGVyWzBdYC4gU28gaWYgdGhlIHN0cmluZyBpc24mIzM5O3QgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgdXNlciYjMzk7cyBzaWRlLCBgc3RybmxlbmAgd2lsbCBzdGlsbCByZWFkIGl0IHRvIGRldGVybWluZSB0aGUgbGVuZ3RoLiBCdXQuLi4gdGhlIG1lbW9yeSBmb3IgYGluZm8tJmd0O2hlbHBlcmAgY29tZXMgZnJvbSBgcGFyLSZndDt0YXJnaW5mb2AsIHJpZ2h0PyBUaGF0JiMzOTtzIGZyb20gdXNlcnNwYWNlLiBJZiBgaW5mby0mZ3Q7aGVscGVyYCBpc24mIzM5O3QgbnVsbC10ZXJtaW5hdGVkLCBgc3RybmxlbmAgbWlnaHQgcmVhZCBpdC4KCklzIGBpbmZvYCAqZnVsbHkqIGluaXRpYWxpemVkIGZyb20gdXNlcnNwYWNlPyBMZXQgbWUgZG91YmxlLWNoZWNrLiBUaGUgY29kZSB1c2VzIGBjb3B5X2Zyb21fdXNlcmAuIFNvLCB5ZXMhIEJlY2F1c2UgdXNlcnNwYWNlIGlzIHdyaXRpbmcgdG8gdGhlIGtlcm5lbCwgc28gS01TQU4gc2hvdWxkIG5vdCBjb21wbGFpbiwgYXMgaXQgbWFya3MgYWxsIHRoZSBtZW1vcnkgY29waWVkIGZyb20gdXNlcnNwYWNlIGFzIGluaXRpYWxpemVkISBTbywgaXQgaW5pdGlhbGl6ZXMgaXQgYXMgZmFyIGFzIHRoZSBrZXJuZWwgaXMgY29uY2VybmVkLgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIG90aGVyIGNoYW5nZXMuLi4gcmVtb3ZpbmcgYHByX2RlYnVnYC4gTm90aGluZyB0byBzZWUgdGhlcmUuCgpTbywgaW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBtb3N0bHkgYSBjbGVhbnVwLCByZW1vdmluZyBgcHJfZGVidWdgIGFuZCBjaGFuZ2luZyBzb21lIHRvIGBwcl9pbmZvX3JhdGVsaW1pdGVkYC4gVGhlIGB4dF9DVC5jYCBjaGFuZ2UgKmRvZXMqIGhhdmUgYSBsb2dpYyBlcnJvciwgaW4gdGhhdCBpdCBza2lwcyBlcnJvciBjaGVja2luZy4gSXQgbWFrZXMgdGhlIGlubmVyIGNoZWNrIGRlYWQgY29kZSBhbmQgY2hhbmdlcyBiZWhhdmlvciBmb3Igbm9uLW51bGwtdGVybWluYXRlZCBzdHJpbmdzLiBCdXQgaXQgKmRvZXNuJiMzOTt0KiBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBgaW5mby0mZ3Q7aGVscGVyYCAqaXMqIGluaXRpYWxpemVkIGJlY2F1c2UgaXQgY29tZXMgZnJvbSBgY29weV9mcm9tX3VzZXJgLiBLTVNBTiBpcyBub3QgYW4gaXNzdWUgaGVyZS4gTm8gbmVlZCBmb3IgdGhhdCBmdXp6aW5nLiBUaGUgcGF0Y2ggaGFzIGEgbG9naWMgZmxhdywgdGhhdCYjMzk7cyBhbGwuIEFuZCBpdCYjMzk7cyBwcm9iYWJseSBmdW5jdGlvbmFsLCBub3QgYSBzZWN1cml0eSBpc3N1ZQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgcmVtb3ZlcyBgcHJfZGVidWdgIHN0YXRlbWVudHMgYW5kIGNvbnZlcnRzIHNvbWUgdG8gYHByX2luZm9fcmF0ZWxpbWl0ZWRgIGFjcm9zcyB2YXJpb3VzIG5ldGZpbHRlciBtb2R1bGVzLiBUaGVyZSBpcyBhbHNvIGEgbG9naWNhbCBjaGFuZ2UgaW4gYHh0X0NULmNgIHJlZ2FyZGluZyB0aGUgdmFsaWRhdGlvbiBvZiBgaW5mby1cdTAwM2VoZWxwZXJgIGFuZCBgaW5mby1cdTAwM2V0aW1lb3V0YCBzdHJpbmdzLCB3aGljaCBpbnRyb2R1Y2VzIGRlYWQgY29kZSBhbmQgYWx0ZXJzIHRoZSBlcnJvciBoYW5kbGluZyBmb3Igbm9uLW51bGwtdGVybWluYXRlZCBzdHJpbmdzLiBIb3dldmVyLCB0aGUgYGluZm9gIHN0cnVjdHVyZSAoYHBhci1cdTAwM2V0YXJnaW5mb2ApIGlzIHBvcHVsYXRlZCB2aWEgYGNvcHlfZnJvbV91c2VyYCB3aXRoIGRhdGEgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUga2VybmVsJiMzOTtzIHBlcnNwZWN0aXZlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHRoZSBsb2dpYyBmbGF3IGluIGB4dF9DVC5jYCkgYXJlIGZ1bmN0aW9uYWwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHByaW1hcmlseSByZW1vdmVzIGBwcl9kZWJ1Z2Agc3RhdGVtZW50cyBhbmQgY29udmVydHMgc29tZSB0byBgcHJfaW5mb19yYXRlbGltaXRlZGAgYWNyb3NzIHZhcmlvdXMgbmV0ZmlsdGVyIG1vZHVsZXMuIFRoZXJlIGlzIGFsc28gYSBsb2dpY2FsIGNoYW5nZSBpbiBgeHRfQ1QuY2AgcmVnYXJkaW5nIHRoZSB2YWxpZGF0aW9uIG9mIGBpbmZvLVx1MDAzZWhlbHBlcmAgYW5kIGBpbmZvLVx1MDAzZXRpbWVvdXRgIHN0cmluZ3MsIHdoaWNoIGludHJvZHVjZXMgZGVhZCBjb2RlIGFuZCBhbHRlcnMgdGhlIGVycm9yIGhhbmRsaW5nIGZvciBub24tbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MuIEhvd2V2ZXIsIHRoZSBgaW5mb2Agc3RydWN0dXJlIChgcGFyLVx1MDAzZXRhcmdpbmZvYCkgaXMgcG9wdWxhdGVkIHZpYSBgY29weV9mcm9tX3VzZXJgIHdpdGggZGF0YSBwcm92aWRlZCBieSB1c2Vyc3BhY2UsIG1lYW5pbmcgdGhlIG1lbW9yeSBpcyBmdWxseSBpbml0aWFsaXplZCBmcm9tIHRoZSBrZXJuZWwmIzM5O3MgcGVyc3BlY3RpdmUuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWRkIGNvbnRyb2wgZmxvdyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgdGhlIGxvZ2ljIGZsYXcgaW4gYHh0X0NULmNgKSBhcmUgZnVuY3Rpb25hbCBhbmQgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjM5OjIxLjE4ODM5NjkwNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzczMzkwMzQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX0NUXCIsXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUlwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJJUF9ORl9SQVdcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInh0X2N0X3RnX2NoZWNrXCIsXG4gICAgXCJpZGxldGltZXJfdGdfY2hlY2tlbnRyeVwiLFxuICAgIFwiaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgcmVtb3ZlcyBgcHJfZGVidWdgIHN0YXRlbWVudHMgYW5kIGNvbnZlcnRzIHNvbWUgdG8gYHByX2luZm9fcmF0ZWxpbWl0ZWRgIGFjcm9zcyB2YXJpb3VzIG5ldGZpbHRlciBtb2R1bGVzLiBUaGVyZSBpcyBhbHNvIGEgbG9naWNhbCBjaGFuZ2UgaW4gYHh0X0NULmNgIHJlZ2FyZGluZyB0aGUgdmFsaWRhdGlvbiBvZiBgaW5mby1cXHUwMDNlaGVscGVyYCBhbmQgYGluZm8tXFx1MDAzZXRpbWVvdXRgIHN0cmluZ3MsIHdoaWNoIGludHJvZHVjZXMgZGVhZCBjb2RlIGFuZCBhbHRlcnMgdGhlIGVycm9yIGhhbmRsaW5nIGZvciBub24tbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MuIEhvd2V2ZXIsIHRoZSBgaW5mb2Agc3RydWN0dXJlIChgcGFyLVxcdTAwM2V0YXJnaW5mb2ApIGlzIHBvcHVsYXRlZCB2aWEgYGNvcHlfZnJvbV91c2VyYCB3aXRoIGRhdGEgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUga2VybmVsJ3MgcGVyc3BlY3RpdmUuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWRkIGNvbnRyb2wgZmxvdyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgdGhlIGxvZ2ljIGZsYXcgaW4gYHh0X0NULmNgKSBhcmUgZnVuY3Rpb25hbCBhbmQgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHh0X0NULmNgIHRvIGNoYW5nZSB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYGluZm8tXFx1MDAzZWhlbHBlcmAgYW5kIGBpbmZvLVxcdTAwM2V0aW1lb3V0YC4gSWYgdGhleSBhcmUgbm90IG51bGwtdGVybWluYXRlZCwgdGhlIG5ldyBjb2RlIHNraXBzIHNldHRpbmcgdGhlbSBpbnN0ZWFkIG9mIHJldHVybmluZyBgLUVOQU1FVE9PTE9OR2AsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHRhcmdldCBpbml0aWFsaXphdGlvbiBsb2dpYy4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYHh0X0lETEVUSU1FUi5jYCB0byByZWxlYXNlIGEgbXV0ZXggYmVmb3JlIGxvZ2dpbmcsIHdoaWNoIGlzIGEgbWlub3IgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6Mzk6MjEuMTg4NDAyOTE2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzI2NzM3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5MzM4YWVjNTVjZTFlZDBmZWYwMThiMGM4N2E2YWUzNDFiNmE2YTc3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDE0OjM5OjIwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfYWguYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfYWguY1xcbmluZGV4IDE2MWJhNDEyY2IwOGIuLjcxMzFmMjk3YWRhMmUgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jXFxuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jXFxuQEAgLTE5LDEyICsxOSw3IEBAIE1PRFVMRV9ERVNDUklQVElPTihcXFwiWHRhYmxlczogSVB2NCBJUHNlYy1BSCBTUEkgbWF0Y2hcXFwiKTtcXG4gc3RhdGljIGlubGluZSBib29sXFxuIHNwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBib29sIGludmVydClcXG4ge1xcbi1cXHRib29sIHI7XFxuLVxcdHByX2RlYnVnKFxcXCJzcGlfbWF0Y2g6JWMgMHgleCBcXHUwMDNjPSAweCV4IFxcdTAwM2M9IDB4JXhcXFxcblxcXCIsXFxuLVxcdFxcdCBpbnZlcnQgPyAnIScgOiAnICcsIG1pbiwgc3BpLCBtYXgpO1xcbi1cXHRyID0gKHNwaSBcXHUwMDNlPSBtaW4gXFx1MDAyNlxcdTAwMjYgc3BpIFxcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XFxuLVxcdHByX2RlYnVnKFxcXCIgcmVzdWx0ICVzXFxcXG5cXFwiLCByID8gXFxcIlBBU1NcXFwiIDogXFxcIkZBSUxFRFxcXCIpO1xcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIChzcGkgXFx1MDAzZT0gbWluIFxcdTAwMjZcXHUwMDI2IHNwaSBcXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBhaF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuQEAgLTQyLDcgKzM3LDYgQEAgc3RhdGljIGJvb2wgYWhfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRcXHQvKiBXZSd2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZVxcbiBcXHRcXHQgKiBjYW4ndC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiRHJvcHBpbmcgZXZpbCBBSCB0aW55Z3JhbS5cXFxcblxcXCIpO1xcbiBcXHRcXHRwYXItXFx1MDAzZWhvdGRyb3AgPSB0cnVlO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG5AQCAtNTgsNyArNTIsNyBAQCBzdGF0aWMgaW50IGFoX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbiBcXG4gXFx0LyogTXVzdCBzcGVjaWZ5IG5vIHVua25vd24gaW52ZmxhZ3MgKi9cXG4gXFx0aWYgKGFoaW5mby1cXHUwMDNlaW52ZmxhZ3MgXFx1MDAyNiB+SVBUX0FIX0lOVl9NQVNLKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJ1bmtub3duIGZsYWdzICVYXFxcXG5cXFwiLCBhaGluZm8tXFx1MDAzZWludmZsYWdzKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwidW5rbm93biBmbGFncyAlWFxcXFxuXFxcIiwgYWhpbmZvLVxcdTAwM2VpbnZmbGFncyk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JwZmlsdGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JwZmlsdGVyLmNcXG5pbmRleCA2ZDliZjUxMDY4Njg0Li4yYzM4ZmQ2NjI0YWExIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuY1xcbisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuY1xcbkBAIC05NSw4ICs5NSw3IEBAIHN0YXRpYyBpbnQgcnBmaWx0ZXJfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxuIFxcbiBcXHRpZiAoc3RyY21wKHBhci1cXHUwMDNldGFibGUsIFxcXCJtYW5nbGVcXFwiKSAhPSAwIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBzdHJjbXAocGFyLVxcdTAwM2V0YWJsZSwgXFxcInJhd1xcXCIpICE9IDApIHtcXG4tXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwib25seSB2YWxpZCBpbiBcXFxcJ3Jhd1xcXFwnIG9yIFxcXFwnbWFuZ2xlXFxcXCcgdGFibGUsIG5vdCBcXFxcJyVzXFxcXCdcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICBwYXItXFx1MDAzZXRhYmxlKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwib25seSB2YWxpZCBpbiBcXFxcJ3Jhd1xcXFwnIG9yIFxcXFwnbWFuZ2xlXFxcXCcgdGFibGVcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmNcXG5pbmRleCAxMjU4NzgzZWQ4NzYyLi5kYWI3ZGJjNmE2NzVjIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmNcXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jXFxuQEAgLTI0LDEzICsyNCw3IEBAIE1PRFVMRV9BVVRIT1IoXFxcIkFuZHJhcyBLaXMtU3phYm8gXFx1MDAzY2tpc3phQHNjaC5ibWUuaHVcXHUwMDNlXFxcIik7XFxuIHN0YXRpYyBpbmxpbmUgYm9vbFxcbiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpXFxuIHtcXG4tXFx0Ym9vbCByO1xcbi1cXG4tXFx0cHJfZGVidWcoXFxcInNwaV9tYXRjaDolYyAweCV4IFxcdTAwM2M9IDB4JXggXFx1MDAzYz0gMHgleFxcXFxuXFxcIixcXG4tXFx0XFx0IGludmVydCA/ICchJyA6ICcgJywgbWluLCBzcGksIG1heCk7XFxuLVxcdHIgPSAoc3BpIFxcdTAwM2U9IG1pbiBcXHUwMDI2XFx1MDAyNiBzcGkgXFx1MDAzYz0gbWF4KSBeIGludmVydDtcXG4tXFx0cHJfZGVidWcoXFxcIiByZXN1bHQgJXNcXFxcblxcXCIsIHIgPyBcXFwiUEFTU1xcXCIgOiBcXFwiRkFJTEVEXFxcIik7XFxuLVxcdHJldHVybiByO1xcbitcXHRyZXR1cm4gKHNwaSBcXHUwMDNlPSBtaW4gXFx1MDAyNlxcdTAwMjYgc3BpIFxcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGFoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuQEAgLTYyLDIzICs1Niw2IEBAIHN0YXRpYyBib29sIGFoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG4tXFx0cHJfZGVidWcoXFxcIklQdjYgQUggTEVOICV1ICV1IFxcXCIsIGhkcmxlbiwgYWgtXFx1MDAzZWhkcmxlbik7XFxuLVxcdHByX2RlYnVnKFxcXCJSRVMgJTA0WCBcXFwiLCBhaC1cXHUwMDNlcmVzZXJ2ZWQpO1xcbi1cXHRwcl9kZWJ1ZyhcXFwiU1BJICV1ICUwOFhcXFxcblxcXCIsIG50b2hsKGFoLVxcdTAwM2VzcGkpLCBudG9obChhaC1cXHUwMDNlc3BpKSk7XFxuLVxcbi1cXHRwcl9kZWJ1ZyhcXFwiSVB2NiBBSCBzcGkgJTAyWCBcXFwiLFxcbi1cXHRcXHQgc3BpX21hdGNoKGFoaW5mby1cXHUwMDNlc3Bpc1swXSwgYWhpbmZvLVxcdTAwM2VzcGlzWzFdLFxcbi1cXHRcXHRcXHQgICBudG9obChhaC1cXHUwMDNlc3BpKSxcXG4tXFx0XFx0XFx0ICAgISEoYWhpbmZvLVxcdTAwM2VpbnZmbGFncyBcXHUwMDI2IElQNlRfQUhfSU5WX1NQSSkpKTtcXG4tXFx0cHJfZGVidWcoXFxcImxlbiAlMDJYICUwNFggJTAyWCBcXFwiLFxcbi1cXHRcXHQgYWhpbmZvLVxcdTAwM2VoZHJsZW4sIGhkcmxlbixcXG4tXFx0XFx0ICghYWhpbmZvLVxcdTAwM2VoZHJsZW4gfHxcXG4tXFx0XFx0ICAoYWhpbmZvLVxcdTAwM2VoZHJsZW4gPT0gaGRybGVuKSBeXFxuLVxcdFxcdCAgISEoYWhpbmZvLVxcdTAwM2VpbnZmbGFncyBcXHUwMDI2IElQNlRfQUhfSU5WX0xFTikpKTtcXG4tXFx0cHJfZGVidWcoXFxcInJlcyAlMDJYICUwNFggJTAyWFxcXFxuXFxcIixcXG4tXFx0XFx0IGFoaW5mby1cXHUwMDNlaGRycmVzLCBhaC1cXHUwMDNlcmVzZXJ2ZWQsXFxuLVxcdFxcdCAhKGFoaW5mby1cXHUwMDNlaGRycmVzIFxcdTAwMjZcXHUwMDI2IGFoLVxcdTAwM2VyZXNlcnZlZCkpO1xcbi1cXG4gXFx0cmV0dXJuIHNwaV9tYXRjaChhaGluZm8tXFx1MDAzZXNwaXNbMF0sIGFoaW5mby1cXHUwMDNlc3Bpc1sxXSxcXG4gXFx0XFx0XFx0ICBudG9obChhaC1cXHUwMDNlc3BpKSxcXG4gXFx0XFx0XFx0ICAhIShhaGluZm8tXFx1MDAzZWludmZsYWdzIFxcdTAwMjYgSVA2VF9BSF9JTlZfU1BJKSkgXFx1MDAyNlxcdTAwMjZcXG5AQCAtOTMsNyArNzAsNyBAQCBzdGF0aWMgaW50IGFoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG4gXFx0Y29uc3Qgc3RydWN0IGlwNnRfYWggKmFoaW5mbyA9IHBhci1cXHUwMDNlbWF0Y2hpbmZvO1xcbiBcXG4gXFx0aWYgKGFoaW5mby1cXHUwMDNlaW52ZmxhZ3MgXFx1MDAyNiB+SVA2VF9BSF9JTlZfTUFTSykge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwidW5rbm93biBmbGFncyAlWFxcXFxuXFxcIiwgYWhpbmZvLVxcdTAwM2VpbnZmbGFncyk7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcInVua25vd24gZmxhZ3MgJVhcXFxcblxcXCIsIGFoaW5mby1cXHUwMDNlaW52ZmxhZ3MpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jXFxuaW5kZXggM2FhZDY0MzkzODZiMS4uZjVmM2NmYjg3MDRjZiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9mcmFnLmNcXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9mcmFnLmNcXG5AQCAtMjMsMTIgKzIzLDcgQEAgTU9EVUxFX0FVVEhPUihcXFwiQW5kcmFzIEtpcy1TemFibyBcXHUwMDNja2lzemFAc2NoLmJtZS5odVxcdTAwM2VcXFwiKTtcXG4gc3RhdGljIGlubGluZSBib29sXFxuIGlkX21hdGNoKHVfaW50MzJfdCBtaW4sIHVfaW50MzJfdCBtYXgsIHVfaW50MzJfdCBpZCwgYm9vbCBpbnZlcnQpXFxuIHtcXG4tXFx0Ym9vbCByO1xcbi1cXHRwcl9kZWJ1ZyhcXFwiaWRfbWF0Y2g6JWMgMHgleCBcXHUwMDNjPSAweCV4IFxcdTAwM2M9IDB4JXhcXFxcblxcXCIsIGludmVydCA/ICchJyA6ICcgJyxcXG4tXFx0XFx0IG1pbiwgaWQsIG1heCk7XFxuLVxcdHIgPSAoaWQgXFx1MDAzZT0gbWluIFxcdTAwMjZcXHUwMDI2IGlkIFxcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XFxuLVxcdHByX2RlYnVnKFxcXCIgcmVzdWx0ICVzXFxcXG5cXFwiLCByID8gXFxcIlBBU1NcXFwiIDogXFxcIkZBSUxFRFxcXCIpO1xcbi1cXHRyZXR1cm4gcjtcXG4rXFx0cmV0dXJuIChpZCBcXHUwMDNlPSBtaW4gXFx1MDAyNlxcdTAwMjYgaWQgXFx1MDAzYz0gbWF4KSBeIGludmVydDtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2xcXG5AQCAtNTMsMzggKzQ4LDYgQEAgZnJhZ19tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFxuLVxcdHByX2RlYnVnKFxcXCJJTkZPICUwNFggXFxcIiwgZmgtXFx1MDAzZWZyYWdfb2ZmKTtcXG4tXFx0cHJfZGVidWcoXFxcIk9GRlNFVCAlMDRYIFxcXCIsIG50b2hzKGZoLVxcdTAwM2VmcmFnX29mZikgXFx1MDAyNiB+MHg3KTtcXG4tXFx0cHJfZGVidWcoXFxcIlJFUyAlMDJYICUwNFhcXFwiLCBmaC1cXHUwMDNlcmVzZXJ2ZWQsIG50b2hzKGZoLVxcdTAwM2VmcmFnX29mZikgXFx1MDAyNiAweDYpO1xcbi1cXHRwcl9kZWJ1ZyhcXFwiTUYgJTA0WCBcXFwiLCBmaC1cXHUwMDNlZnJhZ19vZmYgXFx1MDAyNiBodG9ucyhJUDZfTUYpKTtcXG4tXFx0cHJfZGVidWcoXFxcIklEICV1ICUwOFhcXFxcblxcXCIsIG50b2hsKGZoLVxcdTAwM2VpZGVudGlmaWNhdGlvbiksXFxuLVxcdFxcdCBudG9obChmaC1cXHUwMDNlaWRlbnRpZmljYXRpb24pKTtcXG4tXFxuLVxcdHByX2RlYnVnKFxcXCJJUHY2IEZSQUcgaWQgJTAyWCBcXFwiLFxcbi1cXHRcXHQgaWRfbWF0Y2goZnJhZ2luZm8tXFx1MDAzZWlkc1swXSwgZnJhZ2luZm8tXFx1MDAzZWlkc1sxXSxcXG4tXFx0XFx0XFx0ICBudG9obChmaC1cXHUwMDNlaWRlbnRpZmljYXRpb24pLFxcbi1cXHRcXHRcXHQgICEhKGZyYWdpbmZvLVxcdTAwM2VpbnZmbGFncyBcXHUwMDI2IElQNlRfRlJBR19JTlZfSURTKSkpO1xcbi1cXHRwcl9kZWJ1ZyhcXFwicmVzICUwMlggJTAyWCUwNFggJTAyWCBcXFwiLFxcbi1cXHRcXHQgZnJhZ2luZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVA2VF9GUkFHX1JFUywgZmgtXFx1MDAzZXJlc2VydmVkLFxcbi1cXHRcXHQgbnRvaHMoZmgtXFx1MDAzZWZyYWdfb2ZmKSBcXHUwMDI2IDB4NixcXG4tXFx0XFx0ICEoKGZyYWdpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQNlRfRlJBR19SRVMpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgIChmaC1cXHUwMDNlcmVzZXJ2ZWQgfHwgKG50b2hzKGZoLVxcdTAwM2VmcmFnX29mZikgXFx1MDAyNiAweDA2KSkpKTtcXG4tXFx0cHJfZGVidWcoXFxcImZpcnN0ICUwMlggJTAyWCAlMDJYIFxcXCIsXFxuLVxcdFxcdCBmcmFnaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUDZUX0ZSQUdfRlNULFxcbi1cXHRcXHQgbnRvaHMoZmgtXFx1MDAzZWZyYWdfb2ZmKSBcXHUwMDI2IH4weDcsXFxuLVxcdFxcdCAhKChmcmFnaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUDZUX0ZSQUdfRlNUKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAobnRvaHMoZmgtXFx1MDAzZWZyYWdfb2ZmKSBcXHUwMDI2IH4weDcpKSk7XFxuLVxcdHByX2RlYnVnKFxcXCJtZiAlMDJYICUwMlggJTAyWCBcXFwiLFxcbi1cXHRcXHQgZnJhZ2luZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVA2VF9GUkFHX01GLFxcbi1cXHRcXHQgbnRvaHMoZmgtXFx1MDAzZWZyYWdfb2ZmKSBcXHUwMDI2IElQNl9NRixcXG4tXFx0XFx0ICEoKGZyYWdpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQNlRfRlJBR19NRikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgISgobnRvaHMoZmgtXFx1MDAzZWZyYWdfb2ZmKSBcXHUwMDI2IElQNl9NRikpKSk7XFxuLVxcdHByX2RlYnVnKFxcXCJsYXN0ICUwMlggJTAyWCAlMDJYXFxcXG5cXFwiLFxcbi1cXHRcXHQgZnJhZ2luZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVA2VF9GUkFHX05NRixcXG4tXFx0XFx0IG50b2hzKGZoLVxcdTAwM2VmcmFnX29mZikgXFx1MDAyNiBJUDZfTUYsXFxuLVxcdFxcdCAhKChmcmFnaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUDZUX0ZSQUdfTk1GKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAobnRvaHMoZmgtXFx1MDAzZWZyYWdfb2ZmKSBcXHUwMDI2IElQNl9NRikpKTtcXG4tXFxuIFxcdHJldHVybiBpZF9tYXRjaChmcmFnaW5mby1cXHUwMDNlaWRzWzBdLCBmcmFnaW5mby1cXHUwMDNlaWRzWzFdLFxcbiBcXHRcXHRcXHQgbnRvaGwoZmgtXFx1MDAzZWlkZW50aWZpY2F0aW9uKSxcXG4gXFx0XFx0XFx0ICEhKGZyYWdpbmZvLVxcdTAwM2VpbnZmbGFncyBcXHUwMDI2IElQNlRfRlJBR19JTlZfSURTKSkgXFx1MDAyNlxcdTAwMjZcXG5AQCAtMTAzLDcgKzY2LDcgQEAgc3RhdGljIGludCBmcmFnX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG4gXFx0Y29uc3Qgc3RydWN0IGlwNnRfZnJhZyAqZnJhZ2luZm8gPSBwYXItXFx1MDAzZW1hdGNoaW5mbztcXG4gXFxuIFxcdGlmIChmcmFnaW5mby1cXHUwMDNlaW52ZmxhZ3MgXFx1MDAyNiB+SVA2VF9GUkFHX0lOVl9NQVNLKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJ1bmtub3duIGZsYWdzICVYXFxcXG5cXFwiLCBmcmFnaW5mby1cXHUwMDNlaW52ZmxhZ3MpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJ1bmtub3duIGZsYWdzICVYXFxcXG5cXFwiLCBmcmFnaW5mby1cXHUwMDNlaW52ZmxhZ3MpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xcbmluZGV4IDZkMWE1ZDIwMjZhNjcuLjM3YzIwN2QzMTUyYTQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmNcXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xcbkBAIC03OSwxNCArNzksNiBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbi1cXHRwcl9kZWJ1ZyhcXFwiSVB2NiBPUFRTIExFTiAldSAldSBcXFwiLCBoZHJsZW4sIG9oLVxcdTAwM2VoZHJsZW4pO1xcbi1cXG4tXFx0cHJfZGVidWcoXFxcImxlbiAlMDJYICUwNFggJTAyWCBcXFwiLFxcbi1cXHRcXHQgb3B0aW5mby1cXHUwMDNlaGRybGVuLCBoZHJsZW4sXFxuLVxcdFxcdCAoIShvcHRpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQNlRfT1BUU19MRU4pIHx8XFxuLVxcdFxcdCAgKChvcHRpbmZvLVxcdTAwM2VoZHJsZW4gPT0gaGRybGVuKSBeXFxuLVxcdFxcdCAgICEhKG9wdGluZm8tXFx1MDAzZWludmZsYWdzIFxcdTAwMjYgSVA2VF9PUFRTX0lOVl9MRU4pKSkpO1xcbi1cXG4gXFx0cmV0ID0gKCEob3B0aW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUDZUX09QVFNfTEVOKSB8fFxcbiBcXHQgICAgICAgKChvcHRpbmZvLVxcdTAwM2VoZHJsZW4gPT0gaGRybGVuKSBeXFxuIFxcdFxcdCEhKG9wdGluZm8tXFx1MDAzZWludmZsYWdzIFxcdTAwMjYgSVA2VF9PUFRTX0lOVl9MRU4pKSk7XFxuQEAgLTk2LDggKzg4LDYgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIFxcdGlmICghKG9wdGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVA2VF9PUFRTX09QVFMpKSB7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJTdHJpY3QgXFxcIik7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCIjJWQgXFxcIiwgb3B0aW5mby1cXHUwMDNlb3B0c25yKTtcXG4gXFx0XFx0Zm9yICh0ZW1wID0gMDsgdGVtcCBcXHUwMDNjIG9wdGluZm8tXFx1MDAzZW9wdHNucjsgdGVtcCsrKSB7XFxuIFxcdFxcdFxcdC8qIHR5cGUgZmllbGQgZXhpc3RzID8gKi9cXG4gXFx0XFx0XFx0aWYgKGhkcmxlbiBcXHUwMDNjIDEpXFxuQEAgLTEwOCwxMyArOTgsOSBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRcXHRcXHQvKiBUeXBlIGNoZWNrICovXFxuLVxcdFxcdFxcdGlmICgqdHAgIT0gKG9wdGluZm8tXFx1MDAzZW9wdHNbdGVtcF0gXFx1MDAyNiAweEZGMDApIFxcdTAwM2VcXHUwMDNlIDgpIHtcXG4tXFx0XFx0XFx0XFx0cHJfZGVidWcoXFxcIlRiYWQgJTAyWCAlMDJYXFxcXG5cXFwiLCAqdHAsXFxuLVxcdFxcdFxcdFxcdFxcdCAob3B0aW5mby1cXHUwMDNlb3B0c1t0ZW1wXSBcXHUwMDI2IDB4RkYwMCkgXFx1MDAzZVxcdTAwM2UgOCk7XFxuK1xcdFxcdFxcdGlmICgqdHAgIT0gKG9wdGluZm8tXFx1MDAzZW9wdHNbdGVtcF0gXFx1MDAyNiAweEZGMDApIFxcdTAwM2VcXHUwMDNlIDgpXFxuIFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0XFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0XFx0cHJfZGVidWcoXFxcIlRvayBcXFwiKTtcXG4tXFx0XFx0XFx0fVxcbitcXG4gXFx0XFx0XFx0LyogTGVuZ3RoIGNoZWNrICovXFxuIFxcdFxcdFxcdGlmICgqdHApIHtcXG4gXFx0XFx0XFx0XFx0dTE2IHNwZWNfbGVuO1xcbkBAIC0xMjksMjYgKzExNSwxOCBAQCBoYmhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdFxcdHNwZWNfbGVuID0gb3B0aW5mby1cXHUwMDNlb3B0c1t0ZW1wXSBcXHUwMDI2IDB4MDBGRjtcXG4gXFxuLVxcdFxcdFxcdFxcdGlmIChzcGVjX2xlbiAhPSAweDAwRkYgXFx1MDAyNlxcdTAwMjYgc3BlY19sZW4gIT0gKmxwKSB7XFxuLVxcdFxcdFxcdFxcdFxcdHByX2RlYnVnKFxcXCJMYmFkICUwMlggJTA0WFxcXFxuXFxcIiwgKmxwLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgc3BlY19sZW4pO1xcbitcXHRcXHRcXHRcXHRpZiAoc3BlY19sZW4gIT0gMHgwMEZGIFxcdTAwMjZcXHUwMDI2IHNwZWNfbGVuICE9ICpscClcXG4gXFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdFxcdHByX2RlYnVnKFxcXCJMb2sgXFxcIik7XFxuK1xcbiBcXHRcXHRcXHRcXHRvcHRsZW4gPSAqbHAgKyAyO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiUGFkMVxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFxcdG9wdGxlbiA9IDE7XFxuIFxcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdC8qIFN0ZXAgdG8gdGhlIG5leHQgKi9cXG4tXFx0XFx0XFx0cHJfZGVidWcoXFxcImxlbiUwNFhcXFxcblxcXCIsIG9wdGxlbik7XFxuLVxcbiBcXHRcXHRcXHRpZiAoKHB0ciBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuIC0gb3B0bGVuIHx8IGhkcmxlbiBcXHUwMDNjIG9wdGxlbikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIHRlbXAgXFx1MDAzYyBvcHRpbmZvLVxcdTAwM2VvcHRzbnIgLSAxKSB7XFxuLVxcdFxcdFxcdFxcdHByX2RlYnVnKFxcXCJuZXcgcG9pbnRlciBpcyB0b28gbGFyZ2UhXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0ICAgIHRlbXAgXFx1MDAzYyBvcHRpbmZvLVxcdTAwM2VvcHRzbnIgLSAxKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbitcXG4gXFx0XFx0XFx0cHRyICs9IG9wdGxlbjtcXG4gXFx0XFx0XFx0aGRybGVuIC09IG9wdGxlbjtcXG4gXFx0XFx0fVxcbkBAIC0xNjYsMTYgKzE0NCwxNiBAQCBzdGF0aWMgaW50IGhiaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXFxuIFxcdGNvbnN0IHN0cnVjdCBpcDZ0X29wdHMgKm9wdHNpbmZvID0gcGFyLVxcdTAwM2VtYXRjaGluZm87XFxuIFxcbiBcXHRpZiAob3B0c2luZm8tXFx1MDAzZWludmZsYWdzIFxcdTAwMjYgfklQNlRfT1BUU19JTlZfTUFTSykge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwidW5rbm93biBmbGFncyAlWFxcXFxuXFxcIiwgb3B0c2luZm8tXFx1MDAzZWludmZsYWdzKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwidW5rbm93biBmbGFncyAlWFxcXFxuXFxcIiwgb3B0c2luZm8tXFx1MDAzZWludmZsYWdzKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFx0aWYgKG9wdHNpbmZvLVxcdTAwM2VvcHRzbnIgXFx1MDAzZSBJUDZUX09QVFNfT1BUU05SKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJ0b28gbWFueSBzdXBwb3J0ZWQgb3B0cyBzcGVjaWZpZWRcXFxcblxcXCIpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJ0b28gbWFueSBzdXBwb3J0ZWQgb3B0cyBzcGVjaWZpZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKG9wdHNpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQNlRfT1BUU19OU1RSSUNUKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJOb3Qgc3RyaWN0IC0gbm90IGltcGxlbWVudGVkXFxcIik7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcIk5vdCBzdHJpY3QgLSBub3QgaW1wbGVtZW50ZWRcXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X21oLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9taC5jXFxuaW5kZXggZmQ0OTJiNjlhY2JjMC4uYmE2ZGNjNzc5MWEwOSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9taC5jXFxuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbWguY1xcbkBAIC00MiwxNCArNDIsMTEgQEAgc3RhdGljIGJvb2wgbWhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0aWYgKG1oID09IE5VTEwpIHtcXG4gXFx0XFx0LyogV2UndmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2VcXG4gXFx0XFx0ICAgY2FuJ3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLiAqL1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiRHJvcHBpbmcgZXZpbCBNSCB0aW55Z3JhbS5cXFxcblxcXCIpO1xcbiBcXHRcXHRwYXItXFx1MDAzZWhvdGRyb3AgPSB0cnVlO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChtaC1cXHUwMDNlaXA2bWhfcHJvdG8gIT0gSVBQUk9UT19OT05FKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJEcm9wcGluZyBpbnZhbGlkIE1IIFBheWxvYWQgUHJvdG86ICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgbWgtXFx1MDAzZWlwNm1oX3Byb3RvKTtcXG4gXFx0XFx0cGFyLVxcdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jXFxuaW5kZXggNjdjODdhODhjZGU0Zi4uYWY4ZDEwZDQ5ZGU4MSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jXFxuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnBmaWx0ZXIuY1xcbkBAIC0xMTgsNyArMTE4LDcgQEAgc3RhdGljIGludCBycGZpbHRlcl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG4gXFxuIFxcdGlmIChzdHJjbXAocGFyLVxcdTAwM2V0YWJsZSwgXFxcIm1hbmdsZVxcXCIpICE9IDAgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHN0cmNtcChwYXItXFx1MDAzZXRhYmxlLCBcXFwicmF3XFxcIikgIT0gMCkge1xcbi1cXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJvbmx5IHZhbGlkIGluIFxcXFwncmF3XFxcXCcgb3IgXFxcXCdtYW5nbGVcXFxcJyB0YWJsZSwgbm90IFxcXFwnJXNcXFxcJ1xcXFxuXFxcIixcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwib25seSB2YWxpZCBpbiBcXFxcJ3Jhd1xcXFwnIG9yIFxcXFwnbWFuZ2xlXFxcXCcgdGFibGVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCAgICBwYXItXFx1MDAzZXRhYmxlKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmNcXG5pbmRleCAyNzhiNTI3NTJmMzY0Li4wYzAxYWMyNzQ2ZDFmIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmNcXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jXFxuQEAgLTE1NSwxOCArMTU1LDE4IEBAIHN0YXRpYyBpbnQgcnRfbXQ2X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbiBcXHRjb25zdCBzdHJ1Y3QgaXA2dF9ydCAqcnRpbmZvID0gcGFyLVxcdTAwM2VtYXRjaGluZm87XFxuIFxcbiBcXHRpZiAocnRpbmZvLVxcdTAwM2VpbnZmbGFncyBcXHUwMDI2IH5JUDZUX1JUX0lOVl9NQVNLKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJ1bmtub3duIGZsYWdzICVYXFxcXG5cXFwiLCBydGluZm8tXFx1MDAzZWludmZsYWdzKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwidW5rbm93biBmbGFncyAlWFxcXFxuXFxcIiwgcnRpbmZvLVxcdTAwM2VpbnZmbGFncyk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcdGlmIChydGluZm8tXFx1MDAzZWFkZHJuciBcXHUwMDNlIElQNlRfUlRfSE9QUykge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwidG9vIG1hbnkgYWRkcmVzc2VzIHNwZWNpZmllZFxcXFxuXFxcIik7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcInRvbyBtYW55IGFkZHJlc3NlcyBzcGVjaWZpZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHRpZiAoKHJ0aW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoSVA2VF9SVF9SRVMgfCBJUDZUX1JUX0ZTVF9NQVNLKSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICghKHJ0aW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUDZUX1JUX1RZUCkgfHxcXG4gXFx0ICAgICAocnRpbmZvLVxcdTAwM2VydF90eXBlICE9IDApIHx8XFxuIFxcdCAgICAgKHJ0aW5mby1cXHUwMDNlaW52ZmxhZ3MgXFx1MDAyNiBJUDZUX1JUX0lOVl9UWVApKSkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiYC0tcnQtdHlwZSAwJyByZXF1aXJlZCBiZWZvcmUgYC0tcnQtMC0qJ1xcXCIpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJgLS1ydC10eXBlIDAnIHJlcXVpcmVkIGJlZm9yZSBgLS1ydC0wLSonXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmNcXG5pbmRleCAxNDk0YjNlZTMwZTExLi40ZTQ0MzZhOTEwNGI0IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuY1xcbkBAIC04Nyw4ICs4Nyw3IEBAIHN0YXRpYyBpbnQgY29ubnNlY21hcmtfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXFxuIFxcbiBcXHRpZiAoc3RyY21wKHBhci1cXHUwMDNldGFibGUsIFxcXCJtYW5nbGVcXFwiKSAhPSAwIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBzdHJjbXAocGFyLVxcdTAwM2V0YWJsZSwgXFxcInNlY3VyaXR5XFxcIikgIT0gMCkge1xcbi1cXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJvbmx5IHZhbGlkIGluIFxcXFwnbWFuZ2xlXFxcXCcgb3IgXFxcXCdzZWN1cml0eVxcXFwnIHRhYmxlLCBub3QgXFxcXCclc1xcXFwnXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgICAgcGFyLVxcdTAwM2V0YWJsZSk7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcIm9ubHkgdmFsaWQgaW4gXFxcXCdtYW5nbGVcXFxcJyBvciBcXFxcJ3NlY3VyaXR5XFxcXCcgdGFibGVcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DVC5jIGIvbmV0L25ldGZpbHRlci94dF9DVC5jXFxuaW5kZXggZTc4NjYwZGZkZjRiNi4uOTEzMjYwMTRhZGUxYyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0NULmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0NULmNcXG5AQCAtMTk1LDcgKzE5NSw4IEBAIHN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsXFxuIFxcdFxcdGdvdG8gZXJyMztcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGluZm8tXFx1MDAzZWhlbHBlclswXSkge1xcbitcXHRpZiAoaW5mby1cXHUwMDNlaGVscGVyWzBdIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBzdHJubGVuKGluZm8tXFx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXFx1MDAzZWhlbHBlcikpIFxcdTAwM2Mgc2l6ZW9mKGluZm8tXFx1MDAzZWhlbHBlcikpIHtcXG4gXFx0XFx0aWYgKHN0cm5sZW4oaW5mby1cXHUwMDNlaGVscGVyLCBzaXplb2YoaW5mby1cXHUwMDNlaGVscGVyKSkgPT0gc2l6ZW9mKGluZm8tXFx1MDAzZWhlbHBlcikpIHtcXG4gXFx0XFx0XFx0cmV0ID0gLUVOQU1FVE9PTE9ORztcXG4gXFx0XFx0XFx0Z290byBlcnIzO1xcbkBAIC0yMDYsNyArMjA3LDggQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcixcXG4gXFx0XFx0XFx0Z290byBlcnIzO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoaW5mby1cXHUwMDNldGltZW91dFswXSkge1xcbitcXHRpZiAoaW5mby1cXHUwMDNldGltZW91dFswXSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc3RybmxlbihpbmZvLVxcdTAwM2V0aW1lb3V0LCBzaXplb2YoaW5mby1cXHUwMDNldGltZW91dCkpIFxcdTAwM2Mgc2l6ZW9mKGluZm8tXFx1MDAzZXRpbWVvdXQpKSB7XFxuIFxcdFxcdGlmIChzdHJubGVuKGluZm8tXFx1MDAzZXRpbWVvdXQsIHNpemVvZihpbmZvLVxcdTAwM2V0aW1lb3V0KSkgPT0gc2l6ZW9mKGluZm8tXFx1MDAzZXRpbWVvdXQpKSB7XFxuIFxcdFxcdFxcdHJldCA9IC1FTkFNRVRPT0xPTkc7XFxuIFxcdFxcdFxcdGdvdG8gZXJyNDtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcXG5pbmRleCBiZmNmMmQ0NGU5M2RiLi4xNWI2OThlYTk4YWE2IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXFxuQEAgLTEwMiw4ICsxMDIsNiBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZXhwaXJlZChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4ge1xcbiBcXHRzdHJ1Y3QgaWRsZXRpbWVyX3RnICp0aW1lciA9IHRpbWVyX2NvbnRhaW5lcl9vZih0aW1lciwgdCwgdGltZXIpO1xcbiBcXG4tXFx0cHJfZGVidWcoXFxcInRpbWVyICVzIGV4cGlyZWRcXFxcblxcXCIsIHRpbWVyLVxcdTAwM2VhdHRyLmF0dHIubmFtZSk7XFxuLVxcbiBcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZ0aW1lci1cXHUwMDNld29yayk7XFxuIH1cXG4gXFxuQEAgLTExMSw3ICsxMDksNiBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfYWxhcm1wcm9jKHN0cnVjdCBhbGFybSAqYWxhcm0sIGt0aW1lX3Qgbm93KVxcbiB7XFxuIFxcdHN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyID0gYWxhcm0tXFx1MDAzZWRhdGE7XFxuIFxcbi1cXHRwcl9kZWJ1ZyhcXFwiYWxhcm0gJXMgZXhwaXJlZFxcXFxuXFxcIiwgdGltZXItXFx1MDAzZWF0dHIuYXR0ci5uYW1lKTtcXG4gXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2dGltZXItXFx1MDAzZXdvcmspO1xcbiB9XFxuIFxcbkBAIC0xNzEsNyArMTY4LDcgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbylcXG4gXFxuIFxcdHJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKGlkbGV0aW1lcl90Z19rb2JqLCBcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZWF0dHIuYXR0cik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJjb3VsZG4ndCBhZGQgZmlsZSB0byBzeXNmc1xcXCIpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJjb3VsZG4ndCBhZGQgZmlsZSB0byBzeXNmc1xcXCIpO1xcbiBcXHRcXHRnb3RvIG91dF9mcmVlX2F0dHI7XFxuIFxcdH1cXG4gXFxuQEAgLTIyMCw3ICsyMTcsNyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvKVxcbiBcXG4gXFx0cmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYXR0ci5hdHRyKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0cHJfZGVidWcoXFxcImNvdWxkbid0IGFkZCBmaWxlIHRvIHN5c2ZzXFxcIik7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcImNvdWxkbid0IGFkZCBmaWxlIHRvIHN5c2ZzXFxcIik7XFxuIFxcdFxcdGdvdG8gb3V0X2ZyZWVfYXR0cjtcXG4gXFx0fVxcbiBcXG5AQCAtMjI4LDcgKzIyNSw2IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXFxuIFxcdGtvYmplY3RfdWV2ZW50KGlkbGV0aW1lcl90Z19rb2JqLEtPQkpfQUREKTtcXG4gXFxuIFxcdGxpc3RfYWRkKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlZW50cnksIFxcdTAwMjZpZGxldGltZXJfdGdfbGlzdCk7XFxuLVxcdHByX2RlYnVnKFxcXCJ0aW1lciB0eXBlIHZhbHVlIGlzICV1XFxcIiwgaW5mby1cXHUwMDNldGltZXJfdHlwZSk7XFxuIFxcdGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V0aW1lcl90eXBlID0gaW5mby1cXHUwMDNldGltZXJfdHlwZTtcXG4gXFx0aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXJlZmNudCA9IDE7XFxuIFxcbkBAIC0yNjMsOSArMjU5LDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBpZGxldGltZXJfdGdfdGFyZ2V0KHN0cnVjdCBza19idWZmICpza2IsXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVxcdTAwM2V0YXJnaW5mbztcXG4gXFxuLVxcdHByX2RlYnVnKFxcXCJyZXNldHRpbmcgdGltZXIgJXMsIHRpbWVvdXQgcGVyaW9kICV1XFxcXG5cXFwiLFxcbi1cXHRcXHQgaW5mby1cXHUwMDNlbGFiZWwsIGluZm8tXFx1MDAzZXRpbWVvdXQpO1xcbi1cXG4gXFx0bW9kX3RpbWVyKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIsXFxuIFxcdFxcdCAgc2Vjc190b19qaWZmaWVzKGluZm8tXFx1MDAzZXRpbWVvdXQpICsgamlmZmllcyk7XFxuIFxcbkBAIC0yODAsOSArMjczLDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBpZGxldGltZXJfdGdfdGFyZ2V0X3YxKHN0cnVjdCBza19idWZmICpza2IsXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvX3YxICppbmZvID0gcGFyLVxcdTAwM2V0YXJnaW5mbztcXG4gXFxuLVxcdHByX2RlYnVnKFxcXCJyZXNldHRpbmcgdGltZXIgJXMsIHRpbWVvdXQgcGVyaW9kICV1XFxcXG5cXFwiLFxcbi1cXHRcXHQgaW5mby1cXHUwMDNlbGFiZWwsIGluZm8tXFx1MDAzZXRpbWVvdXQpO1xcbi1cXG4gXFx0aWYgKGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2V0aW1lcl90eXBlIFxcdTAwMjYgWFRfSURMRVRJTUVSX0FMQVJNKSB7XFxuIFxcdFxcdGlkbGV0aW1lcl9zdGFydF9hbGFybV9zZWMoaW5mby1cXHUwMDNldGltZXIsIGluZm8tXFx1MDAzZXRpbWVvdXQpO1xcbiBcXHR9IGVsc2Uge1xcbkBAIC0yOTYsMTcgKzI4NiwxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gc3RhdGljIGludCBpZGxldGltZXJfdGdfaGVscGVyKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbylcXG4ge1xcbiBcXHRpZiAoaW5mby1cXHUwMDNldGltZW91dCA9PSAwKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJ0aW1lb3V0IHZhbHVlIGlzIHplcm9cXFxcblxcXCIpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJ0aW1lb3V0IHZhbHVlIGlzIHplcm9cXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHRpZiAoaW5mby1cXHUwMDNldGltZW91dCBcXHUwMDNlPSBJTlRfTUFYIC8gMTAwMCkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwidGltZW91dCB2YWx1ZSBpcyB0b28gYmlnXFxcXG5cXFwiKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwidGltZW91dCB2YWx1ZSBpcyB0b28gYmlnXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFx0aWYgKGluZm8tXFx1MDAzZWxhYmVsWzBdID09ICdcXFxcMCcgfHxcXG4gXFx0ICAgIHN0cm5sZW4oaW5mby1cXHUwMDNlbGFiZWwsXFxuIFxcdFxcdCAgICBNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkUpID09IE1BWF9JRExFVElNRVJfTEFCRUxfU0laRSkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwibGFiZWwgaXMgZW1wdHkgb3Igbm90IG51bC10ZXJtaW5hdGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwibGFiZWwgaXMgZW1wdHkgb3Igbm90IG51bC10ZXJtaW5hdGVkXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTMxOCwzNCArMzA4LDI1IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXFxuIFxcdHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRwcl9kZWJ1ZyhcXFwiY2hlY2tlbnRyeSB0YXJnaW5mbyVzXFxcXG5cXFwiLCBpbmZvLVxcdTAwM2VsYWJlbCk7XFxuLVxcbiBcXHRyZXQgPSBpZGxldGltZXJfdGdfaGVscGVyKGluZm8pO1xcbiBcXHRpZihyZXQgXFx1MDAzYyAwKVxcbi1cXHR7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJjaGVja2VudHJ5IGhlbHBlciByZXR1cm4gaW52YWxpZFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHR9XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiBcXG4gXFx0aW5mby1cXHUwMDNldGltZXIgPSBfX2lkbGV0aW1lcl90Z19maW5kX2J5X2xhYmVsKGluZm8tXFx1MDAzZWxhYmVsKTtcXG4gXFx0aWYgKGluZm8tXFx1MDAzZXRpbWVyKSB7XFxuIFxcdFxcdGlmIChpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXJfdHlwZSBcXHUwMDI2IFhUX0lETEVUSU1FUl9BTEFSTSkge1xcbi1cXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiQWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbitcXHRcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJBZGRpbmcvUmVwbGFjaW5nIHJ1bGUgd2l0aCBzYW1lIGxhYmVsIGFuZCBkaWZmZXJlbnQgdGltZXIgdHlwZSBpcyBub3QgYWxsb3dlZFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlcmVmY250Kys7XFxuIFxcdFxcdG1vZF90aW1lcihcXHUwMDI2aW5mby1cXHUwMDNldGltZXItXFx1MDAzZXRpbWVyLFxcbiBcXHRcXHRcXHQgIHNlY3NfdG9famlmZmllcyhpbmZvLVxcdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xcbi1cXG4tXFx0XFx0cHJfZGVidWcoXFxcImluY3JlYXNlZCByZWZjbnQgb2YgdGltZXIgJXMgdG8gJXVcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCBpbmZvLVxcdTAwM2VsYWJlbCwgaW5mby1cXHUwMDNldGltZXItXFx1MDAzZXJlZmNudCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHJldCA9IGlkbGV0aW1lcl90Z19jcmVhdGUoaW5mbyk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdFxcdHByX2RlYnVnKFxcXCJmYWlsZWQgdG8gY3JlYXRlIHRpbWVyXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X211dGV4KTtcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0fVxcbkBAIC0zNjAsMzAgKzM0MSwyMyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxcbiBcXHRzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItXFx1MDAzZXRhcmdpbmZvO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cHJfZGVidWcoXFxcImNoZWNrZW50cnkgdGFyZ2luZm8lc1xcXFxuXFxcIiwgaW5mby1cXHUwMDNlbGFiZWwpO1xcbi1cXG4gXFx0aWYgKGluZm8tXFx1MDAzZXNlbmRfbmxfbXNnKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbiBcXHRyZXQgPSBpZGxldGltZXJfdGdfaGVscGVyKChzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKilpbmZvKTtcXG4gXFx0aWYocmV0IFxcdTAwM2MgMClcXG4tXFx0e1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiY2hlY2tlbnRyeSBoZWxwZXIgcmV0dXJuIGludmFsaWRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0fVxcbiBcXG4tXFx0aWYgKGluZm8tXFx1MDAzZXRpbWVyX3R5cGUgXFx1MDAzZSBYVF9JRExFVElNRVJfQUxBUk0pIHtcXG4tXFx0XFx0cHJfZGVidWcoXFxcImludmFsaWQgdmFsdWUgZm9yIHRpbWVyIHR5cGVcXFxcblxcXCIpO1xcbitcXHRpZiAoaW5mby1cXHUwMDNldGltZXJfdHlwZSBcXHUwMDNlIFhUX0lETEVUSU1FUl9BTEFSTSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdH1cXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiBcXG4gXFx0aW5mby1cXHUwMDNldGltZXIgPSBfX2lkbGV0aW1lcl90Z19maW5kX2J5X2xhYmVsKGluZm8tXFx1MDAzZWxhYmVsKTtcXG4gXFx0aWYgKGluZm8tXFx1MDAzZXRpbWVyKSB7XFxuIFxcdFxcdGlmIChpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXJfdHlwZSAhPSBpbmZvLVxcdTAwM2V0aW1lcl90eXBlKSB7XFxuLVxcdFxcdFxcdHByX2RlYnVnKFxcXCJBZGRpbmcvUmVwbGFjaW5nIHJ1bGUgd2l0aCBzYW1lIGxhYmVsIGFuZCBkaWZmZXJlbnQgdGltZXIgdHlwZSBpcyBub3QgYWxsb3dlZFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bGlzdF9tdXRleCk7XFxuK1xcdFxcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcIkFkZGluZy9SZXBsYWNpbmcgcnVsZSB3aXRoIHNhbWUgbGFiZWwgYW5kIGRpZmZlcmVudCB0aW1lciB0eXBlIGlzIG5vdCBhbGxvd2VkXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTM5MywyMSArMzY3LDE1IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXFxuIFxcdFxcdFxcdGt0aW1lX3QgdG91dCA9IGFsYXJtX2V4cGlyZXNfcmVtYWluaW5nKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlYWxhcm0pO1xcbiBcXHRcXHRcXHRzdHJ1Y3QgdGltZXNwZWM2NCBrdGltZXNwZWMgPSBrdGltZV90b190aW1lc3BlYzY0KHRvdXQpO1xcbiBcXG4tXFx0XFx0XFx0aWYgKGt0aW1lc3BlYy50dl9zZWMgXFx1MDAzZSAwKSB7XFxuLVxcdFxcdFxcdFxcdHByX2RlYnVnKFxcXCJ0aW1lX2V4cGlyeV9yZW1haW5pbmcgJWxsZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0IGt0aW1lc3BlYy50dl9zZWMpO1xcbitcXHRcXHRcXHRpZiAoa3RpbWVzcGVjLnR2X3NlYyBcXHUwMDNlIDApXFxuIFxcdFxcdFxcdFxcdGlkbGV0aW1lcl9zdGFydF9hbGFybV9rdGltZShpbmZvLVxcdTAwM2V0aW1lciwgdG91dCk7XFxuLVxcdFxcdFxcdH1cXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0bW9kX3RpbWVyKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNldGltZXIsXFxuIFxcdFxcdFxcdFxcdFxcdHNlY3NfdG9famlmZmllcyhpbmZvLVxcdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJpbmNyZWFzZWQgcmVmY250IG9mIHRpbWVyICVzIHRvICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgaW5mby1cXHUwMDNlbGFiZWwsIGluZm8tXFx1MDAzZXRpbWVyLVxcdTAwM2VyZWZjbnQpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRyZXQgPSBpZGxldGltZXJfdGdfY3JlYXRlX3YxKGluZm8pO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiZmFpbGVkIHRvIGNyZWF0ZSB0aW1lclxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bGlzdF9tdXRleCk7XFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdH1cXG5AQCAtNDIxLDE5ICszODksMTMgQEAgc3RhdGljIHZvaWQgaWRsZXRpbWVyX3RnX2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X3RnZHRvcl9wYXJhbSAqcGFyKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBpZGxldGltZXJfdGdfaW5mbyAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxuIFxcbi1cXHRwcl9kZWJ1ZyhcXFwiZGVzdHJveSB0YXJnaW5mbyAlc1xcXFxuXFxcIiwgaW5mby1cXHUwMDNlbGFiZWwpO1xcbi1cXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2bGlzdF9tdXRleCk7XFxuIFxcbiBcXHRpZiAoLS1pbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlcmVmY250IFxcdTAwM2UgMCkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiZGVjcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0IGluZm8tXFx1MDAzZWxhYmVsLCBpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlcmVmY250KTtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X211dGV4KTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRwcl9kZWJ1ZyhcXFwiZGVsZXRpbmcgdGltZXIgJXNcXFxcblxcXCIsIGluZm8tXFx1MDAzZWxhYmVsKTtcXG4tXFxuIFxcdGxpc3RfZGVsKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlZW50cnkpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiBcXG5AQCAtNDQ4LDE5ICs0MTAsMTMgQEAgc3RhdGljIHZvaWQgaWRsZXRpbWVyX3RnX2Rlc3Ryb3lfdjEoY29uc3Qgc3RydWN0IHh0X3RnZHRvcl9wYXJhbSAqcGFyKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbyA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxuIFxcbi1cXHRwcl9kZWJ1ZyhcXFwiZGVzdHJveSB0YXJnaW5mbyAlc1xcXFxuXFxcIiwgaW5mby1cXHUwMDNlbGFiZWwpO1xcbi1cXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2bGlzdF9tdXRleCk7XFxuIFxcbiBcXHRpZiAoLS1pbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlcmVmY250IFxcdTAwM2UgMCkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiZGVjcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0IGluZm8tXFx1MDAzZWxhYmVsLCBpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlcmVmY250KTtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsaXN0X211dGV4KTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRwcl9kZWJ1ZyhcXFwiZGVsZXRpbmcgdGltZXIgJXNcXFxcblxcXCIsIGluZm8tXFx1MDAzZWxhYmVsKTtcXG4tXFxuIFxcdGxpc3RfZGVsKFxcdTAwMjZpbmZvLVxcdTAwM2V0aW1lci1cXHUwMDNlZW50cnkpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmxpc3RfbXV0ZXgpO1xcbiBcXG5AQCAtNTM0LDcgKzQ5MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGlkbGV0aW1lcl90Z19pbml0KHZvaWQpXFxuIFxcdGlkbGV0aW1lcl90Z19jbGFzcyA9IGNsYXNzX2NyZWF0ZShcXFwieHRfaWRsZXRpbWVyXFxcIik7XFxuIFxcdGVyciA9IFBUUl9FUlIoaWRsZXRpbWVyX3RnX2NsYXNzKTtcXG4gXFx0aWYgKElTX0VSUihpZGxldGltZXJfdGdfY2xhc3MpKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJjb3VsZG4ndCByZWdpc3RlciBkZXZpY2UgY2xhc3NcXFxcblxcXCIpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJjb3VsZG4ndCByZWdpc3RlciBkZXZpY2UgY2xhc3NcXFxcblxcXCIpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG5AQCAtNTQyLDcgKzQ5OCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGlkbGV0aW1lcl90Z19pbml0KHZvaWQpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBNS0RFVigwLCAwKSwgTlVMTCwgXFxcInRpbWVyc1xcXCIpO1xcbiBcXHRlcnIgPSBQVFJfRVJSKGlkbGV0aW1lcl90Z19kZXZpY2UpO1xcbiBcXHRpZiAoSVNfRVJSKGlkbGV0aW1lcl90Z19kZXZpY2UpKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJjb3VsZG4ndCByZWdpc3RlciBzeXN0ZW0gZGV2aWNlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwiY291bGRuJ3QgcmVnaXN0ZXIgc3lzdGVtIGRldmljZVxcXFxuXFxcIik7XFxuIFxcdFxcdGdvdG8gb3V0X2NsYXNzO1xcbiBcXHR9XFxuIFxcbkBAIC01NTEsNyArNTA3LDcgQEAgc3RhdGljIGludCBfX2luaXQgaWRsZXRpbWVyX3RnX2luaXQodm9pZClcXG4gXFx0ZXJyID0geHRfcmVnaXN0ZXJfdGFyZ2V0cyhpZGxldGltZXJfdGcsIEFSUkFZX1NJWkUoaWRsZXRpbWVyX3RnKSk7XFxuIFxcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiY291bGRuJ3QgcmVnaXN0ZXIgeHQgdGFyZ2V0XFxcXG5cXFwiKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwiY291bGRuJ3QgcmVnaXN0ZXIgeHQgdGFyZ2V0XFxcXG5cXFwiKTtcXG4gXFx0XFx0Z290byBvdXRfZGV2O1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0xPRy5jIGIvbmV0L25ldGZpbHRlci94dF9MT0cuY1xcbmluZGV4IGYzOTI0NGY5YzBlZDkuLmRlM2YxNzY3OTJhMDcgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9MT0cuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTE9HLmNcXG5AQCAtNTAsMTIgKzUwLDEyIEBAIHN0YXRpYyBpbnQgbG9nX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmIChsb2dpbmZvLVxcdTAwM2VsZXZlbCBcXHUwMDNlPSA4KSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJsZXZlbCAldSBcXHUwMDNlPSA4XFxcXG5cXFwiLCBsb2dpbmZvLVxcdTAwM2VsZXZlbCk7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcImxldmVsICV1IFxcdTAwM2U9IDhcXFxcblxcXCIsIGxvZ2luZm8tXFx1MDAzZWxldmVsKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChsb2dpbmZvLVxcdTAwM2VwcmVmaXhbc2l6ZW9mKGxvZ2luZm8tXFx1MDAzZXByZWZpeCktMV0gIT0gJ1xcXFwwJykge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwicHJlZml4IGlzIG5vdCBudWxsLXRlcm1pbmF0ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJwcmVmaXggaXMgbm90IG51bGwtdGVybWluYXRlZFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuYyBiL25ldC9uZXRmaWx0ZXIveHRfTUFTUVVFUkFERS5jXFxuaW5kZXggZWFlMDVjMTc4MzM2Ny4uY2VhNDg4Y2VjNTQ0NSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTUFTUVVFUkFERS5jXFxuQEAgLTIxLDExICsyMSwxMSBAQCBzdGF0aWMgaW50IG1hc3F1ZXJhZGVfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXFxuIFxcdGNvbnN0IHN0cnVjdCBuZl9uYXRfaXB2NF9tdWx0aV9yYW5nZV9jb21wYXQgKm1yID0gcGFyLVxcdTAwM2V0YXJnaW5mbztcXG4gXFxuIFxcdGlmIChtci1cXHUwMDNlcmFuZ2VbMF0uZmxhZ3MgXFx1MDAyNiBORl9OQVRfUkFOR0VfTUFQX0lQUykge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiYmFkIE1BUF9JUFMuXFxcXG5cXFwiKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwiYmFkIE1BUF9JUFMuXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFx0aWYgKG1yLVxcdTAwM2VyYW5nZXNpemUgIT0gMSkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiYmFkIHJhbmdlc2l6ZSAldVxcXFxuXFxcIiwgbXItXFx1MDAzZXJhbmdlc2l6ZSk7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcImJhZCByYW5nZXNpemUgJXVcXFxcblxcXCIsIG1yLVxcdTAwM2VyYW5nZXNpemUpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gbmZfY3RfbmV0bnNfZ2V0KHBhci1cXHUwMDNlbmV0LCBwYXItXFx1MDAzZWZhbWlseSk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfTkVUTUFQLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jXFxuaW5kZXggY2IyZWU4MGQ4NGZhOC4uOGM4NmQ5YTQzMzczYSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci94dF9ORVRNQVAuY1xcbkBAIC0xMDYsMTEgKzEwNiwxMSBAQCBzdGF0aWMgaW50IG5ldG1hcF90ZzRfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXFxuIFxcdGNvbnN0IHN0cnVjdCBuZl9uYXRfaXB2NF9tdWx0aV9yYW5nZV9jb21wYXQgKm1yID0gcGFyLVxcdTAwM2V0YXJnaW5mbztcXG4gXFxuIFxcdGlmICghKG1yLVxcdTAwM2VyYW5nZVswXS5mbGFncyBcXHUwMDI2IE5GX05BVF9SQU5HRV9NQVBfSVBTKSkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiYmFkIE1BUF9JUFMuXFxcXG5cXFwiKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwiYmFkIE1BUF9JUFMuXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFx0aWYgKG1yLVxcdTAwM2VyYW5nZXNpemUgIT0gMSkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiYmFkIHJhbmdlc2l6ZSAldS5cXFxcblxcXCIsIG1yLVxcdTAwM2VyYW5nZXNpemUpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKFxcXCJiYWQgcmFuZ2VzaXplICV1LlxcXFxuXFxcIiwgbXItXFx1MDAzZXJhbmdlc2l6ZSk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcdHJldHVybiBuZl9jdF9uZXRuc19nZXQocGFyLVxcdTAwM2VuZXQsIHBhci1cXHUwMDNlZmFtaWx5KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jIGIvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jXFxuaW5kZXggZmY2NmI1NmEzZjk3ZC4uMjdiYzA1NDVjNGY3NCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X1JFRElSRUNULmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X1JFRElSRUNULmNcXG5AQCAtNTEsMTEgKzUxLDExIEBAIHN0YXRpYyBpbnQgcmVkaXJlY3RfdGc0X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxcbiBcXHRjb25zdCBzdHJ1Y3QgbmZfbmF0X2lwdjRfbXVsdGlfcmFuZ2VfY29tcGF0ICptciA9IHBhci1cXHUwMDNldGFyZ2luZm87XFxuIFxcbiBcXHRpZiAobXItXFx1MDAzZXJhbmdlWzBdLmZsYWdzIFxcdTAwMjYgTkZfTkFUX1JBTkdFX01BUF9JUFMpIHtcXG4tXFx0XFx0cHJfZGVidWcoXFxcImJhZCBNQVBfSVBTLlxcXFxuXFxcIik7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcImJhZCBNQVBfSVBTLlxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcdGlmIChtci1cXHUwMDNlcmFuZ2VzaXplICE9IDEpIHtcXG4tXFx0XFx0cHJfZGVidWcoXFxcImJhZCByYW5nZXNpemUgJXUuXFxcXG5cXFwiLCBtci1cXHUwMDNlcmFuZ2VzaXplKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwiYmFkIHJhbmdlc2l6ZSAldS5cXFxcblxcXCIsIG1yLVxcdTAwM2VyYW5nZXNpemUpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gbmZfY3RfbmV0bnNfZ2V0KHBhci1cXHUwMDNlbmV0LCBwYXItXFx1MDAzZWZhbWlseSk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jIGIvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmNcXG5pbmRleCA1YmM1ZWE1MDVlYjllLi4zOGU4ZTQxMGI0ZTgxIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jXFxuKysrIGIvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmNcXG5AQCAtNzksOCArNzksNyBAQCBzZWNtYXJrX3RnX2NoZWNrKGNvbnN0IGNoYXIgKnRhYmxlLCBzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfaW5mb192MSAqaW5mbylcXG4gXFxuIFxcdGlmIChzdHJjbXAodGFibGUsIFxcXCJtYW5nbGVcXFwiKSAhPSAwIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBzdHJjbXAodGFibGUsIFxcXCJzZWN1cml0eVxcXCIpICE9IDApIHtcXG4tXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwib25seSB2YWxpZCBpbiBcXFxcJ21hbmdsZVxcXFwnIG9yIFxcXFwnc2VjdXJpdHlcXFxcJyB0YWJsZSwgbm90IFxcXFwnJXNcXFxcJ1xcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgIHRhYmxlKTtcXG4rXFx0XFx0cHJfaW5mb19yYXRlbGltaXRlZChcXFwib25seSB2YWxpZCBpbiBcXFxcJ21hbmdsZVxcXFwnIG9yIFxcXFwnc2VjdXJpdHlcXFxcJyB0YWJsZVxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2Nncm91cC5jIGIvbmV0L25ldGZpbHRlci94dF9jZ3JvdXAuY1xcbmluZGV4IDQzZDJhZTJiZTYyOGQuLmFjMWI3ZTcxY2Q3ZjUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9jZ3JvdXAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfY2dyb3VwLmNcXG5AQCAtMzMsNyArMzMsNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192MChjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHtcXG4tXFx0XFx0cHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YxKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmICghaW5mby1cXHUwMDNlaGFzX3BhdGggXFx1MDAyNlxcdTAwMjYgIWluZm8tXFx1MDAzZWhhc19jbGFzc2lkKSB7XFxuLVxcdFxcdHByX2luZm8oXFxcInh0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxcXFxuXFxcIik7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcInh0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbkBAIC01OSw3ICs1OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YxKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoaW5mby1cXHUwMDNlaGFzX2NsYXNzaWQgXFx1MDAyNlxcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHtcXG4tXFx0XFx0cHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YyKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmICghaW5mby1cXHUwMDNlaGFzX3BhdGggXFx1MDAyNlxcdTAwMjYgIWluZm8tXFx1MDAzZWhhc19jbGFzc2lkKSB7XFxuLVxcdFxcdHByX2luZm8oXFxcInh0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxcXFxuXFxcIik7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcInh0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YyKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoaW5mby1cXHUwMDNlaGFzX2NsYXNzaWQgXFx1MDAyNlxcdTAwMjYgIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHtcXG4tXFx0XFx0cHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xcbitcXHRcXHRwcl9pbmZvX3JhdGVsaW1pdGVkKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jIGIvbmV0L25ldGZpbHRlci94dF9lc3AuY1xcbmluZGV4IDJhMWMwYWQwZmYwNzkuLjY4ZmQ3NTg4NDI2OGEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9lc3AuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfZXNwLmNcXG5AQCAtMjUsMTIgKzI1LDcgQEAgTU9EVUxFX0FMSUFTKFxcXCJpcDZ0X2VzcFxcXCIpO1xcbiBzdGF0aWMgaW5saW5lIGJvb2xcXG4gc3BpX21hdGNoKHVfaW50MzJfdCBtaW4sIHVfaW50MzJfdCBtYXgsIHVfaW50MzJfdCBzcGksIGJvb2wgaW52ZXJ0KVxcbiB7XFxuLVxcdGJvb2wgcjtcXG4tXFx0cHJfZGVidWcoXFxcInNwaV9tYXRjaDolYyAweCV4IFxcdTAwM2M9IDB4JXggXFx1MDAzYz0gMHgleFxcXFxuXFxcIixcXG4tXFx0XFx0IGludmVydCA/ICchJyA6ICcgJywgbWluLCBzcGksIG1heCk7XFxuLVxcdHIgPSAoc3BpIFxcdTAwM2U9IG1pbiBcXHUwMDI2XFx1MDAyNiBzcGkgXFx1MDAzYz0gbWF4KSBeIGludmVydDtcXG4tXFx0cHJfZGVidWcoXFxcIiByZXN1bHQgJXNcXFxcblxcXCIsIHIgPyBcXFwiUEFTU1xcXCIgOiBcXFwiRkFJTEVEXFxcIik7XFxuLVxcdHJldHVybiByO1xcbitcXHRyZXR1cm4gKHNwaSBcXHUwMDNlPSBtaW4gXFx1MDAyNlxcdTAwMjYgc3BpIFxcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGVzcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuQEAgLTQ4LDcgKzQzLDYgQEAgc3RhdGljIGJvb2wgZXNwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0XFx0LyogV2UndmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2VcXG4gXFx0XFx0ICogY2FuJ3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0cHJfZGVidWcoXFxcIkRyb3BwaW5nIGV2aWwgRVNQIHRpbnlncmFtLlxcXFxuXFxcIik7XFxuIFxcdFxcdHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWU7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbkBAIC02Miw3ICs1Niw3IEBAIHN0YXRpYyBpbnQgZXNwX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxcbiBcXHRjb25zdCBzdHJ1Y3QgeHRfZXNwICplc3BpbmZvID0gcGFyLVxcdTAwM2VtYXRjaGluZm87XFxuIFxcbiBcXHRpZiAoZXNwaW5mby1cXHUwMDNlaW52ZmxhZ3MgXFx1MDAyNiB+WFRfRVNQX0lOVl9NQVNLKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJ1bmtub3duIGZsYWdzICVYXFxcXG5cXFwiLCBlc3BpbmZvLVxcdTAwM2VpbnZmbGFncyk7XFxuK1xcdFxcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXFxcInVua25vd24gZmxhZ3MgJVhcXFxcblxcXCIsIGVzcGluZm8tXFx1MDAzZWludmZsYWdzKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaXBjb21wLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwY29tcC5jXFxuaW5kZXggNDcyZGE2MzlhMzJlMi4uMzI5OWMxZWE2MGY5ZSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2lwY29tcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci94dF9pcGNvbXAuY1xcbkBAIC0yOSwxMiArMjksNyBAQCBNT0RVTEVfQUxJQVMoXFxcImlwNnRfaXBjb21wXFxcIik7XFxuIHN0YXRpYyBpbmxpbmUgYm9vbFxcbiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpXFxuIHtcXG4tXFx0Ym9vbCByO1xcbi1cXHRwcl9kZWJ1ZyhcXFwic3BpX21hdGNoOiVjIDB4JXggXFx1MDAzYz0gMHgleCBcXHUwMDNjPSAweCV4XFxcXG5cXFwiLFxcbi1cXHRcXHQgaW52ZXJ0ID8gJyEnIDogJyAnLCBtaW4sIHNwaSwgbWF4KTtcXG4tXFx0ciA9IChzcGkgXFx1MDAzZT0gbWluIFxcdTAwMjZcXHUwMDI2IHNwaSBcXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xcbi1cXHRwcl9kZWJ1ZyhcXFwiIHJlc3VsdCAlc1xcXFxuXFxcIiwgciA/IFxcXCJQQVNTXFxcIiA6IFxcXCJGQUlMRURcXFwiKTtcXG4tXFx0cmV0dXJuIHI7XFxuK1xcdHJldHVybiAoc3BpIFxcdTAwM2U9IG1pbiBcXHUwMDI2XFx1MDAyNiBzcGkgXFx1MDAzYz0gbWF4KSBeIGludmVydDtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgY29tcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuQEAgLTUyLDcgKzQ3LDYgQEAgc3RhdGljIGJvb2wgY29tcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIFxcdFxcdC8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXFxuIFxcdFxcdCAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHByX2RlYnVnKFxcXCJEcm9wcGluZyBldmlsIElQQ29tcCB0aW55Z3JhbS5cXFxcblxcXCIpO1xcbiBcXHRcXHRwYXItXFx1MDAzZWhvdGRyb3AgPSB0cnVlO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuY1xcbmluZGV4IDBjOWUwMTRlMzBiNDkuLmJmNjExNDFmYjc4NTAgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuY1xcbkBAIC0yNCwyNyArMjQsMTUgQEAgaXByYW5nZV9tdDQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRcXHRtICA9IG50b2hsKGlwaC1cXHUwMDNlc2FkZHIpIFxcdTAwM2MgbnRvaGwoaW5mby1cXHUwMDNlc3JjX21pbi5pcCk7XFxuIFxcdFxcdG0gfD0gbnRvaGwoaXBoLVxcdTAwM2VzYWRkcikgXFx1MDAzZSBudG9obChpbmZvLVxcdTAwM2VzcmNfbWF4LmlwKTtcXG4gXFx0XFx0bSBePSAhIShpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQUkFOR0VfU1JDX0lOVik7XFxuLVxcdFxcdGlmIChtKSB7XFxuLVxcdFxcdFxcdHByX2RlYnVnKFxcXCJzcmMgSVAgJXBJNCBOT1QgaW4gcmFuZ2UgJXMlcEk0LSVwSTRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICAgIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHQgICAgICAgICAoaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUFJBTkdFX1NSQ19JTlYpID8gXFxcIihJTlYpIFxcXCIgOiBcXFwiXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgICAgXFx1MDAyNmluZm8tXFx1MDAzZXNyY19taW4uaXAsXFxuLVxcdFxcdFxcdCAgICAgICAgIFxcdTAwMjZpbmZvLVxcdTAwM2VzcmNfbWF4LmlwKTtcXG4rXFx0XFx0aWYgKG0pXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0XFx0fVxcbiBcXHR9XFxuIFxcdGlmIChpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQUkFOR0VfRFNUKSB7XFxuIFxcdFxcdG0gID0gbnRvaGwoaXBoLVxcdTAwM2VkYWRkcikgXFx1MDAzYyBudG9obChpbmZvLVxcdTAwM2Vkc3RfbWluLmlwKTtcXG4gXFx0XFx0bSB8PSBudG9obChpcGgtXFx1MDAzZWRhZGRyKSBcXHUwMDNlIG50b2hsKGluZm8tXFx1MDAzZWRzdF9tYXguaXApO1xcbiBcXHRcXHRtIF49ICEhKGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBSQU5HRV9EU1RfSU5WKTtcXG4tXFx0XFx0aWYgKG0pIHtcXG4tXFx0XFx0XFx0cHJfZGVidWcoXFxcImRzdCBJUCAlcEk0IE5PVCBpbiByYW5nZSAlcyVwSTQtJXBJNFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgICAgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIsXFxuLVxcdFxcdFxcdCAgICAgICAgIChpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQUkFOR0VfRFNUX0lOVikgPyBcXFwiKElOVikgXFxcIiA6IFxcXCJcXFwiLFxcbi1cXHRcXHRcXHQgICAgICAgICBcXHUwMDI2aW5mby1cXHUwMDNlZHN0X21pbi5pcCxcXG4tXFx0XFx0XFx0ICAgICAgICAgXFx1MDAyNmluZm8tXFx1MDAzZWRzdF9tYXguaXApO1xcbitcXHRcXHRpZiAobSlcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRcXHR9XFxuIFxcdH1cXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG5AQCAtNzMsMjcgKzYxLDE1IEBAIGlwcmFuZ2VfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0XFx0bSAgPSBpcHJhbmdlX2lwdjZfbHQoXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIsIFxcdTAwMjZpbmZvLVxcdTAwM2VzcmNfbWluLmluNik7XFxuIFxcdFxcdG0gfD0gaXByYW5nZV9pcHY2X2x0KFxcdTAwMjZpbmZvLVxcdTAwM2VzcmNfbWF4LmluNiwgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIpO1xcbiBcXHRcXHRtIF49ICEhKGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBSQU5HRV9TUkNfSU5WKTtcXG4tXFx0XFx0aWYgKG0pIHtcXG4tXFx0XFx0XFx0cHJfZGVidWcoXFxcInNyYyBJUCAlcEk2IE5PVCBpbiByYW5nZSAlcyVwSTYtJXBJNlxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0IFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHRcXHQgKGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBSQU5HRV9TUkNfSU5WKSA/IFxcXCIoSU5WKSBcXFwiIDogXFxcIlxcXCIsXFxuLVxcdFxcdFxcdFxcdCBcXHUwMDI2aW5mby1cXHUwMDNlc3JjX21pbi5pbjYsXFxuLVxcdFxcdFxcdFxcdCBcXHUwMDI2aW5mby1cXHUwMDNlc3JjX21heC5pbjYpO1xcbitcXHRcXHRpZiAobSlcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRcXHR9XFxuIFxcdH1cXG4gXFx0aWYgKGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBSQU5HRV9EU1QpIHtcXG4gXFx0XFx0bSAgPSBpcHJhbmdlX2lwdjZfbHQoXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIsIFxcdTAwMjZpbmZvLVxcdTAwM2Vkc3RfbWluLmluNik7XFxuIFxcdFxcdG0gfD0gaXByYW5nZV9pcHY2X2x0KFxcdTAwMjZpbmZvLVxcdTAwM2Vkc3RfbWF4LmluNiwgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIpO1xcbiBcXHRcXHRtIF49ICEhKGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBSQU5HRV9EU1RfSU5WKTtcXG4tXFx0XFx0aWYgKG0pIHtcXG4tXFx0XFx0XFx0cHJfZGVidWcoXFxcImRzdCBJUCAlcEk2IE5PVCBpbiByYW5nZSAlcyVwSTYtJXBJNlxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0IFxcdTAwMjZpcGgtXFx1MDAzZWRhZGRyLFxcbi1cXHRcXHRcXHRcXHQgKGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBSQU5HRV9EU1RfSU5WKSA/IFxcXCIoSU5WKSBcXFwiIDogXFxcIlxcXCIsXFxuLVxcdFxcdFxcdFxcdCBcXHUwMDI2aW5mby1cXHUwMDNlZHN0X21pbi5pbjYsXFxuLVxcdFxcdFxcdFxcdCBcXHUwMDI2aW5mby1cXHUwMDNlZHN0X21heC5pbjYpO1xcbitcXHRcXHRpZiAobSlcXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRcXHR9XFxuIFxcdH1cXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcHZzLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwdnMuY1xcbmluZGV4IDI1M2M3MWNjOWE2MzQuLmUxM2MwZmZiNzNhOWEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcHZzLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwdnMuY1xcbkBAIC0xNDgsNyArMTQ4LDYgQEAgaXB2c19tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIG91dF9wdXRfY3A6XFxuIFxcdF9faXBfdnNfY29ubl9wdXQoY3ApO1xcbiBvdXQ6XFxuLVxcdHByX2RlYnVnKFxcXCJtYXRjaD0lZFxcXFxuXFxcIiwgbWF0Y2gpO1xcbiBcXHRyZXR1cm4gbWF0Y2g7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jXFxuaW5kZXggYTE2OTFmZjQwNWQzYy4uYmZmNWY1M2E5YmVmYiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuY1xcbkBAIC0zNyw3ICszNyw2IEBAIHBvcnRzX21hdGNoX3YxKGNvbnN0IHN0cnVjdCB4dF9tdWx0aXBvcnRfdjEgKm1pbmZvLFxcbiBcXHRcXHRpZiAobWluZm8tXFx1MDAzZXBmbGFnc1tpXSkge1xcbiBcXHRcXHRcXHQvKiByYW5nZSBwb3J0IG1hdGNoaW5nICovXFxuIFxcdFxcdFxcdGUgPSBtaW5mby1cXHUwMDNlcG9ydHNbKytpXTtcXG4tXFx0XFx0XFx0cHJfZGVidWcoXFxcInNyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkLSVkP1xcXFxuXFxcIiwgcywgZSk7XFxuIFxcbiBcXHRcXHRcXHRzd2l0Y2ggKG1pbmZvLVxcdTAwM2VmbGFncykge1xcbiBcXHRcXHRcXHRjYXNlIFhUX01VTFRJUE9SVF9TT1VSQ0U6XFxuQEAgLTU4LDggKzU3LDYgQEAgcG9ydHNfbWF0Y2hfdjEoY29uc3Qgc3RydWN0IHh0X211bHRpcG9ydF92MSAqbWluZm8sXFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0LyogZXhhY3QgcG9ydCBtYXRjaGluZyAqL1xcbi1cXHRcXHRcXHRwcl9kZWJ1ZyhcXFwic3JjIG9yIGRzdCBtYXRjaGVzIHdpdGggJWQ/XFxcXG5cXFwiLCBzKTtcXG4tXFxuIFxcdFxcdFxcdHN3aXRjaCAobWluZm8tXFx1MDAzZWZsYWdzKSB7XFxuIFxcdFxcdFxcdGNhc2UgWFRfTVVMVElQT1JUX1NPVVJDRTpcXG4gXFx0XFx0XFx0XFx0aWYgKHNyYyA9PSBzKVxcbkBAIC05Nyw3ICs5NCw2IEBAIG11bHRpcG9ydF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIFxcdFxcdC8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXFxuIFxcdFxcdCAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHByX2RlYnVnKFxcXCJEcm9wcGluZyBldmlsIG9mZnNldD0wIHRpbnlncmFtLlxcXFxuXFxcIik7XFxuIFxcdFxcdHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWU7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jXFxuaW5kZXggYjQ2YTZhNTEyMDU4My4uZDM1YzIxZDk2NTFiMCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jXFxuQEAgLTQ4LDMwICs0OCwxNyBAQCBtYXRjaF9wYWNrZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0Y29uc3Qgc3RydWN0IHh0X3NjdHBfZmxhZ19pbmZvICpmbGFnX2luZm8gPSBpbmZvLVxcdTAwM2VmbGFnX2luZm87XFxuIFxcdGludCBmbGFnX2NvdW50ID0gaW5mby1cXHUwMDNlZmxhZ19jb3VudDtcXG4gXFxuLSNpZmRlZiBERUJVR1xcbi1cXHRpbnQgaSA9IDA7XFxuLSNlbmRpZlxcbi1cXG4gXFx0aWYgKGNodW5rX21hdGNoX3R5cGUgPT0gU0NUUF9DSFVOS19NQVRDSF9BTEwpXFxuIFxcdFxcdFNDVFBfQ0hVTktNQVBfQ09QWShjaHVua21hcGNvcHksIGluZm8tXFx1MDAzZWNodW5rbWFwKTtcXG4gXFxuIFxcdGRvIHtcXG4gXFx0XFx0c2NoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX3NjaCksIFxcdTAwMjZfc2NoKTtcXG4gXFx0XFx0aWYgKHNjaCA9PSBOVUxMIHx8IHNjaC1cXHUwMDNlbGVuZ3RoID09IDApIHtcXG4tXFx0XFx0XFx0cHJfZGVidWcoXFxcIkRyb3BwaW5nIGludmFsaWQgU0NUUCBwYWNrZXQuXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0KmhvdGRyb3AgPSB0cnVlO1xcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdH1cXG4tI2lmZGVmIERFQlVHXFxuLVxcdFxcdHByX2RlYnVnKFxcXCJDaHVuayBudW06ICVkXFxcXHRvZmZzZXQ6ICVkXFxcXHR0eXBlOiAlZFxcXFx0bGVuZ3RoOiAlZFxcXCJcXG4tXFx0XFx0XFx0IFxcXCJcXFxcdGZsYWdzOiAleFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICsraSwgb2Zmc2V0LCBzY2gtXFx1MDAzZXR5cGUsIGh0b25zKHNjaC1cXHUwMDNlbGVuZ3RoKSxcXG4tXFx0XFx0XFx0IHNjaC1cXHUwMDNlZmxhZ3MpO1xcbi0jZW5kaWZcXG4gXFx0XFx0b2Zmc2V0ICs9IFNDVFBfUEFENChudG9ocyhzY2gtXFx1MDAzZWxlbmd0aCkpO1xcbiBcXG4tXFx0XFx0cHJfZGVidWcoXFxcInNrYi1cXHUwMDNlbGVuOiAlZFxcXFx0b2Zmc2V0OiAlZFxcXFxuXFxcIiwgc2tiLVxcdTAwM2VsZW4sIG9mZnNldCk7XFxuLVxcbiBcXHRcXHRpZiAoU0NUUF9DSFVOS01BUF9JU19TRVQoaW5mby1cXHUwMDNlY2h1bmttYXAsIHNjaC1cXHUwMDNldHlwZSkpIHtcXG4gXFx0XFx0XFx0c3dpdGNoIChjaHVua19tYXRjaF90eXBlKSB7XFxuIFxcdFxcdFxcdGNhc2UgU0NUUF9DSFVOS19NQVRDSF9BTlk6XFxuQEAgLTEyMSwxOCArMTA4LDE0IEBAIHNjdHBfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRjb25zdCBzdHJ1Y3Qgc2N0cGhkciAqc2g7XFxuIFxcdHN0cnVjdCBzY3RwaGRyIF9zaDtcXG4gXFxuLVxcdGlmIChwYXItXFx1MDAzZWZyYWdvZmYgIT0gMCkge1xcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiRHJvcHBpbmcgbm9uLWZpcnN0IGZyYWdtZW50Li4gRklYTUVcXFxcblxcXCIpO1xcbitcXHRpZiAocGFyLVxcdTAwM2VmcmFnb2ZmICE9IDApXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0fVxcbiBcXG4gXFx0c2ggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwYXItXFx1MDAzZXRob2ZmLCBzaXplb2YoX3NoKSwgXFx1MDAyNl9zaCk7XFxuIFxcdGlmIChzaCA9PSBOVUxMKSB7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJEcm9wcGluZyBldmlsIFRDUCBvZmZzZXQ9MCB0aW55Z3JhbS5cXFxcblxcXCIpO1xcbiBcXHRcXHRwYXItXFx1MDAzZWhvdGRyb3AgPSB0cnVlO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4tXFx0cHJfZGVidWcoXFxcInNwdDogJWRcXFxcdGRwdDogJWRcXFxcblxcXCIsIG50b2hzKHNoLVxcdTAwM2Vzb3VyY2UpLCBudG9ocyhzaC1cXHUwMDNlZGVzdCkpO1xcbiBcXG4gXFx0cmV0dXJuICBTQ0NIRUNLKG50b2hzKHNoLVxcdTAwM2Vzb3VyY2UpIFxcdTAwM2U9IGluZm8tXFx1MDAzZXNwdHNbMF1cXG4gXFx0XFx0XFx0XFx1MDAyNlxcdTAwMjYgbnRvaHMoc2gtXFx1MDAzZXNvdXJjZSkgXFx1MDAzYz0gaW5mby1cXHUwMDNlc3B0c1sxXSxcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuYyBiL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmNcXG5pbmRleCBmNzZjZjE4ZjFhMjQ0Li43MDYwOGI4ZDA2YWIyIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3RjcHVkcC5jXFxuQEAgLTQ0LDggKzQ0LDYgQEAgdGNwX2ZpbmRfb3B0aW9uKHVfaW50OF90IG9wdGlvbixcXG4gXFx0dV9pbnQ4X3QgX29wdFs2MCAtIHNpemVvZihzdHJ1Y3QgdGNwaGRyKV07XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbiBcXG4tXFx0cHJfZGVidWcoXFxcImZpbmRpbmcgb3B0aW9uXFxcXG5cXFwiKTtcXG4tXFxuIFxcdGlmICghb3B0bGVuKVxcbiBcXHRcXHRyZXR1cm4gaW52ZXJ0O1xcbiBcXG5AQCAtODEsMTAgKzc5LDggQEAgc3RhdGljIGJvb2wgdGNwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcXG4gXFx0XFx0ICAgY2F1c2VzIHRoaXMuIEl0cyBhIGNyYWNrZXIgdHJ5aW5nIHRvIGJyZWFrIGluIGJ5IGRvaW5nIGFcXG4gXFx0XFx0ICAgZmxhZyBvdmVyd3JpdGUgdG8gcGFzcyB0aGUgZGlyZWN0aW9uIGNoZWNrcy5cXG4gXFx0XFx0Ki9cXG4tXFx0XFx0aWYgKHBhci1cXHUwMDNlZnJhZ29mZiA9PSAxKSB7XFxuLVxcdFxcdFxcdHByX2RlYnVnKFxcXCJEcm9wcGluZyBldmlsIFRDUCBvZmZzZXQ9MSBmcmFnLlxcXFxuXFxcIik7XFxuK1xcdFxcdGlmIChwYXItXFx1MDAzZWZyYWdvZmYgPT0gMSlcXG4gXFx0XFx0XFx0cGFyLVxcdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcXG4tXFx0XFx0fVxcbiBcXHRcXHQvKiBNdXN0IG5vdCBiZSBhIGZyYWdtZW50LiAqL1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG5AQCAtOTMsNyArODksNiBAQCBzdGF0aWMgYm9vbCB0Y3BfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxcbiBcXHRpZiAodGggPT0gTlVMTCkge1xcbiBcXHRcXHQvKiBXZSd2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZVxcbiBcXHRcXHQgICBjYW4ndC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuICovXFxuLVxcdFxcdHByX2RlYnVnKFxcXCJEcm9wcGluZyBldmlsIFRDUCBvZmZzZXQ9MCB0aW55Z3JhbS5cXFxcblxcXCIpO1xcbiBcXHRcXHRwYXItXFx1MDAzZWhvdGRyb3AgPSB0cnVlO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG5AQCAtMTQ1LDcgKzE0MCw2IEBAIHN0YXRpYyBib29sIHVkcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuIFxcdGlmICh1aCA9PSBOVUxMKSB7XFxuIFxcdFxcdC8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXFxuIFxcdFxcdCAgIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4gKi9cXG4tXFx0XFx0cHJfZGVidWcoXFxcIkRyb3BwaW5nIGV2aWwgVURQIHRpbnlncmFtLlxcXFxuXFxcIik7XFxuIFxcdFxcdHBhci1cXHUwMDNlaG90ZHJvcCA9IHRydWU7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDozOToyMS44MjE3ODgwODdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzQ1ODM1MjIyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSX1hUX1RBUkdFVF9DVFwiLFxuICAgIFwiTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVJcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiSVBfTkZfUkFXXCIsXG4gICAgXCJORVRGSUxURVJfQURWQU5DRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4dF9jdF90Z19jaGVja1wiLFxuICAgIFwiaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlcIixcbiAgICBcImlkbGV0aW1lcl90Z19jaGVja2VudHJ5X3YxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHh0X0NULmNgIHRvIGNoYW5nZSB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYGluZm8tXFx1MDAzZWhlbHBlcmAgYW5kIGBpbmZvLVxcdTAwM2V0aW1lb3V0YC4gSWYgdGhleSBhcmUgbm90IG51bGwtdGVybWluYXRlZCwgdGhlIG5ldyBjb2RlIHNraXBzIHNldHRpbmcgdGhlbSBpbnN0ZWFkIG9mIHJldHVybmluZyBgLUVOQU1FVE9PTE9OR2AsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHRhcmdldCBpbml0aWFsaXphdGlvbiBsb2dpYy4gVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYHh0X0lETEVUSU1FUi5jYCB0byByZWxlYXNlIGEgbXV0ZXggYmVmb3JlIGxvZ2dpbmcsIHdoaWNoIGlzIGEgbWlub3IgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTMzOGFlYzU1Y2UxZWQwZmVmMDE4YjBjODdhNmFlMzQxYjZhNmE3N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE0OjM5OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jXG5pbmRleCAxNjFiYTQxMmNiMDhiLi43MTMxZjI5N2FkYTJlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FoLmNcbkBAIC0xOSwxMiArMTksNyBAQCBNT0RVTEVfREVTQ1JJUFRJT04oXCJYdGFibGVzOiBJUHY0IElQc2VjLUFIIFNQSSBtYXRjaFwiKTtcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpXG4ge1xuLVx0Ym9vbCByO1xuLVx0cHJfZGVidWcoXCJzcGlfbWF0Y2g6JWMgMHgleCBcdTAwM2M9IDB4JXggXHUwMDNjPSAweCV4XFxuXCIsXG4tXHRcdCBpbnZlcnQgPyAnIScgOiAnICcsIG1pbiwgc3BpLCBtYXgpO1xuLVx0ciA9IChzcGkgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IHNwaSBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4tXHRwcl9kZWJ1ZyhcIiByZXN1bHQgJXNcXG5cIiwgciA/IFwiUEFTU1wiIDogXCJGQUlMRURcIik7XG4tXHRyZXR1cm4gcjtcbitcdHJldHVybiAoc3BpIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBzcGkgXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBhaF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG5AQCAtNDIsNyArMzcsNiBAQCBzdGF0aWMgYm9vbCBhaF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdC8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXG4gXHRcdCAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC5cbiBcdFx0ICovXG4tXHRcdHByX2RlYnVnKFwiRHJvcHBpbmcgZXZpbCBBSCB0aW55Z3JhbS5cXG5cIik7XG4gXHRcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuQEAgLTU4LDcgKzUyLDcgQEAgc3RhdGljIGludCBhaF9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcbiBcdC8qIE11c3Qgc3BlY2lmeSBubyB1bmtub3duIGludmZsYWdzICovXG4gXHRpZiAoYWhpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiB+SVBUX0FIX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuY1xuaW5kZXggNmQ5YmY1MTA2ODY4NC4uMmMzOGZkNjYyNGFhMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuY1xuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ycGZpbHRlci5jXG5AQCAtOTUsOCArOTUsNyBAQCBzdGF0aWMgaW50IHJwZmlsdGVyX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFxuIFx0aWYgKHN0cmNtcChwYXItXHUwMDNldGFibGUsIFwibWFuZ2xlXCIpICE9IDAgXHUwMDI2XHUwMDI2XG4gXHQgICAgc3RyY21wKHBhci1cdTAwM2V0YWJsZSwgXCJyYXdcIikgIT0gMCkge1xuLVx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwib25seSB2YWxpZCBpbiBcXCdyYXdcXCcgb3IgXFwnbWFuZ2xlXFwnIHRhYmxlLCBub3QgXFwnJXNcXCdcXG5cIixcbi1cdFx0XHRcdCAgICBwYXItXHUwMDNldGFibGUpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwib25seSB2YWxpZCBpbiBcXCdyYXdcXCcgb3IgXFwnbWFuZ2xlXFwnIHRhYmxlXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguY1xuaW5kZXggMTI1ODc4M2VkODc2Mi4uZGFiN2RiYzZhNjc1YyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmNcbisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmNcbkBAIC0yNCwxMyArMjQsNyBAQCBNT0RVTEVfQVVUSE9SKFwiQW5kcmFzIEtpcy1TemFibyBcdTAwM2NraXN6YUBzY2guYm1lLmh1XHUwMDNlXCIpO1xuIHN0YXRpYyBpbmxpbmUgYm9vbFxuIHNwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBib29sIGludmVydClcbiB7XG4tXHRib29sIHI7XG4tXG4tXHRwcl9kZWJ1ZyhcInNwaV9tYXRjaDolYyAweCV4IFx1MDAzYz0gMHgleCBcdTAwM2M9IDB4JXhcXG5cIixcbi1cdFx0IGludmVydCA/ICchJyA6ICcgJywgbWluLCBzcGksIG1heCk7XG4tXHRyID0gKHNwaSBcdTAwM2U9IG1pbiBcdTAwMjZcdTAwMjYgc3BpIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbi1cdHByX2RlYnVnKFwiIHJlc3VsdCAlc1xcblwiLCByID8gXCJQQVNTXCIgOiBcIkZBSUxFRFwiKTtcbi1cdHJldHVybiByO1xuK1x0cmV0dXJuIChzcGkgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IHNwaSBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4gfVxuIFxuIHN0YXRpYyBib29sIGFoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG5AQCAtNjIsMjMgKzU2LDYgQEAgc3RhdGljIGJvb2wgYWhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuLVx0cHJfZGVidWcoXCJJUHY2IEFIIExFTiAldSAldSBcIiwgaGRybGVuLCBhaC1cdTAwM2VoZHJsZW4pO1xuLVx0cHJfZGVidWcoXCJSRVMgJTA0WCBcIiwgYWgtXHUwMDNlcmVzZXJ2ZWQpO1xuLVx0cHJfZGVidWcoXCJTUEkgJXUgJTA4WFxcblwiLCBudG9obChhaC1cdTAwM2VzcGkpLCBudG9obChhaC1cdTAwM2VzcGkpKTtcbi1cbi1cdHByX2RlYnVnKFwiSVB2NiBBSCBzcGkgJTAyWCBcIixcbi1cdFx0IHNwaV9tYXRjaChhaGluZm8tXHUwMDNlc3Bpc1swXSwgYWhpbmZvLVx1MDAzZXNwaXNbMV0sXG4tXHRcdFx0ICAgbnRvaGwoYWgtXHUwMDNlc3BpKSxcbi1cdFx0XHQgICAhIShhaGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IElQNlRfQUhfSU5WX1NQSSkpKTtcbi1cdHByX2RlYnVnKFwibGVuICUwMlggJTA0WCAlMDJYIFwiLFxuLVx0XHQgYWhpbmZvLVx1MDAzZWhkcmxlbiwgaGRybGVuLFxuLVx0XHQgKCFhaGluZm8tXHUwMDNlaGRybGVuIHx8XG4tXHRcdCAgKGFoaW5mby1cdTAwM2VoZHJsZW4gPT0gaGRybGVuKSBeXG4tXHRcdCAgISEoYWhpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiBJUDZUX0FIX0lOVl9MRU4pKSk7XG4tXHRwcl9kZWJ1ZyhcInJlcyAlMDJYICUwNFggJTAyWFxcblwiLFxuLVx0XHQgYWhpbmZvLVx1MDAzZWhkcnJlcywgYWgtXHUwMDNlcmVzZXJ2ZWQsXG4tXHRcdCAhKGFoaW5mby1cdTAwM2VoZHJyZXMgXHUwMDI2XHUwMDI2IGFoLVx1MDAzZXJlc2VydmVkKSk7XG4tXG4gXHRyZXR1cm4gc3BpX21hdGNoKGFoaW5mby1cdTAwM2VzcGlzWzBdLCBhaGluZm8tXHUwMDNlc3Bpc1sxXSxcbiBcdFx0XHQgIG50b2hsKGFoLVx1MDAzZXNwaSksXG4gXHRcdFx0ICAhIShhaGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IElQNlRfQUhfSU5WX1NQSSkpIFx1MDAyNlx1MDAyNlxuQEAgLTkzLDcgKzcwLDcgQEAgc3RhdGljIGludCBhaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3QgaXA2dF9haCAqYWhpbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiBcbiBcdGlmIChhaGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IH5JUDZUX0FIX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuY1xuaW5kZXggM2FhZDY0MzkzODZiMS4uZjVmM2NmYjg3MDRjZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuY1xuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jXG5AQCAtMjMsMTIgKzIzLDcgQEAgTU9EVUxFX0FVVEhPUihcIkFuZHJhcyBLaXMtU3phYm8gXHUwMDNja2lzemFAc2NoLmJtZS5odVx1MDAzZVwiKTtcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBpZF9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3QgaWQsIGJvb2wgaW52ZXJ0KVxuIHtcbi1cdGJvb2wgcjtcbi1cdHByX2RlYnVnKFwiaWRfbWF0Y2g6JWMgMHgleCBcdTAwM2M9IDB4JXggXHUwMDNjPSAweCV4XFxuXCIsIGludmVydCA/ICchJyA6ICcgJyxcbi1cdFx0IG1pbiwgaWQsIG1heCk7XG4tXHRyID0gKGlkIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBpZCBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4tXHRwcl9kZWJ1ZyhcIiByZXN1bHQgJXNcXG5cIiwgciA/IFwiUEFTU1wiIDogXCJGQUlMRURcIik7XG4tXHRyZXR1cm4gcjtcbitcdHJldHVybiAoaWQgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IGlkIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbiB9XG4gXG4gc3RhdGljIGJvb2xcbkBAIC01MywzOCArNDgsNiBAQCBmcmFnX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbi1cdHByX2RlYnVnKFwiSU5GTyAlMDRYIFwiLCBmaC1cdTAwM2VmcmFnX29mZik7XG4tXHRwcl9kZWJ1ZyhcIk9GRlNFVCAlMDRYIFwiLCBudG9ocyhmaC1cdTAwM2VmcmFnX29mZikgXHUwMDI2IH4weDcpO1xuLVx0cHJfZGVidWcoXCJSRVMgJTAyWCAlMDRYXCIsIGZoLVx1MDAzZXJlc2VydmVkLCBudG9ocyhmaC1cdTAwM2VmcmFnX29mZikgXHUwMDI2IDB4Nik7XG4tXHRwcl9kZWJ1ZyhcIk1GICUwNFggXCIsIGZoLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUDZfTUYpKTtcbi1cdHByX2RlYnVnKFwiSUQgJXUgJTA4WFxcblwiLCBudG9obChmaC1cdTAwM2VpZGVudGlmaWNhdGlvbiksXG4tXHRcdCBudG9obChmaC1cdTAwM2VpZGVudGlmaWNhdGlvbikpO1xuLVxuLVx0cHJfZGVidWcoXCJJUHY2IEZSQUcgaWQgJTAyWCBcIixcbi1cdFx0IGlkX21hdGNoKGZyYWdpbmZvLVx1MDAzZWlkc1swXSwgZnJhZ2luZm8tXHUwMDNlaWRzWzFdLFxuLVx0XHRcdCAgbnRvaGwoZmgtXHUwMDNlaWRlbnRpZmljYXRpb24pLFxuLVx0XHRcdCAgISEoZnJhZ2luZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19JTlZfSURTKSkpO1xuLVx0cHJfZGVidWcoXCJyZXMgJTAyWCAlMDJYJTA0WCAlMDJYIFwiLFxuLVx0XHQgZnJhZ2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19SRVMsIGZoLVx1MDAzZXJlc2VydmVkLFxuLVx0XHQgbnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiAweDYsXG4tXHRcdCAhKChmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX1JFUykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgIChmaC1cdTAwM2VyZXNlcnZlZCB8fCAobnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiAweDA2KSkpKTtcbi1cdHByX2RlYnVnKFwiZmlyc3QgJTAyWCAlMDJYICUwMlggXCIsXG4tXHRcdCBmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX0ZTVCxcbi1cdFx0IG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgfjB4Nyxcbi1cdFx0ICEoKGZyYWdpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZUX0ZSQUdfRlNUKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgKG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgfjB4NykpKTtcbi1cdHByX2RlYnVnKFwibWYgJTAyWCAlMDJYICUwMlggXCIsXG4tXHRcdCBmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX01GLFxuLVx0XHQgbnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiBJUDZfTUYsXG4tXHRcdCAhKChmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX01GKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgISgobnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiBJUDZfTUYpKSkpO1xuLVx0cHJfZGVidWcoXCJsYXN0ICUwMlggJTAyWCAlMDJYXFxuXCIsXG4tXHRcdCBmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX05NRixcbi1cdFx0IG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgSVA2X01GLFxuLVx0XHQgISgoZnJhZ2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19OTUYpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAobnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiBJUDZfTUYpKSk7XG4tXG4gXHRyZXR1cm4gaWRfbWF0Y2goZnJhZ2luZm8tXHUwMDNlaWRzWzBdLCBmcmFnaW5mby1cdTAwM2VpZHNbMV0sXG4gXHRcdFx0IG50b2hsKGZoLVx1MDAzZWlkZW50aWZpY2F0aW9uKSxcbiBcdFx0XHQgISEoZnJhZ2luZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19JTlZfSURTKSkgXHUwMDI2XHUwMDI2XG5AQCAtMTAzLDcgKzY2LDcgQEAgc3RhdGljIGludCBmcmFnX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdGNvbnN0IHN0cnVjdCBpcDZ0X2ZyYWcgKmZyYWdpbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiBcbiBcdGlmIChmcmFnaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgfklQNlRfRlJBR19JTlZfTUFTSykge1xuLVx0XHRwcl9kZWJ1ZyhcInVua25vd24gZmxhZ3MgJVhcXG5cIiwgZnJhZ2luZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBmcmFnaW5mby1cdTAwM2VpbnZmbGFncyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xuaW5kZXggNmQxYTVkMjAyNmE2Ny4uMzdjMjA3ZDMxNTJhNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xuQEAgLTc5LDE0ICs3OSw2IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4tXHRwcl9kZWJ1ZyhcIklQdjYgT1BUUyBMRU4gJXUgJXUgXCIsIGhkcmxlbiwgb2gtXHUwMDNlaGRybGVuKTtcbi1cbi1cdHByX2RlYnVnKFwibGVuICUwMlggJTA0WCAlMDJYIFwiLFxuLVx0XHQgb3B0aW5mby1cdTAwM2VoZHJsZW4sIGhkcmxlbixcbi1cdFx0ICghKG9wdGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfT1BUU19MRU4pIHx8XG4tXHRcdCAgKChvcHRpbmZvLVx1MDAzZWhkcmxlbiA9PSBoZHJsZW4pIF5cbi1cdFx0ICAgISEob3B0aW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgSVA2VF9PUFRTX0lOVl9MRU4pKSkpO1xuLVxuIFx0cmV0ID0gKCEob3B0aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9PUFRTX0xFTikgfHxcbiBcdCAgICAgICAoKG9wdGluZm8tXHUwMDNlaGRybGVuID09IGhkcmxlbikgXlxuIFx0XHQhIShvcHRpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiBJUDZUX09QVFNfSU5WX0xFTikpKTtcbkBAIC05Niw4ICs4OCw2IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0aWYgKCEob3B0aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9PUFRTX09QVFMpKSB7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9IGVsc2Uge1xuLVx0XHRwcl9kZWJ1ZyhcIlN0cmljdCBcIik7XG4tXHRcdHByX2RlYnVnKFwiIyVkIFwiLCBvcHRpbmZvLVx1MDAzZW9wdHNucik7XG4gXHRcdGZvciAodGVtcCA9IDA7IHRlbXAgXHUwMDNjIG9wdGluZm8tXHUwMDNlb3B0c25yOyB0ZW1wKyspIHtcbiBcdFx0XHQvKiB0eXBlIGZpZWxkIGV4aXN0cyA/ICovXG4gXHRcdFx0aWYgKGhkcmxlbiBcdTAwM2MgMSlcbkBAIC0xMDgsMTMgKzk4LDkgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0XHRicmVhaztcbiBcbiBcdFx0XHQvKiBUeXBlIGNoZWNrICovXG4tXHRcdFx0aWYgKCp0cCAhPSAob3B0aW5mby1cdTAwM2VvcHRzW3RlbXBdIFx1MDAyNiAweEZGMDApIFx1MDAzZVx1MDAzZSA4KSB7XG4tXHRcdFx0XHRwcl9kZWJ1ZyhcIlRiYWQgJTAyWCAlMDJYXFxuXCIsICp0cCxcbi1cdFx0XHRcdFx0IChvcHRpbmZvLVx1MDAzZW9wdHNbdGVtcF0gXHUwMDI2IDB4RkYwMCkgXHUwMDNlXHUwMDNlIDgpO1xuK1x0XHRcdGlmICgqdHAgIT0gKG9wdGluZm8tXHUwMDNlb3B0c1t0ZW1wXSBcdTAwMjYgMHhGRjAwKSBcdTAwM2VcdTAwM2UgOClcbiBcdFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0cHJfZGVidWcoXCJUb2sgXCIpO1xuLVx0XHRcdH1cbitcbiBcdFx0XHQvKiBMZW5ndGggY2hlY2sgKi9cbiBcdFx0XHRpZiAoKnRwKSB7XG4gXHRcdFx0XHR1MTYgc3BlY19sZW47XG5AQCAtMTI5LDI2ICsxMTUsMTggQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0c3BlY19sZW4gPSBvcHRpbmZvLVx1MDAzZW9wdHNbdGVtcF0gXHUwMDI2IDB4MDBGRjtcbiBcbi1cdFx0XHRcdGlmIChzcGVjX2xlbiAhPSAweDAwRkYgXHUwMDI2XHUwMDI2IHNwZWNfbGVuICE9ICpscCkge1xuLVx0XHRcdFx0XHRwcl9kZWJ1ZyhcIkxiYWQgJTAyWCAlMDRYXFxuXCIsICpscCxcbi1cdFx0XHRcdFx0XHQgc3BlY19sZW4pO1xuK1x0XHRcdFx0aWYgKHNwZWNfbGVuICE9IDB4MDBGRiBcdTAwMjZcdTAwMjYgc3BlY19sZW4gIT0gKmxwKVxuIFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRwcl9kZWJ1ZyhcIkxvayBcIik7XG4rXG4gXHRcdFx0XHRvcHRsZW4gPSAqbHAgKyAyO1xuIFx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRwcl9kZWJ1ZyhcIlBhZDFcXG5cIik7XG4gXHRcdFx0XHRvcHRsZW4gPSAxO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHQvKiBTdGVwIHRvIHRoZSBuZXh0ICovXG4tXHRcdFx0cHJfZGVidWcoXCJsZW4lMDRYXFxuXCIsIG9wdGxlbik7XG4tXG4gXHRcdFx0aWYgKChwdHIgXHUwMDNlIHNrYi1cdTAwM2VsZW4gLSBvcHRsZW4gfHwgaGRybGVuIFx1MDAzYyBvcHRsZW4pIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICB0ZW1wIFx1MDAzYyBvcHRpbmZvLVx1MDAzZW9wdHNuciAtIDEpIHtcbi1cdFx0XHRcdHByX2RlYnVnKFwibmV3IHBvaW50ZXIgaXMgdG9vIGxhcmdlIVxcblwiKTtcbitcdFx0XHQgICAgdGVtcCBcdTAwM2Mgb3B0aW5mby1cdTAwM2VvcHRzbnIgLSAxKVxuIFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuK1xuIFx0XHRcdHB0ciArPSBvcHRsZW47XG4gXHRcdFx0aGRybGVuIC09IG9wdGxlbjtcbiBcdFx0fVxuQEAgLTE2NiwxNiArMTQ0LDE2IEBAIHN0YXRpYyBpbnQgaGJoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdGNvbnN0IHN0cnVjdCBpcDZ0X29wdHMgKm9wdHNpbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiBcbiBcdGlmIChvcHRzaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgfklQNlRfT1BUU19JTlZfTUFTSykge1xuLVx0XHRwcl9kZWJ1ZyhcInVua25vd24gZmxhZ3MgJVhcXG5cIiwgb3B0c2luZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBvcHRzaW5mby1cdTAwM2VpbnZmbGFncyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKG9wdHNpbmZvLVx1MDAzZW9wdHNuciBcdTAwM2UgSVA2VF9PUFRTX09QVFNOUikge1xuLVx0XHRwcl9kZWJ1ZyhcInRvbyBtYW55IHN1cHBvcnRlZCBvcHRzIHNwZWNpZmllZFxcblwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcInRvbyBtYW55IHN1cHBvcnRlZCBvcHRzIHNwZWNpZmllZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRpZiAob3B0c2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfT1BUU19OU1RSSUNUKSB7XG4tXHRcdHByX2RlYnVnKFwiTm90IHN0cmljdCAtIG5vdCBpbXBsZW1lbnRlZFwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcIk5vdCBzdHJpY3QgLSBub3QgaW1wbGVtZW50ZWRcIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X21oLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9taC5jXG5pbmRleCBmZDQ5MmI2OWFjYmMwLi5iYTZkY2M3NzkxYTA5IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbWguY1xuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbWguY1xuQEAgLTQyLDE0ICs0MiwxMSBAQCBzdGF0aWMgYm9vbCBtaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0aWYgKG1oID09IE5VTEwpIHtcbiBcdFx0LyogV2UndmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2VcbiBcdFx0ICAgY2FuJ3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLiAqL1xuLVx0XHRwcl9kZWJ1ZyhcIkRyb3BwaW5nIGV2aWwgTUggdGlueWdyYW0uXFxuXCIpO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdGlmIChtaC1cdTAwM2VpcDZtaF9wcm90byAhPSBJUFBST1RPX05PTkUpIHtcbi1cdFx0cHJfZGVidWcoXCJEcm9wcGluZyBpbnZhbGlkIE1IIFBheWxvYWQgUHJvdG86ICV1XFxuXCIsXG4tXHRcdFx0IG1oLVx1MDAzZWlwNm1oX3Byb3RvKTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnBmaWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmNcbmluZGV4IDY3Yzg3YTg4Y2RlNGYuLmFmOGQxMGQ0OWRlODEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jXG5AQCAtMTE4LDcgKzExOCw3IEBAIHN0YXRpYyBpbnQgcnBmaWx0ZXJfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXG4gXHRpZiAoc3RyY21wKHBhci1cdTAwM2V0YWJsZSwgXCJtYW5nbGVcIikgIT0gMCBcdTAwMjZcdTAwMjZcbiBcdCAgICBzdHJjbXAocGFyLVx1MDAzZXRhYmxlLCBcInJhd1wiKSAhPSAwKSB7XG4tXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJvbmx5IHZhbGlkIGluIFxcJ3Jhd1xcJyBvciBcXCdtYW5nbGVcXCcgdGFibGUsIG5vdCBcXCclc1xcJ1xcblwiLFxuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwib25seSB2YWxpZCBpbiBcXCdyYXdcXCcgb3IgXFwnbWFuZ2xlXFwnIHRhYmxlXFxuXCIsXG4gXHRcdFx0XHQgICAgcGFyLVx1MDAzZXRhYmxlKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmNcbmluZGV4IDI3OGI1Mjc1MmYzNjQuLjBjMDFhYzI3NDZkMWYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jXG5AQCAtMTU1LDE4ICsxNTUsMTggQEAgc3RhdGljIGludCBydF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3QgaXA2dF9ydCAqcnRpbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiBcbiBcdGlmIChydGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IH5JUDZUX1JUX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBydGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBydGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdGlmIChydGluZm8tXHUwMDNlYWRkcm5yIFx1MDAzZSBJUDZUX1JUX0hPUFMpIHtcbi1cdFx0cHJfZGVidWcoXCJ0b28gbWFueSBhZGRyZXNzZXMgc3BlY2lmaWVkXFxuXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidG9vIG1hbnkgYWRkcmVzc2VzIHNwZWNpZmllZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRpZiAoKHJ0aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgKElQNlRfUlRfUkVTIHwgSVA2VF9SVF9GU1RfTUFTSykpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICghKHJ0aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9SVF9UWVApIHx8XG4gXHQgICAgIChydGluZm8tXHUwMDNlcnRfdHlwZSAhPSAwKSB8fFxuIFx0ICAgICAocnRpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiBJUDZUX1JUX0lOVl9UWVApKSkge1xuLVx0XHRwcl9kZWJ1ZyhcImAtLXJ0LXR5cGUgMCcgcmVxdWlyZWQgYmVmb3JlIGAtLXJ0LTAtKidcIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJgLS1ydC10eXBlIDAnIHJlcXVpcmVkIGJlZm9yZSBgLS1ydC0wLSonXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmNcbmluZGV4IDE0OTRiM2VlMzBlMTEuLjRlNDQzNmE5MTA0YjQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuY1xuQEAgLTg3LDggKzg3LDcgQEAgc3RhdGljIGludCBjb25uc2VjbWFya190Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbiBcbiBcdGlmIChzdHJjbXAocGFyLVx1MDAzZXRhYmxlLCBcIm1hbmdsZVwiKSAhPSAwIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHN0cmNtcChwYXItXHUwMDNldGFibGUsIFwic2VjdXJpdHlcIikgIT0gMCkge1xuLVx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwib25seSB2YWxpZCBpbiBcXCdtYW5nbGVcXCcgb3IgXFwnc2VjdXJpdHlcXCcgdGFibGUsIG5vdCBcXCclc1xcJ1xcblwiLFxuLVx0XHRcdFx0ICAgIHBhci1cdTAwM2V0YWJsZSk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJvbmx5IHZhbGlkIGluIFxcJ21hbmdsZVxcJyBvciBcXCdzZWN1cml0eVxcJyB0YWJsZVxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DVC5jIGIvbmV0L25ldGZpbHRlci94dF9DVC5jXG5pbmRleCBlNzg2NjBkZmRmNGI2Li45MTMyNjAxNGFkZTFjIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9DVC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0NULmNcbkBAIC0xOTUsNyArMTk1LDggQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcixcbiBcdFx0Z290byBlcnIzO1xuIFx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNlaGVscGVyWzBdKSB7XG4rXHRpZiAoaW5mby1cdTAwM2VoZWxwZXJbMF0gXHUwMDI2XHUwMDI2XG4rXHQgICAgc3RybmxlbihpbmZvLVx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiBcdFx0aWYgKHN0cm5sZW4oaW5mby1cdTAwM2VoZWxwZXIsIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpID09IHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiBcdFx0XHRyZXQgPSAtRU5BTUVUT09MT05HO1xuIFx0XHRcdGdvdG8gZXJyMztcbkBAIC0yMDYsNyArMjA3LDggQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcixcbiBcdFx0XHRnb3RvIGVycjM7XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0WzBdKSB7XG4rXHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0WzBdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHN0cm5sZW4oaW5mby1cdTAwM2V0aW1lb3V0LCBzaXplb2YoaW5mby1cdTAwM2V0aW1lb3V0KSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gXHRcdGlmIChzdHJubGVuKGluZm8tXHUwMDNldGltZW91dCwgc2l6ZW9mKGluZm8tXHUwMDNldGltZW91dCkpID09IHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gXHRcdFx0cmV0ID0gLUVOQU1FVE9PTE9ORztcbiBcdFx0XHRnb3RvIGVycjQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcbmluZGV4IGJmY2YyZDQ0ZTkzZGIuLjE1YjY5OGVhOThhYTYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG5AQCAtMTAyLDggKzEwMiw2IEBAIHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19leHBpcmVkKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIHtcbiBcdHN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyID0gdGltZXJfY29udGFpbmVyX29mKHRpbWVyLCB0LCB0aW1lcik7XG4gXG4tXHRwcl9kZWJ1ZyhcInRpbWVyICVzIGV4cGlyZWRcXG5cIiwgdGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpO1xuLVxuIFx0c2NoZWR1bGVfd29yayhcdTAwMjZ0aW1lci1cdTAwM2V3b3JrKTtcbiB9XG4gXG5AQCAtMTExLDcgKzEwOSw2IEBAIHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19hbGFybXByb2Moc3RydWN0IGFsYXJtICphbGFybSwga3RpbWVfdCBub3cpXG4ge1xuIFx0c3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXIgPSBhbGFybS1cdTAwM2VkYXRhO1xuIFxuLVx0cHJfZGVidWcoXCJhbGFybSAlcyBleHBpcmVkXFxuXCIsIHRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lKTtcbiBcdHNjaGVkdWxlX3dvcmsoXHUwMDI2dGltZXItXHUwMDNld29yayk7XG4gfVxuIFxuQEAgLTE3MSw3ICsxNjgsNyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGUoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKVxuIFxuIFx0cmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0cHJfZGVidWcoXCJjb3VsZG4ndCBhZGQgZmlsZSB0byBzeXNmc1wiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcImNvdWxkbid0IGFkZCBmaWxlIHRvIHN5c2ZzXCIpO1xuIFx0XHRnb3RvIG91dF9mcmVlX2F0dHI7XG4gXHR9XG4gXG5AQCAtMjIwLDcgKzIxNyw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXG4gXG4gXHRyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShpZGxldGltZXJfdGdfa29iaiwgXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIpO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRwcl9kZWJ1ZyhcImNvdWxkbid0IGFkZCBmaWxlIHRvIHN5c2ZzXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiY291bGRuJ3QgYWRkIGZpbGUgdG8gc3lzZnNcIik7XG4gXHRcdGdvdG8gb3V0X2ZyZWVfYXR0cjtcbiBcdH1cbiBcbkBAIC0yMjgsNyArMjI1LDYgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbylcbiBcdGtvYmplY3RfdWV2ZW50KGlkbGV0aW1lcl90Z19rb2JqLEtPQkpfQUREKTtcbiBcbiBcdGxpc3RfYWRkKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlZW50cnksIFx1MDAyNmlkbGV0aW1lcl90Z19saXN0KTtcbi1cdHByX2RlYnVnKFwidGltZXIgdHlwZSB2YWx1ZSBpcyAldVwiLCBpbmZvLVx1MDAzZXRpbWVyX3R5cGUpO1xuIFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlID0gaW5mby1cdTAwM2V0aW1lcl90eXBlO1xuIFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQgPSAxO1xuIFxuQEAgLTI2Myw5ICsyNTksNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4tXHRwcl9kZWJ1ZyhcInJlc2V0dGluZyB0aW1lciAlcywgdGltZW91dCBwZXJpb2QgJXVcXG5cIixcbi1cdFx0IGluZm8tXHUwMDNlbGFiZWwsIGluZm8tXHUwMDNldGltZW91dCk7XG4tXG4gXHRtb2RfdGltZXIoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcixcbiBcdFx0ICBzZWNzX3RvX2ppZmZpZXMoaW5mby1cdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xuIFxuQEAgLTI4MCw5ICsyNzMsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4tXHRwcl9kZWJ1ZyhcInJlc2V0dGluZyB0aW1lciAlcywgdGltZW91dCBwZXJpb2QgJXVcXG5cIixcbi1cdFx0IGluZm8tXHUwMDNlbGFiZWwsIGluZm8tXHUwMDNldGltZW91dCk7XG4tXG4gXHRpZiAoaW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlIFx1MDAyNiBYVF9JRExFVElNRVJfQUxBUk0pIHtcbiBcdFx0aWRsZXRpbWVyX3N0YXJ0X2FsYXJtX3NlYyhpbmZvLVx1MDAzZXRpbWVyLCBpbmZvLVx1MDAzZXRpbWVvdXQpO1xuIFx0fSBlbHNlIHtcbkBAIC0yOTYsMTcgKzI4NiwxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19oZWxwZXIoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKVxuIHtcbiBcdGlmIChpbmZvLVx1MDAzZXRpbWVvdXQgPT0gMCkge1xuLVx0XHRwcl9kZWJ1ZyhcInRpbWVvdXQgdmFsdWUgaXMgemVyb1xcblwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcInRpbWVvdXQgdmFsdWUgaXMgemVyb1xcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0IFx1MDAzZT0gSU5UX01BWCAvIDEwMDApIHtcbi1cdFx0cHJfZGVidWcoXCJ0aW1lb3V0IHZhbHVlIGlzIHRvbyBiaWdcXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJ0aW1lb3V0IHZhbHVlIGlzIHRvbyBiaWdcXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKGluZm8tXHUwMDNlbGFiZWxbMF0gPT0gJ1xcMCcgfHxcbiBcdCAgICBzdHJubGVuKGluZm8tXHUwMDNlbGFiZWwsXG4gXHRcdCAgICBNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkUpID09IE1BWF9JRExFVElNRVJfTEFCRUxfU0laRSkge1xuLVx0XHRwcl9kZWJ1ZyhcImxhYmVsIGlzIGVtcHR5IG9yIG5vdCBudWwtdGVybWluYXRlZFxcblwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcImxhYmVsIGlzIGVtcHR5IG9yIG5vdCBudWwtdGVybWluYXRlZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbkBAIC0zMTgsMzQgKzMwOCwyNSBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFx0c3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIFx0aW50IHJldDtcbiBcbi1cdHByX2RlYnVnKFwiY2hlY2tlbnRyeSB0YXJnaW5mbyVzXFxuXCIsIGluZm8tXHUwMDNlbGFiZWwpO1xuLVxuIFx0cmV0ID0gaWRsZXRpbWVyX3RnX2hlbHBlcihpbmZvKTtcbiBcdGlmKHJldCBcdTAwM2MgMClcbi1cdHtcbi1cdFx0cHJfZGVidWcoXCJjaGVja2VudHJ5IGhlbHBlciByZXR1cm4gaW52YWxpZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuIFx0aW5mby1cdTAwM2V0aW1lciA9IF9faWRsZXRpbWVyX3RnX2ZpbmRfYnlfbGFiZWwoaW5mby1cdTAwM2VsYWJlbCk7XG4gXHRpZiAoaW5mby1cdTAwM2V0aW1lcikge1xuIFx0XHRpZiAoaW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlIFx1MDAyNiBYVF9JRExFVElNRVJfQUxBUk0pIHtcbi1cdFx0XHRwcl9kZWJ1ZyhcIkFkZGluZy9SZXBsYWNpbmcgcnVsZSB3aXRoIHNhbWUgbGFiZWwgYW5kIGRpZmZlcmVudCB0aW1lciB0eXBlIGlzIG5vdCBhbGxvd2VkXFxuXCIpO1xuIFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbitcdFx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiQWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcXG5cIik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcbiBcdFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQrKztcbiBcdFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gXHRcdFx0ICBzZWNzX3RvX2ppZmZpZXMoaW5mby1cdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xuLVxuLVx0XHRwcl9kZWJ1ZyhcImluY3JlYXNlZCByZWZjbnQgb2YgdGltZXIgJXMgdG8gJXVcXG5cIixcbi1cdFx0XHQgaW5mby1cdTAwM2VsYWJlbCwgaW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmV0ID0gaWRsZXRpbWVyX3RnX2NyZWF0ZShpbmZvKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdHByX2RlYnVnKFwiZmFpbGVkIHRvIGNyZWF0ZSB0aW1lclxcblwiKTtcbiBcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuQEAgLTM2MCwzMCArMzQxLDIzIEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXHRpbnQgcmV0O1xuIFxuLVx0cHJfZGVidWcoXCJjaGVja2VudHJ5IHRhcmdpbmZvJXNcXG5cIiwgaW5mby1cdTAwM2VsYWJlbCk7XG4tXG4gXHRpZiAoaW5mby1cdTAwM2VzZW5kX25sX21zZylcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0cmV0ID0gaWRsZXRpbWVyX3RnX2hlbHBlcigoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICopaW5mbyk7XG4gXHRpZihyZXQgXHUwMDNjIDApXG4tXHR7XG4tXHRcdHByX2RlYnVnKFwiY2hlY2tlbnRyeSBoZWxwZXIgcmV0dXJuIGludmFsaWRcXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNldGltZXJfdHlwZSBcdTAwM2UgWFRfSURMRVRJTUVSX0FMQVJNKSB7XG4tXHRcdHByX2RlYnVnKFwiaW52YWxpZCB2YWx1ZSBmb3IgdGltZXIgdHlwZVxcblwiKTtcbitcdGlmIChpbmZvLVx1MDAzZXRpbWVyX3R5cGUgXHUwMDNlIFhUX0lETEVUSU1FUl9BTEFSTSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuIFx0aW5mby1cdTAwM2V0aW1lciA9IF9faWRsZXRpbWVyX3RnX2ZpbmRfYnlfbGFiZWwoaW5mby1cdTAwM2VsYWJlbCk7XG4gXHRpZiAoaW5mby1cdTAwM2V0aW1lcikge1xuIFx0XHRpZiAoaW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlICE9IGluZm8tXHUwMDNldGltZXJfdHlwZSkge1xuLVx0XHRcdHByX2RlYnVnKFwiQWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcXG5cIik7XG4gXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuK1x0XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJBZGRpbmcvUmVwbGFjaW5nIHJ1bGUgd2l0aCBzYW1lIGxhYmVsIGFuZCBkaWZmZXJlbnQgdGltZXIgdHlwZSBpcyBub3QgYWxsb3dlZFxcblwiKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFxuQEAgLTM5MywyMSArMzY3LDE1IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRcdFx0a3RpbWVfdCB0b3V0ID0gYWxhcm1fZXhwaXJlc19yZW1haW5pbmcoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhbGFybSk7XG4gXHRcdFx0c3RydWN0IHRpbWVzcGVjNjQga3RpbWVzcGVjID0ga3RpbWVfdG9fdGltZXNwZWM2NCh0b3V0KTtcbiBcbi1cdFx0XHRpZiAoa3RpbWVzcGVjLnR2X3NlYyBcdTAwM2UgMCkge1xuLVx0XHRcdFx0cHJfZGVidWcoXCJ0aW1lX2V4cGlyeV9yZW1haW5pbmcgJWxsZFxcblwiLFxuLVx0XHRcdFx0XHQga3RpbWVzcGVjLnR2X3NlYyk7XG4rXHRcdFx0aWYgKGt0aW1lc3BlYy50dl9zZWMgXHUwMDNlIDApXG4gXHRcdFx0XHRpZGxldGltZXJfc3RhcnRfYWxhcm1fa3RpbWUoaW5mby1cdTAwM2V0aW1lciwgdG91dCk7XG4tXHRcdFx0fVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gXHRcdFx0XHRcdHNlY3NfdG9famlmZmllcyhpbmZvLVx1MDAzZXRpbWVvdXQpICsgamlmZmllcyk7XG4gXHRcdH1cbi1cdFx0cHJfZGVidWcoXCJpbmNyZWFzZWQgcmVmY250IG9mIHRpbWVyICVzIHRvICV1XFxuXCIsXG4tXHRcdFx0IGluZm8tXHUwMDNlbGFiZWwsIGluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250KTtcbiBcdH0gZWxzZSB7XG4gXHRcdHJldCA9IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoaW5mbyk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0XHRwcl9kZWJ1ZyhcImZhaWxlZCB0byBjcmVhdGUgdGltZXJcXG5cIik7XG4gXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbkBAIC00MjEsMTkgKzM4OSwxMyBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtICpwYXIpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIFxuLVx0cHJfZGVidWcoXCJkZXN0cm95IHRhcmdpbmZvICVzXFxuXCIsIGluZm8tXHUwMDNlbGFiZWwpO1xuLVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiBcbiBcdGlmICgtLWluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250IFx1MDAzZSAwKSB7XG4tXHRcdHByX2RlYnVnKFwiZGVjcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxcblwiLFxuLVx0XHRcdCBpbmZvLVx1MDAzZWxhYmVsLCBpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXJlZmNudCk7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0cHJfZGVidWcoXCJkZWxldGluZyB0aW1lciAlc1xcblwiLCBpbmZvLVx1MDAzZWxhYmVsKTtcbi1cbiBcdGxpc3RfZGVsKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlZW50cnkpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuQEAgLTQ0OCwxOSArNDEwLDEzIEBAIHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19kZXN0cm95X3YxKGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4tXHRwcl9kZWJ1ZyhcImRlc3Ryb3kgdGFyZ2luZm8gJXNcXG5cIiwgaW5mby1cdTAwM2VsYWJlbCk7XG4tXG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuIFx0aWYgKC0taW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQgXHUwMDNlIDApIHtcbi1cdFx0cHJfZGVidWcoXCJkZWNyZWFzZWQgcmVmY250IG9mIHRpbWVyICVzIHRvICV1XFxuXCIsXG4tXHRcdFx0IGluZm8tXHUwMDNlbGFiZWwsIGluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250KTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRwcl9kZWJ1ZyhcImRlbGV0aW5nIHRpbWVyICVzXFxuXCIsIGluZm8tXHUwMDNlbGFiZWwpO1xuLVxuIFx0bGlzdF9kZWwoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VlbnRyeSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gXG5AQCAtNTM0LDcgKzQ5MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGlkbGV0aW1lcl90Z19pbml0KHZvaWQpXG4gXHRpZGxldGltZXJfdGdfY2xhc3MgPSBjbGFzc19jcmVhdGUoXCJ4dF9pZGxldGltZXJcIik7XG4gXHRlcnIgPSBQVFJfRVJSKGlkbGV0aW1lcl90Z19jbGFzcyk7XG4gXHRpZiAoSVNfRVJSKGlkbGV0aW1lcl90Z19jbGFzcykpIHtcbi1cdFx0cHJfZGVidWcoXCJjb3VsZG4ndCByZWdpc3RlciBkZXZpY2UgY2xhc3NcXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJjb3VsZG4ndCByZWdpc3RlciBkZXZpY2UgY2xhc3NcXG5cIik7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTU0Miw3ICs0OTgsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBpZGxldGltZXJfdGdfaW5pdCh2b2lkKVxuIFx0XHRcdFx0XHQgICAgTUtERVYoMCwgMCksIE5VTEwsIFwidGltZXJzXCIpO1xuIFx0ZXJyID0gUFRSX0VSUihpZGxldGltZXJfdGdfZGV2aWNlKTtcbiBcdGlmIChJU19FUlIoaWRsZXRpbWVyX3RnX2RldmljZSkpIHtcbi1cdFx0cHJfZGVidWcoXCJjb3VsZG4ndCByZWdpc3RlciBzeXN0ZW0gZGV2aWNlXFxuXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiY291bGRuJ3QgcmVnaXN0ZXIgc3lzdGVtIGRldmljZVxcblwiKTtcbiBcdFx0Z290byBvdXRfY2xhc3M7XG4gXHR9XG4gXG5AQCAtNTUxLDcgKzUwNyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGlkbGV0aW1lcl90Z19pbml0KHZvaWQpXG4gXHRlcnIgPSB4dF9yZWdpc3Rlcl90YXJnZXRzKGlkbGV0aW1lcl90ZywgQVJSQVlfU0laRShpZGxldGltZXJfdGcpKTtcbiBcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbi1cdFx0cHJfZGVidWcoXCJjb3VsZG4ndCByZWdpc3RlciB4dCB0YXJnZXRcXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJjb3VsZG4ndCByZWdpc3RlciB4dCB0YXJnZXRcXG5cIik7XG4gXHRcdGdvdG8gb3V0X2RldjtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0xPRy5jIGIvbmV0L25ldGZpbHRlci94dF9MT0cuY1xuaW5kZXggZjM5MjQ0ZjljMGVkOS4uZGUzZjE3Njc5MmEwNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTE9HLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTE9HLmNcbkBAIC01MCwxMiArNTAsMTIgQEAgc3RhdGljIGludCBsb2dfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGxvZ2luZm8tXHUwMDNlbGV2ZWwgXHUwMDNlPSA4KSB7XG4tXHRcdHByX2RlYnVnKFwibGV2ZWwgJXUgXHUwMDNlPSA4XFxuXCIsIGxvZ2luZm8tXHUwMDNlbGV2ZWwpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwibGV2ZWwgJXUgXHUwMDNlPSA4XFxuXCIsIGxvZ2luZm8tXHUwMDNlbGV2ZWwpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGlmIChsb2dpbmZvLVx1MDAzZXByZWZpeFtzaXplb2YobG9naW5mby1cdTAwM2VwcmVmaXgpLTFdICE9ICdcXDAnKSB7XG4tXHRcdHByX2RlYnVnKFwicHJlZml4IGlzIG5vdCBudWxsLXRlcm1pbmF0ZWRcXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJwcmVmaXggaXMgbm90IG51bGwtdGVybWluYXRlZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9NQVNRVUVSQURFLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuY1xuaW5kZXggZWFlMDVjMTc4MzM2Ny4uY2VhNDg4Y2VjNTQ0NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTUFTUVVFUkFERS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuY1xuQEAgLTIxLDExICsyMSwxMSBAQCBzdGF0aWMgaW50IG1hc3F1ZXJhZGVfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3QgbmZfbmF0X2lwdjRfbXVsdGlfcmFuZ2VfY29tcGF0ICptciA9IHBhci1cdTAwM2V0YXJnaW5mbztcbiBcbiBcdGlmIChtci1cdTAwM2VyYW5nZVswXS5mbGFncyBcdTAwMjYgTkZfTkFUX1JBTkdFX01BUF9JUFMpIHtcbi1cdFx0cHJfZGVidWcoXCJiYWQgTUFQX0lQUy5cXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJiYWQgTUFQX0lQUy5cXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKG1yLVx1MDAzZXJhbmdlc2l6ZSAhPSAxKSB7XG4tXHRcdHByX2RlYnVnKFwiYmFkIHJhbmdlc2l6ZSAldVxcblwiLCBtci1cdTAwM2VyYW5nZXNpemUpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiYmFkIHJhbmdlc2l6ZSAldVxcblwiLCBtci1cdTAwM2VyYW5nZXNpemUpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiBuZl9jdF9uZXRuc19nZXQocGFyLVx1MDAzZW5ldCwgcGFyLVx1MDAzZWZhbWlseSk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9ORVRNQVAuYyBiL25ldC9uZXRmaWx0ZXIveHRfTkVUTUFQLmNcbmluZGV4IGNiMmVlODBkODRmYTguLjhjODZkOWE0MzM3M2EgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jXG5AQCAtMTA2LDExICsxMDYsMTEgQEAgc3RhdGljIGludCBuZXRtYXBfdGc0X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IG5mX25hdF9pcHY0X211bHRpX3JhbmdlX2NvbXBhdCAqbXIgPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4gXHRpZiAoIShtci1cdTAwM2VyYW5nZVswXS5mbGFncyBcdTAwMjYgTkZfTkFUX1JBTkdFX01BUF9JUFMpKSB7XG4tXHRcdHByX2RlYnVnKFwiYmFkIE1BUF9JUFMuXFxuXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiYmFkIE1BUF9JUFMuXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdGlmIChtci1cdTAwM2VyYW5nZXNpemUgIT0gMSkge1xuLVx0XHRwcl9kZWJ1ZyhcImJhZCByYW5nZXNpemUgJXUuXFxuXCIsIG1yLVx1MDAzZXJhbmdlc2l6ZSk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJiYWQgcmFuZ2VzaXplICV1LlxcblwiLCBtci1cdTAwM2VyYW5nZXNpemUpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiBuZl9jdF9uZXRuc19nZXQocGFyLVx1MDAzZW5ldCwgcGFyLVx1MDAzZWZhbWlseSk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jIGIvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jXG5pbmRleCBmZjY2YjU2YTNmOTdkLi4yN2JjMDU0NWM0Zjc0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X1JFRElSRUNULmNcbkBAIC01MSwxMSArNTEsMTEgQEAgc3RhdGljIGludCByZWRpcmVjdF90ZzRfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3QgbmZfbmF0X2lwdjRfbXVsdGlfcmFuZ2VfY29tcGF0ICptciA9IHBhci1cdTAwM2V0YXJnaW5mbztcbiBcbiBcdGlmIChtci1cdTAwM2VyYW5nZVswXS5mbGFncyBcdTAwMjYgTkZfTkFUX1JBTkdFX01BUF9JUFMpIHtcbi1cdFx0cHJfZGVidWcoXCJiYWQgTUFQX0lQUy5cXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJiYWQgTUFQX0lQUy5cXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKG1yLVx1MDAzZXJhbmdlc2l6ZSAhPSAxKSB7XG4tXHRcdHByX2RlYnVnKFwiYmFkIHJhbmdlc2l6ZSAldS5cXG5cIiwgbXItXHUwMDNlcmFuZ2VzaXplKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcImJhZCByYW5nZXNpemUgJXUuXFxuXCIsIG1yLVx1MDAzZXJhbmdlc2l6ZSk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0cmV0dXJuIG5mX2N0X25ldG5zX2dldChwYXItXHUwMDNlbmV0LCBwYXItXHUwMDNlZmFtaWx5KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1NFQ01BUksuYyBiL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jXG5pbmRleCA1YmM1ZWE1MDVlYjllLi4zOGU4ZTQxMGI0ZTgxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jXG5AQCAtNzksOCArNzksNyBAQCBzZWNtYXJrX3RnX2NoZWNrKGNvbnN0IGNoYXIgKnRhYmxlLCBzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfaW5mb192MSAqaW5mbylcbiBcbiBcdGlmIChzdHJjbXAodGFibGUsIFwibWFuZ2xlXCIpICE9IDAgXHUwMDI2XHUwMDI2XG4gXHQgICAgc3RyY21wKHRhYmxlLCBcInNlY3VyaXR5XCIpICE9IDApIHtcbi1cdFx0cHJfaW5mb19yYXRlbGltaXRlZChcIm9ubHkgdmFsaWQgaW4gXFwnbWFuZ2xlXFwnIG9yIFxcJ3NlY3VyaXR5XFwnIHRhYmxlLCBub3QgXFwnJXNcXCdcXG5cIixcbi1cdFx0XHRcdCAgICB0YWJsZSk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJvbmx5IHZhbGlkIGluIFxcJ21hbmdsZVxcJyBvciBcXCdzZWN1cml0eVxcJyB0YWJsZVxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jZ3JvdXAuYyBiL25ldC9uZXRmaWx0ZXIveHRfY2dyb3VwLmNcbmluZGV4IDQzZDJhZTJiZTYyOGQuLmFjMWI3ZTcxY2Q3ZjUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2Nncm91cC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nncm91cC5jXG5AQCAtMzMsNyArMzMsNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192MChjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHtcbi1cdFx0cHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIGludCBjZ3JvdXBfbXRfY2hlY2tfdjEoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKCFpbmZvLVx1MDAzZWhhc19wYXRoIFx1MDAyNlx1MDAyNiAhaW5mby1cdTAwM2VoYXNfY2xhc3NpZCkge1xuLVx0XHRwcl9pbmZvKFwieHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXFxuXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwieHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC01OSw3ICs1OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YxKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0fVxuIFxuIFx0aWYgKGluZm8tXHUwMDNlaGFzX2NsYXNzaWQgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQpKSB7XG4tXHRcdHByX2luZm8oTkVUX0NMU19DTEFTU0lEX0lOVkFMSURfTVNHKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YyKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmICghaW5mby1cdTAwM2VoYXNfcGF0aCBcdTAwMjZcdTAwMjYgIWluZm8tXHUwMDNlaGFzX2NsYXNzaWQpIHtcbi1cdFx0cHJfaW5mbyhcInh0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxcblwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcInh0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtOTksNyArOTksNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192Mihjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdH1cbiBcbiBcdGlmIChpbmZvLVx1MDAzZWhhc19jbGFzc2lkIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfQ0dST1VQX05FVF9DTEFTU0lEKSkge1xuLVx0XHRwcl9pbmZvKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoTkVUX0NMU19DTEFTU0lEX0lOVkFMSURfTVNHKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9lc3AuYyBiL25ldC9uZXRmaWx0ZXIveHRfZXNwLmNcbmluZGV4IDJhMWMwYWQwZmYwNzkuLjY4ZmQ3NTg4NDI2OGEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jXG5AQCAtMjUsMTIgKzI1LDcgQEAgTU9EVUxFX0FMSUFTKFwiaXA2dF9lc3BcIik7XG4gc3RhdGljIGlubGluZSBib29sXG4gc3BpX21hdGNoKHVfaW50MzJfdCBtaW4sIHVfaW50MzJfdCBtYXgsIHVfaW50MzJfdCBzcGksIGJvb2wgaW52ZXJ0KVxuIHtcbi1cdGJvb2wgcjtcbi1cdHByX2RlYnVnKFwic3BpX21hdGNoOiVjIDB4JXggXHUwMDNjPSAweCV4IFx1MDAzYz0gMHgleFxcblwiLFxuLVx0XHQgaW52ZXJ0ID8gJyEnIDogJyAnLCBtaW4sIHNwaSwgbWF4KTtcbi1cdHIgPSAoc3BpIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBzcGkgXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xuLVx0cHJfZGVidWcoXCIgcmVzdWx0ICVzXFxuXCIsIHIgPyBcIlBBU1NcIiA6IFwiRkFJTEVEXCIpO1xuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gKHNwaSBcdTAwM2U9IG1pbiBcdTAwMjZcdTAwMjYgc3BpIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgZXNwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbkBAIC00OCw3ICs0Myw2IEBAIHN0YXRpYyBib29sIGVzcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdC8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXG4gXHRcdCAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC5cbiBcdFx0ICovXG4tXHRcdHByX2RlYnVnKFwiRHJvcHBpbmcgZXZpbCBFU1AgdGlueWdyYW0uXFxuXCIpO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC02Miw3ICs1Niw3IEBAIHN0YXRpYyBpbnQgZXNwX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IHh0X2VzcCAqZXNwaW5mbyA9IHBhci1cdTAwM2VtYXRjaGluZm87XG4gXG4gXHRpZiAoZXNwaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgflhUX0VTUF9JTlZfTUFTSykge1xuLVx0XHRwcl9kZWJ1ZyhcInVua25vd24gZmxhZ3MgJVhcXG5cIiwgZXNwaW5mby1cdTAwM2VpbnZmbGFncyk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJ1bmtub3duIGZsYWdzICVYXFxuXCIsIGVzcGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2lwY29tcC5jIGIvbmV0L25ldGZpbHRlci94dF9pcGNvbXAuY1xuaW5kZXggNDcyZGE2MzlhMzJlMi4uMzI5OWMxZWE2MGY5ZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaXBjb21wLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaXBjb21wLmNcbkBAIC0yOSwxMiArMjksNyBAQCBNT0RVTEVfQUxJQVMoXCJpcDZ0X2lwY29tcFwiKTtcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpXG4ge1xuLVx0Ym9vbCByO1xuLVx0cHJfZGVidWcoXCJzcGlfbWF0Y2g6JWMgMHgleCBcdTAwM2M9IDB4JXggXHUwMDNjPSAweCV4XFxuXCIsXG4tXHRcdCBpbnZlcnQgPyAnIScgOiAnICcsIG1pbiwgc3BpLCBtYXgpO1xuLVx0ciA9IChzcGkgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IHNwaSBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4tXHRwcl9kZWJ1ZyhcIiByZXN1bHQgJXNcXG5cIiwgciA/IFwiUEFTU1wiIDogXCJGQUlMRURcIik7XG4tXHRyZXR1cm4gcjtcbitcdHJldHVybiAoc3BpIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBzcGkgXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBjb21wX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbkBAIC01Miw3ICs0Nyw2IEBAIHN0YXRpYyBib29sIGNvbXBfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHQvKiBXZSd2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZVxuIFx0XHQgKiBjYW4ndC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuXG4gXHRcdCAqL1xuLVx0XHRwcl9kZWJ1ZyhcIkRyb3BwaW5nIGV2aWwgSVBDb21wIHRpbnlncmFtLlxcblwiKTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuY1xuaW5kZXggMGM5ZTAxNGUzMGI0OS4uYmY2MTE0MWZiNzg1MCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuY1xuQEAgLTI0LDI3ICsyNCwxNSBAQCBpcHJhbmdlX210NChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdG0gID0gbnRvaGwoaXBoLVx1MDAzZXNhZGRyKSBcdTAwM2MgbnRvaGwoaW5mby1cdTAwM2VzcmNfbWluLmlwKTtcbiBcdFx0bSB8PSBudG9obChpcGgtXHUwMDNlc2FkZHIpIFx1MDAzZSBudG9obChpbmZvLVx1MDAzZXNyY19tYXguaXApO1xuIFx0XHRtIF49ICEhKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVik7XG4tXHRcdGlmIChtKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJzcmMgSVAgJXBJNCBOT1QgaW4gcmFuZ2UgJXMlcEk0LSVwSTRcXG5cIixcbi1cdFx0XHQgICAgICAgICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsXG4tXHRcdFx0ICAgICAgICAgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVikgPyBcIihJTlYpIFwiIDogXCJcIixcbi1cdFx0XHQgICAgICAgICBcdTAwMjZpbmZvLVx1MDAzZXNyY19taW4uaXAsXG4tXHRcdFx0ICAgICAgICAgXHUwMDI2aW5mby1cdTAwM2VzcmNfbWF4LmlwKTtcbitcdFx0aWYgKG0pXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHR9XG4gXHR9XG4gXHRpZiAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9EU1QpIHtcbiBcdFx0bSAgPSBudG9obChpcGgtXHUwMDNlZGFkZHIpIFx1MDAzYyBudG9obChpbmZvLVx1MDAzZWRzdF9taW4uaXApO1xuIFx0XHRtIHw9IG50b2hsKGlwaC1cdTAwM2VkYWRkcikgXHUwMDNlIG50b2hsKGluZm8tXHUwMDNlZHN0X21heC5pcCk7XG4gXHRcdG0gXj0gISEoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9EU1RfSU5WKTtcbi1cdFx0aWYgKG0pIHtcbi1cdFx0XHRwcl9kZWJ1ZyhcImRzdCBJUCAlcEk0IE5PVCBpbiByYW5nZSAlcyVwSTQtJXBJNFxcblwiLFxuLVx0XHRcdCAgICAgICAgIFx1MDAyNmlwaC1cdTAwM2VkYWRkcixcbi1cdFx0XHQgICAgICAgICAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9EU1RfSU5WKSA/IFwiKElOVikgXCIgOiBcIlwiLFxuLVx0XHRcdCAgICAgICAgIFx1MDAyNmluZm8tXHUwMDNlZHN0X21pbi5pcCxcbi1cdFx0XHQgICAgICAgICBcdTAwMjZpbmZvLVx1MDAzZWRzdF9tYXguaXApO1xuK1x0XHRpZiAobSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbiBcdH1cbiBcdHJldHVybiB0cnVlO1xuIH1cbkBAIC03MywyNyArNjEsMTUgQEAgaXByYW5nZV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRtICA9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmluZm8tXHUwMDNlc3JjX21pbi5pbjYpO1xuIFx0XHRtIHw9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpbmZvLVx1MDAzZXNyY19tYXguaW42LCBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuIFx0XHRtIF49ICEhKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVik7XG4tXHRcdGlmIChtKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJzcmMgSVAgJXBJNiBOT1QgaW4gcmFuZ2UgJXMlcEk2LSVwSTZcXG5cIixcbi1cdFx0XHRcdCBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHQgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVikgPyBcIihJTlYpIFwiIDogXCJcIixcbi1cdFx0XHRcdCBcdTAwMjZpbmZvLVx1MDAzZXNyY19taW4uaW42LFxuLVx0XHRcdFx0IFx1MDAyNmluZm8tXHUwMDNlc3JjX21heC5pbjYpO1xuK1x0XHRpZiAobSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbiBcdH1cbiBcdGlmIChpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUFJBTkdFX0RTVCkge1xuIFx0XHRtICA9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpcGgtXHUwMDNlZGFkZHIsIFx1MDAyNmluZm8tXHUwMDNlZHN0X21pbi5pbjYpO1xuIFx0XHRtIHw9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpbmZvLVx1MDAzZWRzdF9tYXguaW42LCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIpO1xuIFx0XHRtIF49ICEhKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfRFNUX0lOVik7XG4tXHRcdGlmIChtKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJkc3QgSVAgJXBJNiBOT1QgaW4gcmFuZ2UgJXMlcEk2LSVwSTZcXG5cIixcbi1cdFx0XHRcdCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHQgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfRFNUX0lOVikgPyBcIihJTlYpIFwiIDogXCJcIixcbi1cdFx0XHRcdCBcdTAwMjZpbmZvLVx1MDAzZWRzdF9taW4uaW42LFxuLVx0XHRcdFx0IFx1MDAyNmluZm8tXHUwMDNlZHN0X21heC5pbjYpO1xuK1x0XHRpZiAobSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbiBcdH1cbiBcdHJldHVybiB0cnVlO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2lwdnMuYyBiL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jXG5pbmRleCAyNTNjNzFjYzlhNjM0Li5lMTNjMGZmYjczYTlhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcHZzLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jXG5AQCAtMTQ4LDcgKzE0OCw2IEBAIGlwdnNfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIG91dF9wdXRfY3A6XG4gXHRfX2lwX3ZzX2Nvbm5fcHV0KGNwKTtcbiBvdXQ6XG4tXHRwcl9kZWJ1ZyhcIm1hdGNoPSVkXFxuXCIsIG1hdGNoKTtcbiBcdHJldHVybiBtYXRjaDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuYyBiL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmNcbmluZGV4IGExNjkxZmY0MDVkM2MuLmJmZjVmNTNhOWJlZmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jXG5AQCAtMzcsNyArMzcsNiBAQCBwb3J0c19tYXRjaF92MShjb25zdCBzdHJ1Y3QgeHRfbXVsdGlwb3J0X3YxICptaW5mbyxcbiBcdFx0aWYgKG1pbmZvLVx1MDAzZXBmbGFnc1tpXSkge1xuIFx0XHRcdC8qIHJhbmdlIHBvcnQgbWF0Y2hpbmcgKi9cbiBcdFx0XHRlID0gbWluZm8tXHUwMDNlcG9ydHNbKytpXTtcbi1cdFx0XHRwcl9kZWJ1ZyhcInNyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkLSVkP1xcblwiLCBzLCBlKTtcbiBcbiBcdFx0XHRzd2l0Y2ggKG1pbmZvLVx1MDAzZWZsYWdzKSB7XG4gXHRcdFx0Y2FzZSBYVF9NVUxUSVBPUlRfU09VUkNFOlxuQEAgLTU4LDggKzU3LDYgQEAgcG9ydHNfbWF0Y2hfdjEoY29uc3Qgc3RydWN0IHh0X211bHRpcG9ydF92MSAqbWluZm8sXG4gXHRcdFx0fVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIGV4YWN0IHBvcnQgbWF0Y2hpbmcgKi9cbi1cdFx0XHRwcl9kZWJ1ZyhcInNyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkP1xcblwiLCBzKTtcbi1cbiBcdFx0XHRzd2l0Y2ggKG1pbmZvLVx1MDAzZWZsYWdzKSB7XG4gXHRcdFx0Y2FzZSBYVF9NVUxUSVBPUlRfU09VUkNFOlxuIFx0XHRcdFx0aWYgKHNyYyA9PSBzKVxuQEAgLTk3LDcgKzk0LDYgQEAgbXVsdGlwb3J0X210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0LyogV2UndmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2VcbiBcdFx0ICogY2FuJ3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLlxuIFx0XHQgKi9cbi1cdFx0cHJfZGVidWcoXCJEcm9wcGluZyBldmlsIG9mZnNldD0wIHRpbnlncmFtLlxcblwiKTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuY1xuaW5kZXggYjQ2YTZhNTEyMDU4My4uZDM1YzIxZDk2NTFiMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuY1xuQEAgLTQ4LDMwICs0OCwxNyBAQCBtYXRjaF9wYWNrZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHN0cnVjdCB4dF9zY3RwX2ZsYWdfaW5mbyAqZmxhZ19pbmZvID0gaW5mby1cdTAwM2VmbGFnX2luZm87XG4gXHRpbnQgZmxhZ19jb3VudCA9IGluZm8tXHUwMDNlZmxhZ19jb3VudDtcbiBcbi0jaWZkZWYgREVCVUdcbi1cdGludCBpID0gMDtcbi0jZW5kaWZcbi1cbiBcdGlmIChjaHVua19tYXRjaF90eXBlID09IFNDVFBfQ0hVTktfTUFUQ0hfQUxMKVxuIFx0XHRTQ1RQX0NIVU5LTUFQX0NPUFkoY2h1bmttYXBjb3B5LCBpbmZvLVx1MDAzZWNodW5rbWFwKTtcbiBcbiBcdGRvIHtcbiBcdFx0c2NoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX3NjaCksIFx1MDAyNl9zY2gpO1xuIFx0XHRpZiAoc2NoID09IE5VTEwgfHwgc2NoLVx1MDAzZWxlbmd0aCA9PSAwKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJEcm9wcGluZyBpbnZhbGlkIFNDVFAgcGFja2V0LlxcblwiKTtcbiBcdFx0XHQqaG90ZHJvcCA9IHRydWU7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4tI2lmZGVmIERFQlVHXG4tXHRcdHByX2RlYnVnKFwiQ2h1bmsgbnVtOiAlZFxcdG9mZnNldDogJWRcXHR0eXBlOiAlZFxcdGxlbmd0aDogJWRcIlxuLVx0XHRcdCBcIlxcdGZsYWdzOiAleFxcblwiLFxuLVx0XHRcdCArK2ksIG9mZnNldCwgc2NoLVx1MDAzZXR5cGUsIGh0b25zKHNjaC1cdTAwM2VsZW5ndGgpLFxuLVx0XHRcdCBzY2gtXHUwMDNlZmxhZ3MpO1xuLSNlbmRpZlxuIFx0XHRvZmZzZXQgKz0gU0NUUF9QQUQ0KG50b2hzKHNjaC1cdTAwM2VsZW5ndGgpKTtcbiBcbi1cdFx0cHJfZGVidWcoXCJza2ItXHUwMDNlbGVuOiAlZFxcdG9mZnNldDogJWRcXG5cIiwgc2tiLVx1MDAzZWxlbiwgb2Zmc2V0KTtcbi1cbiBcdFx0aWYgKFNDVFBfQ0hVTktNQVBfSVNfU0VUKGluZm8tXHUwMDNlY2h1bmttYXAsIHNjaC1cdTAwM2V0eXBlKSkge1xuIFx0XHRcdHN3aXRjaCAoY2h1bmtfbWF0Y2hfdHlwZSkge1xuIFx0XHRcdGNhc2UgU0NUUF9DSFVOS19NQVRDSF9BTlk6XG5AQCAtMTIxLDE4ICsxMDgsMTQgQEAgc2N0cF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3Qgc2N0cGhkciAqc2g7XG4gXHRzdHJ1Y3Qgc2N0cGhkciBfc2g7XG4gXG4tXHRpZiAocGFyLVx1MDAzZWZyYWdvZmYgIT0gMCkge1xuLVx0XHRwcl9kZWJ1ZyhcIkRyb3BwaW5nIG5vbi1maXJzdCBmcmFnbWVudC4uIEZJWE1FXFxuXCIpO1xuK1x0aWYgKHBhci1cdTAwM2VmcmFnb2ZmICE9IDApXG4gXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbiBcbiBcdHNoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcGFyLVx1MDAzZXRob2ZmLCBzaXplb2YoX3NoKSwgXHUwMDI2X3NoKTtcbiBcdGlmIChzaCA9PSBOVUxMKSB7XG4tXHRcdHByX2RlYnVnKFwiRHJvcHBpbmcgZXZpbCBUQ1Agb2Zmc2V0PTAgdGlueWdyYW0uXFxuXCIpO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbi1cdHByX2RlYnVnKFwic3B0OiAlZFxcdGRwdDogJWRcXG5cIiwgbnRvaHMoc2gtXHUwMDNlc291cmNlKSwgbnRvaHMoc2gtXHUwMDNlZGVzdCkpO1xuIFxuIFx0cmV0dXJuICBTQ0NIRUNLKG50b2hzKHNoLVx1MDAzZXNvdXJjZSkgXHUwMDNlPSBpbmZvLVx1MDAzZXNwdHNbMF1cbiBcdFx0XHRcdTAwMjZcdTAwMjYgbnRvaHMoc2gtXHUwMDNlc291cmNlKSBcdTAwM2M9IGluZm8tXHUwMDNlc3B0c1sxXSxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3RjcHVkcC5jIGIvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuY1xuaW5kZXggZjc2Y2YxOGYxYTI0NC4uNzA2MDhiOGQwNmFiMiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmNcbkBAIC00NCw4ICs0NCw2IEBAIHRjcF9maW5kX29wdGlvbih1X2ludDhfdCBvcHRpb24sXG4gXHR1X2ludDhfdCBfb3B0WzYwIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpXTtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0cHJfZGVidWcoXCJmaW5kaW5nIG9wdGlvblxcblwiKTtcbi1cbiBcdGlmICghb3B0bGVuKVxuIFx0XHRyZXR1cm4gaW52ZXJ0O1xuIFxuQEAgLTgxLDEwICs3OSw4IEBAIHN0YXRpYyBib29sIHRjcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdCAgIGNhdXNlcyB0aGlzLiBJdHMgYSBjcmFja2VyIHRyeWluZyB0byBicmVhayBpbiBieSBkb2luZyBhXG4gXHRcdCAgIGZsYWcgb3ZlcndyaXRlIHRvIHBhc3MgdGhlIGRpcmVjdGlvbiBjaGVja3MuXG4gXHRcdCovXG4tXHRcdGlmIChwYXItXHUwMDNlZnJhZ29mZiA9PSAxKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJEcm9wcGluZyBldmlsIFRDUCBvZmZzZXQ9MSBmcmFnLlxcblwiKTtcbitcdFx0aWYgKHBhci1cdTAwM2VmcmFnb2ZmID09IDEpXG4gXHRcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuLVx0XHR9XG4gXHRcdC8qIE11c3Qgbm90IGJlIGEgZnJhZ21lbnQuICovXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC05Myw3ICs4OSw2IEBAIHN0YXRpYyBib29sIHRjcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRpZiAodGggPT0gTlVMTCkge1xuIFx0XHQvKiBXZSd2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZVxuIFx0XHQgICBjYW4ndC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuICovXG4tXHRcdHByX2RlYnVnKFwiRHJvcHBpbmcgZXZpbCBUQ1Agb2Zmc2V0PTAgdGlueWdyYW0uXFxuXCIpO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC0xNDUsNyArMTQwLDYgQEAgc3RhdGljIGJvb2wgdWRwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdGlmICh1aCA9PSBOVUxMKSB7XG4gXHRcdC8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXG4gXHRcdCAgIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4gKi9cbi1cdFx0cHJfZGVidWcoXCJEcm9wcGluZyBldmlsIFVEUCB0aW55Z3JhbS5cXG5cIik7XG4gXHRcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6Mzk6MjEuODIxNzg5Mzc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTMxMjU3MDUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBPcHRpbWl6YXRpb24gYW5kIFBvdGVudGlhbCBMb2dpYyBGbGF3KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgcXVpY2sgc2NhbiwgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBuZXRmaWx0ZXIgZmlsZXMg4oCTIGBuZXQvaXB2NC9uZXRmaWx0ZXIvYCwgYG5ldC9pcHY2L25ldGZpbHRlci9gLCBhbmQgYG5ldC9uZXRmaWx0ZXIvYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlc2UgYXJlIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2VzOiBtYWlubHksIHNvbWUgZGVidWdnaW5nIG91dHB1dCBpcyBiZWluZyB0b25lZCBkb3duIGJ5IHJlbW92aW5nIGBwcl9kZWJ1Z2Agc3RhdGVtZW50cywgcmVwbGFjaW5nIGRlYnVnIG9yIGluZm9ybWF0aW9uYWwgcHJpbnRzIHdpdGggcmF0ZS1saW1pdGVkIHZlcnNpb25zIHVzaW5nIGBwcl9pbmZvX3JhdGVsaW1pdGVkYCBpbiB0aGUgYF9jaGVja2AgZnVuY3Rpb25zLiBUaGF0J3MgYSByZWFzb25hYmxlIG9wdGltaXphdGlvbi5cblxuVGhlbiwgdGhlcmXigJlzIHNvbWV0aGluZyBuZXcgaW4gYHh0X0NULmNgLiBJIHNlZSB0aGF0IGEgbGVuZ3RoIGNoZWNrIGhhcyBiZWVuIGFkZGVkIGZvciBgaW5mby1cdTAwM2VoZWxwZXJgIGFuZCBgaW5mby1cdTAwM2V0aW1lb3V0YCB3aGljaCBpcyBnb29kIHByYWN0aWNlLiBJ4oCZdmUgbm90aWNlZCBhIHBvc3NpYmxlIGJ1Zywgc28gbGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29kZTpcbmBgYGNcbkBAIC0xOTUsNyArMTk1LDggQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcixcbiBcdFx0Z290byBlcnIzO1xuIFx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNlaGVscGVyWzBdKSB7XG4rXHRpZiAoaW5mby1cdTAwM2VoZWxwZXJbMF0gXHUwMDI2XHUwMDI2XG4rXHQgICAgc3RybmxlbihpbmZvLVx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiBcdFx0aWYgKHN0cm5sZW4oaW5mby1cdTAwM2VoZWxwZXIsIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpID09IHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiBcdFx0XHRyZXQgPSAtRU5BTUVUT09MT05HO1xuIFx0XHRcdGdvdG8gZXJyMztcbkBAIC0yMDYsNyArMjA3LDggQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcixcbiBcdFx0XHRnb3RvIGVycjM7XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0WzBdKSB7XG4rXHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0WzBdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHN0cm5sZW4oaW5mby1cdTAwM2V0aW1lb3V0LCBzaXplb2YoaW5mby1cdTAwM2V0aW1lb3V0KSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gXHRcdGlmIChzdHJubGVuKGluZm8tXHUwMDNldGltZW91dCwgc2l6ZW9mKGluZm8tXHUwMDNldGltZW91dCkpID09IHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gXHRcdFx0cmV0ID0gLUVOQU1FVE9PTE9ORztcbiBcdFx0XHRnb3RvIGVycjQ7XG5gYGBcbk5vdywgY29tcGFyaW5nIHRoZSBvcmlnaW5hbCBjb2RlIHRvIHRoZSBuZXcgY29kZS4uLiBJIHNlZSB3aGF0J3MgaGFwcGVuaW5nLiBUaGUgb3JpZ2luYWwgYGlmYCBjb25kaXRpb24gd2FzOlxuXG5gYGBjXG5cdGlmIChpbmZvLVx1MDAzZWhlbHBlclswXSkge1xuXHRcdGlmIChzdHJubGVuKGluZm8tXHUwMDNlaGVscGVyLCBzaXplb2YoaW5mby1cdTAwM2VoZWxwZXIpKSA9PSBzaXplb2YoaW5mby1cdTAwM2VoZWxwZXIpKSB7XG5gYGBcblxuVGhlIGFkZGVkIGNoZWNrIGlzOlxuYGBgY1xuXHRpZiAoaW5mby1cdTAwM2VoZWxwZXJbMF0gXHUwMDI2XHUwMDI2XG5cdCAgICBzdHJubGVuKGluZm8tXHUwMDNlaGVscGVyLCBzaXplb2YoaW5mby1cdTAwM2VoZWxwZXIpKSBcdTAwM2Mgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkge1xuXHRcdGlmIChzdHJubGVuKGluZm8tXHUwMDNlaGVscGVyLCBzaXplb2YoaW5mby1cdTAwM2VoZWxwZXIpKSA9PSBzaXplb2YoaW5mby1cdTAwM2VoZWxwZXIpKSB7XG5gYGBcblRoZSBsb2dpYyBoZXJlIGxvb2tzIGZsYXdlZC4gSWYgdGhlIGNvbmRpdGlvbiBgc3RybmxlbihpbmZvLVx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcilgIGlzICp0cnVlKiwgdGhlbiB0aGUgaW5uZXIgY29uZGl0aW9uIGBzdHJubGVuKC4uLikgPT0gc2l6ZW9mKC4uLilgIHdpbGwgKm5ldmVyKiBiZSB0cnVlLiBUaGUgY29kZSBhZGRlZCBhIHJlZHVuZGFuY3kgY2hlY2sgZm9yIGxlbmd0aCB0aGF0IG1ha2VzIHRoZSBzZWNvbmQgY29uZGl0aW9uIGltcG9zc2libGUsIGFuZCB0aGUgd2hvbGUgY29kZSBibG9jayBjb3VsZCBiZSBza2lwcGVkLiBJdCdzIGEgc3VidGxlIGJ1dCBzaWduaWZpY2FudCBpc3N1ZTsgdGhhdCBjb25kaXRpb25hbCBjaGVjayBpcyBkb2luZyBub3RoaW5nLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSByZXN0IG9mIHRoZSBwYXRjaCBpbiBgbmV0L25ldGZpbHRlci94dF9DVC5jYCB0byBzZWUgaWYgdGhhdCBoYXBwZW5zIGVsc2V3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MjEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDozOTozMS4xMzQzNjM4MTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL3h0X0NULmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdHpvbmUuaWQgPSBpbmZvLVxcdTAwM2V6b25lO1xcbiAxODE6XFx0XFx0em9uZS5kaXIgPSB4dF9jdF9mbGFnc190b19kaXIoaW5mbyk7XFxuIDE4MjpcXHRcXHRpZiAoaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYVF9DVF9aT05FX01BUkspXFxuIDE4MzpcXHRcXHRcXHR6b25lLmZsYWdzIHw9IE5GX0NUX0ZMQUdfTUFSSztcXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0Y3QgPSBuZl9jdF90bXBsX2FsbG9jKHBhci1cXHUwMDNlbmV0LCBcXHUwMDI2em9uZSwgR0ZQX0tFUk5FTCk7XFxuIDE4NjpcXHRcXHRpZiAoIWN0KSB7XFxuIDE4NzpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiAxODg6XFx0XFx0XFx0Z290byBlcnIyO1xcbiAxODk6XFx0XFx0fVxcbiAxOTA6XFx0XFxuIDE5MTpcXHRcXHRpZiAoKGluZm8tXFx1MDAzZWN0X2V2ZW50cyB8fCBpbmZvLVxcdTAwM2VleHBfZXZlbnRzKSBcXHUwMDI2XFx1MDAyNlxcbiAxOTI6XFx0XFx0ICAgICFuZl9jdF9lY2FjaGVfZXh0X2FkZChjdCwgaW5mby1cXHUwMDNlY3RfZXZlbnRzLCBpbmZvLVxcdTAwM2VleHBfZXZlbnRzLFxcbiAxOTM6XFx0XFx0XFx0XFx0XFx0ICBHRlBfS0VSTkVMKSkge1xcbiAxOTQ6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gMTk1OlxcdFxcdFxcdGdvdG8gZXJyMztcXG4gMTk2OlxcdFxcdH1cXG4gMTk3OlxcdFxcbiAxOTg6XFx0XFx0aWYgKGluZm8tXFx1MDAzZWhlbHBlclswXSBcXHUwMDI2XFx1MDAyNlxcbiAxOTk6XFx0XFx0ICAgIHN0cm5sZW4oaW5mby1cXHUwMDNlaGVscGVyLCBzaXplb2YoaW5mby1cXHUwMDNlaGVscGVyKSkgXFx1MDAzYyBzaXplb2YoaW5mby1cXHUwMDNlaGVscGVyKSkge1xcbiAyMDA6XFx0XFx0XFx0aWYgKHN0cm5sZW4oaW5mby1cXHUwMDNlaGVscGVyLCBzaXplb2YoaW5mby1cXHUwMDNlaGVscGVyKSkgPT0gc2l6ZW9mKGluZm8tXFx1MDAzZWhlbHBlcikpIHtcXG4gMjAxOlxcdFxcdFxcdFxcdHJldCA9IC1FTkFNRVRPT0xPTkc7XFxuIDIwMjpcXHRcXHRcXHRcXHRnb3RvIGVycjM7XFxuIDIwMzpcXHRcXHRcXHR9XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdFxcdHJldCA9IHh0X2N0X3NldF9oZWxwZXIoY3QsIGluZm8tXFx1MDAzZWhlbHBlciwgcGFyKTtcXG4gMjA2OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAyMDc6XFx0XFx0XFx0XFx0Z290byBlcnIzO1xcbiAyMDg6XFx0XFx0fVxcbiAyMDk6XFx0XFxuIDIxMDpcXHRcXHRpZiAoaW5mby1cXHUwMDNldGltZW91dFswXSBcXHUwMDI2XFx1MDAyNlxcbiAyMTE6XFx0XFx0ICAgIHN0cm5sZW4oaW5mby1cXHUwMDNldGltZW91dCwgc2l6ZW9mKGluZm8tXFx1MDAzZXRpbWVvdXQpKSBcXHUwMDNjIHNpemVvZihpbmZvLVxcdTAwM2V0aW1lb3V0KSkge1xcbiAyMTI6XFx0XFx0XFx0aWYgKHN0cm5sZW4oaW5mby1cXHUwMDNldGltZW91dCwgc2l6ZW9mKGluZm8tXFx1MDAzZXRpbWVvdXQpKSA9PSBzaXplb2YoaW5mby1cXHUwMDNldGltZW91dCkpIHtcXG4gMjEzOlxcdFxcdFxcdFxcdHJldCA9IC1FTkFNRVRPT0xPTkc7XFxuIDIxNDpcXHRcXHRcXHRcXHRnb3RvIGVycjQ7XFxuIDIxNTpcXHRcXHRcXHR9XFxuIDIxNjpcXHRcXG4gMjE3OlxcdFxcdFxcdHJldCA9IHh0X2N0X3NldF90aW1lb3V0KGN0LCBwYXIsIGluZm8tXFx1MDAzZXRpbWVvdXQpO1xcbiAyMTg6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDIxOTpcXHRcXHRcXHRcXHRnb3RvIGVycjQ7XFxuIDIyMDpcXHRcXHR9XFxuIDIyMTpcXHRcXHRfX3NldF9iaXQoSVBTX0NPTkZJUk1FRF9CSVQsIFxcdTAwMjZjdC1cXHUwMDNlc3RhdHVzKTtcXG4gMjIyOlxcdG91dDpcXG4gMjIzOlxcdFxcdGluZm8tXFx1MDAzZWN0ID0gY3Q7XFxuIDIyNDpcXHRcXHRyZXR1cm4gMDtcXG4gMjI1OlxcdFxcbiAyMjY6XFx0ZXJyNDpcXG4gMjI3OlxcdFxcdGhlbHAgPSBuZmN0X2hlbHAoY3QpO1xcbiAyMjg6XFx0XFx0eHRfY3RfcHV0X2hlbHBlcihoZWxwKTtcXG4gMjI5OlxcdGVycjM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjM5OjMxLjEzNDQ0MDgwM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTQyMDI5NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEEgQmVoYXZpb3JhbCBTaGlmdCBpbiB4dF9DVC5jKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhlIGB4dF9DVC5jYCBtb2R1bGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGB4dF9jdF90Z19jaGVja2AgZnVuY3Rpb24uIFRoZSBhZGRpdGlvbiBvZiBgXHUwMDI2XHUwMDI2IHN0cm5sZW4oaW5mby1cdTAwM2VoZWxwZXIsIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIFx1MDAzYyBzaXplb2YoaW5mby1cdTAwM2VoZWxwZXIpYCB0byB0aGUgYGlmYCBjb25kaXRpb24gaW1tZWRpYXRlbHkgY2F1Z2h0IG15IGV5ZS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGlmIGBzdHJubGVuYCByZXR1cm5zIHRoZSBtYXhpbXVtIGJ1ZmZlciBzaXplIChtZWFuaW5nIGBpbmZvLVx1MDAzZWhlbHBlcmAgaXNuJ3QgbnVsbC10ZXJtaW5hdGVkKSwgdGhlIGVudGlyZSBibG9jayBpcyBub3cgc2tpcHBlZC4gVGhpcyBpcyBhIGNydWNpYWwgZGV0YWlsLiBUaGUgY29uc2VxdWVuY2UgaXMgdGhhdCBpbnN0ZWFkIG9mIHJldHVybmluZyBgLUVOQU1FVE9PTE9OR2AgYW5kIGV4aXRpbmcgdmlhIGBlcnIzYCwgdGhlIGNvZGUgbm93ICpzaWxlbnRseSogaWdub3JlcyB0aGUgaGVscGVyIHN0cmluZy4gRWZmZWN0aXZlbHksIHRoaXMgYWx0ZXJzIHRoZSB0YXJnZXQncyBiZWhhdmlvciB3aGVuIGVuY291bnRlcmluZyBhIGhlbHBlciBzdHJpbmcgdGhhdCBleGNlZWRzIHRoZSBleHBlY3RlZCBsZW5ndGggb3IgaXMgbm90IHByb3Blcmx5IG51bGwtdGVybWluYXRlZC4gSXQgYnlwYXNzZXMgdGhlIGVycm9yIGNoZWNrLlxuXG5JIHdlbnQgYmFjayBhbmQgZG91YmxlLWNoZWNrZWQgdGhlIG9yaWdpbmFsIGNvZGUuIFdpdGhvdXQgdGhlIG5ldyBjb25kaXRpb24sIHRoZSBvcmlnaW5hbCBjb2RlICpkaWQqIGNhdGNoIHRoaXMgbm9uLW51bGwtdGVybWluYXRlZCBoZWxwZXIgd2l0aCB0aGUgYHN0cm5sZW5gIGNoZWNrIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuIFRodXMsIHRoZSBwYXRjaCBoYXMgZGVmaW5pdGVseSBjaGFuZ2VkIHRoZSBmdW5jdGlvbidzIGJlaGF2aW9yLiBUaGUgcGF0Y2ggbWFrZXMgYW4gaW1wbGljaXQgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgYnVnLlxuXG5JIHF1aWNrbHkgbG9va2VkIGF0IHRoZSBjaGFuZ2UgaW4gYG5ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNgIGFuZCBzYXcgdGhlIHBsYWNlbWVudCBvZiBhIGBtdXRleF91bmxvY2tgIGJlaW5nIGNoYW5nZWQsIGJ1dCBpdCBzZWVtcyBiZW5pZ24uXG5cblRoaXMgYmVoYXZpb3JhbCBjaGFuZ2UgaXMgd29ydGggaW52ZXN0aWdhdGluZyBmdXJ0aGVyLCBhbmQgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gZnV6ei4gVGhlIG9yaWdpbmFsIGNvZGUgcHJvdmlkZWQgZXJyb3IgY2hlY2tpbmcgYW5kIHRoZSBwYXRjaCByZW1vdmVkIGl0LiBUaGlzIGlzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGFuIGFyZWEgdGhhdCBjYW4gYmUgYSBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0aWVzLiBJJ2xsIG5lZWQgdG8gY3JhZnQgc29tZSBzcGVjaWZpYyB0ZXN0IGNhc2VzIHRvIGV4cGxvcmUgdGhpcyBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTEyMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjM5OjQyLjI3NjQ3MzczNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA3NDQxNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHRfY3RfdGdfY2hlY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci94dF9DVC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIveHRfQ1QuYz0xNDA9c3RhdGljIHZvaWQgeHRfY3RfcHV0X2hlbHBlcihzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwKVxcbi0tXFxubmV0L25ldGZpbHRlci94dF9DVC5jLTE1NC1cXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmM6MTU1OnN0YXRpYyBpbnQgeHRfY3RfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIsXFxubmV0L25ldGZpbHRlci94dF9DVC5jLTE1Ni1cXHRcXHRcXHQgIHN0cnVjdCB4dF9jdF90YXJnZXRfaW5mb192MSAqaW5mbylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yMzYtXFxubmV0L25ldGZpbHRlci94dF9DVC5jOjIzNzpzdGF0aWMgaW50IHh0X2N0X3RnX2NoZWNrX3YwKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yMzgte1xcbi0tXFxubmV0L25ldGZpbHRlci94dF9DVC5jLTI1Mi1cXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmM6MjUzOlxcdHJldCA9IHh0X2N0X3RnX2NoZWNrKHBhciwgXFx1MDAyNmluZm9fdjEpO1xcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yNTQtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMjYxLVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYzoyNjI6c3RhdGljIGludCB4dF9jdF90Z19jaGVja192MShjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMjYzLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yNjgtXFxubmV0L25ldGZpbHRlci94dF9DVC5jOjI2OTpcXHRyZXR1cm4geHRfY3RfdGdfY2hlY2socGFyLCBwYXItXFx1MDAzZXRhcmdpbmZvKTtcXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMjcwLX1cXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMjcxLVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYzoyNzI6c3RhdGljIGludCB4dF9jdF90Z19jaGVja192Mihjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMjczLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0yNzgtXFxubmV0L25ldGZpbHRlci94dF9DVC5jOjI3OTpcXHRyZXR1cm4geHRfY3RfdGdfY2hlY2socGFyLCBwYXItXFx1MDAzZXRhcmdpbmZvKTtcXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMjgwLX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYz0zMzE9c3RhdGljIHN0cnVjdCB4dF90YXJnZXQgeHRfY3RfdGdfcmVnW10gX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0zNDQtXFx0XFx0LnVzZXJzaXplXFx0PSBvZmZzZXRvZihzdHJ1Y3QgeHRfY3RfdGFyZ2V0X2luZm8sIGN0KSxcXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmM6MzQ1OlxcdFxcdC5jaGVja2VudHJ5XFx0PSB4dF9jdF90Z19jaGVja192MCxcXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMzQ2LVxcdFxcdC5kZXN0cm95XFx0PSB4dF9jdF90Z19kZXN0cm95X3YwLFxcbi0tXFxubmV0L25ldGZpbHRlci94dF9DVC5jLTM1Ni1cXHRcXHQudXNlcnNpemVcXHQ9IG9mZnNldG9mKHN0cnVjdCB4dF9jdF90YXJnZXRfaW5mb192MSwgY3QpLFxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYzozNTc6XFx0XFx0LmNoZWNrZW50cnlcXHQ9IHh0X2N0X3RnX2NoZWNrX3YxLFxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0zNTgtXFx0XFx0LmRlc3Ryb3lcXHQ9IHh0X2N0X3RnX2Rlc3Ryb3lfdjEsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMzY4LVxcdFxcdC51c2Vyc2l6ZVxcdD0gb2Zmc2V0b2Yoc3RydWN0IHh0X2N0X3RhcmdldF9pbmZvX3YxLCBjdCksXFxubmV0L25ldGZpbHRlci94dF9DVC5jOjM2OTpcXHRcXHQuY2hlY2tlbnRyeVxcdD0geHRfY3RfdGdfY2hlY2tfdjIsXFxubmV0L25ldGZpbHRlci94dF9DVC5jLTM3MC1cXHRcXHQuZGVzdHJveVxcdD0geHRfY3RfdGdfZGVzdHJveV92MSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy0zODgtXFx0XFx0LnVzZXJzaXplXFx0PSBvZmZzZXRvZihzdHJ1Y3QgeHRfY3RfdGFyZ2V0X2luZm8sIGN0KSxcXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmM6Mzg5OlxcdFxcdC5jaGVja2VudHJ5XFx0PSB4dF9jdF90Z19jaGVja192MCxcXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtMzkwLVxcdFxcdC5kZXN0cm95XFx0PSB4dF9jdF90Z19kZXN0cm95X3YwLFxcbi0tXFxubmV0L25ldGZpbHRlci94dF9DVC5jLTQwMC1cXHRcXHQudXNlcnNpemVcXHQ9IG9mZnNldG9mKHN0cnVjdCB4dF9jdF90YXJnZXRfaW5mb192MSwgY3QpLFxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYzo0MDE6XFx0XFx0LmNoZWNrZW50cnlcXHQ9IHh0X2N0X3RnX2NoZWNrX3YxLFxcbm5ldC9uZXRmaWx0ZXIveHRfQ1QuYy00MDItXFx0XFx0LmRlc3Ryb3lcXHQ9IHh0X2N0X3RnX2Rlc3Ryb3lfdjEsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X0NULmMtNDEyLVxcdFxcdC51c2Vyc2l6ZVxcdD0gb2Zmc2V0b2Yoc3RydWN0IHh0X2N0X3RhcmdldF9pbmZvX3YxLCBjdCksXFxubmV0L25ldGZpbHRlci94dF9DVC5jOjQxMzpcXHRcXHQuY2hlY2tlbnRyeVxcdD0geHRfY3RfdGdfY2hlY2tfdjIsXFxubmV0L25ldGZpbHRlci94dF9DVC5jLTQxNC1cXHRcXHQuZGVzdHJveVxcdD0geHRfY3RfdGdfZGVzdHJveV92MSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6Mzk6NDIuMzc3MjI0MjIyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5ODE5NDA1NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgYSBOZXRmaWx0ZXIgUGF0Y2g6IEZ1bmN0aW9uYWwgQ2hhbmdlIGluIGB4dF9DVC5jYCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UgaGF2ZSBhIHBhdGNoIHRoYXQncyBwcmltYXJpbHkgYWJvdXQgY2xlYW51cCAtIHJlbW92aW5nIGEgYnVuY2ggb2YgYHByX2RlYnVnYCBjYWxscyBhbmQgY29uc29saWRhdGluZyB0aGVtLCBwcmVzdW1hYmx5IGZvciBhIGxlc3Mgbm9pc3kga2VybmVsIGxvZy4gVGhhdCdzIGZpbmUsIGNvc21ldGljIG1vc3RseSwgd29uJ3QgZm9jdXMgb24gdGhhdC4gVGhlIHNpZ25pZmljYW50IGNoYW5nZSBpcyBpbiBgeHRfQ1QuY2AuIE15IGV4cGVydCBleWUgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhpcyBtb2RpZmljYXRpb246XG5cbmBgYGNcbi1cdGlmIChpbmZvLVx1MDAzZWhlbHBlclswXSkge1xuK1x0aWYgKGluZm8tXHUwMDNlaGVscGVyWzBdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHN0cm5sZW4oaW5mby1cdTAwM2VoZWxwZXIsIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIFx1MDAzYyBzaXplb2YoaW5mby1cdTAwM2VoZWxwZXIpKSB7XG5cdFx0aWYgKHN0cm5sZW4oaW5mby1cdTAwM2VoZWxwZXIsIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpID09IHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcblx0XHRcdHJldCA9IC1FTkFNRVRPT0xPTkc7XG5cdFx0XHRnb3RvIGVycjM7XG5cdFx0fVxuXG5cdFx0cmV0ID0geHRfY3Rfc2V0X2hlbHBlcihjdCwgaW5mby1cdTAwM2VoZWxwZXIsIHBhcik7XG5cdFx0aWYgKHJldCBcdTAwM2MgMClcblx0XHRcdGdvdG8gZXJyMztcblx0fVxuYGBgXG5cblRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gVGhlIG9yaWdpbmFsIGNvZGUgY2hlY2tlZCBpZiBgaW5mby1cdTAwM2VoZWxwZXJgIGV4aXN0ZWQuIElmIGl0IGRpZCwgYW5kIGlmIHRoZSBzdHJpbmcgd2FzIG5vdCBudWxsIHRlcm1pbmF0ZWQsIHRoZSBvbGQgY29kZSByZXR1cm5lZCBgLUVOQU1FVE9PTE9OR2AuIFRoZSBuZXcgY29kZSBhZGRzIGEgKnNlY29uZCogY2hlY2ssIGlmIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBpcyBsZXNzIHRoYW4gdGhlIGJ1ZmZlci4gTm93LCAqaWYqIHRoZSBzdHJpbmcgaXNuJ3QgbnVsbC10ZXJtaW5hdGVkLCBgc3RybmxlbmAgd2lsbCByZXR1cm4gdGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4gU28sIHRoZSBuZXcgY29uZGl0aW9uLCBgc3RybmxlbiguLi4pIFx1MDAzYyBzaXplb2YoLi4uKWAsIGlzIGZhbHNlLCBhbmQgdGhlIGNvZGUgc2ltcGx5IHNraXBzIHRoZSBoZWxwZXIgY29uZmlndXJhdGlvbi4gTm93LCAqcHJldmlvdXNseSogaXQgd291bGQgaGF2ZSByZXR1cm5lZCBhbiBlcnJvciwgc3BlY2lmaWNhbGx5IGAtRU5BTUVUT09MT05HYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBtZWFucywgdGhhdCBpbnN0ZWFkIG9mIHJldHVybmluZyB0aGUgZXJyb3IsIHRoZSBoZWxwZXIgaXMgKnNpbGVudGx5KiBpZ25vcmVkLlxuXG5UaGlzIGxvb2tzIGxpa2UgYSBwb3RlbnRpYWwgYnVnIGZpeCBnb25lIHdyb25nLCBvciBhIG1pc3VuZGVyc3RhbmRpbmcgb2YgdGhlIG9yaWdpbmFsIGxvZ2ljLiBQZXJoYXBzIHRoZSBhdXRob3Igd2FzIHRyeWluZyB0byBwcmV2ZW50IGEgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBidXQgY3JlYXRlZCBkZWFkIGNvZGUsIGFuZCBjaGFuZ2VkIGJlaGF2aW91ciBpbiB0aGUgcHJvY2Vzcy5cblxuTGV0IG1lIHRoaW5r4oCmIHRoZSBjb2RlIGlzICpzdXBwb3NlZCogdG8gYmUgcmVjZWl2aW5nIGluZm9ybWF0aW9uIGZyb20gdXNlcnNwYWNlLiBJZiBJIHByb3ZpZGUgYSBub24tbnVsbC10ZXJtaW5hdGVkIGBoZWxwZXJgIG5hbWUsIHRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGhhdmUgZmxhZ2dlZCBpdCBhcyBhbiBlcnJvci4gTm93LCBpdCBqdXN0IHNpbGVudGx5ICpkb2Vzbid0IHNldCogdGhlIGhlbHBlci4gTm8gZXJyb3IgaXMgcmFpc2VkLCB0aGUgaGVscGVyIHNpbXBseSBkb2Vzbid0IGdldCBjb25maWd1cmVkLiBJcyB0aGF0IHdoYXQgd2Ugd2FudD8gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY2hhbmdlIHRoYXQgaW1wYWN0cyBwcm9ncmFtIGZsb3csIGVzcGVjaWFsbHkgaWYgYSB1c2VyICpleHBlY3RzKiB0aGF0IGVycm9yIG1lc3NhZ2UuXG5cbkkgY2FuJ3Qgc2VlIGFueSBpbW1lZGlhdGUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBvciBtZW1vcnkgY29ycnVwdGlvbiBoZXJlLCBidXQgdGhpcyBpcyBhICpiZWhhdmlvcmFsKiBjaGFuZ2UsIGFuZCBhIHNpbGVudCBvbmUuIEkgbmVlZCB0byBub3RlIHRoaXMgaGFzIGZ1bmN0aW9uYWwgaW1wbGljYXRpb25zIHRoYXQgYXJlIHRlc3RhYmxlLiBTbywgKnllcyosIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgZnV6emVyIG1pZ2h0IG5vdCB0cmlnZ2VyIGEgY3Jhc2ggb3IgY29ycnVwdGlvbiwgYnV0IGl0IHdpbGwgZGlzY292ZXIgdGhhdCB0aGlzIGxvZ2ljIHBhdGggaXMgZGlmZmVyZW50LlxuXG5Xb3J0aEZ1enppbmc9dHJ1ZVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY5OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NDA6MjUuMzU5MTY3Mzk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MTE3MTAxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9DVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTg0OT1jb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTg2MC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODYxOmNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0NUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTg2Mi1cXHR0cmlzdGF0ZSAnXFxcIkNUXFxcIiB0YXJnZXQgc3VwcG9ydCdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NDA6MjUuOTMwMzQzMzU5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM4NTYxOTEwMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmU6IE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1QqKlxuXG5Pa2F5LCBzbyBgTkVURklMVEVSX1hUX1RBUkdFVF9DVGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgdGhpbmcgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEknbSBnb2luZyB0byBzdGFydCBieSBwdWxsaW5nIHVwIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayB0aGUgdXN1YWwgc3VzcGVjdHMgLSB0aGUgS2NvbmZpZyBmaWxlcywgdGhlIE1ha2VmaWxlcywgYW5kIGFueSByZWxldmFudCBkb2N1bWVudGF0aW9uLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoZXJlIHdpbGwgbGlrZWx5IGJlIHNldmVyYWwgbGF5ZXJzIG9mIGRlcGVuZGVuY2llcyB0byB1bnJhdmVsLlxuXG5GaXJzdCwgYXJlIHRoZXJlIGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzIGxpc3RlZCBpbiB0aGUgS2NvbmZpZyBmaWxlIGl0c2VsZj8gU29tZXRpbWVzIGl0J3Mgc3RyYWlnaHRmb3J3YXJkLCBidXQgbW9yZSBvZnRlbiBpdCdzIGEgd2ViIG9mIGNvbm5lY3Rpb25zLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgdGhpbmdzIGxpa2UgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgb3IgZXZlbiBpbXBsaWNpdCBkZXBlbmRlbmNpZXMgYmFzZWQgb24gc2hhcmVkIG9wdGlvbnMuXG5cbk5leHQsIEknbGwgbmVlZCB0byB0cmFjZSB0aGluZ3MgdGhyb3VnaCB0aGUgYnVpbGQgc3lzdGVtLiBBcmUgdGhlcmUgYW55IE1ha2VmaWxlcyB0aGF0IGdldCBpbmNsdWRlZCwgb3IgcGVyaGFwcyBvdGhlciB0YXJnZXRzIHRoYXQgYE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RgIHJlbGllcyBvbj8gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBoZWFkZXIgZmlsZSBpbmNsdXNpb25zLCBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgYnVpbGQgZmxhZ3MgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGZpbmFsIG91dGNvbWUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtb2R1bGVzIGludm9sdmVkIGFuZCBhbnkgb3RoZXIgbW9kdWxlcyB0aGF0ICptaWdodCogYmUgcmVsZXZhbnQgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBDVGAuXG5cbkZpbmFsbHksIEknbGwgcmV2aWV3IGFueSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBvciBtYWlsaW5nIGxpc3QgZGlzY3Vzc2lvbnMuIEl0J3MgcG9zc2libGUgdGhlcmUgYXJlIG5vbi1vYnZpb3VzIHJlbGF0aW9uc2hpcHMgb3IgcmVxdWlyZW1lbnRzIHRoYXQgYXJlbid0IGltbWVkaWF0ZWx5IGFwcGFyZW50IGZyb20gdGhlIGNvZGUuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGNhdmVhdHMgb3IgZ290Y2hhcyB0aGF0IGNvdWxkIGJpdGUgbWUgbGF0ZXIuIE15IGdvYWwgaGVyZSBpcyBhIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZSB1bmRlcnN0YW5kaW5nIG9mIGV2ZXJ5dGhpbmcgdGhhdCBoYXMgdG8gYmUgaW4gcGxhY2UgZm9yIHRoaXMgb3B0aW9uIHRvIHdvcmssIG5vdCBqdXN0IHRoZSBiYXNpY3MuXG5cbldpdGggYWxsIG9mIHRoaXMgZG9uZSwgSSB3aWxsIGhhdmUgdGhlIG5lZWRlZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24sIHNvIEknbGwgYmUgYWJsZSB0byBwcm9jZWVkIHdpdGggdGhlIG5leHQgdGFzayB3aXRoIGNvbmZpZGVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NDA6MzkuNzg2NTM4NTE2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODYwOlxcdFxcbiA4NjE6XFx0Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RcXG4gODYyOlxcdFxcdHRyaXN0YXRlICdcXFwiQ1RcXFwiIHRhcmdldCBzdXBwb3J0J1xcbiA4NjM6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG4gODY0OlxcdFxcdGRlcGVuZHMgb24gSVBfTkZfUkFXIHx8IElQNl9ORl9SQVcgfHwgTkZUX0NPTVBBVFxcbiA4NjU6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gODY2OlxcdFxcdGhlbHBcXG4gODY3OlxcdFxcdCAgVGhpcyBvcHRpb25zIGFkZHMgYSBgQ1QnIHRhcmdldCwgd2hpY2ggYWxsb3dzIHRvIHNwZWNpZnkgaW5pdGlhbFxcbiA4Njg6XFx0XFx0ICBjb25uZWN0aW9uIHRyYWNraW5nIHBhcmFtZXRlcnMgbGlrZSBldmVudHMgdG8gYmUgZGVsaXZlcmVkIGFuZFxcbiA4Njk6XFx0XFx0ICB0aGUgaGVscGVyIHRvIGJlIHVzZWQuXFxuIDg3MDpcXHRcXG4gODcxOlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDg3MjpcXHRcXG4gODczOlxcdGNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1BcXG4gODc0OlxcdFxcdHRyaXN0YXRlICdcXFwiRFNDUFxcXCIgYW5kIFxcXCJUT1NcXFwiIHRhcmdldCBzdXBwb3J0J1xcbiA4NzU6XFx0XFx0ZGVwZW5kcyBvbiBJUF9ORl9NQU5HTEUgfHwgSVA2X05GX01BTkdMRSB8fCBORlRfQ09NUEFUXFxuIDg3NjpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiA4Nzc6XFx0XFx0aGVscFxcbiA4Nzg6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIGEgYERTQ1AnIHRhcmdldCwgd2hpY2ggYWxsb3dzIHlvdSB0byBtYW5pcHVsYXRlXFxuIDg3OTpcXHRcXHQgIHRoZSBJUHY0L0lQdjYgaGVhZGVyIERTQ1AgZmllbGQgKGRpZmZlcmVudGlhdGVkIHNlcnZpY2VzIGNvZGVwb2ludCkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjQwOjM5Ljc4NjY2OTI4NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjM0ODI0NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWcgcmVxdWlyZW1lbnRzLCBicm9rZW4gZG93biBmcm9tIGEgbmV0d29ya2luZyBrZXJuZWwgcGVyc3BlY3RpdmU6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciB0aGlzIFBhdGNoKipcblxuQWxyaWdodCwgbGV0IG1lIHF1aWNrbHkgc3VtbWFyaXplIHdoYXQgSSdtIHNlZWluZyBoZXJlLiBCYXNlZCBvbiB0aGlzIHBhdGNoLCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gbmVlZHMgdG8gaW5jbHVkZSBhIGZldyBrZXkgY29tcG9uZW50cy4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBORVRGSUxURVJfWFRfVEFSR0VUX0NUYCBpcyBlbmFibGVkOyBjbGVhcmx5LCBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGEgY2VudHJhbCBwaWVjZS4gSSdsbCBuZWVkIGBORl9DT05OVFJBQ0tgIGFzIHRoZSBjb3JlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgZXNzZW50aWFsLiBXZSBoYXZlIGJvdGggSVB2NCBhbmQgSVB2NiBjb25zaWRlcmF0aW9ucywgc28gYElQX05GX1JBV2Agb3IgYElQNl9ORl9SQVdgLCBvciBwZXJoYXBzIGBORlRfQ09NUEFUYCBhcmUgaW1wb3J0YW50IGZvciBpbnRlZ3JhdGluZyB3aXRoIHRoZSByYXcgdGFibGUsIGFuZCBsZXQncyBub3QgZm9yZ2V0IGBORVRGSUxURVJfQURWQU5DRURgIGFzIGEgcHJlcmVxdWlzaXRlIGZvciBtb3JlIGFkdmFuY2VkIG5ldGZpbHRlciBmZWF0dXJlcy5cblxuSG1tLCB3YWl0IGEgbW9tZW50IHRob3VnaCwgdGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYHh0X0lETEVUSU1FUi5jYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBpZGxlIHRpbWVyIGZ1bmN0aW9uYWxpdHkgaXMgcHJvcGVybHkgY29uZmlndXJlZCB0b28sIHNvIGxldCBtZSBxdWlja2x5IGNyb3NzLWNoZWNrIGl0cyBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgYmVmb3JlIHByb2NlZWRpbmcuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IGltcGxpY2F0aW9ucyB0aGF0IG1heSBhcmlzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4NDMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjQwOjQ0LjAyMTQ5Njc4NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgxODM1NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9OTA0PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctOTE3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo5MTg6Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTkxOS1cXHR0cmlzdGF0ZSAgXFxcIklETEVUSU1FUiB0YXJnZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NDA6NDQuMTA5Njg4NjIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODQzNTQ0NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYE5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSYCByZWxpZXMgb24uIFVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgYnJlYWsgYW55dGhpbmcgd2hlbiBJIGVuYWJsZSwgZGlzYWJsZSwgb3IgbW9kaWZ5IHRoaXMgdGFyZ2V0LiBJdCdzIHRoZSBrZXJuZWwsIHNvIEkgaGF2ZSB0byBiZSBjYXJlZnVsLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IHRoZSByZWxldmFudCBtYWtlZmlsZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdsbCBuZWVkIHRvIHRyYWNlIHRocm91Z2ggdGhlIGJ1aWxkIHN5c3RlbSB0byBzZWUgd2hhdCBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIGFyZSBsaW5rZWQgd2l0aCBvciByZXF1aXJlZCBieSB0aGlzIGBJRExFVElNRVJgIHRhcmdldC4gQXJlIHRoZXJlIGFueSBvdGhlciBrZXJuZWwgZmVhdHVyZXMgdGhhdCByZWx5IG9uIHRoZSBpZGxlIHRpbWVyIGxvZ2ljLCBmb3IgZXhhbXBsZT8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlbiBiYWNrIG91dCBmcm9tIHRoZXJlLCBvciB1c2UgYG1ha2UgbWVudWNvbmZpZ2Agb3IgYGRlZmNvbmZpZ2AgdG8gY2hlY2suIEknbGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlIOKAkyBgeHRhYmxlc2AsIGBpcHRhYmxlc2AsIGFuZCBhbnkgb3RoZXIgdGFyZ2V0IG1vZHVsZXMgdGhhdCBtaWdodCBiZSB1c2VkIGFsb25nc2lkZSBpdC4gVGhlIGdvYWwgaXMgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHBsYWNlIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0sIGFuZCBhbnkgY29uZmxpY3RzIG9yIHByZXJlcXVpc2l0ZXMgaXQgbWlnaHQgaW50cm9kdWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTI4OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjQwOjQ3LjU5NDA0NzQ5OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkxNyxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkxNzpcXHRcXG4gOTE4OlxcdGNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUlxcbiA5MTk6XFx0XFx0dHJpc3RhdGUgIFxcXCJJRExFVElNRVIgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuIDkyMDpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiA5MjE6XFx0XFx0aGVscFxcbiA5MjI6XFx0XFxuIDkyMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGBJRExFVElNRVInIHRhcmdldC4gIEVhY2ggbWF0Y2hpbmcgcGFja2V0XFxuIDkyNDpcXHRcXHQgIHJlc2V0cyB0aGUgdGltZXIgYXNzb2NpYXRlZCB3aXRoIGxhYmVsIHNwZWNpZmllZCB3aGVuIHRoZSBydWxlIGlzXFxuIDkyNTpcXHRcXHQgIGFkZGVkLiAgV2hlbiB0aGUgdGltZXIgZXhwaXJlcywgaXQgdHJpZ2dlcnMgYSBzeXNmcyBub3RpZmljYXRpb24uXFxuIDkyNjpcXHRcXHQgIFRoZSByZW1haW5pbmcgdGltZSBmb3IgZXhwaXJhdGlvbiBjYW4gYmUgcmVhZCB2aWEgc3lzZnMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjQwOjQ3LjU5NDE5ODIyOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzYxNzU5MzE4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQYXRjaCBDaGFuZ2VzIC0gQSBGb2N1c2VkIFJldmlldyoqXG5cbk9rYXksIHNvIEkndmUganVzdCBnb25lIHRocm91Z2ggdGhpcyBkaWZmLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBvbiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGZ1bmN0aW9uYWwgcmVncmVzc2lvbnMgaW50cm9kdWNlZCwgcGFydGljdWxhcmx5IGluIHRoZSBuZXRmaWx0ZXIgY29kZS5cblxuSGVyZSdzIG15IGJyZWFrZG93bjpcblxuKiAgICoqYHh0X0lETEVUSU1FUi5jYCBDaGFuZ2U6KiogSG9uZXN0bHksIHRoZSBgeHRfSURMRVRJTUVSLmNgIGNoYW5nZSBpcyBtaW5vci4gTW92aW5nIGBtdXRleF91bmxvY2tgIGJlZm9yZSB0aGUgYHByX2luZm9fcmF0ZWxpbWl0ZWRgIGNhbGwgaXMgYSB2YWxpZCBvcHRpbWl6YXRpb27igJRyZWxlYXNpbmcgdGhlIGxvY2sgZWFybGllcuKAlGFuZCB3aGlsZSBpdCBtb2RpZmllcyBiZWhhdmlvdXIsIGl0IGlzIHVubGlrZWx5IHRvIGludHJvZHVjZSBzaWduaWZpY2FudCBuZXcgYmVoYXZpb3VyLlxuXG4qICAgKipgeHRfQ1QuY2AgLSBUaGUgUmVhbCBQcm9ibGVtOioqIFRoZSBgeHRfQ1QuY2AgY2hhbmdlIGltbWVkaWF0ZWx5IGNhdWdodCBteSBhdHRlbnRpb24uIEl0IG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBgaW5mby1cdTAwM2VoZWxwZXJgIGFuZCBgaW5mby1cdTAwM2V0aW1lb3V0YCBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgdGFyZ2V0LiBJdCAqbG9va3MqIGxpa2UgdGhlIGF1dGhvciB0cmllZCB0byBhZGRyZXNzIGEgcG90ZW50aWFsIGBzdHJubGVuYCBvdXQtb2YtYm91bmRzIHJlYWQsIGJ1dCBpbiBkb2luZyBzbywgdGhleSd2ZSBpbnRyb2R1Y2VkIGEgKipkZWZpbml0ZSBidWcqKi4gVGhlIGxvZ2ljIG5vdyAqKnNraXBzIHZhbGlkYXRpb24qKiB3aGVuIHRoZSBgaW5mby1cdTAwM2VoZWxwZXJgIGJ1ZmZlciBpcyAqbm90KiBudWxsLXRlcm1pbmF0ZWQuIFByZXZpb3VzbHksIGEgbm9uLW51bGwtdGVybWluYXRlZCBidWZmZXIgcmVzdWx0ZWQgaW4gYW4gZXJyb3IsIHNvIHRoZSBjaGFuZ2VzIGxlYWQgdG8gYW4gdW5kZWZpbmVkIHN0YXRlIHdoZXJlIHRoZXJlIGNvdWxkIGJlIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igb3RoZXIgcG90ZW50aWFsIGlzc3Vlcy4gVGhpcyBpcyBhIGNsZWFyIGNhc2UgZm9yIGZ1enppbmcuIFRoZSBrZXkgZnVuY3Rpb24gdG8gdGFyZ2V0IGlzIGB4dF9jdF90Z19jaGVja2AuXG5cbiogICAqKk90aGVyIENoYW5nZXM6IE1vc3RseSBMb2dnaW5nOioqIFRoZSByZW1haW5pbmcgY2hhbmdlc+KAlGluIGB4dF9jZ3JvdXAuY2AsIGB4dF9MT0cuY2AsIGB4dF9NQVNRVUVSQURFLmNgLCBgeHRfTkVUTUFQLmNgLCBgeHRfUkVESVJFQ1QuY2AsIGB4dF9TRUNNQVJLLmNgLCBgeHRfQ09OTlNFQ01BUksuY2AsIGBpcHRfcnBmaWx0ZXIuY2AsIGFuZCBgaXA2dF9ycGZpbHRlci5jYOKAlGFyZSBwcmVkb21pbmFudGx5IGFib3V0IGNoYW5naW5nIGBwcl9kZWJ1Z2AgY2FsbHMgdG8gYHByX2luZm9fcmF0ZWxpbWl0ZWRgIG9yIHNpbXBsaWZ5aW5nIGVycm9yIG1lc3NhZ2VzLiBUaGVzZSBhcmUgZ2VuZXJhbGx5IG9rYXksIG9yIGV2ZW4gaW1wcm92ZW1lbnRzIGZvciBtZXNzYWdlIGZsb29kIHJlZHVjdGlvbiwgYnV0IHRoZXkgZG9uJ3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIHJlZ3Jlc3Npb25zIHRoYXQgSSBjYW4gaW1tZWRpYXRlbHkgc2VlLlxuXG4qICAgKipBY3Rpb25hYmxlIE5leHQgU3RlcHM6KiogVGhlICpjcml0aWNhbCogdGhpbmcgdG8gZG8gbm93IGlzIHRvIGZvY3VzIG9uIHRoZSBgeHRfQ1QuY2AgY2hhbmdlLiBUaGlzIG5lZWRzIHRob3JvdWdoIGZ1enppbmcuIFRoZSBmb2N1cyBzaG91bGQgYmUgb24gY3JhZnRpbmcgaW5wdXRzIHdoZXJlIGBpbmZvLVx1MDAzZWhlbHBlcmAgaXMgKm5vdCogbnVsbC10ZXJtaW5hdGVkLiBXZSBuZWVkIHRvIGV4cGxvcmUgdGhlIGV4YWN0IGNvbnNlcXVlbmNlcyBvZiB0aGlzIGNoYW5nZSBpbiB0aGUga2VybmVs4oCZcyBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljLiBUaGlzIGlzIHdoZXJlIEknZCBzdGFydCBkaWdnaW5nIHdpdGggYSB0YXJnZXRlZCBmdXp6aW5nIGNhbXBhaWduLiBUaGUgY29uZmlncyBJIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byBhcmUgYE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGVpdGhlciBgSVBfTkZfUkFXYCBvciBgSVA2X05GX1JBV2AsIGFsb25nIHdpdGggYE5FVEZJTFRFUl9BRFZBTkNFRGAuXG5cbiIsIklucHV0VG9rZW5zIjoyOTc3MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo0MToxMS4yMTE4MDkyNDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzI3NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9ORl9SQVdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9MjkxPWNvbmZpZyBJUF9ORl9UQVJHRVRfVFRMXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zMDAtIyByYXcgKyBzcGVjaWZpYyB0YXJnZXRzXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MzAxOmNvbmZpZyBJUF9ORl9SQVdcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0zMDItXFx0dHJpc3RhdGUgICdyYXcgdGFibGUgc3VwcG9ydCAocmVxdWlyZWQgZm9yIE5PVFJBQ0svVFJBQ0UpJ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo0MToxMS4yNTk1NDE3ODdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzNTk0MTAxNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBJUHY2IFJhdyBTb2NrZXQgRmlsdGVyaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBgSVA2X05GX1JBV2AgdGhpbmcgd29ya3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGp1bXAgaW50byBgS2NvbmZpZ2AuIFRoYXQncyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHdoZW4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYSBrZXJuZWwgZmVhdHVyZSdzIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSBgSVA2X05GX1JBV2AgaXMgZGVmaW5lZCwgd2hpY2ggZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHBlcmhhcHMgZXZlbiB3aGF0IGNvbnRleHQgc3Vycm91bmRzIGl0LiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCB3aGVyZSBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBJUHY2IHJhdyBzb2NrZXQgZmlsdGVyaW5nIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGZyYW1ld29yay4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIHRlbGxzIG1lIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQyOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjQxOjIyLjYxODk1Njg2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYyMDQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVA2X05GX1JBV1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0yMzQ9Y29uZmlnIElQNl9ORl9NQU5HTEVcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTI0NC1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzoyNDU6Y29uZmlnIElQNl9ORl9SQVdcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy0yNDYtXFx0dHJpc3RhdGUgICdyYXcgdGFibGUgc3VwcG9ydCAocmVxdWlyZWQgZm9yIFRSQUNFKSdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NDE6MjIuNjY3NTgzNzA5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNjU2MDQxNDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYXNvbmluZyBUaHJvdWdoIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIFJlcXVpcmVtZW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gVGhlIGluaXRpYWwgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFuZCByZWxldmFudCBzeW1ib2xzIGZvciBhIHNwZWNpZmljIG5ldGZpbHRlciB0YXJnZXQsIGxpa2VseSByZWxhdGVkIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRoZSBwcm9tcHQgc3BlY2lmaWVzIHRoZSBvdXRwdXQgZm9ybWF0IGZvciBjb25maWd1cmF0aW9ucywgc28gSSBuZWVkIHRvIGF2b2lkIHRoZSBgQ09ORklHX2AgcHJlZml4LlxuXG5GaXJzdCwgSSBpZGVudGlmaWVkIHRoZSBpbml0aWFsIHNldCBvZiBwb3RlbnRpYWxseSBuZWVkZWQgY29uZmlndXJhdGlvbnM6IGBORVRGSUxURVJfWFRfVEFSR0VUX0NUYCwgYE5GX0NPTk5UUkFDS2AsIGBJUF9ORl9SQVdgLCBhbmQgYE5FVEZJTFRFUl9BRFZBTkNFRGAuIFRoZSBwcm9tcHQncyByZXF1aXJlbWVudCBpcyBjbGVhcjoganVzdCB0aGUgYmFyZSBuYW1lcy5cblxuTm93LCBsZXQncyBkaWcgZGVlcGVyIHRvIHNlZSBpZiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbGF0ZWQgdG8gYHh0X0NUYC4gVXBvbiBleGFtaW5hdGlvbiwgSSBzZWUgdGhlIGB4dF9JRExFVElNRVIuY2AgZmlsZSBpcyBhbHNvIHRvdWNoZWQgaW4gdGhlIHBhdGNoLCBzbyBgTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVJgIHNob3VsZCBhbHNvIGJlIGluY2x1ZGVkIGJlY2F1c2UgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5OZXh0LCB0aGUgcHJvbXB0IHdhbnRzIHN5bWJvbHMuIFRoZSBmdW5jdGlvbnMgdGhhdCBzZWVtIGNlbnRyYWwgdG8gdGhlIHRhcmdldCdzIG9wZXJhdGlvbiBhcmUgYHh0X2N0X3RnX2NoZWNrYCBhbmQgYGlkbGV0aW1lcl90Z19jaGVja2VudHJ5YC4gSG93ZXZlciwgdGhlIHByb21wdCBlbXBoYXNpemVzIHRoZSBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnkgcG9pbnRzLiBUaGF0IGdpdmVzIG1lIHBhdXNlLlxuXG5VcG9uIGNsb3NlciBpbnNwZWN0aW9uLCBJIGNvbmZpcm0gdGhhdCBib3RoIGB4dF9jdF90Z19jaGVja2AgaXMgYWN0dWFsbHkgc3RhdGljLiBIb3dldmVyLCBpdCdzIGNhbGxlZCBieSBgeHRfY3RfdGdfY2hlY2tfdjBgLCBgeHRfY3RfdGdfY2hlY2tfdjFgLCBgeHRfY3RfdGdfY2hlY2tfdjJgLiBUaGVzZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSByZWdpc3RlcmVkIGluIGB4dF9jdF90Z19yZWdgIGFycmF5LCB3aGljaCBpcyBwYXNzZWQgdG8gYHh0X3JlZ2lzdGVyX3RhcmdldHNgLiBUaGUgZW50cnkgcG9pbnQgZnJvbSB1c2Vyc3BhY2UgaXMgYHh0X2NoZWNrX3RhcmdldGAsIGJ1dCBgeHRfY3RfdGdfY2hlY2tgIGlzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbi4gU2luY2UgdGhlIGZ1bmN0aW9uIGlzIG5vdCBpbmxpbmVkLCBJJ2xsIHByb3ZpZGUgYHh0X2N0X3RnX2NoZWNrYCBmb3Igbm93IGFuZCBzZWUgaWYgdGhlIGZ1enplciBjYW4gcmVzb2x2ZSB0aGUgc3RhdGljIGZ1bmN0aW9ucy5cblxuVGhlIHBhdGNoJ3MgZnVuY3Rpb25hbCBjaGFuZ2VzIGludm9sdmUgY2hhbmdlcyB0byB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYGluZm8tXHUwMDNlaGVscGVyYCBhbmQgYGluZm8tXHUwMDNldGltZW91dGAgYW5kIG1vZGlmeWluZyBgeHRfSURMRVRJTUVSLmNgIHRvIHJlbGVhc2UgYSBtdXRleCwgd2hpY2ggaW1wYWN0cyB0aGUgZXhlY3V0aW9uIGZsb3cuIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIHJlYWNoYWJsZSB2aWEgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24sIG1ha2luZyB0aGVtIHJlbGV2YW50IHRvIHRoZSBvdmVyYWxsIHRhcmdldCBiZWhhdmlvci5cblxuVGhlcmVmb3JlLCBteSBmaW5hbCBsaXN0IGlzOlxuXG5Db25maWdzOlxuYE5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RgXG5gTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVJgXG5gTkZfQ09OTlRSQUNLYFxuYElQX05GX1JBV2BcbmBORVRGSUxURVJfQURWQU5DRURgXG5cblN5bWJvbHM6XG5geHRfY3RfdGdfY2hlY2tgXG5cbkxldCdzIHByb2NlZWQgd2l0aCB0aGVzZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzczOSwiT3V0cHV0VG9rZW5zIjoyMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjQxOjM2LjMyMzYyOTIxMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNjc3Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX0NUXCIsXG4gICAgXCJORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUlwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJJUF9ORl9SQVdcIixcbiAgICBcIk5FVEZJTFRFUl9BRFZBTkNFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInh0X2N0X3RnX2NoZWNrXCIsXG4gICAgXCJpZGxldGltZXJfdGdfY2hlY2tlbnRyeVwiLFxuICAgIFwiaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgeHRfQ1QuY2AgdG8gY2hhbmdlIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgaW5mby1cXHUwMDNlaGVscGVyYCBhbmQgYGluZm8tXFx1MDAzZXRpbWVvdXRgLiBJZiB0aGV5IGFyZSBub3QgbnVsbC10ZXJtaW5hdGVkLCB0aGUgbmV3IGNvZGUgc2tpcHMgc2V0dGluZyB0aGVtIGluc3RlYWQgb2YgcmV0dXJuaW5nIGAtRU5BTUVUT09MT05HYCwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdGFyZ2V0IGluaXRpYWxpemF0aW9uIGxvZ2ljLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgeHRfSURMRVRJTUVSLmNgIHRvIHJlbGVhc2UgYSBtdXRleCBiZWZvcmUgbG9nZ2luZywgd2hpY2ggaXMgYSBtaW5vciBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlc2UgY2hhbmdlcyBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBjb25maWd1cmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfQ1RcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIklQX05GX1JBV1wiLFxuICAgIFwiTkVURklMVEVSX0FEVkFOQ0VEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieHRfY3RfdGdfY2hlY2tcIixcbiAgICBcImlkbGV0aW1lcl90Z19jaGVja2VudHJ5XCIsXG4gICAgXCJpZGxldGltZXJfdGdfY2hlY2tlbnRyeV92MVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB4dF9DVC5jYCB0byBjaGFuZ2UgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBpbmZvLVxcdTAwM2VoZWxwZXJgIGFuZCBgaW5mby1cXHUwMDNldGltZW91dGAuIElmIHRoZXkgYXJlIG5vdCBudWxsLXRlcm1pbmF0ZWQsIHRoZSBuZXcgY29kZSBza2lwcyBzZXR0aW5nIHRoZW0gaW5zdGVhZCBvZiByZXR1cm5pbmcgYC1FTkFNRVRPT0xPTkdgLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB0YXJnZXQgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGB4dF9JRExFVElNRVIuY2AgdG8gcmVsZWFzZSBhIG11dGV4IGJlZm9yZSBsb2dnaW5nLCB3aGljaCBpcyBhIG1pbm9yIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjQxOjM2LjQwNTMxNDQ2OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI1MTY5NzQ0NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo0MTozNi40MDU4NjE2MDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzI1MTY0MjI5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBwcmltYXJpbHkgcmVtb3ZlcyBgcHJfZGVidWdgIHN0YXRlbWVudHMgYW5kIGNvbnZlcnRzIHNvbWUgdG8gYHByX2luZm9fcmF0ZWxpbWl0ZWRgIGFjcm9zcyB2YXJpb3VzIG5ldGZpbHRlciBtb2R1bGVzLiBUaGVyZSBpcyBhbHNvIGEgbG9naWNhbCBjaGFuZ2UgaW4gYHh0X0NULmNgIHJlZ2FyZGluZyB0aGUgdmFsaWRhdGlvbiBvZiBgaW5mby1cXHUwMDNlaGVscGVyYCBhbmQgYGluZm8tXFx1MDAzZXRpbWVvdXRgIHN0cmluZ3MsIHdoaWNoIGludHJvZHVjZXMgZGVhZCBjb2RlIGFuZCBhbHRlcnMgdGhlIGVycm9yIGhhbmRsaW5nIGZvciBub24tbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MuIEhvd2V2ZXIsIHRoZSBgaW5mb2Agc3RydWN0dXJlIChgcGFyLVxcdTAwM2V0YXJnaW5mb2ApIGlzIHBvcHVsYXRlZCB2aWEgYGNvcHlfZnJvbV91c2VyYCB3aXRoIGRhdGEgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUga2VybmVsJ3MgcGVyc3BlY3RpdmUuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWRkIGNvbnRyb2wgZmxvdyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgdGhlIGxvZ2ljIGZsYXcgaW4gYHh0X0NULmNgKSBhcmUgZnVuY3Rpb25hbCBhbmQgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTMzOGFlYzU1Y2UxZWQwZmVmMDE4YjBjODdhNmFlMzQxYjZhNmE3N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE0OjM5OjIwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jXG5pbmRleCAxNjFiYTQxMmNiMDhiLi43MTMxZjI5N2FkYTJlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FoLmNcbkBAIC0xOSwxMiArMTksNyBAQCBNT0RVTEVfREVTQ1JJUFRJT04oXCJYdGFibGVzOiBJUHY0IElQc2VjLUFIIFNQSSBtYXRjaFwiKTtcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpXG4ge1xuLVx0Ym9vbCByO1xuLVx0cHJfZGVidWcoXCJzcGlfbWF0Y2g6JWMgMHgleCBcdTAwM2M9IDB4JXggXHUwMDNjPSAweCV4XFxuXCIsXG4tXHRcdCBpbnZlcnQgPyAnIScgOiAnICcsIG1pbiwgc3BpLCBtYXgpO1xuLVx0ciA9IChzcGkgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IHNwaSBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4tXHRwcl9kZWJ1ZyhcIiByZXN1bHQgJXNcXG5cIiwgciA/IFwiUEFTU1wiIDogXCJGQUlMRURcIik7XG4tXHRyZXR1cm4gcjtcbitcdHJldHVybiAoc3BpIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBzcGkgXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBhaF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG5AQCAtNDIsNyArMzcsNiBAQCBzdGF0aWMgYm9vbCBhaF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdC8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXG4gXHRcdCAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC5cbiBcdFx0ICovXG4tXHRcdHByX2RlYnVnKFwiRHJvcHBpbmcgZXZpbCBBSCB0aW55Z3JhbS5cXG5cIik7XG4gXHRcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuQEAgLTU4LDcgKzUyLDcgQEAgc3RhdGljIGludCBhaF9tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcbiBcdC8qIE11c3Qgc3BlY2lmeSBubyB1bmtub3duIGludmZsYWdzICovXG4gXHRpZiAoYWhpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiB+SVBUX0FIX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuY1xuaW5kZXggNmQ5YmY1MTA2ODY4NC4uMmMzOGZkNjYyNGFhMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcnBmaWx0ZXIuY1xuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ycGZpbHRlci5jXG5AQCAtOTUsOCArOTUsNyBAQCBzdGF0aWMgaW50IHJwZmlsdGVyX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFxuIFx0aWYgKHN0cmNtcChwYXItXHUwMDNldGFibGUsIFwibWFuZ2xlXCIpICE9IDAgXHUwMDI2XHUwMDI2XG4gXHQgICAgc3RyY21wKHBhci1cdTAwM2V0YWJsZSwgXCJyYXdcIikgIT0gMCkge1xuLVx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwib25seSB2YWxpZCBpbiBcXCdyYXdcXCcgb3IgXFwnbWFuZ2xlXFwnIHRhYmxlLCBub3QgXFwnJXNcXCdcXG5cIixcbi1cdFx0XHRcdCAgICBwYXItXHUwMDNldGFibGUpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwib25seSB2YWxpZCBpbiBcXCdyYXdcXCcgb3IgXFwnbWFuZ2xlXFwnIHRhYmxlXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguY1xuaW5kZXggMTI1ODc4M2VkODc2Mi4uZGFiN2RiYzZhNjc1YyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmNcbisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2FoLmNcbkBAIC0yNCwxMyArMjQsNyBAQCBNT0RVTEVfQVVUSE9SKFwiQW5kcmFzIEtpcy1TemFibyBcdTAwM2NraXN6YUBzY2guYm1lLmh1XHUwMDNlXCIpO1xuIHN0YXRpYyBpbmxpbmUgYm9vbFxuIHNwaV9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3Qgc3BpLCBib29sIGludmVydClcbiB7XG4tXHRib29sIHI7XG4tXG4tXHRwcl9kZWJ1ZyhcInNwaV9tYXRjaDolYyAweCV4IFx1MDAzYz0gMHgleCBcdTAwM2M9IDB4JXhcXG5cIixcbi1cdFx0IGludmVydCA/ICchJyA6ICcgJywgbWluLCBzcGksIG1heCk7XG4tXHRyID0gKHNwaSBcdTAwM2U9IG1pbiBcdTAwMjZcdTAwMjYgc3BpIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbi1cdHByX2RlYnVnKFwiIHJlc3VsdCAlc1xcblwiLCByID8gXCJQQVNTXCIgOiBcIkZBSUxFRFwiKTtcbi1cdHJldHVybiByO1xuK1x0cmV0dXJuIChzcGkgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IHNwaSBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4gfVxuIFxuIHN0YXRpYyBib29sIGFoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG5AQCAtNjIsMjMgKzU2LDYgQEAgc3RhdGljIGJvb2wgYWhfbXQ2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuLVx0cHJfZGVidWcoXCJJUHY2IEFIIExFTiAldSAldSBcIiwgaGRybGVuLCBhaC1cdTAwM2VoZHJsZW4pO1xuLVx0cHJfZGVidWcoXCJSRVMgJTA0WCBcIiwgYWgtXHUwMDNlcmVzZXJ2ZWQpO1xuLVx0cHJfZGVidWcoXCJTUEkgJXUgJTA4WFxcblwiLCBudG9obChhaC1cdTAwM2VzcGkpLCBudG9obChhaC1cdTAwM2VzcGkpKTtcbi1cbi1cdHByX2RlYnVnKFwiSVB2NiBBSCBzcGkgJTAyWCBcIixcbi1cdFx0IHNwaV9tYXRjaChhaGluZm8tXHUwMDNlc3Bpc1swXSwgYWhpbmZvLVx1MDAzZXNwaXNbMV0sXG4tXHRcdFx0ICAgbnRvaGwoYWgtXHUwMDNlc3BpKSxcbi1cdFx0XHQgICAhIShhaGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IElQNlRfQUhfSU5WX1NQSSkpKTtcbi1cdHByX2RlYnVnKFwibGVuICUwMlggJTA0WCAlMDJYIFwiLFxuLVx0XHQgYWhpbmZvLVx1MDAzZWhkcmxlbiwgaGRybGVuLFxuLVx0XHQgKCFhaGluZm8tXHUwMDNlaGRybGVuIHx8XG4tXHRcdCAgKGFoaW5mby1cdTAwM2VoZHJsZW4gPT0gaGRybGVuKSBeXG4tXHRcdCAgISEoYWhpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiBJUDZUX0FIX0lOVl9MRU4pKSk7XG4tXHRwcl9kZWJ1ZyhcInJlcyAlMDJYICUwNFggJTAyWFxcblwiLFxuLVx0XHQgYWhpbmZvLVx1MDAzZWhkcnJlcywgYWgtXHUwMDNlcmVzZXJ2ZWQsXG4tXHRcdCAhKGFoaW5mby1cdTAwM2VoZHJyZXMgXHUwMDI2XHUwMDI2IGFoLVx1MDAzZXJlc2VydmVkKSk7XG4tXG4gXHRyZXR1cm4gc3BpX21hdGNoKGFoaW5mby1cdTAwM2VzcGlzWzBdLCBhaGluZm8tXHUwMDNlc3Bpc1sxXSxcbiBcdFx0XHQgIG50b2hsKGFoLVx1MDAzZXNwaSksXG4gXHRcdFx0ICAhIShhaGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IElQNlRfQUhfSU5WX1NQSSkpIFx1MDAyNlx1MDAyNlxuQEAgLTkzLDcgKzcwLDcgQEAgc3RhdGljIGludCBhaF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3QgaXA2dF9haCAqYWhpbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiBcbiBcdGlmIChhaGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IH5JUDZUX0FIX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBhaGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuY1xuaW5kZXggM2FhZDY0MzkzODZiMS4uZjVmM2NmYjg3MDRjZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuY1xuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jXG5AQCAtMjMsMTIgKzIzLDcgQEAgTU9EVUxFX0FVVEhPUihcIkFuZHJhcyBLaXMtU3phYm8gXHUwMDNja2lzemFAc2NoLmJtZS5odVx1MDAzZVwiKTtcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBpZF9tYXRjaCh1X2ludDMyX3QgbWluLCB1X2ludDMyX3QgbWF4LCB1X2ludDMyX3QgaWQsIGJvb2wgaW52ZXJ0KVxuIHtcbi1cdGJvb2wgcjtcbi1cdHByX2RlYnVnKFwiaWRfbWF0Y2g6JWMgMHgleCBcdTAwM2M9IDB4JXggXHUwMDNjPSAweCV4XFxuXCIsIGludmVydCA/ICchJyA6ICcgJyxcbi1cdFx0IG1pbiwgaWQsIG1heCk7XG4tXHRyID0gKGlkIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBpZCBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4tXHRwcl9kZWJ1ZyhcIiByZXN1bHQgJXNcXG5cIiwgciA/IFwiUEFTU1wiIDogXCJGQUlMRURcIik7XG4tXHRyZXR1cm4gcjtcbitcdHJldHVybiAoaWQgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IGlkIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbiB9XG4gXG4gc3RhdGljIGJvb2xcbkBAIC01MywzOCArNDgsNiBAQCBmcmFnX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbi1cdHByX2RlYnVnKFwiSU5GTyAlMDRYIFwiLCBmaC1cdTAwM2VmcmFnX29mZik7XG4tXHRwcl9kZWJ1ZyhcIk9GRlNFVCAlMDRYIFwiLCBudG9ocyhmaC1cdTAwM2VmcmFnX29mZikgXHUwMDI2IH4weDcpO1xuLVx0cHJfZGVidWcoXCJSRVMgJTAyWCAlMDRYXCIsIGZoLVx1MDAzZXJlc2VydmVkLCBudG9ocyhmaC1cdTAwM2VmcmFnX29mZikgXHUwMDI2IDB4Nik7XG4tXHRwcl9kZWJ1ZyhcIk1GICUwNFggXCIsIGZoLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUDZfTUYpKTtcbi1cdHByX2RlYnVnKFwiSUQgJXUgJTA4WFxcblwiLCBudG9obChmaC1cdTAwM2VpZGVudGlmaWNhdGlvbiksXG4tXHRcdCBudG9obChmaC1cdTAwM2VpZGVudGlmaWNhdGlvbikpO1xuLVxuLVx0cHJfZGVidWcoXCJJUHY2IEZSQUcgaWQgJTAyWCBcIixcbi1cdFx0IGlkX21hdGNoKGZyYWdpbmZvLVx1MDAzZWlkc1swXSwgZnJhZ2luZm8tXHUwMDNlaWRzWzFdLFxuLVx0XHRcdCAgbnRvaGwoZmgtXHUwMDNlaWRlbnRpZmljYXRpb24pLFxuLVx0XHRcdCAgISEoZnJhZ2luZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19JTlZfSURTKSkpO1xuLVx0cHJfZGVidWcoXCJyZXMgJTAyWCAlMDJYJTA0WCAlMDJYIFwiLFxuLVx0XHQgZnJhZ2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19SRVMsIGZoLVx1MDAzZXJlc2VydmVkLFxuLVx0XHQgbnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiAweDYsXG4tXHRcdCAhKChmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX1JFUykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgIChmaC1cdTAwM2VyZXNlcnZlZCB8fCAobnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiAweDA2KSkpKTtcbi1cdHByX2RlYnVnKFwiZmlyc3QgJTAyWCAlMDJYICUwMlggXCIsXG4tXHRcdCBmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX0ZTVCxcbi1cdFx0IG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgfjB4Nyxcbi1cdFx0ICEoKGZyYWdpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZUX0ZSQUdfRlNUKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgKG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgfjB4NykpKTtcbi1cdHByX2RlYnVnKFwibWYgJTAyWCAlMDJYICUwMlggXCIsXG4tXHRcdCBmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX01GLFxuLVx0XHQgbnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiBJUDZfTUYsXG4tXHRcdCAhKChmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX01GKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgISgobnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiBJUDZfTUYpKSkpO1xuLVx0cHJfZGVidWcoXCJsYXN0ICUwMlggJTAyWCAlMDJYXFxuXCIsXG4tXHRcdCBmcmFnaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9GUkFHX05NRixcbi1cdFx0IG50b2hzKGZoLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgSVA2X01GLFxuLVx0XHQgISgoZnJhZ2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19OTUYpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAobnRvaHMoZmgtXHUwMDNlZnJhZ19vZmYpIFx1MDAyNiBJUDZfTUYpKSk7XG4tXG4gXHRyZXR1cm4gaWRfbWF0Y2goZnJhZ2luZm8tXHUwMDNlaWRzWzBdLCBmcmFnaW5mby1cdTAwM2VpZHNbMV0sXG4gXHRcdFx0IG50b2hsKGZoLVx1MDAzZWlkZW50aWZpY2F0aW9uKSxcbiBcdFx0XHQgISEoZnJhZ2luZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IElQNlRfRlJBR19JTlZfSURTKSkgXHUwMDI2XHUwMDI2XG5AQCAtMTAzLDcgKzY2LDcgQEAgc3RhdGljIGludCBmcmFnX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdGNvbnN0IHN0cnVjdCBpcDZ0X2ZyYWcgKmZyYWdpbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiBcbiBcdGlmIChmcmFnaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgfklQNlRfRlJBR19JTlZfTUFTSykge1xuLVx0XHRwcl9kZWJ1ZyhcInVua25vd24gZmxhZ3MgJVhcXG5cIiwgZnJhZ2luZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBmcmFnaW5mby1cdTAwM2VpbnZmbGFncyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xuaW5kZXggNmQxYTVkMjAyNmE2Ny4uMzdjMjA3ZDMxNTJhNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9oYmguY1xuQEAgLTc5LDE0ICs3OSw2IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4tXHRwcl9kZWJ1ZyhcIklQdjYgT1BUUyBMRU4gJXUgJXUgXCIsIGhkcmxlbiwgb2gtXHUwMDNlaGRybGVuKTtcbi1cbi1cdHByX2RlYnVnKFwibGVuICUwMlggJTA0WCAlMDJYIFwiLFxuLVx0XHQgb3B0aW5mby1cdTAwM2VoZHJsZW4sIGhkcmxlbixcbi1cdFx0ICghKG9wdGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfT1BUU19MRU4pIHx8XG4tXHRcdCAgKChvcHRpbmZvLVx1MDAzZWhkcmxlbiA9PSBoZHJsZW4pIF5cbi1cdFx0ICAgISEob3B0aW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgSVA2VF9PUFRTX0lOVl9MRU4pKSkpO1xuLVxuIFx0cmV0ID0gKCEob3B0aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9PUFRTX0xFTikgfHxcbiBcdCAgICAgICAoKG9wdGluZm8tXHUwMDNlaGRybGVuID09IGhkcmxlbikgXlxuIFx0XHQhIShvcHRpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiBJUDZUX09QVFNfSU5WX0xFTikpKTtcbkBAIC05Niw4ICs4OCw2IEBAIGhiaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0aWYgKCEob3B0aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9PUFRTX09QVFMpKSB7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9IGVsc2Uge1xuLVx0XHRwcl9kZWJ1ZyhcIlN0cmljdCBcIik7XG4tXHRcdHByX2RlYnVnKFwiIyVkIFwiLCBvcHRpbmZvLVx1MDAzZW9wdHNucik7XG4gXHRcdGZvciAodGVtcCA9IDA7IHRlbXAgXHUwMDNjIG9wdGluZm8tXHUwMDNlb3B0c25yOyB0ZW1wKyspIHtcbiBcdFx0XHQvKiB0eXBlIGZpZWxkIGV4aXN0cyA/ICovXG4gXHRcdFx0aWYgKGhkcmxlbiBcdTAwM2MgMSlcbkBAIC0xMDgsMTMgKzk4LDkgQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0XHRicmVhaztcbiBcbiBcdFx0XHQvKiBUeXBlIGNoZWNrICovXG4tXHRcdFx0aWYgKCp0cCAhPSAob3B0aW5mby1cdTAwM2VvcHRzW3RlbXBdIFx1MDAyNiAweEZGMDApIFx1MDAzZVx1MDAzZSA4KSB7XG4tXHRcdFx0XHRwcl9kZWJ1ZyhcIlRiYWQgJTAyWCAlMDJYXFxuXCIsICp0cCxcbi1cdFx0XHRcdFx0IChvcHRpbmZvLVx1MDAzZW9wdHNbdGVtcF0gXHUwMDI2IDB4RkYwMCkgXHUwMDNlXHUwMDNlIDgpO1xuK1x0XHRcdGlmICgqdHAgIT0gKG9wdGluZm8tXHUwMDNlb3B0c1t0ZW1wXSBcdTAwMjYgMHhGRjAwKSBcdTAwM2VcdTAwM2UgOClcbiBcdFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0cHJfZGVidWcoXCJUb2sgXCIpO1xuLVx0XHRcdH1cbitcbiBcdFx0XHQvKiBMZW5ndGggY2hlY2sgKi9cbiBcdFx0XHRpZiAoKnRwKSB7XG4gXHRcdFx0XHR1MTYgc3BlY19sZW47XG5AQCAtMTI5LDI2ICsxMTUsMTggQEAgaGJoX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0c3BlY19sZW4gPSBvcHRpbmZvLVx1MDAzZW9wdHNbdGVtcF0gXHUwMDI2IDB4MDBGRjtcbiBcbi1cdFx0XHRcdGlmIChzcGVjX2xlbiAhPSAweDAwRkYgXHUwMDI2XHUwMDI2IHNwZWNfbGVuICE9ICpscCkge1xuLVx0XHRcdFx0XHRwcl9kZWJ1ZyhcIkxiYWQgJTAyWCAlMDRYXFxuXCIsICpscCxcbi1cdFx0XHRcdFx0XHQgc3BlY19sZW4pO1xuK1x0XHRcdFx0aWYgKHNwZWNfbGVuICE9IDB4MDBGRiBcdTAwMjZcdTAwMjYgc3BlY19sZW4gIT0gKmxwKVxuIFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdFx0XHR9XG4tXHRcdFx0XHRwcl9kZWJ1ZyhcIkxvayBcIik7XG4rXG4gXHRcdFx0XHRvcHRsZW4gPSAqbHAgKyAyO1xuIFx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRwcl9kZWJ1ZyhcIlBhZDFcXG5cIik7XG4gXHRcdFx0XHRvcHRsZW4gPSAxO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHQvKiBTdGVwIHRvIHRoZSBuZXh0ICovXG4tXHRcdFx0cHJfZGVidWcoXCJsZW4lMDRYXFxuXCIsIG9wdGxlbik7XG4tXG4gXHRcdFx0aWYgKChwdHIgXHUwMDNlIHNrYi1cdTAwM2VsZW4gLSBvcHRsZW4gfHwgaGRybGVuIFx1MDAzYyBvcHRsZW4pIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICB0ZW1wIFx1MDAzYyBvcHRpbmZvLVx1MDAzZW9wdHNuciAtIDEpIHtcbi1cdFx0XHRcdHByX2RlYnVnKFwibmV3IHBvaW50ZXIgaXMgdG9vIGxhcmdlIVxcblwiKTtcbitcdFx0XHQgICAgdGVtcCBcdTAwM2Mgb3B0aW5mby1cdTAwM2VvcHRzbnIgLSAxKVxuIFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuK1xuIFx0XHRcdHB0ciArPSBvcHRsZW47XG4gXHRcdFx0aGRybGVuIC09IG9wdGxlbjtcbiBcdFx0fVxuQEAgLTE2NiwxNiArMTQ0LDE2IEBAIHN0YXRpYyBpbnQgaGJoX210Nl9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdGNvbnN0IHN0cnVjdCBpcDZ0X29wdHMgKm9wdHNpbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiBcbiBcdGlmIChvcHRzaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgfklQNlRfT1BUU19JTlZfTUFTSykge1xuLVx0XHRwcl9kZWJ1ZyhcInVua25vd24gZmxhZ3MgJVhcXG5cIiwgb3B0c2luZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBvcHRzaW5mby1cdTAwM2VpbnZmbGFncyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKG9wdHNpbmZvLVx1MDAzZW9wdHNuciBcdTAwM2UgSVA2VF9PUFRTX09QVFNOUikge1xuLVx0XHRwcl9kZWJ1ZyhcInRvbyBtYW55IHN1cHBvcnRlZCBvcHRzIHNwZWNpZmllZFxcblwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcInRvbyBtYW55IHN1cHBvcnRlZCBvcHRzIHNwZWNpZmllZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4gXHRpZiAob3B0c2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlRfT1BUU19OU1RSSUNUKSB7XG4tXHRcdHByX2RlYnVnKFwiTm90IHN0cmljdCAtIG5vdCBpbXBsZW1lbnRlZFwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcIk5vdCBzdHJpY3QgLSBub3QgaW1wbGVtZW50ZWRcIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X21oLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9taC5jXG5pbmRleCBmZDQ5MmI2OWFjYmMwLi5iYTZkY2M3NzkxYTA5IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbWguY1xuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbWguY1xuQEAgLTQyLDE0ICs0MiwxMSBAQCBzdGF0aWMgYm9vbCBtaF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0aWYgKG1oID09IE5VTEwpIHtcbiBcdFx0LyogV2UndmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2VcbiBcdFx0ICAgY2FuJ3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLiAqL1xuLVx0XHRwcl9kZWJ1ZyhcIkRyb3BwaW5nIGV2aWwgTUggdGlueWdyYW0uXFxuXCIpO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdGlmIChtaC1cdTAwM2VpcDZtaF9wcm90byAhPSBJUFBST1RPX05PTkUpIHtcbi1cdFx0cHJfZGVidWcoXCJEcm9wcGluZyBpbnZhbGlkIE1IIFBheWxvYWQgUHJvdG86ICV1XFxuXCIsXG4tXHRcdFx0IG1oLVx1MDAzZWlwNm1oX3Byb3RvKTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnBmaWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3JwZmlsdGVyLmNcbmluZGV4IDY3Yzg3YTg4Y2RlNGYuLmFmOGQxMGQ0OWRlODEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ycGZpbHRlci5jXG5AQCAtMTE4LDcgKzExOCw3IEBAIHN0YXRpYyBpbnQgcnBmaWx0ZXJfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXG4gXHRpZiAoc3RyY21wKHBhci1cdTAwM2V0YWJsZSwgXCJtYW5nbGVcIikgIT0gMCBcdTAwMjZcdTAwMjZcbiBcdCAgICBzdHJjbXAocGFyLVx1MDAzZXRhYmxlLCBcInJhd1wiKSAhPSAwKSB7XG4tXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJvbmx5IHZhbGlkIGluIFxcJ3Jhd1xcJyBvciBcXCdtYW5nbGVcXCcgdGFibGUsIG5vdCBcXCclc1xcJ1xcblwiLFxuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwib25seSB2YWxpZCBpbiBcXCdyYXdcXCcgb3IgXFwnbWFuZ2xlXFwnIHRhYmxlXFxuXCIsXG4gXHRcdFx0XHQgICAgcGFyLVx1MDAzZXRhYmxlKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmNcbmluZGV4IDI3OGI1Mjc1MmYzNjQuLjBjMDFhYzI3NDZkMWYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jXG5AQCAtMTU1LDE4ICsxNTUsMTggQEAgc3RhdGljIGludCBydF9tdDZfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3QgaXA2dF9ydCAqcnRpbmZvID0gcGFyLVx1MDAzZW1hdGNoaW5mbztcbiBcbiBcdGlmIChydGluZm8tXHUwMDNlaW52ZmxhZ3MgXHUwMDI2IH5JUDZUX1JUX0lOVl9NQVNLKSB7XG4tXHRcdHByX2RlYnVnKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBydGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidW5rbm93biBmbGFncyAlWFxcblwiLCBydGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdGlmIChydGluZm8tXHUwMDNlYWRkcm5yIFx1MDAzZSBJUDZUX1JUX0hPUFMpIHtcbi1cdFx0cHJfZGVidWcoXCJ0b28gbWFueSBhZGRyZXNzZXMgc3BlY2lmaWVkXFxuXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwidG9vIG1hbnkgYWRkcmVzc2VzIHNwZWNpZmllZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRpZiAoKHJ0aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgKElQNlRfUlRfUkVTIHwgSVA2VF9SVF9GU1RfTUFTSykpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICghKHJ0aW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVA2VF9SVF9UWVApIHx8XG4gXHQgICAgIChydGluZm8tXHUwMDNlcnRfdHlwZSAhPSAwKSB8fFxuIFx0ICAgICAocnRpbmZvLVx1MDAzZWludmZsYWdzIFx1MDAyNiBJUDZUX1JUX0lOVl9UWVApKSkge1xuLVx0XHRwcl9kZWJ1ZyhcImAtLXJ0LXR5cGUgMCcgcmVxdWlyZWQgYmVmb3JlIGAtLXJ0LTAtKidcIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJgLS1ydC10eXBlIDAnIHJlcXVpcmVkIGJlZm9yZSBgLS1ydC0wLSonXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmNcbmluZGV4IDE0OTRiM2VlMzBlMTEuLjRlNDQzNmE5MTA0YjQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuY1xuQEAgLTg3LDggKzg3LDcgQEAgc3RhdGljIGludCBjb25uc2VjbWFya190Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcilcbiBcbiBcdGlmIChzdHJjbXAocGFyLVx1MDAzZXRhYmxlLCBcIm1hbmdsZVwiKSAhPSAwIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHN0cmNtcChwYXItXHUwMDNldGFibGUsIFwic2VjdXJpdHlcIikgIT0gMCkge1xuLVx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwib25seSB2YWxpZCBpbiBcXCdtYW5nbGVcXCcgb3IgXFwnc2VjdXJpdHlcXCcgdGFibGUsIG5vdCBcXCclc1xcJ1xcblwiLFxuLVx0XHRcdFx0ICAgIHBhci1cdTAwM2V0YWJsZSk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJvbmx5IHZhbGlkIGluIFxcJ21hbmdsZVxcJyBvciBcXCdzZWN1cml0eVxcJyB0YWJsZVxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DVC5jIGIvbmV0L25ldGZpbHRlci94dF9DVC5jXG5pbmRleCBlNzg2NjBkZmRmNGI2Li45MTMyNjAxNGFkZTFjIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9DVC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0NULmNcbkBAIC0xOTUsNyArMTk1LDggQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcixcbiBcdFx0Z290byBlcnIzO1xuIFx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNlaGVscGVyWzBdKSB7XG4rXHRpZiAoaW5mby1cdTAwM2VoZWxwZXJbMF0gXHUwMDI2XHUwMDI2XG4rXHQgICAgc3RybmxlbihpbmZvLVx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiBcdFx0aWYgKHN0cm5sZW4oaW5mby1cdTAwM2VoZWxwZXIsIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpID09IHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbiBcdFx0XHRyZXQgPSAtRU5BTUVUT09MT05HO1xuIFx0XHRcdGdvdG8gZXJyMztcbkBAIC0yMDYsNyArMjA3LDggQEAgc3RhdGljIGludCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcixcbiBcdFx0XHRnb3RvIGVycjM7XG4gXHR9XG4gXG4tXHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0WzBdKSB7XG4rXHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0WzBdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHN0cm5sZW4oaW5mby1cdTAwM2V0aW1lb3V0LCBzaXplb2YoaW5mby1cdTAwM2V0aW1lb3V0KSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gXHRcdGlmIChzdHJubGVuKGluZm8tXHUwMDNldGltZW91dCwgc2l6ZW9mKGluZm8tXHUwMDNldGltZW91dCkpID09IHNpemVvZihpbmZvLVx1MDAzZXRpbWVvdXQpKSB7XG4gXHRcdFx0cmV0ID0gLUVOQU1FVE9PTE9ORztcbiBcdFx0XHRnb3RvIGVycjQ7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9JRExFVElNRVIuYyBiL25ldC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmNcbmluZGV4IGJmY2YyZDQ0ZTkzZGIuLjE1YjY5OGVhOThhYTYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5jXG5AQCAtMTAyLDggKzEwMiw2IEBAIHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19leHBpcmVkKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIHtcbiBcdHN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyID0gdGltZXJfY29udGFpbmVyX29mKHRpbWVyLCB0LCB0aW1lcik7XG4gXG4tXHRwcl9kZWJ1ZyhcInRpbWVyICVzIGV4cGlyZWRcXG5cIiwgdGltZXItXHUwMDNlYXR0ci5hdHRyLm5hbWUpO1xuLVxuIFx0c2NoZWR1bGVfd29yayhcdTAwMjZ0aW1lci1cdTAwM2V3b3JrKTtcbiB9XG4gXG5AQCAtMTExLDcgKzEwOSw2IEBAIHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19hbGFybXByb2Moc3RydWN0IGFsYXJtICphbGFybSwga3RpbWVfdCBub3cpXG4ge1xuIFx0c3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXIgPSBhbGFybS1cdTAwM2VkYXRhO1xuIFxuLVx0cHJfZGVidWcoXCJhbGFybSAlcyBleHBpcmVkXFxuXCIsIHRpbWVyLVx1MDAzZWF0dHIuYXR0ci5uYW1lKTtcbiBcdHNjaGVkdWxlX3dvcmsoXHUwMDI2dGltZXItXHUwMDNld29yayk7XG4gfVxuIFxuQEAgLTE3MSw3ICsxNjgsNyBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jcmVhdGUoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKVxuIFxuIFx0cmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoaWRsZXRpbWVyX3RnX2tvYmosIFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlYXR0ci5hdHRyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0cHJfZGVidWcoXCJjb3VsZG4ndCBhZGQgZmlsZSB0byBzeXNmc1wiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcImNvdWxkbid0IGFkZCBmaWxlIHRvIHN5c2ZzXCIpO1xuIFx0XHRnb3RvIG91dF9mcmVlX2F0dHI7XG4gXHR9XG4gXG5AQCAtMjIwLDcgKzIxNyw3IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NyZWF0ZV92MShzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8pXG4gXG4gXHRyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShpZGxldGltZXJfdGdfa29iaiwgXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhdHRyLmF0dHIpO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRwcl9kZWJ1ZyhcImNvdWxkbid0IGFkZCBmaWxlIHRvIHN5c2ZzXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiY291bGRuJ3QgYWRkIGZpbGUgdG8gc3lzZnNcIik7XG4gXHRcdGdvdG8gb3V0X2ZyZWVfYXR0cjtcbiBcdH1cbiBcbkBAIC0yMjgsNyArMjI1LDYgQEAgc3RhdGljIGludCBpZGxldGltZXJfdGdfY3JlYXRlX3YxKHN0cnVjdCBpZGxldGltZXJfdGdfaW5mb192MSAqaW5mbylcbiBcdGtvYmplY3RfdWV2ZW50KGlkbGV0aW1lcl90Z19rb2JqLEtPQkpfQUREKTtcbiBcbiBcdGxpc3RfYWRkKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlZW50cnksIFx1MDAyNmlkbGV0aW1lcl90Z19saXN0KTtcbi1cdHByX2RlYnVnKFwidGltZXIgdHlwZSB2YWx1ZSBpcyAldVwiLCBpbmZvLVx1MDAzZXRpbWVyX3R5cGUpO1xuIFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlID0gaW5mby1cdTAwM2V0aW1lcl90eXBlO1xuIFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQgPSAxO1xuIFxuQEAgLTI2Myw5ICsyNTksNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4tXHRwcl9kZWJ1ZyhcInJlc2V0dGluZyB0aW1lciAlcywgdGltZW91dCBwZXJpb2QgJXVcXG5cIixcbi1cdFx0IGluZm8tXHUwMDNlbGFiZWwsIGluZm8tXHUwMDNldGltZW91dCk7XG4tXG4gXHRtb2RfdGltZXIoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcixcbiBcdFx0ICBzZWNzX3RvX2ppZmZpZXMoaW5mby1cdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xuIFxuQEAgLTI4MCw5ICsyNzMsNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4tXHRwcl9kZWJ1ZyhcInJlc2V0dGluZyB0aW1lciAlcywgdGltZW91dCBwZXJpb2QgJXVcXG5cIixcbi1cdFx0IGluZm8tXHUwMDNlbGFiZWwsIGluZm8tXHUwMDNldGltZW91dCk7XG4tXG4gXHRpZiAoaW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlIFx1MDAyNiBYVF9JRExFVElNRVJfQUxBUk0pIHtcbiBcdFx0aWRsZXRpbWVyX3N0YXJ0X2FsYXJtX3NlYyhpbmZvLVx1MDAzZXRpbWVyLCBpbmZvLVx1MDAzZXRpbWVvdXQpO1xuIFx0fSBlbHNlIHtcbkBAIC0yOTYsMTcgKzI4NiwxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlkbGV0aW1lcl90Z190YXJnZXRfdjEoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19oZWxwZXIoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvKVxuIHtcbiBcdGlmIChpbmZvLVx1MDAzZXRpbWVvdXQgPT0gMCkge1xuLVx0XHRwcl9kZWJ1ZyhcInRpbWVvdXQgdmFsdWUgaXMgemVyb1xcblwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcInRpbWVvdXQgdmFsdWUgaXMgemVyb1xcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRpZiAoaW5mby1cdTAwM2V0aW1lb3V0IFx1MDAzZT0gSU5UX01BWCAvIDEwMDApIHtcbi1cdFx0cHJfZGVidWcoXCJ0aW1lb3V0IHZhbHVlIGlzIHRvbyBiaWdcXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJ0aW1lb3V0IHZhbHVlIGlzIHRvbyBiaWdcXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKGluZm8tXHUwMDNlbGFiZWxbMF0gPT0gJ1xcMCcgfHxcbiBcdCAgICBzdHJubGVuKGluZm8tXHUwMDNlbGFiZWwsXG4gXHRcdCAgICBNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkUpID09IE1BWF9JRExFVElNRVJfTEFCRUxfU0laRSkge1xuLVx0XHRwcl9kZWJ1ZyhcImxhYmVsIGlzIGVtcHR5IG9yIG5vdCBudWwtdGVybWluYXRlZFxcblwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcImxhYmVsIGlzIGVtcHR5IG9yIG5vdCBudWwtdGVybWluYXRlZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbkBAIC0zMTgsMzQgKzMwOCwyNSBAQCBzdGF0aWMgaW50IGlkbGV0aW1lcl90Z19jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFx0c3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIFx0aW50IHJldDtcbiBcbi1cdHByX2RlYnVnKFwiY2hlY2tlbnRyeSB0YXJnaW5mbyVzXFxuXCIsIGluZm8tXHUwMDNlbGFiZWwpO1xuLVxuIFx0cmV0ID0gaWRsZXRpbWVyX3RnX2hlbHBlcihpbmZvKTtcbiBcdGlmKHJldCBcdTAwM2MgMClcbi1cdHtcbi1cdFx0cHJfZGVidWcoXCJjaGVja2VudHJ5IGhlbHBlciByZXR1cm4gaW52YWxpZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuIFx0aW5mby1cdTAwM2V0aW1lciA9IF9faWRsZXRpbWVyX3RnX2ZpbmRfYnlfbGFiZWwoaW5mby1cdTAwM2VsYWJlbCk7XG4gXHRpZiAoaW5mby1cdTAwM2V0aW1lcikge1xuIFx0XHRpZiAoaW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlIFx1MDAyNiBYVF9JRExFVElNRVJfQUxBUk0pIHtcbi1cdFx0XHRwcl9kZWJ1ZyhcIkFkZGluZy9SZXBsYWNpbmcgcnVsZSB3aXRoIHNhbWUgbGFiZWwgYW5kIGRpZmZlcmVudCB0aW1lciB0eXBlIGlzIG5vdCBhbGxvd2VkXFxuXCIpO1xuIFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbitcdFx0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiQWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcXG5cIik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcbiBcdFx0aW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQrKztcbiBcdFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gXHRcdFx0ICBzZWNzX3RvX2ppZmZpZXMoaW5mby1cdTAwM2V0aW1lb3V0KSArIGppZmZpZXMpO1xuLVxuLVx0XHRwcl9kZWJ1ZyhcImluY3JlYXNlZCByZWZjbnQgb2YgdGltZXIgJXMgdG8gJXVcXG5cIixcbi1cdFx0XHQgaW5mby1cdTAwM2VsYWJlbCwgaW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmV0ID0gaWRsZXRpbWVyX3RnX2NyZWF0ZShpbmZvKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdHByX2RlYnVnKFwiZmFpbGVkIHRvIGNyZWF0ZSB0aW1lclxcblwiKTtcbiBcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuQEAgLTM2MCwzMCArMzQxLDIzIEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXHRpbnQgcmV0O1xuIFxuLVx0cHJfZGVidWcoXCJjaGVja2VudHJ5IHRhcmdpbmZvJXNcXG5cIiwgaW5mby1cdTAwM2VsYWJlbCk7XG4tXG4gXHRpZiAoaW5mby1cdTAwM2VzZW5kX25sX21zZylcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0cmV0ID0gaWRsZXRpbWVyX3RnX2hlbHBlcigoc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICopaW5mbyk7XG4gXHRpZihyZXQgXHUwMDNjIDApXG4tXHR7XG4tXHRcdHByX2RlYnVnKFwiY2hlY2tlbnRyeSBoZWxwZXIgcmV0dXJuIGludmFsaWRcXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuIFxuLVx0aWYgKGluZm8tXHUwMDNldGltZXJfdHlwZSBcdTAwM2UgWFRfSURMRVRJTUVSX0FMQVJNKSB7XG4tXHRcdHByX2RlYnVnKFwiaW52YWxpZCB2YWx1ZSBmb3IgdGltZXIgdHlwZVxcblwiKTtcbitcdGlmIChpbmZvLVx1MDAzZXRpbWVyX3R5cGUgXHUwMDNlIFhUX0lETEVUSU1FUl9BTEFSTSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuIFx0aW5mby1cdTAwM2V0aW1lciA9IF9faWRsZXRpbWVyX3RnX2ZpbmRfYnlfbGFiZWwoaW5mby1cdTAwM2VsYWJlbCk7XG4gXHRpZiAoaW5mby1cdTAwM2V0aW1lcikge1xuIFx0XHRpZiAoaW5mby1cdTAwM2V0aW1lci1cdTAwM2V0aW1lcl90eXBlICE9IGluZm8tXHUwMDNldGltZXJfdHlwZSkge1xuLVx0XHRcdHByX2RlYnVnKFwiQWRkaW5nL1JlcGxhY2luZyBydWxlIHdpdGggc2FtZSBsYWJlbCBhbmQgZGlmZmVyZW50IHRpbWVyIHR5cGUgaXMgbm90IGFsbG93ZWRcXG5cIik7XG4gXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuK1x0XHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJBZGRpbmcvUmVwbGFjaW5nIHJ1bGUgd2l0aCBzYW1lIGxhYmVsIGFuZCBkaWZmZXJlbnQgdGltZXIgdHlwZSBpcyBub3QgYWxsb3dlZFxcblwiKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFxuQEAgLTM5MywyMSArMzY3LDE1IEBAIHN0YXRpYyBpbnQgaWRsZXRpbWVyX3RnX2NoZWNrZW50cnlfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRcdFx0a3RpbWVfdCB0b3V0ID0gYWxhcm1fZXhwaXJlc19yZW1haW5pbmcoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VhbGFybSk7XG4gXHRcdFx0c3RydWN0IHRpbWVzcGVjNjQga3RpbWVzcGVjID0ga3RpbWVfdG9fdGltZXNwZWM2NCh0b3V0KTtcbiBcbi1cdFx0XHRpZiAoa3RpbWVzcGVjLnR2X3NlYyBcdTAwM2UgMCkge1xuLVx0XHRcdFx0cHJfZGVidWcoXCJ0aW1lX2V4cGlyeV9yZW1haW5pbmcgJWxsZFxcblwiLFxuLVx0XHRcdFx0XHQga3RpbWVzcGVjLnR2X3NlYyk7XG4rXHRcdFx0aWYgKGt0aW1lc3BlYy50dl9zZWMgXHUwMDNlIDApXG4gXHRcdFx0XHRpZGxldGltZXJfc3RhcnRfYWxhcm1fa3RpbWUoaW5mby1cdTAwM2V0aW1lciwgdG91dCk7XG4tXHRcdFx0fVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0bW9kX3RpbWVyKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNldGltZXIsXG4gXHRcdFx0XHRcdHNlY3NfdG9famlmZmllcyhpbmZvLVx1MDAzZXRpbWVvdXQpICsgamlmZmllcyk7XG4gXHRcdH1cbi1cdFx0cHJfZGVidWcoXCJpbmNyZWFzZWQgcmVmY250IG9mIHRpbWVyICVzIHRvICV1XFxuXCIsXG4tXHRcdFx0IGluZm8tXHUwMDNlbGFiZWwsIGluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250KTtcbiBcdH0gZWxzZSB7XG4gXHRcdHJldCA9IGlkbGV0aW1lcl90Z19jcmVhdGVfdjEoaW5mbyk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0XHRwcl9kZWJ1ZyhcImZhaWxlZCB0byBjcmVhdGUgdGltZXJcXG5cIik7XG4gXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbkBAIC00MjEsMTkgKzM4OSwxMyBAQCBzdGF0aWMgdm9pZCBpZGxldGltZXJfdGdfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtICpwYXIpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGlkbGV0aW1lcl90Z19pbmZvICppbmZvID0gcGFyLVx1MDAzZXRhcmdpbmZvO1xuIFxuLVx0cHJfZGVidWcoXCJkZXN0cm95IHRhcmdpbmZvICVzXFxuXCIsIGluZm8tXHUwMDNlbGFiZWwpO1xuLVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiBcbiBcdGlmICgtLWluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250IFx1MDAzZSAwKSB7XG4tXHRcdHByX2RlYnVnKFwiZGVjcmVhc2VkIHJlZmNudCBvZiB0aW1lciAlcyB0byAldVxcblwiLFxuLVx0XHRcdCBpbmZvLVx1MDAzZWxhYmVsLCBpbmZvLVx1MDAzZXRpbWVyLVx1MDAzZXJlZmNudCk7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZsaXN0X211dGV4KTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0cHJfZGVidWcoXCJkZWxldGluZyB0aW1lciAlc1xcblwiLCBpbmZvLVx1MDAzZWxhYmVsKTtcbi1cbiBcdGxpc3RfZGVsKFx1MDAyNmluZm8tXHUwMDNldGltZXItXHUwMDNlZW50cnkpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuQEAgLTQ0OCwxOSArNDEwLDEzIEBAIHN0YXRpYyB2b2lkIGlkbGV0aW1lcl90Z19kZXN0cm95X3YxKGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm9fdjEgKmluZm8gPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4tXHRwcl9kZWJ1ZyhcImRlc3Ryb3kgdGFyZ2luZm8gJXNcXG5cIiwgaW5mby1cdTAwM2VsYWJlbCk7XG4tXG4gXHRtdXRleF9sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFxuIFx0aWYgKC0taW5mby1cdTAwM2V0aW1lci1cdTAwM2VyZWZjbnQgXHUwMDNlIDApIHtcbi1cdFx0cHJfZGVidWcoXCJkZWNyZWFzZWQgcmVmY250IG9mIHRpbWVyICVzIHRvICV1XFxuXCIsXG4tXHRcdFx0IGluZm8tXHUwMDNlbGFiZWwsIGluZm8tXHUwMDNldGltZXItXHUwMDNlcmVmY250KTtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxpc3RfbXV0ZXgpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRwcl9kZWJ1ZyhcImRlbGV0aW5nIHRpbWVyICVzXFxuXCIsIGluZm8tXHUwMDNlbGFiZWwpO1xuLVxuIFx0bGlzdF9kZWwoXHUwMDI2aW5mby1cdTAwM2V0aW1lci1cdTAwM2VlbnRyeSk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bGlzdF9tdXRleCk7XG4gXG5AQCAtNTM0LDcgKzQ5MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGlkbGV0aW1lcl90Z19pbml0KHZvaWQpXG4gXHRpZGxldGltZXJfdGdfY2xhc3MgPSBjbGFzc19jcmVhdGUoXCJ4dF9pZGxldGltZXJcIik7XG4gXHRlcnIgPSBQVFJfRVJSKGlkbGV0aW1lcl90Z19jbGFzcyk7XG4gXHRpZiAoSVNfRVJSKGlkbGV0aW1lcl90Z19jbGFzcykpIHtcbi1cdFx0cHJfZGVidWcoXCJjb3VsZG4ndCByZWdpc3RlciBkZXZpY2UgY2xhc3NcXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJjb3VsZG4ndCByZWdpc3RlciBkZXZpY2UgY2xhc3NcXG5cIik7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTU0Miw3ICs0OTgsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBpZGxldGltZXJfdGdfaW5pdCh2b2lkKVxuIFx0XHRcdFx0XHQgICAgTUtERVYoMCwgMCksIE5VTEwsIFwidGltZXJzXCIpO1xuIFx0ZXJyID0gUFRSX0VSUihpZGxldGltZXJfdGdfZGV2aWNlKTtcbiBcdGlmIChJU19FUlIoaWRsZXRpbWVyX3RnX2RldmljZSkpIHtcbi1cdFx0cHJfZGVidWcoXCJjb3VsZG4ndCByZWdpc3RlciBzeXN0ZW0gZGV2aWNlXFxuXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiY291bGRuJ3QgcmVnaXN0ZXIgc3lzdGVtIGRldmljZVxcblwiKTtcbiBcdFx0Z290byBvdXRfY2xhc3M7XG4gXHR9XG4gXG5AQCAtNTUxLDcgKzUwNyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGlkbGV0aW1lcl90Z19pbml0KHZvaWQpXG4gXHRlcnIgPSB4dF9yZWdpc3Rlcl90YXJnZXRzKGlkbGV0aW1lcl90ZywgQVJSQVlfU0laRShpZGxldGltZXJfdGcpKTtcbiBcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbi1cdFx0cHJfZGVidWcoXCJjb3VsZG4ndCByZWdpc3RlciB4dCB0YXJnZXRcXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJjb3VsZG4ndCByZWdpc3RlciB4dCB0YXJnZXRcXG5cIik7XG4gXHRcdGdvdG8gb3V0X2RldjtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0xPRy5jIGIvbmV0L25ldGZpbHRlci94dF9MT0cuY1xuaW5kZXggZjM5MjQ0ZjljMGVkOS4uZGUzZjE3Njc5MmEwNyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTE9HLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTE9HLmNcbkBAIC01MCwxMiArNTAsMTIgQEAgc3RhdGljIGludCBsb2dfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKGxvZ2luZm8tXHUwMDNlbGV2ZWwgXHUwMDNlPSA4KSB7XG4tXHRcdHByX2RlYnVnKFwibGV2ZWwgJXUgXHUwMDNlPSA4XFxuXCIsIGxvZ2luZm8tXHUwMDNlbGV2ZWwpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwibGV2ZWwgJXUgXHUwMDNlPSA4XFxuXCIsIGxvZ2luZm8tXHUwMDNlbGV2ZWwpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGlmIChsb2dpbmZvLVx1MDAzZXByZWZpeFtzaXplb2YobG9naW5mby1cdTAwM2VwcmVmaXgpLTFdICE9ICdcXDAnKSB7XG4tXHRcdHByX2RlYnVnKFwicHJlZml4IGlzIG5vdCBudWxsLXRlcm1pbmF0ZWRcXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJwcmVmaXggaXMgbm90IG51bGwtdGVybWluYXRlZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9NQVNRVUVSQURFLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuY1xuaW5kZXggZWFlMDVjMTc4MzM2Ny4uY2VhNDg4Y2VjNTQ0NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTUFTUVVFUkFERS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X01BU1FVRVJBREUuY1xuQEAgLTIxLDExICsyMSwxMSBAQCBzdGF0aWMgaW50IG1hc3F1ZXJhZGVfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3QgbmZfbmF0X2lwdjRfbXVsdGlfcmFuZ2VfY29tcGF0ICptciA9IHBhci1cdTAwM2V0YXJnaW5mbztcbiBcbiBcdGlmIChtci1cdTAwM2VyYW5nZVswXS5mbGFncyBcdTAwMjYgTkZfTkFUX1JBTkdFX01BUF9JUFMpIHtcbi1cdFx0cHJfZGVidWcoXCJiYWQgTUFQX0lQUy5cXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJiYWQgTUFQX0lQUy5cXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKG1yLVx1MDAzZXJhbmdlc2l6ZSAhPSAxKSB7XG4tXHRcdHByX2RlYnVnKFwiYmFkIHJhbmdlc2l6ZSAldVxcblwiLCBtci1cdTAwM2VyYW5nZXNpemUpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiYmFkIHJhbmdlc2l6ZSAldVxcblwiLCBtci1cdTAwM2VyYW5nZXNpemUpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiBuZl9jdF9uZXRuc19nZXQocGFyLVx1MDAzZW5ldCwgcGFyLVx1MDAzZWZhbWlseSk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9ORVRNQVAuYyBiL25ldC9uZXRmaWx0ZXIveHRfTkVUTUFQLmNcbmluZGV4IGNiMmVlODBkODRmYTguLjhjODZkOWE0MzM3M2EgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X05FVE1BUC5jXG5AQCAtMTA2LDExICsxMDYsMTEgQEAgc3RhdGljIGludCBuZXRtYXBfdGc0X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IG5mX25hdF9pcHY0X211bHRpX3JhbmdlX2NvbXBhdCAqbXIgPSBwYXItXHUwMDNldGFyZ2luZm87XG4gXG4gXHRpZiAoIShtci1cdTAwM2VyYW5nZVswXS5mbGFncyBcdTAwMjYgTkZfTkFUX1JBTkdFX01BUF9JUFMpKSB7XG4tXHRcdHByX2RlYnVnKFwiYmFkIE1BUF9JUFMuXFxuXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwiYmFkIE1BUF9JUFMuXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdGlmIChtci1cdTAwM2VyYW5nZXNpemUgIT0gMSkge1xuLVx0XHRwcl9kZWJ1ZyhcImJhZCByYW5nZXNpemUgJXUuXFxuXCIsIG1yLVx1MDAzZXJhbmdlc2l6ZSk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJiYWQgcmFuZ2VzaXplICV1LlxcblwiLCBtci1cdTAwM2VyYW5nZXNpemUpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdHJldHVybiBuZl9jdF9uZXRuc19nZXQocGFyLVx1MDAzZW5ldCwgcGFyLVx1MDAzZWZhbWlseSk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jIGIvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jXG5pbmRleCBmZjY2YjU2YTNmOTdkLi4yN2JjMDU0NWM0Zjc0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9SRURJUkVDVC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X1JFRElSRUNULmNcbkBAIC01MSwxMSArNTEsMTEgQEAgc3RhdGljIGludCByZWRpcmVjdF90ZzRfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3QgbmZfbmF0X2lwdjRfbXVsdGlfcmFuZ2VfY29tcGF0ICptciA9IHBhci1cdTAwM2V0YXJnaW5mbztcbiBcbiBcdGlmIChtci1cdTAwM2VyYW5nZVswXS5mbGFncyBcdTAwMjYgTkZfTkFUX1JBTkdFX01BUF9JUFMpIHtcbi1cdFx0cHJfZGVidWcoXCJiYWQgTUFQX0lQUy5cXG5cIik7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJiYWQgTUFQX0lQUy5cXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0aWYgKG1yLVx1MDAzZXJhbmdlc2l6ZSAhPSAxKSB7XG4tXHRcdHByX2RlYnVnKFwiYmFkIHJhbmdlc2l6ZSAldS5cXG5cIiwgbXItXHUwMDNlcmFuZ2VzaXplKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcImJhZCByYW5nZXNpemUgJXUuXFxuXCIsIG1yLVx1MDAzZXJhbmdlc2l6ZSk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0cmV0dXJuIG5mX2N0X25ldG5zX2dldChwYXItXHUwMDNlbmV0LCBwYXItXHUwMDNlZmFtaWx5KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1NFQ01BUksuYyBiL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jXG5pbmRleCA1YmM1ZWE1MDVlYjllLi4zOGU4ZTQxMGI0ZTgxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jXG5AQCAtNzksOCArNzksNyBAQCBzZWNtYXJrX3RnX2NoZWNrKGNvbnN0IGNoYXIgKnRhYmxlLCBzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfaW5mb192MSAqaW5mbylcbiBcbiBcdGlmIChzdHJjbXAodGFibGUsIFwibWFuZ2xlXCIpICE9IDAgXHUwMDI2XHUwMDI2XG4gXHQgICAgc3RyY21wKHRhYmxlLCBcInNlY3VyaXR5XCIpICE9IDApIHtcbi1cdFx0cHJfaW5mb19yYXRlbGltaXRlZChcIm9ubHkgdmFsaWQgaW4gXFwnbWFuZ2xlXFwnIG9yIFxcJ3NlY3VyaXR5XFwnIHRhYmxlLCBub3QgXFwnJXNcXCdcXG5cIixcbi1cdFx0XHRcdCAgICB0YWJsZSk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJvbmx5IHZhbGlkIGluIFxcJ21hbmdsZVxcJyBvciBcXCdzZWN1cml0eVxcJyB0YWJsZVxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jZ3JvdXAuYyBiL25ldC9uZXRmaWx0ZXIveHRfY2dyb3VwLmNcbmluZGV4IDQzZDJhZTJiZTYyOGQuLmFjMWI3ZTcxY2Q3ZjUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2Nncm91cC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nncm91cC5jXG5AQCAtMzMsNyArMzMsNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192MChjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ORVRfQ0xBU1NJRCkpIHtcbi1cdFx0cHJfaW5mbyhORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIGludCBjZ3JvdXBfbXRfY2hlY2tfdjEoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKCFpbmZvLVx1MDAzZWhhc19wYXRoIFx1MDAyNlx1MDAyNiAhaW5mby1cdTAwM2VoYXNfY2xhc3NpZCkge1xuLVx0XHRwcl9pbmZvKFwieHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXFxuXCIpO1xuK1x0XHRwcl9pbmZvX3JhdGVsaW1pdGVkKFwieHRfY2dyb3VwOiBubyBwYXRoIG9yIGNsYXNzaWQgc3BlY2lmaWVkXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC01OSw3ICs1OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YxKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0fVxuIFxuIFx0aWYgKGluZm8tXHUwMDNlaGFzX2NsYXNzaWQgXHUwMDI2XHUwMDI2ICFJU19FTkFCTEVEKENPTkZJR19DR1JPVVBfTkVUX0NMQVNTSUQpKSB7XG4tXHRcdHByX2luZm8oTkVUX0NMU19DTEFTU0lEX0lOVkFMSURfTVNHKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChORVRfQ0xTX0NMQVNTSURfSU5WQUxJRF9NU0cpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpYyBpbnQgY2dyb3VwX210X2NoZWNrX3YyKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmICghaW5mby1cdTAwM2VoYXNfcGF0aCBcdTAwMjZcdTAwMjYgIWluZm8tXHUwMDNlaGFzX2NsYXNzaWQpIHtcbi1cdFx0cHJfaW5mbyhcInh0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxcblwiKTtcbitcdFx0cHJfaW5mb19yYXRlbGltaXRlZChcInh0X2Nncm91cDogbm8gcGF0aCBvciBjbGFzc2lkIHNwZWNpZmllZFxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtOTksNyArOTksNyBAQCBzdGF0aWMgaW50IGNncm91cF9tdF9jaGVja192Mihjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcilcbiBcdH1cbiBcbiBcdGlmIChpbmZvLVx1MDAzZWhhc19jbGFzc2lkIFx1MDAyNlx1MDAyNiAhSVNfRU5BQkxFRChDT05GSUdfQ0dST1VQX05FVF9DTEFTU0lEKSkge1xuLVx0XHRwcl9pbmZvKE5FVF9DTFNfQ0xBU1NJRF9JTlZBTElEX01TRyk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoTkVUX0NMU19DTEFTU0lEX0lOVkFMSURfTVNHKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9lc3AuYyBiL25ldC9uZXRmaWx0ZXIveHRfZXNwLmNcbmluZGV4IDJhMWMwYWQwZmYwNzkuLjY4ZmQ3NTg4NDI2OGEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2VzcC5jXG5AQCAtMjUsMTIgKzI1LDcgQEAgTU9EVUxFX0FMSUFTKFwiaXA2dF9lc3BcIik7XG4gc3RhdGljIGlubGluZSBib29sXG4gc3BpX21hdGNoKHVfaW50MzJfdCBtaW4sIHVfaW50MzJfdCBtYXgsIHVfaW50MzJfdCBzcGksIGJvb2wgaW52ZXJ0KVxuIHtcbi1cdGJvb2wgcjtcbi1cdHByX2RlYnVnKFwic3BpX21hdGNoOiVjIDB4JXggXHUwMDNjPSAweCV4IFx1MDAzYz0gMHgleFxcblwiLFxuLVx0XHQgaW52ZXJ0ID8gJyEnIDogJyAnLCBtaW4sIHNwaSwgbWF4KTtcbi1cdHIgPSAoc3BpIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBzcGkgXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xuLVx0cHJfZGVidWcoXCIgcmVzdWx0ICVzXFxuXCIsIHIgPyBcIlBBU1NcIiA6IFwiRkFJTEVEXCIpO1xuLVx0cmV0dXJuIHI7XG4rXHRyZXR1cm4gKHNwaSBcdTAwM2U9IG1pbiBcdTAwMjZcdTAwMjYgc3BpIFx1MDAzYz0gbWF4KSBeIGludmVydDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgZXNwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbkBAIC00OCw3ICs0Myw2IEBAIHN0YXRpYyBib29sIGVzcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdC8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXG4gXHRcdCAqIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC5cbiBcdFx0ICovXG4tXHRcdHByX2RlYnVnKFwiRHJvcHBpbmcgZXZpbCBFU1AgdGlueWdyYW0uXFxuXCIpO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC02Miw3ICs1Niw3IEBAIHN0YXRpYyBpbnQgZXNwX210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKVxuIFx0Y29uc3Qgc3RydWN0IHh0X2VzcCAqZXNwaW5mbyA9IHBhci1cdTAwM2VtYXRjaGluZm87XG4gXG4gXHRpZiAoZXNwaW5mby1cdTAwM2VpbnZmbGFncyBcdTAwMjYgflhUX0VTUF9JTlZfTUFTSykge1xuLVx0XHRwcl9kZWJ1ZyhcInVua25vd24gZmxhZ3MgJVhcXG5cIiwgZXNwaW5mby1cdTAwM2VpbnZmbGFncyk7XG4rXHRcdHByX2luZm9fcmF0ZWxpbWl0ZWQoXCJ1bmtub3duIGZsYWdzICVYXFxuXCIsIGVzcGluZm8tXHUwMDNlaW52ZmxhZ3MpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2lwY29tcC5jIGIvbmV0L25ldGZpbHRlci94dF9pcGNvbXAuY1xuaW5kZXggNDcyZGE2MzlhMzJlMi4uMzI5OWMxZWE2MGY5ZSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaXBjb21wLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaXBjb21wLmNcbkBAIC0yOSwxMiArMjksNyBAQCBNT0RVTEVfQUxJQVMoXCJpcDZ0X2lwY29tcFwiKTtcbiBzdGF0aWMgaW5saW5lIGJvb2xcbiBzcGlfbWF0Y2godV9pbnQzMl90IG1pbiwgdV9pbnQzMl90IG1heCwgdV9pbnQzMl90IHNwaSwgYm9vbCBpbnZlcnQpXG4ge1xuLVx0Ym9vbCByO1xuLVx0cHJfZGVidWcoXCJzcGlfbWF0Y2g6JWMgMHgleCBcdTAwM2M9IDB4JXggXHUwMDNjPSAweCV4XFxuXCIsXG4tXHRcdCBpbnZlcnQgPyAnIScgOiAnICcsIG1pbiwgc3BpLCBtYXgpO1xuLVx0ciA9IChzcGkgXHUwMDNlPSBtaW4gXHUwMDI2XHUwMDI2IHNwaSBcdTAwM2M9IG1heCkgXiBpbnZlcnQ7XG4tXHRwcl9kZWJ1ZyhcIiByZXN1bHQgJXNcXG5cIiwgciA/IFwiUEFTU1wiIDogXCJGQUlMRURcIik7XG4tXHRyZXR1cm4gcjtcbitcdHJldHVybiAoc3BpIFx1MDAzZT0gbWluIFx1MDAyNlx1MDAyNiBzcGkgXHUwMDNjPSBtYXgpIF4gaW52ZXJ0O1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBjb21wX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbkBAIC01Miw3ICs0Nyw2IEBAIHN0YXRpYyBib29sIGNvbXBfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHQvKiBXZSd2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZVxuIFx0XHQgKiBjYW4ndC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuXG4gXHRcdCAqL1xuLVx0XHRwcl9kZWJ1ZyhcIkRyb3BwaW5nIGV2aWwgSVBDb21wIHRpbnlncmFtLlxcblwiKTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuY1xuaW5kZXggMGM5ZTAxNGUzMGI0OS4uYmY2MTE0MWZiNzg1MCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuY1xuQEAgLTI0LDI3ICsyNCwxNSBAQCBpcHJhbmdlX210NChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdG0gID0gbnRvaGwoaXBoLVx1MDAzZXNhZGRyKSBcdTAwM2MgbnRvaGwoaW5mby1cdTAwM2VzcmNfbWluLmlwKTtcbiBcdFx0bSB8PSBudG9obChpcGgtXHUwMDNlc2FkZHIpIFx1MDAzZSBudG9obChpbmZvLVx1MDAzZXNyY19tYXguaXApO1xuIFx0XHRtIF49ICEhKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVik7XG4tXHRcdGlmIChtKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJzcmMgSVAgJXBJNCBOT1QgaW4gcmFuZ2UgJXMlcEk0LSVwSTRcXG5cIixcbi1cdFx0XHQgICAgICAgICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsXG4tXHRcdFx0ICAgICAgICAgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVikgPyBcIihJTlYpIFwiIDogXCJcIixcbi1cdFx0XHQgICAgICAgICBcdTAwMjZpbmZvLVx1MDAzZXNyY19taW4uaXAsXG4tXHRcdFx0ICAgICAgICAgXHUwMDI2aW5mby1cdTAwM2VzcmNfbWF4LmlwKTtcbitcdFx0aWYgKG0pXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHR9XG4gXHR9XG4gXHRpZiAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9EU1QpIHtcbiBcdFx0bSAgPSBudG9obChpcGgtXHUwMDNlZGFkZHIpIFx1MDAzYyBudG9obChpbmZvLVx1MDAzZWRzdF9taW4uaXApO1xuIFx0XHRtIHw9IG50b2hsKGlwaC1cdTAwM2VkYWRkcikgXHUwMDNlIG50b2hsKGluZm8tXHUwMDNlZHN0X21heC5pcCk7XG4gXHRcdG0gXj0gISEoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9EU1RfSU5WKTtcbi1cdFx0aWYgKG0pIHtcbi1cdFx0XHRwcl9kZWJ1ZyhcImRzdCBJUCAlcEk0IE5PVCBpbiByYW5nZSAlcyVwSTQtJXBJNFxcblwiLFxuLVx0XHRcdCAgICAgICAgIFx1MDAyNmlwaC1cdTAwM2VkYWRkcixcbi1cdFx0XHQgICAgICAgICAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgSVBSQU5HRV9EU1RfSU5WKSA/IFwiKElOVikgXCIgOiBcIlwiLFxuLVx0XHRcdCAgICAgICAgIFx1MDAyNmluZm8tXHUwMDNlZHN0X21pbi5pcCxcbi1cdFx0XHQgICAgICAgICBcdTAwMjZpbmZvLVx1MDAzZWRzdF9tYXguaXApO1xuK1x0XHRpZiAobSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbiBcdH1cbiBcdHJldHVybiB0cnVlO1xuIH1cbkBAIC03MywyNyArNjEsMTUgQEAgaXByYW5nZV9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIFx0XHRtICA9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmluZm8tXHUwMDNlc3JjX21pbi5pbjYpO1xuIFx0XHRtIHw9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpbmZvLVx1MDAzZXNyY19tYXguaW42LCBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuIFx0XHRtIF49ICEhKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVik7XG4tXHRcdGlmIChtKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJzcmMgSVAgJXBJNiBOT1QgaW4gcmFuZ2UgJXMlcEk2LSVwSTZcXG5cIixcbi1cdFx0XHRcdCBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHQgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfU1JDX0lOVikgPyBcIihJTlYpIFwiIDogXCJcIixcbi1cdFx0XHRcdCBcdTAwMjZpbmZvLVx1MDAzZXNyY19taW4uaW42LFxuLVx0XHRcdFx0IFx1MDAyNmluZm8tXHUwMDNlc3JjX21heC5pbjYpO1xuK1x0XHRpZiAobSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbiBcdH1cbiBcdGlmIChpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBJUFJBTkdFX0RTVCkge1xuIFx0XHRtICA9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpcGgtXHUwMDNlZGFkZHIsIFx1MDAyNmluZm8tXHUwMDNlZHN0X21pbi5pbjYpO1xuIFx0XHRtIHw9IGlwcmFuZ2VfaXB2Nl9sdChcdTAwMjZpbmZvLVx1MDAzZWRzdF9tYXguaW42LCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIpO1xuIFx0XHRtIF49ICEhKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfRFNUX0lOVik7XG4tXHRcdGlmIChtKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJkc3QgSVAgJXBJNiBOT1QgaW4gcmFuZ2UgJXMlcEk2LSVwSTZcXG5cIixcbi1cdFx0XHRcdCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHQgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IElQUkFOR0VfRFNUX0lOVikgPyBcIihJTlYpIFwiIDogXCJcIixcbi1cdFx0XHRcdCBcdTAwMjZpbmZvLVx1MDAzZWRzdF9taW4uaW42LFxuLVx0XHRcdFx0IFx1MDAyNmluZm8tXHUwMDNlZHN0X21heC5pbjYpO1xuK1x0XHRpZiAobSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRcdH1cbiBcdH1cbiBcdHJldHVybiB0cnVlO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2lwdnMuYyBiL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jXG5pbmRleCAyNTNjNzFjYzlhNjM0Li5lMTNjMGZmYjczYTlhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcHZzLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaXB2cy5jXG5AQCAtMTQ4LDcgKzE0OCw2IEBAIGlwdnNfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuIG91dF9wdXRfY3A6XG4gXHRfX2lwX3ZzX2Nvbm5fcHV0KGNwKTtcbiBvdXQ6XG4tXHRwcl9kZWJ1ZyhcIm1hdGNoPSVkXFxuXCIsIG1hdGNoKTtcbiBcdHJldHVybiBtYXRjaDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuYyBiL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmNcbmluZGV4IGExNjkxZmY0MDVkM2MuLmJmZjVmNTNhOWJlZmIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jXG5AQCAtMzcsNyArMzcsNiBAQCBwb3J0c19tYXRjaF92MShjb25zdCBzdHJ1Y3QgeHRfbXVsdGlwb3J0X3YxICptaW5mbyxcbiBcdFx0aWYgKG1pbmZvLVx1MDAzZXBmbGFnc1tpXSkge1xuIFx0XHRcdC8qIHJhbmdlIHBvcnQgbWF0Y2hpbmcgKi9cbiBcdFx0XHRlID0gbWluZm8tXHUwMDNlcG9ydHNbKytpXTtcbi1cdFx0XHRwcl9kZWJ1ZyhcInNyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkLSVkP1xcblwiLCBzLCBlKTtcbiBcbiBcdFx0XHRzd2l0Y2ggKG1pbmZvLVx1MDAzZWZsYWdzKSB7XG4gXHRcdFx0Y2FzZSBYVF9NVUxUSVBPUlRfU09VUkNFOlxuQEAgLTU4LDggKzU3LDYgQEAgcG9ydHNfbWF0Y2hfdjEoY29uc3Qgc3RydWN0IHh0X211bHRpcG9ydF92MSAqbWluZm8sXG4gXHRcdFx0fVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIGV4YWN0IHBvcnQgbWF0Y2hpbmcgKi9cbi1cdFx0XHRwcl9kZWJ1ZyhcInNyYyBvciBkc3QgbWF0Y2hlcyB3aXRoICVkP1xcblwiLCBzKTtcbi1cbiBcdFx0XHRzd2l0Y2ggKG1pbmZvLVx1MDAzZWZsYWdzKSB7XG4gXHRcdFx0Y2FzZSBYVF9NVUxUSVBPUlRfU09VUkNFOlxuIFx0XHRcdFx0aWYgKHNyYyA9PSBzKVxuQEAgLTk3LDcgKzk0LDYgQEAgbXVsdGlwb3J0X210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdFx0LyogV2UndmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2VcbiBcdFx0ICogY2FuJ3QuICBIZW5jZSwgbm8gY2hvaWNlIGJ1dCB0byBkcm9wLlxuIFx0XHQgKi9cbi1cdFx0cHJfZGVidWcoXCJEcm9wcGluZyBldmlsIG9mZnNldD0wIHRpbnlncmFtLlxcblwiKTtcbiBcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuY1xuaW5kZXggYjQ2YTZhNTEyMDU4My4uZDM1YzIxZDk2NTFiMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuY1xuQEAgLTQ4LDMwICs0OCwxNyBAQCBtYXRjaF9wYWNrZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGNvbnN0IHN0cnVjdCB4dF9zY3RwX2ZsYWdfaW5mbyAqZmxhZ19pbmZvID0gaW5mby1cdTAwM2VmbGFnX2luZm87XG4gXHRpbnQgZmxhZ19jb3VudCA9IGluZm8tXHUwMDNlZmxhZ19jb3VudDtcbiBcbi0jaWZkZWYgREVCVUdcbi1cdGludCBpID0gMDtcbi0jZW5kaWZcbi1cbiBcdGlmIChjaHVua19tYXRjaF90eXBlID09IFNDVFBfQ0hVTktfTUFUQ0hfQUxMKVxuIFx0XHRTQ1RQX0NIVU5LTUFQX0NPUFkoY2h1bmttYXBjb3B5LCBpbmZvLVx1MDAzZWNodW5rbWFwKTtcbiBcbiBcdGRvIHtcbiBcdFx0c2NoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX3NjaCksIFx1MDAyNl9zY2gpO1xuIFx0XHRpZiAoc2NoID09IE5VTEwgfHwgc2NoLVx1MDAzZWxlbmd0aCA9PSAwKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJEcm9wcGluZyBpbnZhbGlkIFNDVFAgcGFja2V0LlxcblwiKTtcbiBcdFx0XHQqaG90ZHJvcCA9IHRydWU7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4tI2lmZGVmIERFQlVHXG4tXHRcdHByX2RlYnVnKFwiQ2h1bmsgbnVtOiAlZFxcdG9mZnNldDogJWRcXHR0eXBlOiAlZFxcdGxlbmd0aDogJWRcIlxuLVx0XHRcdCBcIlxcdGZsYWdzOiAleFxcblwiLFxuLVx0XHRcdCArK2ksIG9mZnNldCwgc2NoLVx1MDAzZXR5cGUsIGh0b25zKHNjaC1cdTAwM2VsZW5ndGgpLFxuLVx0XHRcdCBzY2gtXHUwMDNlZmxhZ3MpO1xuLSNlbmRpZlxuIFx0XHRvZmZzZXQgKz0gU0NUUF9QQUQ0KG50b2hzKHNjaC1cdTAwM2VsZW5ndGgpKTtcbiBcbi1cdFx0cHJfZGVidWcoXCJza2ItXHUwMDNlbGVuOiAlZFxcdG9mZnNldDogJWRcXG5cIiwgc2tiLVx1MDAzZWxlbiwgb2Zmc2V0KTtcbi1cbiBcdFx0aWYgKFNDVFBfQ0hVTktNQVBfSVNfU0VUKGluZm8tXHUwMDNlY2h1bmttYXAsIHNjaC1cdTAwM2V0eXBlKSkge1xuIFx0XHRcdHN3aXRjaCAoY2h1bmtfbWF0Y2hfdHlwZSkge1xuIFx0XHRcdGNhc2UgU0NUUF9DSFVOS19NQVRDSF9BTlk6XG5AQCAtMTIxLDE4ICsxMDgsMTQgQEAgc2N0cF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRjb25zdCBzdHJ1Y3Qgc2N0cGhkciAqc2g7XG4gXHRzdHJ1Y3Qgc2N0cGhkciBfc2g7XG4gXG4tXHRpZiAocGFyLVx1MDAzZWZyYWdvZmYgIT0gMCkge1xuLVx0XHRwcl9kZWJ1ZyhcIkRyb3BwaW5nIG5vbi1maXJzdCBmcmFnbWVudC4uIEZJWE1FXFxuXCIpO1xuK1x0aWYgKHBhci1cdTAwM2VmcmFnb2ZmICE9IDApXG4gXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbiBcbiBcdHNoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgcGFyLVx1MDAzZXRob2ZmLCBzaXplb2YoX3NoKSwgXHUwMDI2X3NoKTtcbiBcdGlmIChzaCA9PSBOVUxMKSB7XG4tXHRcdHByX2RlYnVnKFwiRHJvcHBpbmcgZXZpbCBUQ1Agb2Zmc2V0PTAgdGlueWdyYW0uXFxuXCIpO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbi1cdHByX2RlYnVnKFwic3B0OiAlZFxcdGRwdDogJWRcXG5cIiwgbnRvaHMoc2gtXHUwMDNlc291cmNlKSwgbnRvaHMoc2gtXHUwMDNlZGVzdCkpO1xuIFxuIFx0cmV0dXJuICBTQ0NIRUNLKG50b2hzKHNoLVx1MDAzZXNvdXJjZSkgXHUwMDNlPSBpbmZvLVx1MDAzZXNwdHNbMF1cbiBcdFx0XHRcdTAwMjZcdTAwMjYgbnRvaHMoc2gtXHUwMDNlc291cmNlKSBcdTAwM2M9IGluZm8tXHUwMDNlc3B0c1sxXSxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3RjcHVkcC5jIGIvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuY1xuaW5kZXggZjc2Y2YxOGYxYTI0NC4uNzA2MDhiOGQwNmFiMiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmNcbkBAIC00NCw4ICs0NCw2IEBAIHRjcF9maW5kX29wdGlvbih1X2ludDhfdCBvcHRpb24sXG4gXHR1X2ludDhfdCBfb3B0WzYwIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpXTtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0cHJfZGVidWcoXCJmaW5kaW5nIG9wdGlvblxcblwiKTtcbi1cbiBcdGlmICghb3B0bGVuKVxuIFx0XHRyZXR1cm4gaW52ZXJ0O1xuIFxuQEAgLTgxLDEwICs3OSw4IEBAIHN0YXRpYyBib29sIHRjcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRcdCAgIGNhdXNlcyB0aGlzLiBJdHMgYSBjcmFja2VyIHRyeWluZyB0byBicmVhayBpbiBieSBkb2luZyBhXG4gXHRcdCAgIGZsYWcgb3ZlcndyaXRlIHRvIHBhc3MgdGhlIGRpcmVjdGlvbiBjaGVja3MuXG4gXHRcdCovXG4tXHRcdGlmIChwYXItXHUwMDNlZnJhZ29mZiA9PSAxKSB7XG4tXHRcdFx0cHJfZGVidWcoXCJEcm9wcGluZyBldmlsIFRDUCBvZmZzZXQ9MSBmcmFnLlxcblwiKTtcbitcdFx0aWYgKHBhci1cdTAwM2VmcmFnb2ZmID09IDEpXG4gXHRcdFx0cGFyLVx1MDAzZWhvdGRyb3AgPSB0cnVlO1xuLVx0XHR9XG4gXHRcdC8qIE11c3Qgbm90IGJlIGEgZnJhZ21lbnQuICovXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC05Myw3ICs4OSw2IEBAIHN0YXRpYyBib29sIHRjcF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXG4gXHRpZiAodGggPT0gTlVMTCkge1xuIFx0XHQvKiBXZSd2ZSBiZWVuIGFza2VkIHRvIGV4YW1pbmUgdGhpcyBwYWNrZXQsIGFuZCB3ZVxuIFx0XHQgICBjYW4ndC4gIEhlbmNlLCBubyBjaG9pY2UgYnV0IHRvIGRyb3AuICovXG4tXHRcdHByX2RlYnVnKFwiRHJvcHBpbmcgZXZpbCBUQ1Agb2Zmc2V0PTAgdGlueWdyYW0uXFxuXCIpO1xuIFx0XHRwYXItXHUwMDNlaG90ZHJvcCA9IHRydWU7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC0xNDUsNyArMTQwLDYgQEAgc3RhdGljIGJvb2wgdWRwX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcilcbiBcdGlmICh1aCA9PSBOVUxMKSB7XG4gXHRcdC8qIFdlJ3ZlIGJlZW4gYXNrZWQgdG8gZXhhbWluZSB0aGlzIHBhY2tldCwgYW5kIHdlXG4gXHRcdCAgIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4gKi9cbi1cdFx0cHJfZGVidWcoXCJEcm9wcGluZyBldmlsIFVEUCB0aW55Z3JhbS5cXG5cIik7XG4gXHRcdHBhci1cdTAwM2Vob3Rkcm9wID0gdHJ1ZTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6NDE6MzYuNDA1ODYyNDc4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTE2Mzk5NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE5ldGZpbHRlciBQYXRjaCBTZXJpZXM6IFByaW1hcmlseSBMb2dnaW5nIENsZWFudXAgd2l0aCBhIEdsaXRjaCoqXG5cbk9rYXksIGhlcmUncyB0aGUgZGVhbC4gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCB0aGUgbWFpbiB0aGluZyBpdCdzIGRvaW5nIGlzIHJlbW92aW5nIGEgYnVuY2ggb2YgYHByX2RlYnVnYCBjYWxscyBhbmQgY29udmVydGluZyBzb21lIG9mIHRoZW0gdG8gYHByX2luZm9fcmF0ZWxpbWl0ZWRgIGNhbGxzIGFjcm9zcyBhIGJ1bmNoIG9mIG5ldGZpbHRlciBtb2R1bGVzOiBgaXB0X2FoLmNgLCBgaXB0X3JwZmlsdGVyLmNgLCBgaXA2dF9haC5jYCwgZXRjLiBCYXNpY2FsbHksIGl0J3MgYSBjb2RlIGNsZWFudXAsIHdoaWNoIGlzIGZpbmUuIE5vdGhpbmcgdG9vIGV4Y2l0aW5nLCBqdXN0IG1ha2luZyB0aGluZ3MgYSBiaXQgbGVzcyBjaGF0dHkuXG5cblRoZW4gSSBoaXQgdGhpcyBvZGQgY2hhbmdlIGluIGB4dF9DVC5jYC4gVGhleSd2ZSBtZXNzZWQgd2l0aCB0aGUgY29kZSB0aGF0IGhhbmRsZXMgdGhlIGBoZWxwZXJgIHN0cmluZzpcblxuYGBgY1xuLVx0aWYgKGluZm8tXHUwMDNlaGVscGVyWzBdKSB7XG4rXHRpZiAoaW5mby1cdTAwM2VoZWxwZXJbMF0gXHUwMDI2XHUwMDI2XG4rXHQgICAgc3RybmxlbihpbmZvLVx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkgXHUwMDNjIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIHtcbmBgYFxuXG5JIHNlZSB0aGF0LiBBZGRpbmcgYHN0cm5sZW5gIGNvbmRpdGlvbiAqYmVmb3JlKiB0aGUgb3JpZ2luYWwgY29uZGl0aW9uLiBBbmQgdGhlbiB0aGVyZSdzIG1vcmUgYWZ0ZXI6XG5cbmBgYGNcblx0XHRpZiAoc3RybmxlbihpbmZvLVx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkgPT0gc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkge1xuXHRcdFx0cmV0ID0gLUVOQU1FVE9PTE9ORztcblx0XHRcdGdvdG8gZXJyMztcblx0XHR9XG5gYGBcblxuV2FpdCBhIHNlY29uZC4uLiBJZiB0aGF0IGBzdHJubGVuYCBpcyAqbGVzcyogdGhhbiBgc2l6ZW9mYCwgdGhlbiB0aGUgaW5uZXIgYGlmYCBjb25kaXRpb24gd2lsbCAqbmV2ZXIqIGJlIHRydWUsIHJpZ2h0PyBCZWNhdXNlIGlmIGl0J3MgbGVzcywgdGhlIHN0cmluZyBpcyBudWxsLXRlcm1pbmF0ZWQsIHNvIHRoZSBsZW5ndGggY2FuJ3QgYmUgZXF1YWwgdG8gdGhlIGJ1ZmZlciBzaXplLiBUaGF0IGlubmVyIGBpZmAgaXMgZXNzZW50aWFsbHkgZGVhZCBjb2RlIG5vdy4gU2VlbXMgbGlrZSBhIGxvZ2ljIGVycm9yLiBPcmlnaW5hbCBjb2RlIHNob3VsZCd2ZSByZXR1cm5lZCBgLUVOQU1FVE9PTE9OR2AgaWYgdGhlIHN0cmluZyB3YXNuJ3QgbnVsbC10ZXJtaW5hdGVkLiBCdXQgbm93LCB3aXRoIHRoZSBhZGRlZCBjaGVjaywgdGhhdCBjYXNlIGp1c3QgKmdldHMgc2tpcHBlZCouIElzIHRoZXJlIGEgS01TQU4gaXNzdWUgaGVyZT9cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvZGU6XG5gYGBjXG4tXHRpZiAoaW5mby1cdTAwM2VoZWxwZXJbMF0pIHtcbitcdGlmIChpbmZvLVx1MDAzZWhlbHBlclswXSBcdTAwMjZcdTAwMjZcbitcdCAgICBzdHJubGVuKGluZm8tXHUwMDNlaGVscGVyLCBzaXplb2YoaW5mby1cdTAwM2VoZWxwZXIpKSBcdTAwM2Mgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkge1xuIFx0XHRpZiAoc3RybmxlbihpbmZvLVx1MDAzZWhlbHBlciwgc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkgPT0gc2l6ZW9mKGluZm8tXHUwMDNlaGVscGVyKSkge1xuIFx0XHRcdHJldCA9IC1FTkFNRVRPT0xPTkc7XG4gXHRcdFx0Z290byBlcnIzO1xuIFx0XHR9XG5gYGBcblllYWghIElmIHRoZSBzdHJpbmcgaXMgbm90IG51bGwtdGVybWluYXRlZCwgaXQganVzdCBza2lwcyB0aGUgd2hvbGUgYmxvY2suIEl0IGRvZXNuJ3QgcmV0dXJuIHRoZSBgLUVOQU1FVE9PTE9OR2AgYXMgaXQgc2hvdWxkLiBUaGlzIHNlZW1zIGxpa2UgYSAqYnVnKiBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCwgbm90IGEgZml4LiBJdCBza2lwcyB0aGUgZXJyb3IgY2hlY2tpbmcgYW5kIHRoZSBoZWxwZXIgbG9hZGluZyB3aGVuIHRoZSBzdHJpbmcgaXNuJ3QgbnVsbC10ZXJtaW5hdGVkLlxuXG5Pa2F5LCBpcyB0aGVyZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGhlcmU/IExldCBtZSBjaGVjayB0aGUgZXhhY3QgZGlmZjpcbmBgYGNcbi1cdGlmIChpbmZvLVx1MDAzZWhlbHBlclswXSkge1xuK1x0aWYgKGluZm8tXHUwMDNlaGVscGVyWzBdIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHN0cm5sZW4oaW5mby1cdTAwM2VoZWxwZXIsIHNpemVvZihpbmZvLVx1MDAzZWhlbHBlcikpIFx1MDAzYyBzaXplb2YoaW5mby1cdTAwM2VoZWxwZXIpKSB7XG5gYGBcblxuTm8sIGl0IGRvZXNuJ3QgbG9vayBsaWtlIGl0IGJlY2F1c2UgaXQncyBzdGlsbCBjaGVja2luZyB0aGUgZmlyc3QgY2hhcmFjdGVyIGBpbmZvLVx1MDAzZWhlbHBlclswXWAuIFNvIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgdXNlcidzIHNpZGUsIGBzdHJubGVuYCB3aWxsIHN0aWxsIHJlYWQgaXQgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGguIEJ1dC4uLiB0aGUgbWVtb3J5IGZvciBgaW5mby1cdTAwM2VoZWxwZXJgIGNvbWVzIGZyb20gYHBhci1cdTAwM2V0YXJnaW5mb2AsIHJpZ2h0PyBUaGF0J3MgZnJvbSB1c2Vyc3BhY2UuIElmIGBpbmZvLVx1MDAzZWhlbHBlcmAgaXNuJ3QgbnVsbC10ZXJtaW5hdGVkLCBgc3RybmxlbmAgbWlnaHQgcmVhZCBpdC5cblxuSXMgYGluZm9gICpmdWxseSogaW5pdGlhbGl6ZWQgZnJvbSB1c2Vyc3BhY2U/IExldCBtZSBkb3VibGUtY2hlY2suIFRoZSBjb2RlIHVzZXMgYGNvcHlfZnJvbV91c2VyYC4gU28sIHllcyEgQmVjYXVzZSB1c2Vyc3BhY2UgaXMgd3JpdGluZyB0byB0aGUga2VybmVsLCBzbyBLTVNBTiBzaG91bGQgbm90IGNvbXBsYWluLCBhcyBpdCBtYXJrcyBhbGwgdGhlIG1lbW9yeSBjb3BpZWQgZnJvbSB1c2Vyc3BhY2UgYXMgaW5pdGlhbGl6ZWQhIFNvLCBpdCBpbml0aWFsaXplcyBpdCBhcyBmYXIgYXMgdGhlIGtlcm5lbCBpcyBjb25jZXJuZWQuXG5cbkxldCdzIGxvb2sgYXQgdGhlIG90aGVyIGNoYW5nZXMuLi4gcmVtb3ZpbmcgYHByX2RlYnVnYC4gTm90aGluZyB0byBzZWUgdGhlcmUuXG5cblNvLCBpbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGlzIG1vc3RseSBhIGNsZWFudXAsIHJlbW92aW5nIGBwcl9kZWJ1Z2AgYW5kIGNoYW5naW5nIHNvbWUgdG8gYHByX2luZm9fcmF0ZWxpbWl0ZWRgLiBUaGUgYHh0X0NULmNgIGNoYW5nZSAqZG9lcyogaGF2ZSBhIGxvZ2ljIGVycm9yLCBpbiB0aGF0IGl0IHNraXBzIGVycm9yIGNoZWNraW5nLiBJdCBtYWtlcyB0aGUgaW5uZXIgY2hlY2sgZGVhZCBjb2RlIGFuZCBjaGFuZ2VzIGJlaGF2aW9yIGZvciBub24tbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MuIEJ1dCBpdCAqZG9lc24ndCogaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gYGluZm8tXHUwMDNlaGVscGVyYCAqaXMqIGluaXRpYWxpemVkIGJlY2F1c2UgaXQgY29tZXMgZnJvbSBgY29weV9mcm9tX3VzZXJgLiBLTVNBTiBpcyBub3QgYW4gaXNzdWUgaGVyZS4gTm8gbmVlZCBmb3IgdGhhdCBmdXp6aW5nLiBUaGUgcGF0Y2ggaGFzIGEgbG9naWMgZmxhdywgdGhhdCdzIGFsbC4gQW5kIGl0J3MgcHJvYmFibHkgZnVuY3Rpb25hbCwgbm90IGEgc2VjdXJpdHkgaXNzdWVcblxuIiwiSW5wdXRUb2tlbnMiOjE2OTE4LCJPdXRwdXRUb2tlbnMiOjIyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDo0MjowOC45MjIyNjU3OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHByaW1hcmlseSByZW1vdmVzIGBwcl9kZWJ1Z2Agc3RhdGVtZW50cyBhbmQgY29udmVydHMgc29tZSB0byBgcHJfaW5mb19yYXRlbGltaXRlZGAgYWNyb3NzIHZhcmlvdXMgbmV0ZmlsdGVyIG1vZHVsZXMuIFRoZXJlIGlzIGFsc28gYSBsb2dpY2FsIGNoYW5nZSBpbiBgeHRfQ1QuY2AgcmVnYXJkaW5nIHRoZSB2YWxpZGF0aW9uIG9mIGBpbmZvLVxcdTAwM2VoZWxwZXJgIGFuZCBgaW5mby1cXHUwMDNldGltZW91dGAgc3RyaW5ncywgd2hpY2ggaW50cm9kdWNlcyBkZWFkIGNvZGUgYW5kIGFsdGVycyB0aGUgZXJyb3IgaGFuZGxpbmcgZm9yIG5vbi1udWxsLXRlcm1pbmF0ZWQgc3RyaW5ncy4gSG93ZXZlciwgdGhlIGBpbmZvYCBzdHJ1Y3R1cmUgKGBwYXItXFx1MDAzZXRhcmdpbmZvYCkgaXMgcG9wdWxhdGVkIHZpYSBgY29weV9mcm9tX3VzZXJgIHdpdGggZGF0YSBwcm92aWRlZCBieSB1c2Vyc3BhY2UsIG1lYW5pbmcgdGhlIG1lbW9yeSBpcyBmdWxseSBpbml0aWFsaXplZCBmcm9tIHRoZSBrZXJuZWwncyBwZXJzcGVjdGl2ZS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhZGQgY29udHJvbCBmbG93IGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyB0aGUgbG9naWMgZmxhdyBpbiBgeHRfQ1QuY2ApIGFyZSBmdW5jdGlvbmFsIGFuZCBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcHJpbWFyaWx5IHJlbW92ZXMgYHByX2RlYnVnYCBzdGF0ZW1lbnRzIGFuZCBjb252ZXJ0cyBzb21lIHRvIGBwcl9pbmZvX3JhdGVsaW1pdGVkYCBhY3Jvc3MgdmFyaW91cyBuZXRmaWx0ZXIgbW9kdWxlcy4gVGhlcmUgaXMgYWxzbyBhIGxvZ2ljYWwgY2hhbmdlIGluIGB4dF9DVC5jYCByZWdhcmRpbmcgdGhlIHZhbGlkYXRpb24gb2YgYGluZm8tXFx1MDAzZWhlbHBlcmAgYW5kIGBpbmZvLVxcdTAwM2V0aW1lb3V0YCBzdHJpbmdzLCB3aGljaCBpbnRyb2R1Y2VzIGRlYWQgY29kZSBhbmQgYWx0ZXJzIHRoZSBlcnJvciBoYW5kbGluZyBmb3Igbm9uLW51bGwtdGVybWluYXRlZCBzdHJpbmdzLiBIb3dldmVyLCB0aGUgYGluZm9gIHN0cnVjdHVyZSAoYHBhci1cXHUwMDNldGFyZ2luZm9gKSBpcyBwb3B1bGF0ZWQgdmlhIGBjb3B5X2Zyb21fdXNlcmAgd2l0aCBkYXRhIHByb3ZpZGVkIGJ5IHVzZXJzcGFjZSwgbWVhbmluZyB0aGUgbWVtb3J5IGlzIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gdGhlIGtlcm5lbCdzIHBlcnNwZWN0aXZlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFkZCBjb250cm9sIGZsb3cgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHRoZSBsb2dpYyBmbGF3IGluIGB4dF9DVC5jYCkgYXJlIGZ1bmN0aW9uYWwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowlkk2s[1] Phase: Succeeded StartedAt: 2026-08-18 14:42:20 +0000 UTC FinishedAt: 2026-08-18 14:42:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 14:42:20 +0000 UTC FinishedAt: 2026-08-18 14:42:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2] Phase: Succeeded StartedAt: 2026-08-18 14:42:20 +0000 UTC FinishedAt: 2026-08-18 18:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 14:42:20 +0000 UTC FinishedAt: 2026-08-18 18:22:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 14:42:20 +0000 UTC FinishedAt: 2026-08-18 14:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 14:42:20 +0000 UTC FinishedAt: 2026-08-18 14:42:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlkk2s/series-workflowlkk2s-convert-artifact-424702039/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 14:42:30 +0000 UTC FinishedAt: 2026-08-18 14:59:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 14:42:30 +0000 UTC FinishedAt: 2026-08-18 14:59:03 +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:*dcdd4aca-b997-46aa-87c2-ff68612c3890,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-workflowlkk2s/series-workflowlkk2s-convert-artifact-424702039/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": "454f0094-bca9-4961-a11b-747df454fd68", "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-workflowlkk2s/series-workflowlkk2s-build-action-1604907181/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 14:42:30 +0000 UTC FinishedAt: 2026-08-18 14:58:53 +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:*dcdd4aca-b997-46aa-87c2-ff68612c3890,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-workflowlkk2s/series-workflowlkk2s-convert-artifact-424702039/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": "454f0094-bca9-4961-a11b-747df454fd68", "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-workflowlkk2s/series-workflowlkk2s-build-action-1604907181/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 14:59:03 +0000 UTC FinishedAt: 2026-08-18 14:59:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 14:59:03 +0000 UTC FinishedAt: 2026-08-18 14:59:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 14:59:03 +0000 UTC FinishedAt: 2026-08-18 14:59:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 14:59:03 +0000 UTC FinishedAt: 2026-08-18 14:59:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlkk2s/series-workflowlkk2s-convert-artifact-2027762310/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 14:59:13 +0000 UTC FinishedAt: 2026-08-18 15:01:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 14:59:13 +0000 UTC FinishedAt: 2026-08-18 15:01:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*454f0094-bca9-4961-a11b-747df454fd68,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-workflowlkk2s/series-workflowlkk2s-build-action-1604907181/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-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 15:01:20 +0000 UTC FinishedAt: 2026-08-18 15:01:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 15:01:20 +0000 UTC FinishedAt: 2026-08-18 15:01:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 15:01:20 +0000 UTC FinishedAt: 2026-08-18 15:18:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 15:01:20 +0000 UTC FinishedAt: 2026-08-18 15:18:37 +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:*dcdd4aca-b997-46aa-87c2-ff68612c3890,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-workflowlkk2s/series-workflowlkk2s-convert-artifact-2027762310/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": "bd3bfa9f-0c5b-4565-9540-30ed36ce6150", "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-workflowlkk2s/series-workflowlkk2s-build-action-845973706/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 15:01:20 +0000 UTC FinishedAt: 2026-08-18 15:18:27 +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:*dcdd4aca-b997-46aa-87c2-ff68612c3890,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-workflowlkk2s/series-workflowlkk2s-convert-artifact-2027762310/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": "bd3bfa9f-0c5b-4565-9540-30ed36ce6150", "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-workflowlkk2s/series-workflowlkk2s-build-action-845973706/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 15:18:37 +0000 UTC FinishedAt: 2026-08-18 15:18:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 15:18:37 +0000 UTC FinishedAt: 2026-08-18 15:18:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 15:18:37 +0000 UTC FinishedAt: 2026-08-18 15:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 15:18:37 +0000 UTC FinishedAt: 2026-08-18 15:20:14 +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:*bd3bfa9f-0c5b-4565-9540-30ed36ce6150,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-workflowlkk2s/series-workflowlkk2s-build-action-845973706/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-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 15:20:17 +0000 UTC FinishedAt: 2026-08-18 18:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 15:20:17 +0000 UTC FinishedAt: 2026-08-18 18:22:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"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:*454f0094-bca9-4961-a11b-747df454fd68,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bd3bfa9f-0c5b-4565-9540-30ed36ce6150,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-workflowlkk2s/series-workflowlkk2s-build-action-1604907181/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-workflowlkk2s/series-workflowlkk2s-build-action-845973706/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 15:20:17 +0000 UTC FinishedAt: 2026-08-18 15:20:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 15:20:17 +0000 UTC FinishedAt: 2026-08-18 15:20:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"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-workflowlkk2s/series-workflowlkk2s-convert-artifact-2889236555/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 15:20:17 +0000 UTC FinishedAt: 2026-08-18 15:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 15:20:17 +0000 UTC FinishedAt: 2026-08-18 15:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 15:20:17 +0000 UTC FinishedAt: 2026-08-18 15:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 15:20:27 +0000 UTC FinishedAt: 2026-08-18 18:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlkk2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xt_ct_tg_check","idletimer_tg_checkentry","idletimer_tg_checkentry_v1"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a50eba1e778ad4da5b6f9ddbbf57dabbea59bc05","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER_XT_TARGET_CT","NETFILTER_XT_TARGET_IDLETIMER","NF_CONNTRACK","IP_NF_RAW","NETFILTER_ADVANCED"],"series_id":"a5e13ed6-9ed0-4c77-a101-4d738c809f3e","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 15:20:27 +0000 UTC FinishedAt: 2026-08-18 18:22:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*454f0094-bca9-4961-a11b-747df454fd68,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bd3bfa9f-0c5b-4565-9540-30ed36ce6150,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-workflowlkk2s/series-workflowlkk2s-build-action-1604907181/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-workflowlkk2s/series-workflowlkk2s-build-action-845973706/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-workflowlkk2s/series-workflowlkk2s-convert-artifact-2889236555/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,}