Name: series-workflowrdrdm Phase: Succeeded StartedAt: 2026-09-03 08:33:03 +0000 UTC FinishedAt: 2026-09-03 12:49:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[0] Phase: Succeeded StartedAt: 2026-09-03 08:33:03 +0000 UTC FinishedAt: 2026-09-03 09:09:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 08:33:03 +0000 UTC FinishedAt: 2026-09-03 09:09:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2f38e26a5741abdf152c1b56b22144a06d30fd66", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2f38e26a5741abdf152c1b56b22144a06d30fd66", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET" ], "series_id": "502c55da-fdd3-4e05-988d-377efc02c725" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bond_alb_xmit", "bond_tlb_xmit", "bond_xmit_alb_slave_get", "bond_xmit_tlb_slave_get" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfYWxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF90bGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfYWxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfdGxiX3NsYXZlX2dldCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBBTEIvVExCIHRyYW5zbWl0IHBhdGhzIChib25kX2FsYi5jKSB0byBlbnN1cmUgdGhhdCBgc2tiX2Nvd19oZWFkKClgIGlzIGNhbGxlZCBiZWZvcmUgbW9kaWZ5aW5nIHBhY2tldCBoZWFkZXJzIChzdWNoIGFzIGBldGhfaGRyLVx1MDAzZWhfc291cmNlYCBvciB0aGUgQVJQIGhlYWRlciYjMzk7cyBzb3VyY2UgTUFDKSwgYXZvaWRpbmcgbW9kaWZpY2F0aW9uIG9mIHNoYXJlZC9jbG9uZWQgc2tiIGhlYWRlciBtZW1vcnkuIEl0IGFsc28gcmVwbGFjZXMgY2FsbHMgcmVzZXR0aW5nIHRoZSBNQUMgaGVhZGVyIHdpdGggYHNrYl9ldGhfaGRyKClgLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGNvbmNlcm4gc2tiIGhlYWQgY2xvbmFiaWxpdHksIHBhY2tldCBoZWFkZXIgbXV0YXRpb24sIGFuZCBuZXR3b3JrIHBhY2tldCB0cmFuc21pc3Npb246XG4xLiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzIGFyZSBwb3NzaWJsZSB0aHJvdWdoIHRoaXMgcGF0aC5cbjMuIE5vIGJyYW5jaGluZyBvciBsb2dpYyByZWxpZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBzaGFyZWQgbWVtb3J5IG1vZGlmaWNhdGlvbiBvciBza2IgbGlmZWN5Y2xlIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dlcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCB0cmFuc21pc3Npb24gcGF0aHMgaW4gdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIEFMQiBhbmQgVExCIG1vZGVzIChib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHNrYiBoZWFkcm9vbSBpcyBwcm9wZXJseSBjb3dlZC91bnNoYXJlZCBiZWZvcmUgbW9kaWZ5aW5nIHNvdXJjZSBNQUMgYWRkcmVzc2VzIChpbiBBUlAgcmVwbGllcyBhbmQgZXRoZXJuZXQgaGVhZGVycykgYW5kIHJlcGxhY2VzIHNrYl9yZXNldF9tYWNfaGVhZGVyL2V0aF9oZHIgY2FsbHMgd2l0aCBza2JfZXRoX2hkci4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjb25maWd1cmluZyBib25kaW5nIG5ldHdvcmsgaW50ZXJmYWNlcyBpbiBBTEIgb3IgVExCIG1vZGUgYW5kIHRyYW5zbWl0dGluZyB0cmFmZmljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzA5YWRmNmNmYzAzNjRiMTE4NDliY2JjNjI2N2MzNDBlNjdmZTgxMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDk6MDc6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG5pbmRleCA2NTRmMDUxZDAwMjM5Li41Zjc1MGYwOGExNDQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbkBAIC02NzgsOSAmIzQzOzY3OCwxMyBAQCBzdGF0aWMgc3RydWN0IHNsYXZlICpybGJfYXJwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4gXHRpZiAoYXJwLVx1MDAzZW9wX2NvZGUgPT0gaHRvbnMoQVJQT1BfUkVQTFkpKSB7XG4gXHRcdC8qIHRoZSBhcnAgbXVzdCBiZSBzZW50IG9uIHRoZSBzZWxlY3RlZCByeCBjaGFubmVsICovXG4gXHRcdHR4X3NsYXZlID0gcmxiX2Nob29zZV9jaGFubmVsKHNrYiwgYm9uZCwgYXJwKTtcbi1cdFx0aWYgKHR4X3NsYXZlKVxuJiM0MztcdFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNiB0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbiYjNDM7XHRcdFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRcdFx0YXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gXHRcdFx0Ym9uZF9od19hZGRyX2NvcHkoYXJwLVx1MDAzZW1hY19zcmMsIHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcixcbiBcdFx0XHRcdFx0ICB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4pO1xuJiM0MztcdFx0fVxuIFx0XHRuZXRkZXZfZGJnKGJvbmQtXHUwMDNlZGV2LCBcJiMzNDsoc2xhdmUgJXMpOiBTZXJ2ZXIgc2VudCBBUlAgUmVwbHkgcGFja2V0XFxuXCYjMzQ7LFxuIFx0XHRcdCAgIHR4X3NsYXZlID8gdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZW5hbWUgOiBcJiMzNDtOVUxMXCYjMzQ7KTtcbiBcdH0gZWxzZSBpZiAoYXJwLVx1MDAzZW9wX2NvZGUgPT0gaHRvbnMoQVJQT1BfUkVRVUVTVCkpIHtcbkBAIC0xMzQwLDcgJiM0MzsxMzQ0LDYgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXHRcdFx0XHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcbiB7XG4gXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuLVx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XG4gXG4gXHRpZiAoIXR4X3NsYXZlKSB7XG4gXHRcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cbkBAIC0xMzUxLDcgJiM0MzsxMzU0LDkgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXG4gXHRpZiAodHhfc2xhdmUgXHUwMDI2XHUwMDI2IGJvbmRfc2xhdmVfY2FuX3R4KHR4X3NsYXZlKSkge1xuIFx0XHRpZiAodHhfc2xhdmUgIT0gcmN1X2FjY2Vzc19wb2ludGVyKGJvbmQtXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XG4tXHRcdFx0ZXRoZXJfYWRkcl9jb3B5KGV0aF9kYXRhLVx1MDAzZWhfc291cmNlLFxuJiM0MztcdFx0XHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxuJiM0MztcdFx0XHRcdHJldHVybiBib25kX3R4X2Ryb3AoYm9uZC1cdTAwM2VkZXYsIHNrYik7XG4mIzQzO1x0XHRcdGV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLVx1MDAzZWhfc291cmNlLFxuIFx0XHRcdFx0XHR0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFx0XHR9XG4gXG5AQCAtMTM3NSw4ICYjNDM7MTM4MCw3IEBAIHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXHRzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YTtcbiBcdHUzMiBoYXNoX2luZGV4O1xuIFxuLVx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbi1cdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xuJiM0MztcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcbiBcbiBcdC8qIERvIG5vdCBUWCBiYWxhbmNlIGFueSBtdWx0aWNhc3Qgb3IgYnJvYWRjYXN0ICovXG4gXHRpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLVx1MDAzZWhfZGVzdCkpIHtcbkBAIC0xNDI4LDggJiM0MzsxNDMyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcdHUzMiBoYXNoX2luZGV4ID0gMDtcbiBcdGludCBoYXNoX3NpemUgPSAwO1xuIFxuLVx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbi1cdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xuJiM0MztcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcbiBcbiBcdHN3aXRjaCAobnRvaHMoc2tiLVx1MDAzZXByb3RvY29sKSkge1xuIFx0Y2FzZSBFVEhfUF9JUDoge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfYWxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF90bGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfYWxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfdGxiX3NsYXZlX2dldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgdHJhbnNtaXNzaW9uIHBhdGhzIGluIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBBTEIgYW5kIFRMQiBtb2RlcyAoYm9uZF9hbGIuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBza2IgaGVhZHJvb20gaXMgcHJvcGVybHkgY293ZWQvdW5zaGFyZWQgYmVmb3JlIG1vZGlmeWluZyBzb3VyY2UgTUFDIGFkZHJlc3NlcyAoaW4gQVJQIHJlcGxpZXMgYW5kIGV0aGVybmV0IGhlYWRlcnMpIGFuZCByZXBsYWNlcyBza2JfcmVzZXRfbWFjX2hlYWRlci9ldGhfaGRyIGNhbGxzIHdpdGggc2tiX2V0aF9oZHIuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY29uZmlndXJpbmcgYm9uZGluZyBuZXR3b3JrIGludGVyZmFjZXMgaW4gQUxCIG9yIFRMQiBtb2RlIGFuZCB0cmFuc21pdHRpbmcgdHJhZmZpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcwOWFkZjZjZmMwMzY0YjExODQ5YmNiYzYyNjdjMzQwZTY3ZmU4MTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDA5OjA3OjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCmluZGV4IDY1NGYwNTFkMDAyMzkuLjVmNzUwZjA4YTE0NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKQEAgLTY3OCw5ICYjNDM7Njc4LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnJsYl9hcnBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKIAlpZiAoYXJwLSZndDtvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUExZKSkgewogCQkvKiB0aGUgYXJwIG11c3QgYmUgc2VudCBvbiB0aGUgc2VsZWN0ZWQgcnggY2hhbm5lbCAqLwogCQl0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7Ci0JCWlmICh0eF9zbGF2ZSkKJiM0MzsJCWlmICh0eF9zbGF2ZSAmYW1wOyZhbXA7IHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLSZndDtjdXJyX2FjdGl2ZV9zbGF2ZSkpIHsKJiM0MzsJCQlpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKQomIzQzOwkJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCQlhcnAgPSAoc3RydWN0IGFycF9wa3QgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKIAkJCWJvbmRfaHdfYWRkcl9jb3B5KGFycC0mZ3Q7bWFjX3NyYywgdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIsCiAJCQkJCSAgdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7YWRkcl9sZW4pOwomIzQzOwkJfQogCQluZXRkZXZfZGJnKGJvbmQtJmd0O2RldiwgJiMzNDsoc2xhdmUgJXMpOiBTZXJ2ZXIgc2VudCBBUlAgUmVwbHkgcGFja2V0XG4mIzM0OywKIAkJCSAgIHR4X3NsYXZlID8gdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7bmFtZSA6ICYjMzQ7TlVMTCYjMzQ7KTsKIAl9IGVsc2UgaWYgKGFycC0mZ3Q7b3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSkgewpAQCAtMTM0MCw3ICYjNDM7MTM0NCw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLAogCQkJCSAgICBzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlKQogewogCXN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSAmYW1wOyhCT05EX0FMQl9JTkZPKGJvbmQpKTsKLQlzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTsKIAogCWlmICghdHhfc2xhdmUpIHsKIAkJLyogdW5iYWxhbmNlZCBvciB1bmFzc2lnbmVkLCBzZW5kIHRocm91Z2ggcHJpbWFyeSAqLwpAQCAtMTM1MSw3ICYjNDM7MTM1NCw5IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLAogCiAJaWYgKHR4X3NsYXZlICZhbXA7JmFtcDsgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7CiAJCWlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC0mZ3Q7Y3Vycl9hY3RpdmVfc2xhdmUpKSB7Ci0JCQlldGhlcl9hZGRyX2NvcHkoZXRoX2RhdGEtJmd0O2hfc291cmNlLAomIzQzOwkJCWlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpCiYjNDM7CQkJCXJldHVybiBib25kX3R4X2Ryb3AoYm9uZC0mZ3Q7ZGV2LCBza2IpOwomIzQzOwkJCWV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLSZndDtoX3NvdXJjZSwKIAkJCQkJdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIpOwogCQl9CiAKQEAgLTEzNzUsOCAmIzQzOzEzODAsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLAogCXN0cnVjdCBldGhoZHIgKmV0aF9kYXRhOwogCXUzMiBoYXNoX2luZGV4OwogCi0Jc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQlldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTsKJiM0MzsJZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpOwogCiAJLyogRG8gbm90IFRYIGJhbGFuY2UgYW55IG11bHRpY2FzdCBvciBicm9hZGNhc3QgKi8KIAlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLSZndDtoX2Rlc3QpKSB7CkBAIC0xNDI4LDggJiM0MzsxNDMyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKIAl1MzIgaGFzaF9pbmRleCA9IDA7CiAJaW50IGhhc2hfc2l6ZSA9IDA7CiAKLQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCWV0aF9kYXRhID0gZXRoX2hkcihza2IpOwomIzQzOwlldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7CiAKIAlzd2l0Y2ggKG50b2hzKHNrYi0mZ3Q7cHJvdG9jb2wpKSB7CiAJY2FzZSBFVEhfUF9JUDogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIGl0cyBmdXp6aW5nIHZpYWJpbGl0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgd29ydGggdGhlIGVmZm9ydCwgd2hhdCBraW5kIG9mIGNvbmZpZ3VyYXRpb24gaXMgbmVlZGVkLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIHdoaWNoIHN5bWJvbHMgYXJlIGxpa2VseSB0YXJnZXRzIGZvciBmb2N1c2VkIGZ1enppbmcuCgpGaXJzdCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIGRpZmYgaXRzZWxmLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBybGJfYXJwX3htaXRgLCBgYm9uZF9kb19hbGJfeG1pdGAsIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAsIGFuZCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBza2JfY293X2hlYWRgIGFuZCB0aGUgY2hhbmdlIGZyb20gYHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYilgIHRvIGBza2JfZXRoX2hkcihza2IpYCBhcmUgdGhlIGtleSBpbmRpY2F0b3JzIGhlcmUuIFRoZXkgc3VnZ2VzdCBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gU2hhcmVkIG1lbW9yeSBvciBjb3B5aW5nIHNrYnMKCk5vdywgSSBuZWVkIHRvIHBsYWNlIHRoaXMgd2l0aGluIGl0cyBjb250ZXh0LiBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGUgYm9uZGluZyBkcml2ZXIsIGFuZCBpbiBwYXJ0aWN1bGFyLCBBZGFwdGl2ZSBMb2FkIEJhbGFuY2luZyAoQUxCKSBtb2RlLiBUaGlzIGlzIGEgc29mdHdhcmUgbmV0d29yayBkcml2ZXIgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2AuIEltcG9ydGFudGx5LCBpdCYjMzk7cyBmdWxseSB2aXJ0dWFsaXplZCBhbmQgZW11bGF0ZWQuIFRoYXQgbWVhbnMgSSBjYW4gc3BpbiB1cCBib25kaW5nIGRldmljZXMgaW4gVk1zLCBjb250YWluZXJzLCBRRU1VLCBvciBldmVuIFN5emthbGxlciB3aXRob3V0IG5lZWRpbmcgYW55IHNwZWNpZmljIGhhcmR3YXJlLiBUaGlzIGlzIGEgKmh1Z2UqIHBsdXMgZm9yIHRlc3RpbmcgYW5kIGZ1enppbmcuIEkgY2FuIHJlcHJvZHVjZSB0aGUgZW52aXJvbm1lbnQgZWFzaWx5IGFuZCBxdWlja2x5LgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlIHdpdGggZ3JlYXRlciBmaWRlbGl0eS4gSSB3aWxsIGRvIHNvbWUgc2VhcmNoZXMgdXNpbmcgZ3JlcHBlciBvciByZWFkLWZpbGUgdG8gZGV0ZXJtaW5lIHdoaWNoIHN5bWJvbHMgYW5kIEtjb25maWcgb3B0aW9ucyBjb21lIGludG8gcGxheS4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZGV0ZXJtaW5lIHRoZSBlbnZpcm9ubWVudCYjMzk7cyBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JPTkRJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUtNS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQk9ORElORykgJiM0Mzs9IGJvbmRpbmcub1xuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZS03LVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTI2Nj12b2lkIGJvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfYWN0aXZlKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTMzMi1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTMzMzpcdFx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0JPTkRJTkdfRkFJTE9WRVIsIGJvbmQtXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTMzNC1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTE4ODg9aW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMDk0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyMDk1Olx0c2xhdmVfZGV2LVx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX0JPTkRJTkc7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTIwOTYtXHQvKiBpbml0aWFsaXplIHNsYXZlIHN0YXRzICovXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMzc1LVx0aWYgKCFuZXRpZl9pc19ib25kX21hc3RlcihzbGF2ZV9kZXYpKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyMzc2Olx0XHRzbGF2ZV9kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5JRkZfQk9ORElORztcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjM3Ny1cdGRldl9jbG9zZShzbGF2ZV9kZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MjQyNT1zdGF0aWMgaW50IF9fYm9uZF9yZWxlYXNlX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNTk0LVx0aWYgKCFuZXRpZl9pc19ib25kX21hc3RlcihzbGF2ZV9kZXYpKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyNTk1Olx0XHRzbGF2ZV9kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5JRkZfQk9ORElORztcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjU5Ni1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQwNjg9c3RhdGljIGludCBib25kX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MDc1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0MDc2Olx0aWYgKCEoZXZlbnRfZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IElGRl9CT05ESU5HKSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDA3Ny1cdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTk5Mj12b2lkIGJvbmRfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjAxNC1cdGJvbmRfZGV2LVx1MDAzZWZsYWdzIHw9IElGRl9NQVNURVI7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYwMTU6XHRib25kX2Rldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9CT05ESU5HIHwgSUZGX1VOSUNBU1RfRkxUIHwgSUZGX05PX1FVRVVFO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDE2LVx0Ym9uZF9kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH4oSUZGX1hNSVRfRFNUX1JFTEVBU0UgfCBJRkZfVFhfU0tCX1NIQVJJTkcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNDEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRXhhbWluaW5nIHRoZSBCT05ESU5HIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBjbGVhciBwaWN0dXJlIG9mIGhvdyBCT05ESU5HIGlzIGNvbmZpZ3VyZWQgaW4gdGhpcyBrZXJuZWwuIExldCYjMzk7cyBub3QgbWFrZSBhc3N1bXB0aW9uczsgbGV0JiMzOTtzIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBgS2NvbmZpZ2AgZmlsZSBpcyB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIEkgcmVtZW1iZXIgaXQgYmVpbmcgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgcHJlY2lzZSBjb25maWcgb3B0aW9ucywgdGhlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBmZWF0dXJlcywgYW5kIGFueXRoaW5nIGVsc2UgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBCT05ESU5HIGltcGxlbWVudGF0aW9uIGJlaGF2ZXMuIFRpbWUgdG8gZGlnIGluIGFuZCBjbGFyaWZ5IGFueSBsaW5nZXJpbmcgcXVlc3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCT05ESU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zOT1pZiBORVRfQ09SRVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MC1cbmRyaXZlcnMvbmV0L0tjb25maWc6NDE6Y29uZmlnIEJPTkRJTkdcbmRyaXZlcnMvbmV0L0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtCb25kaW5nIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCB3cml0dGVuIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nOgoKKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA0MS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgbmV0d29yayBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIG9wdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBhIHNwZWNpZmljIGRyaXZlciBJJiMzOTttIHJlc2VhcmNoaW5nIG9yIGEgZ2VuZXJhbCBhcmVhIHRoYXQgcmVxdWlyZXMgb3B0aW1pemF0aW9uLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljLCBtYXliZSBzb21lIG5lc3RlZCBgaWZgIHN0YXRlbWVudHMgYmFzZWQgb24gYXJjaGl0ZWN0dXJlIG9yIG90aGVyIHByZXJlcXVpc2l0ZXMuIFVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1hcCBvZiB0aGlzIHNlY3Rpb24gb2YgdGhlIEtjb25maWcgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDM1Olx0XHRoZWxwXG4gIDM2Olx0XHQgIFlvdSBjYW4gc2F5IE4gaGVyZSBpZiB5b3UgZG8gbm90IGludGVuZCB0byB1c2UgYW55IG9mIHRoZVxuICAzNzpcdFx0ICBuZXR3b3JraW5nIGNvcmUgZHJpdmVycyAoaS5lLiBWTEFOLCBicmlkZ2luZywgYm9uZGluZywgZXRjLilcbiAgMzg6XHRcbiAgMzk6XHRpZiBORVRfQ09SRVxuICA0MDpcdFxuICA0MTpcdGNvbmZpZyBCT05ESU5HXG4gIDQyOlx0XHR0cmlzdGF0ZSBcJiMzNDtCb25kaW5nIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4gIDQzOlx0XHRkZXBlbmRzIG9uIElORVRcbiAgNDQ6XHRcdGRlcGVuZHMgb24gVExTIHx8IFRMU19ERVZJQ0U9blxuICA0NTpcdFx0aGVscFxuICA0NjpcdFx0ICBTYXkgJiMzOTtZJiMzOTsgb3IgJiMzOTtNJiMzOTsgaWYgeW91IHdpc2ggdG8gYmUgYWJsZSB0byAmIzM5O2JvbmQmIzM5OyBtdWx0aXBsZSBFdGhlcm5ldFxuICA0NzpcdFx0ICBDaGFubmVscyB0b2dldGhlci4gVGhpcyBpcyBjYWxsZWQgJiMzOTtFdGhlcmNoYW5uZWwmIzM5OyBieSBDaXNjbyxcbiAgNDg6XHRcdCAgJiMzOTtUcnVua2luZyYjMzk7IGJ5IFN1biwgODAyLjNhZCBieSB0aGUgSUVFRSwgYW5kICYjMzk7Qm9uZGluZyYjMzk7IGluIExpbnV4LlxuICA0OTpcdFxuICA1MDpcdFx0ICBUaGUgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGJvbmRpbmcgbW9kZXMgdG8gYWxsb3cgZm9yIGJvdGggaGlnaFxuICA1MTpcdFx0ICBwZXJmb3JtYW5jZSBhbmQgaGlnaCBhdmFpbGFiaWxpdHkgb3BlcmF0aW9uLlxuICA1MjpcdFxuICA1MzpcdFx0ICBSZWZlciB0byBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnJzdFx1MDAzZSBmb3IgbW9yZVxuICA1NDpcdFx0ICBpbmZvcm1hdGlvbi5cbiAgNTU6XHRcbiAgNTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA1NzpcdFx0ICB3aWxsIGJlIGNhbGxlZCBib25kaW5nLlxuICA1ODpcdFxuICA1OTpcdGNvbmZpZyBEVU1NWVxuICA2MDpcdFx0dHJpc3RhdGUgXCYjMzQ7RHVtbXkgbmV0IGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4gIDYxOlx0XHRoZWxwXG4gIDYyOlx0XHQgIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBiaXQtYnVja2V0IGRldmljZSAoaS5lLiB0cmFmZmljIHlvdSBzZW5kIHRvXG4gIDYzOlx0XHQgIHRoaXMgZGV2aWNlIGlzIGNvbnNpZ25lZCBpbnRvIG9ibGl2aW9uKSB3aXRoIGEgY29uZmlndXJhYmxlIElQXG4gIDY0Olx0XHQgIGFkZHJlc3MuIEl0IGlzIG1vc3QgY29tbW9ubHkgdXNlZCBpbiBvcmRlciB0byBtYWtlIHlvdXIgY3VycmVudGx5XG4gIDY1Olx0XHQgIGluYWN0aXZlIFNMSVAgYWRkcmVzcyBzZWVtIGxpa2UgYSByZWFsIGFkZHJlc3MgZm9yIGxvY2FsIHByb2dyYW1zLlxuICA2NjpcdFx0ICBJZiB5b3UgdXNlIFNMSVAgb3IgUFBQLCB5b3UgbWlnaHQgd2FudCB0byBzYXkgWSBoZXJlLiBJdCB3b24mIzM5O3RcbiAgNjc6XHRcdCAgZW5sYXJnZSB5b3VyIGtlcm5lbC4gV2hhdCBhIGRlYWwuIFJlYWQgYWJvdXQgaXQgaW4gdGhlIE5ldHdvcmtcbiAgNjg6XHRcdCAgQWRtaW5pc3RyYXRvciYjMzk7cyBHdWlkZSwgYXZhaWxhYmxlIGZyb21cbiAgNjk6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjZ3VpZGVcdTAwM2UuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM2MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgQm9uZCBBTEIgTW9kdWxlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEFjdGl2ZS1CYWNrdXAgTG9hZCBCYWxhbmNpbmcgKEFMQikgbW9kZSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBoZWFkaW5nIGZvciBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0aGUgY29yZSBsb2dpYyBmb3IgQUxCIHRvIHJlc2lkZS4gSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gc3RydWN0dXJlIHdpdGhpbiB0aGF0IGZpbGU6IFdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLCBob3cgYXJlIHRoZXkgc3RydWN0dXJlZCwgd2hhdCB0aGV5IGRvLCB3aG8gY2FsbHMgdGhlbSwgYW5kIGltcG9ydGFudGx5LCB3aGljaCBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZvciB1c2UgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBpbml0aWFsIHNjYW4gd2lsbCBnaXZlIG1lIGEgZ29vZCwgaGlnaC1sZXZlbCBtYXAgb2YgdGhlIEFMQiBpbXBsZW1lbnRhdGlvbi4gVGhpcyB3aWxsIGhlbHAgbWUgd2l0aCBteSBkZWJ1Z2dpbmcsIHVuZGVyc3RhbmRpbmcsIG9yIGRldmVsb3BtZW50IHRhc2sgYXQgaGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9uZF9hbGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQk9ORElORykgJiM0Mzs9IGJvbmRpbmcub1xuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZS03LVxuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZTo4OmJvbmRpbmctb2JqcyA6PSBib25kX21haW4ubyBib25kXzNhZC5vIGJvbmRfYWxiLm8gYm9uZF9zeXNmcy5vIGJvbmRfc3lzZnNfc2xhdmUubyBib25kX2RlYnVnZnMubyBib25kX25ldGxpbmsubyBib25kX29wdGlvbnMub1xuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZS05LVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yNC0jaW5jbHVkZSBcdTAwM2NuZXQvYm9uZGluZy5oXHUwMDNlXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MjU6I2luY2x1ZGUgXHUwMDNjbmV0L2JvbmRfYWxiLmhcdTAwM2VcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yNi1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MjI3PXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9jaG9vc2VfY2hhbm5lbChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdTMyIGhhc2hfaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzMi1cdC8qIFdlIGRvbiYjMzk7dCBuZWVkIHRvIGRpc2FibGUgc29mdGlycSBoZXJlLCBiZWNhdXNlXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MjMzOlx0ICogdGxiX2Nob29zZV9jaGFubmVsKCkgaXMgb25seSBjYWxsZWQgYnkgYm9uZF9hbGJfeG1pdCgpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjM0LVx0ICogd2hpY2ggYWxyZWFkeSBoYXMgc29mdGlycSBkaXNhYmxlZC5cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTI4OD1zdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzMTAtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTMxMTppbnQgYm9uZF9hbGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgaW50IHJsYl9lbmFibGVkKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzMTIte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzMyLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjEzMzM6dm9pZCBib25kX2FsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTMzNC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE0MjM9c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUyNi1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNTI3Om5ldGRldl90eF90IGJvbmRfYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1Mjgte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTM1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1MzY6dm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTM3LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTYzOS0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNjQwOmludCBib25kX2FsYl9pbml0X3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE2NDEte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNjY5LSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE2NzA6dm9pZCBib25kX2FsYl9kZWluaXRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTY3MS17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE2ODMtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTY4NDp2b2lkIGJvbmRfYWxiX2hhbmRsZV9saW5rX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSwgY2hhciBsaW5rKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE2ODUte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzEyLS8qKlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE3MTM6ICogYm9uZF9hbGJfaGFuZGxlX2FjdGl2ZV9jaGFuZ2UgLSBhc3NpZ24gbmV3IGN1cnJfYWN0aXZlX3NsYXZlXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTcxNC0gKiBAYm9uZDogb3VyIGJvbmRpbmcgc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE3MjEtICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTcyMjp2b2lkIGJvbmRfYWxiX2hhbmRsZV9hY3RpdmVfY2hhbmdlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKm5ld19zbGF2ZSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzIzLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTc5MC0vKiBDYWxsZWQgd2l0aCBSVE5MICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTc5MTppbnQgYm9uZF9hbGJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgdm9pZCAqYWRkcilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzkyLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTgzNS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxODM2OnZvaWQgYm9uZF9hbGJfY2xlYXJfdmxhbihzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdW5zaWduZWQgc2hvcnQgdmxhbl9pZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xODM3LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTctI2luY2x1ZGUgXHUwMDNjbmV0L2JvbmRpbmcuaFx1MDAzZVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzo4OiNpbmNsdWRlIFx1MDAzY25ldC9ib25kX2FsYi5oXHUwMDNlXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTktXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy04Ny0jaW5jbHVkZSBcdTAwM2NuZXQvYm9uZF8zYWQuaFx1MDAzZVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo4ODojaW5jbHVkZSBcdTAwM2NuZXQvYm9uZF9hbGIuaFx1MDAzZVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy04OS0jaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQwNz1zdGF0aWMgaW50IGJvbmRfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MTctXHRpZiAoYm9uZF9pc19sYihib25kKSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDE4Olx0XHRib25kX2FsYl9jbGVhcl92bGFuKGJvbmQsIHZpZCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQxOS1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTEyNjY9dm9pZCBib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X2FjdGl2ZSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTEyOTctXHRcdFx0aWYgKGJvbmRfaXNfbGIoYm9uZCkpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjEyOTg6XHRcdFx0XHRib25kX2FsYl9oYW5kbGVfbGlua19jaGFuZ2UoYm9uZCwgbmV3X2FjdGl2ZSwgQk9ORF9MSU5LX1VQKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTI5OS1cdFx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTEzMDgtXHRpZiAoYm9uZF9pc19sYihib25kKSkge1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxMzA5Olx0XHRib25kX2FsYl9oYW5kbGVfYWN0aXZlX2NoYW5nZShib25kLCBuZXdfYWN0aXZlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTMxMC1cdFx0aWYgKG9sZF9hY3RpdmUpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xODg4PWludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjA5OS1cdGlmIChib25kX2lzX2xiKGJvbmQpKSB7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjIxMDA6XHRcdC8qIGJvbmRfYWxiX2luaXRfc2xhdmUoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYWxsIG90aGVyIHN0YWdlcyBzaW5jZVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMTAxLVx0XHQgKiBpdCBtaWdodCBmYWlsIGFuZCB3ZSBkbyBub3Qgd2FudCB0byBoYXZlIHRvIHVuZG8gZXZlcnl0aGluZ1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMTAyLVx0XHQgKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MjEwMzpcdFx0cmVzID0gYm9uZF9hbGJfaW5pdF9zbGF2ZShib25kLCBuZXdfc2xhdmUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMTA0LVx0XHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MjQyNT1zdGF0aWMgaW50IF9fYm9uZF9yZWxlYXNlX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNTE2LVx0XHQgKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MjUxNzpcdFx0Ym9uZF9hbGJfZGVpbml0X3NsYXZlKGJvbmQsIHNsYXZlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjUxOC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTI3NjQ9c3RhdGljIHZvaWQgYm9uZF9taWltb25fbGlua19jaGFuZ2Uoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNzczLVx0Y2FzZSBCT05EX01PREVfQUxCOlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyNzc0Olx0XHRib25kX2FsYl9oYW5kbGVfbGlua19jaGFuZ2UoYm9uZCwgc2xhdmUsIGxpbmspO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNzc1LVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQzMTg9dm9pZCBib25kX3dvcmtfaW5pdF9hbGwoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MzI1LVx0XHRcdCAgYm9uZF9yZXNlbmRfaWdtcF9qb2luX3JlcXVlc3RzX2RlbGF5ZWQpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0MzI2Olx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2Ym9uZC1cdTAwM2VhbGJfd29yaywgYm9uZF9hbGJfbW9uaXRvcik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzMjctXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZib25kLVx1MDAzZW1paV93b3JrLCBib25kX21paV9tb25pdG9yKTtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQzNDU9c3RhdGljIGludCBib25kX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDM3MS1cdGlmIChib25kX2lzX2xiKGJvbmQpKSB7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQzNzI6XHRcdC8qIGJvbmRfYWxiX2luaXRpYWxpemUgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSB0aW1lclxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MzczLVx0XHQgKiBpcyBzdGFydGVkLlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00Mzc0LVx0XHQgKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDM3NTpcdFx0aWYgKGJvbmRfYWxiX2luaXRpYWxpemUoYm9uZCwgKEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfQUxCKSkpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzNzYtXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00NDA4PXN0YXRpYyBpbnQgYm9uZF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NDIwLVx0aWYgKGJvbmRfaXNfbGIoYm9uZCkpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQ0MjE6XHRcdGJvbmRfYWxiX2RlaW5pdGlhbGl6ZShib25kKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDQyMi1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQ4MzA9c3RhdGljIGludCBib25kX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHZvaWQgKmFkZHIpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00ODM4LVx0aWYgKEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfQUxCKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0ODM5Olx0XHRyZXR1cm4gYm9uZF9hbGJfc2V0X21hY19hZGRyZXNzKGJvbmRfZGV2LCBhZGRyKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDg0MC1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU1NTA9c3RhdGljIG5ldGRldl90eF90IF9fYm9uZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTc2LVx0Y2FzZSBCT05EX01PREVfQUxCOlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NTc3Olx0XHRyZXR1cm4gYm9uZF9hbGJfeG1pdChza2IsIGRldik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1NzgtXHRjYXNlIEJPTkRfTU9ERV9UTEI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NTQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFBhdGNoIE1vZGlmaWNhdGlvbnMgaW4gYGJvbmRfYWxiLmNgKioKCkFscmlnaHQsIHRoZSBwYXRjaCBoYXMgaGl0IG15IGRlc2ssIGFuZCBteSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyBwaW5wb2ludGluZyB0aGUga2V5IGFyZWFzIG9mIGltcGFjdC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGNoYW5nZXMgbWFkZSB3aXRoaW4gYGJvbmRfYWxiLmNgIGFyb3VuZCBsaW5lcyA2NzgsIDEzNDAsIDEzNzUsIGFuZCAxNDI4LiBUaGVzZSBsaW5lIG51bWJlcnMgYXJlIG15IGluaXRpYWwgY29vcmRpbmF0ZXMuCgpJJiMzOTtsbCBzdGFydCBieSBwdWxsaW5nIHVwIHRoZSBmaWxlIGFuZCB6ZXJvaW5nIGluIG9uIHRob3NlIHNwZWNpZmljIGxpbmVzLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSAqbmF0dXJlKiBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gV2VyZSB0aGV5IGJ1ZyBmaXhlcywgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgb3IgbmV3IGZlYXR1cmUgaW1wbGVtZW50YXRpb25zPyBEb2VzIHRoZSBjb2RlIHRvdWNoIHVwb24gY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzLCBvciBmdW5kYW1lbnRhbCBhbGdvcml0aG1zPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByaXBwbGUgZWZmZWN0cyBkb3duIHN0cmVhbT8KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFzIHdlbGwg4oCTIHRoZSBsaW5lcyBpbW1lZGlhdGVseSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzcGVjaWZpZWQgbGluZSBudW1iZXJzIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0LiBJIHdpbGwgYmUgbG9va2luZyBmb3I6CiogICAqKkxvZ2ljYWwgZmxvdzoqKiBIb3cgYXJlIHRoZXNlIHNwZWNpZmljIGxpbmVzIGZpdHRpbmcgaW50byB0aGUgZ3JlYXRlciBmdW5jdGlvbiBvciBzZWN0aW9uLgoqICAgKipWYXJpYWJsZXM6KiogV2hhdCB2YXJpYWJsZXMgYXJlIHJlYWQsIHVzZWQsIG1vZGlmaWVkLCBhbmQgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZXNlIGxpbmVzPwoqICAgKipFeHRlcm5hbCBkZXBlbmRlbmNpZXM6KiogQXJlIHRoZXJlIGNhbGxzIHRvIGV4dGVybmFsIGZ1bmN0aW9ucy9tYWNyb3Mvc3RydWN0dXJlcz8KKiAgICoqQ29uZGl0aW9uYWwgZXhlY3V0aW9uOioqIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWxzIHRoYXQgYXJlIHRyaWdnZXJlZCB3aXRoaW4gdGhlc2UgbGluZXMsIGFuZCB3aGF0IGlzIHRoZSBlZmZlY3QgaWYgdGhleSBhcmUuCgpPbmNlIEkgaGF2ZSBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltbWVkaWF0ZSBjaGFuZ2VzLCBJJiMzOTtsbCBhc3Nlc3MgdGhlaXIgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuIEkmIzM5O2xsIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCB0aGUgY29kZSBleGVjdXRpb24sIGNvbnNpZGVyaW5nIHZhcmlvdXMgc2NlbmFyaW9zIGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhpbmdzIGxpa2UgcmVzb3VyY2UgYWxsb2NhdGlvbiwgZGF0YSBpbnRlZ3JpdHksIGFuZCBlcnJvciBoYW5kbGluZy4gSSYjMzk7bGwgYWxzbyBiZSBjb25zaWRlcmluZyB3aGV0aGVyIHRoZSBjaGFuZ2VzIGludHJvZHVjZSBhbnkgbmV3IGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eSBpc3N1ZXMuCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBmb3JtaW5nIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLCBhbmQgd2hhdCB0aGF0IGltcGxpZXMgZm9yIHRoZSBzeXN0ZW0mIzM5O3Mgcm9idXN0bmVzcywgcGVyZm9ybWFuY2UsIGFuZCBmdXR1cmUgbWFpbnRhaW5hYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjYwOlx0XHRcdHJldHVybiBOVUxMO1xuIDY2MTpcdFx0YXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gNjYyOlx0XG4gNjYzOlx0XHQvKiBEb24mIzM5O3QgbW9kaWZ5IG9yIGxvYWQgYmFsYW5jZSBBUlBzIHRoYXQgZG8gbm90IG9yaWdpbmF0ZVxuIDY2NDpcdFx0ICogZnJvbSB0aGUgYm9uZCBpdHNlbGYgb3IgYSBWTEFOIGRpcmVjdGx5IGFib3ZlIHRoZSBib25kLlxuIDY2NTpcdFx0ICovXG4gNjY2Olx0XHRpZiAoIWJvbmRfc2xhdmVfaGFzX21hY19yY3UoYm9uZCwgYXJwLVx1MDAzZW1hY19zcmMpKVxuIDY2NzpcdFx0XHRyZXR1cm4gTlVMTDtcbiA2Njg6XHRcbiA2Njk6XHRcdGRldiA9IGlwX2Rldl9maW5kKGRldl9uZXQoYm9uZC1cdTAwM2VkZXYpLCBhcnAtXHUwMDNlaXBfc3JjKTtcbiA2NzA6XHRcdGlmIChkZXYpIHtcbiA2NzE6XHRcdFx0aWYgKG5ldGlmX2lzX2FueV9icmlkZ2VfbWFzdGVyKGRldikpIHtcbiA2NzI6XHRcdFx0XHRkZXZfcHV0KGRldik7XG4gNjczOlx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNjc0Olx0XHRcdH1cbiA2NzU6XHRcdFx0ZGV2X3B1dChkZXYpO1xuIDY3NjpcdFx0fVxuIDY3NzpcdFxuIDY3ODpcdFx0aWYgKGFycC1cdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUExZKSkge1xuIDY3OTpcdFx0XHQvKiB0aGUgYXJwIG11c3QgYmUgc2VudCBvbiB0aGUgc2VsZWN0ZWQgcnggY2hhbm5lbCAqL1xuIDY4MDpcdFx0XHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XG4gNjgxOlx0XHRcdGlmICh0eF9zbGF2ZSBcdTAwMjZcdTAwMjYgdHhfc2xhdmUgIT0gcmN1X2FjY2Vzc19wb2ludGVyKGJvbmQtXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XG4gNjgyOlx0XHRcdFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcbiA2ODM6XHRcdFx0XHRcdHJldHVybiBOVUxMO1xuIDY4NDpcdFx0XHRcdGFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDY4NTpcdFx0XHRcdGJvbmRfaHdfYWRkcl9jb3B5KGFycC1cdTAwM2VtYWNfc3JjLCB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsXG4gNjg2Olx0XHRcdFx0XHRcdCAgdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuKTtcbiA2ODc6XHRcdFx0fVxuIDY4ODpcdFx0XHRuZXRkZXZfZGJnKGJvbmQtXHUwMDNlZGV2LCBcJiMzNDsoc2xhdmUgJXMpOiBTZXJ2ZXIgc2VudCBBUlAgUmVwbHkgcGFja2V0XFxuXCYjMzQ7LFxuIDY4OTpcdFx0XHRcdCAgIHR4X3NsYXZlID8gdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZW5hbWUgOiBcJiMzNDtOVUxMXCYjMzQ7KTtcbiA2OTA6XHRcdH0gZWxzZSBpZiAoYXJwLVx1MDAzZW9wX2NvZGUgPT0gaHRvbnMoQVJQT1BfUkVRVUVTVCkpIHtcbiA2OTE6XHRcdFx0LyogQ3JlYXRlIGFuIGVudHJ5IGluIHRoZSByeF9oYXNodGJsIGZvciB0aGlzIGNsaWVudCBhcyBhXG4gNjkyOlx0XHRcdCAqIHBsYWNlIGhvbGRlci5cbiA2OTM6XHRcdFx0ICogV2hlbiB0aGUgYXJwIHJlcGx5IGlzIHJlY2VpdmVkIHRoZSBlbnRyeSB3aWxsIGJlIHVwZGF0ZWRcbiA2OTQ6XHRcdFx0ICogd2l0aCB0aGUgY29ycmVjdCB1bmljYXN0IGFkZHJlc3Mgb2YgdGhlIGNsaWVudC5cbiA2OTU6XHRcdFx0ICovXG4gNjk2Olx0XHRcdHR4X3NsYXZlID0gcmxiX2Nob29zZV9jaGFubmVsKHNrYiwgYm9uZCwgYXJwKTtcbiA2OTc6XHRcbiA2OTg6XHRcdFx0LyogVGhlIEFSUCByZXBseSBwYWNrZXRzIG11c3QgYmUgZGVsYXllZCBzbyB0aGF0XG4gNjk5Olx0XHRcdCAqIHRoZXkgY2FuIGNhbmNlbCBvdXQgdGhlIGluZmx1ZW5jZSBvZiB0aGUgQVJQIHJlcXVlc3QuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NzkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgdGhpbmtpbmcgdGhlbSB0aHJvdWdoIGluIG15IHVzdWFsIHdheToKCioqRGVlcCBEaXZlIG9uIEJvbmRpbmcgVHJhbnNtaXNzaW9uIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHRyYW5zbWl0IHNpZGUgb2YgdGhpcyBib25kaW5nIHNldHVwLCBhbmQgdGhlc2UgZnVuY3Rpb25zIGFyZSBrZXk6IGBib25kX2RvX2FsYl94bWl0YCwgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCwgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCwgYW5kIGBib25kX2FsYl94bWl0YC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoZSBuYW1pbmcgY29udmVudGlvbnMgYXJlIHN1Z2dlc3RpbmcgYSBsaW5rIHRvIEFMQiAoQWRhcHRpdmUgTG9hZCBCYWxhbmNpbmcpIGFuZCBUTEIgKFRyYW5zbWl0IExvYWQgQmFsYW5jaW5nKSBtb2Rlcywgd2hpY2ggaXMgdHlwaWNhbC4KCkkmIzM5O20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIHZpc3VhbGl6ZSB0aGUgY2FsbCBwYXRocyBhbmQgZGVwZW5kZW5jaWVzLiBgYm9uZF9kb19hbGJfeG1pdGAgc2VlbXMgbGlrZSB0aGUgY2VudHJhbCBmdW5jdGlvbiwgdGhlIGRpc3BhdGNoZXIgcGVyaGFwcz8gSSYjMzk7bSBiZXR0aW5nIGl0IGhhbmRsZXMgdGhlIGNvcmUgbG9naWMgZm9yIGVpdGhlciBBTEIgb3IgbWF5YmUgc29tZSBnZW5lcmFsIGJvbmRpbmctcmVsYXRlZCB0cmFuc21pc3Npb24gc2V0dXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBkZWNpZGVzIHdoaWNoIHNsYXZlIHRvIHVzZSBhbmQgaG93IHRoZSBhY3R1YWwgcGFja2V0IHRyYW5zbWlzc2lvbiBpcyBpbml0aWF0ZWQuIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGlzIGl0IHVzaW5nIHRvIHRyYWNrIHN0YXRlLCBhbmQgd2hlcmUgYXJlIHRoZSBjcnVjaWFsIGRlY2lzaW9ucyBiZWluZyBtYWRlPyBEb2VzIHRoaXMgZnVuY3Rpb24gbWFuYWdlIHF1ZXVlIHNlbGVjdGlvbiBhbmQgYW55IGFzc29jaWF0ZWQgaGFyZHdhcmUgb2ZmbG9hZD8gSSB3YW50IHRvIHNlZSBpZiBhbnkgZmxvdyBjbGFzc2lmaWNhdGlvbiBvciBoYXNoIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQsIGFuZCB3aGF0IHRoZSBmYWxsYmFjayBtZWNoYW5pc20gbG9va3MgbGlrZS4KClRoZW4sIHRoZXJlJiMzOTtzIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAuIENsZWFybHksIHRoaXMgaXMgaW52b2x2ZWQgaW4gZ2V0dGluZyB0aGUgYXBwcm9wcmlhdGUgc2xhdmUgaW50ZXJmYWNlIGZvciBUTEIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyDigJMgaXMgaXQgcm91bmQtcm9iaW4sIGJhc2VkIG9uIGxpbmsgdXRpbGl6YXRpb24sIHBhY2tldCBjb3VudCwgb3Igc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZD8gV2hhdCBhYm91dCBlcnJvciBoYW5kbGluZyDigJMgZG9lcyBpdCByZXRyeSBvbiBhbm90aGVyIHNsYXZlIGlmIG9uZSBpcyBkb3duPwoKYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCBpcyBhIHR3aW4sIGZvY3VzZWQgb24gQUxCLiBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGxvYWQgYmFsYW5jaW5nIGFsZ29yaXRobSBoZXJlLiBJcyBpdCBsb29raW5nIGF0IGZsb3cgaGFzaGVzLCBzb3VyY2UvZGVzdGluYXRpb24gTUFDIGFkZHJlc3Nlcywgb3IgbW9yZT8gRG9lcyBpdCBpbmNvcnBvcmF0ZSBhbnkgYmFjay1vZmYgb3IgaHlzdGVyZXNpcyBtZWNoYW5pc21zIHRvIHByZXZlbnQgZmxhcHBpbmcgYmV0d2VlbiBzbGF2ZXM/CgpGaW5hbGx5LCBgYm9uZF9hbGJfeG1pdGAgaXMgcG90ZW50aWFsbHkgdGhlIHdvcmtob3JzZSwgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYWN0dWFsbHkgZG9pbmcgdGhlIHRyYW5zbWlzc2lvbiAqdXNpbmcqIHRoZSBzbGF2ZSBjaG9zZW4gYnkgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCBvciBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgLiBJIGV4cGVjdCB0aGlzIHRvIGJlIHRoZSBwb2ludCB3aGVyZSB0aGUgcGFja2V0IGlzIGFjdHVhbGx5IGhhbmRlZCBvZmYgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgZHJpdmVyLiBJIHdhbnQgdG8gc2VlIGlmIGFueSBtb2RpZmljYXRpb25zIGFyZSBtYWRlIHRvIHRoZSBwYWNrZXQgaXRzZWxmIGhlcmUg4oCTIFZMQU4gdGFnZ2luZywgY2hlY2tzdW0gdXBkYXRlcywgZXRjLiBXaGF0IGtpbmQgb2YgbG9ja2luZyBpcyB1c2VkIGhlcmUgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zPyBEb2VzIGl0IHVzZSBUWCByaW5ncywgYW5kIHdoYXQgbWVjaGFuaXNtcyBhcmUgZW1wbG95ZWQgZm9yIGhhbmRsaW5nIHRyYW5zbWlzc2lvbiBlcnJvcnMgb3IgbGluayBmYWlsdXJlcz8KCkkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgaGlnaGVyLWxldmVsIGZ1bmN0aW9ucyBsaWtlIGBib25kX2RvX2FsYl94bWl0YCBhbmQgdHJhY2UgZG93biBmcm9tIHRoZXJlLiBUaGF0JiMzOTtsbCBnaXZlIG1lIGEgZnJhbWV3b3JrLCBhbmQgdGhlbiBJIGNhbiBkZWx2ZSBpbnRvIHRoZSBzbGF2ZS1zcGVjaWZpYyBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGxvYWQgYmFsYW5jaW5nIGFuZCBzZWxlY3Rpb24gd29ya3MuIEhvcGVmdWxseSwgaXQmIzM5O3MgYWxsIHdlbGwtZG9jdW1lbnRlZC4gVGltZSB0byBkaWcgaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzQwOlx0XHRcdHJsYl9kZWluaXRpYWxpemUoYm9uZCk7XG4xMzQxOlx0fVxuMTM0MjpcdFxuMTM0MzpcdHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxuMTM0NDpcdFx0XHRcdFx0ICAgIHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUpXG4xMzQ1Olx0e1xuMTM0NjpcdFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcbjEzNDc6XHRcbjEzNDg6XHRcdGlmICghdHhfc2xhdmUpIHtcbjEzNDk6XHRcdFx0LyogdW5iYWxhbmNlZCBvciB1bmFzc2lnbmVkLCBzZW5kIHRocm91Z2ggcHJpbWFyeSAqL1xuMTM1MDpcdFx0XHR0eF9zbGF2ZSA9IHJjdV9kZXJlZmVyZW5jZShib25kLVx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKTtcbjEzNTE6XHRcdFx0aWYgKGJvbmQtXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKVxuMTM1MjpcdFx0XHRcdGJvbmRfaW5mby1cdTAwM2V1bmJhbGFuY2VkX2xvYWQgJiM0Mzs9IHNrYi1cdTAwM2VsZW47XG4xMzUzOlx0XHR9XG4xMzU0Olx0XG4xMzU1Olx0XHRpZiAodHhfc2xhdmUgXHUwMDI2XHUwMDI2IGJvbmRfc2xhdmVfY2FuX3R4KHR4X3NsYXZlKSkge1xuMTM1NjpcdFx0XHRpZiAodHhfc2xhdmUgIT0gcmN1X2FjY2Vzc19wb2ludGVyKGJvbmQtXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XG4xMzU3Olx0XHRcdFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcbjEzNTg6XHRcdFx0XHRcdHJldHVybiBib25kX3R4X2Ryb3AoYm9uZC1cdTAwM2VkZXYsIHNrYik7XG4xMzU5Olx0XHRcdFx0ZXRoZXJfYWRkcl9jb3B5KHNrYl9ldGhfaGRyKHNrYiktXHUwMDNlaF9zb3VyY2UsXG4xMzYwOlx0XHRcdFx0XHRcdHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4xMzYxOlx0XHRcdH1cbjEzNjI6XHRcbjEzNjM6XHRcdFx0cmV0dXJuIGJvbmRfZGV2X3F1ZXVlX3htaXQoYm9uZCwgc2tiLCB0eF9zbGF2ZS1cdTAwM2VkZXYpO1xuMTM2NDpcdFx0fVxuMTM2NTpcdFxuMTM2NjpcdFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNiBib25kLVx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xuMTM2NzpcdFx0XHRzcGluX2xvY2soXHUwMDI2Ym9uZC1cdTAwM2Vtb2RlX2xvY2spO1xuMTM2ODpcdFx0XHRfX3RsYl9jbGVhcl9zbGF2ZShib25kLCB0eF9zbGF2ZSwgMCk7XG4xMzY5Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmJvbmQtXHUwMDNlbW9kZV9sb2NrKTtcbjEzNzA6XHRcdH1cbjEzNzE6XHRcbjEzNzI6XHRcdC8qIG5vIHN1aXRhYmxlIGludGVyZmFjZSwgZnJhbWUgbm90IHNlbnQgKi9cbjEzNzM6XHRcdHJldHVybiBib25kX3R4X2Ryb3AoYm9uZC1cdTAwM2VkZXYsIHNrYik7XG4xMzc0Olx0fVxuMTM3NTpcdFxuMTM3NjpcdHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4xMzc3Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTM3ODpcdHtcbjEzNzk6XHRcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xuMTM4MDpcdFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XG4xMzgxOlx0XHR1MzIgaGFzaF9pbmRleDtcbjEzODI6XHRcbjEzODM6XHRcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcbjEzODQ6XHRcbjEzODU6XHRcdC8qIERvIG5vdCBUWCBiYWxhbmNlIGFueSBtdWx0aWNhc3Qgb3IgYnJvYWRjYXN0ICovXG4xMzg2Olx0XHRpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLVx1MDAzZWhfZGVzdCkpIHtcbjEzODc6XHRcdFx0c3dpdGNoIChza2ItXHUwMDNlcHJvdG9jb2wpIHtcbjEzODg6XHRcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbjEzODk6XHRcdFx0XHRpZiAoYWxiX2RldGVybWluZV9uZChza2IpKVxuMTM5MDpcdFx0XHRcdFx0YnJlYWs7XG4xMzkxOlx0XHRcdFx0ZmFsbHRocm91Z2g7XG4xMzkyOlx0XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuMTM5MzpcdFx0XHRcdGhhc2hfaW5kZXggPSBib25kX3htaXRfaGFzaChib25kLCBza2IpO1xuMTM5NDpcdFx0XHRcdGlmIChib25kLVx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xuMTM5NTpcdFx0XHRcdFx0dHhfc2xhdmUgPSB0bGJfY2hvb3NlX2NoYW5uZWwoYm9uZCxcbjEzOTY6XHRcdFx0XHRcdFx0XHRcdCAgICAgIGhhc2hfaW5kZXggXHUwMDI2IDB4RkYsXG4xMzk3Olx0XHRcdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuKTtcbjEzOTg6XHRcdFx0XHR9IGVsc2Uge1xuMTM5OTpcdFx0XHRcdFx0c3RydWN0IGJvbmRfdXBfc2xhdmUgKnNsYXZlcztcbjE0MDA6XHRcdFx0XHRcdHVuc2lnbmVkIGludCBjb3VudDtcbjE0MDE6XHRcbjE0MDI6XHRcdFx0XHRcdHNsYXZlcyA9IHJjdV9kZXJlZmVyZW5jZShib25kLVx1MDAzZXVzYWJsZV9zbGF2ZXMpO1xuMTQwMzpcdFx0XHRcdFx0Y291bnQgPSBzbGF2ZXMgPyBSRUFEX09OQ0Uoc2xhdmVzLVx1MDAzZWNvdW50KSA6IDA7XG4xNDA0Olx0XHRcdFx0XHRpZiAobGlrZWx5KGNvdW50KSlcbjE0MDU6XHRcdFx0XHRcdFx0dHhfc2xhdmUgPSBzbGF2ZXMtXHUwMDNlYXJyW2hhc2hfaW5kZXggJVxuMTQwNjpcdFx0XHRcdFx0XHRcdFx0ICAgICAgIGNvdW50XTtcbjE0MDc6XHRcdFx0XHR9XG4xNDA4Olx0XHRcdFx0YnJlYWs7XG4xNDA5Olx0XHRcdH1cbjE0MTA6XHRcdH1cbjE0MTE6XHRcdHJldHVybiB0eF9zbGF2ZTtcbjE0MTI6XHR9XG4xNDEzOlx0XG4xNDE0Olx0bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4xNDE1Olx0e1xuMTQxNjpcdFx0c3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihib25kX2Rldik7XG4xNDE3Olx0XHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlO1xuMTQxODpcdFxuMTQxOTpcdFx0dHhfc2xhdmUgPSBib25kX3htaXRfdGxiX3NsYXZlX2dldChib25kLCBza2IpO1xuMTQyMDpcdFx0cmV0dXJuIGJvbmRfZG9fYWxiX3htaXQoc2tiLCBib25kLCB0eF9zbGF2ZSk7XG4xNDIxOlx0fVxuMTQyMjpcdFxuMTQyMzpcdHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4xNDI0Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTQyNTpcdHtcbjE0MjY6XHRcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XG4xNDI3Olx0XHRzdGF0aWMgY29uc3QgX19iZTMyIGlwX2JjYXN0ID0gaHRvbmwoMHhmZmZmZmZmZik7XG4xNDI4Olx0XHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlID0gTlVMTDtcbjE0Mjk6XHRcdGNvbnN0IHU4ICpoYXNoX3N0YXJ0ID0gTlVMTDtcbjE0MzA6XHRcdGJvb2wgZG9fdHhfYmFsYW5jZSA9IHRydWU7XG4xNDMxOlx0XHRzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YTtcbjE0MzI6XHRcdHUzMiBoYXNoX2luZGV4ID0gMDtcbjE0MzM6XHRcdGludCBoYXNoX3NpemUgPSAwO1xuMTQzNDpcdFxuMTQzNTpcdFx0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xuMTQzNjpcdFxuMTQzNzpcdFx0c3dpdGNoIChudG9ocyhza2ItXHUwMDNlcHJvdG9jb2wpKSB7XG4xNDM4Olx0XHRjYXNlIEVUSF9QX0lQOiB7XG4xNDM5Olx0XHRcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA3NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBCb25kaW5nIERyaXZlciBUcmFuc21pdCBQYXRoIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2UgYm9uZGluZyBkcml2ZXIgY2hhbmdlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgZnV6emFibGU/JiMzNDsgQWJzb2x1dGVseSEgVGhpcyBsb29rcyBsaWtlIGEgcHJpbWUgdGFyZ2V0LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBBTEIvVExCIHRyYW5zbWl0IHBhdGhzLCB3aGljaCBpcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIGFuZCBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsbHkgYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50IHdpdGggYSBzdGFuZGFyZCBib25kaW5nIGRldmljZSBjb25maWd1cmF0aW9uIGFuZCBuZXR3b3JrIHRyYWZmaWMuIFRoaXMgb3BlbnMgdGhlIGRvb3IgdG8gdmVyaWZ5aW5nIGhlYWRyb29tLCBtb2RpZmljYXRpb25zIHRvIGNsb25lZCBTS0JzLCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiBnZW5lcmFsLiBFcnJvciBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGZhaWx1cmUgaW4gYHNrYl9jb3dfaGVhZGAsIGlzIGEga2V5IGFyZWEgb2YgZm9jdXMgZm9yIHRoZXNlIGNoYW5nZXMuCgpIZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJIHNlZToKCjEuICAqKmBybGJfYXJwX3htaXRgKio6IFRoZSBiaWdnZXN0IGNoYW5nZSBoZXJlIGlzIHRoZSBpbmNsdXNpb24gb2YgYHNrYl9jb3dfaGVhZChza2IsIDApYCAqYmVmb3JlKiBtb2RpZnlpbmcgYGFycC0mZ3Q7bWFjX3NyY2AgaW4gYW4gQVJQIHJlcGx5LiBUaGlzIGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcHJvdGVjdGluZyBhZ2FpbnN0IG1vZGlmaWNhdGlvbnMgdG8gc2hhcmVkIFNLQiBoZWFkZXJzLiBDcnVjaWFsbHksIHRoZXkgcmUtZmV0Y2ggYGFycGAgYWZ0ZXIgdGhlIGBza2JfY293X2hlYWRgIHRvIGhhbmRsZSBhIHBvdGVudGlhbCByZWxvY2F0aW9uIG9mIGBza2ItJmd0O2hlYWRgLiBHb29kLgoyLiAgKipgYm9uZF9kb19hbGJfeG1pdGAqKjogU2ltaWxhciBwYXR0ZXJuLiBgc2tiX2Nvd19oZWFkKHNrYiwgMClgIGlzIGNhbGxlZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MsIGBldGhlcl9hZGRyX2NvcHkoZXRoX2RhdGEtJmd0O2hfc291cmNlLCB0eF9zbGF2ZS0mZ3Q7ZGV2LSZndDtkZXZfYWRkcilgLiBUaGUgY29kZSB0aGVuIHVzZXMgYHNrYl9ldGhfaGRyKHNrYiktJmd0O2hfc291cmNlYC4gVGhlIGBib25kX3R4X2Ryb3BgIHBhdGggaWYgYHNrYl9jb3dfaGVhZGAgZmFpbHMgaXMgYSBwb3NpdGl2ZSBzdGVwLgozLiAgKipgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgICZhbXA7IDQuIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAqKjogSGVyZSwgd2UmIzM5O3ZlIGdvdCBzb21lIHJlZmFjdG9yaW5nLiBUaGUgY29kZSBoYXMgbW92ZWQgZnJvbSBgc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsgZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7YCB0byBgZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO2AgSXQgbG9va3MgbGlrZSBhIGNvZGUgc2ltcGxpZmljYXRpb24sIG5vdyBkaXJlY3RseSBhY2Nlc3NpbmcgdGhlIEV0aGVybmV0IGhlYWRlci4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gdGFyZ2V0LiBMb29rcyBsaWtlIGBib25kX2FsYl94bWl0YCBhbmQgYGJvbmRfdGxiX3htaXRgLCBhcmUga2V5IHN0YXJ0aW5nIHBvaW50cyBhcyB0aGV5IGFyZSBjYWxsZWQgZnJvbSBgX19ib25kX3N0YXJ0X3htaXRgLiBUaGVuLCB3ZSBzaG91bGQgbG9vayBhdCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgIGFuZCBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgIGFuZCBpZiB0aGV5IGFyZSBleHBvcnRlZCBvciBub24tc3RhdGljLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgaW5jbHVkZS9uZXQvYm9uZF9hbGIuaGAgdG8gbWFrZSBzdXJlLiBJJiMzOTttIHRoaW5raW5nLCB0aGlzIG1pZ2h0IGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3Igc29tZSB0YXJnZXRlZCBmdXp6aW5nIGNhbXBhaWducy4gVGhlIGNoYW5nZXMgaGVyZSBzZWVtIHRvIGJlIHRvIGltcHJvdmUgcmVsaWFiaWxpdHkgYW5kIGNvcnJlY3RuZXNzIHVuZGVyIGNvbmN1cnJlbnQgYWNjZXNzIHNjZW5hcmlvcyBhbmQgdG8gY2xlYW4gdXAgY29kZSwgYW5kIGl0JiMzOTtzIHNvbWV0aGluZyB0aGF0IGlzIGltcG9ydGFudCB0byBhdWRpdCBmb3IgYSByZWxpYWJsZSBuZXR3b3JrIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtib25kXy4qeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2JvbmRfYWxiLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvYm9uZF9hbGIuaD0xNTg9dm9pZCBib25kX2FsYl9oYW5kbGVfYWN0aXZlX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfc2xhdmUpO1xuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaDoxNTk6bmV0ZGV2X3R4X3QgYm9uZF9hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpO1xuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaDoxNjA6bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpO1xuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaDoxNjE6c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbmluY2x1ZGUvbmV0L2JvbmRfYWxiLmgtMTYyLVx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC9ib25kX2FsYi5oOjE2MzpzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaC0xNjQtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1ODUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQm9uZGluZyBUcmFuc21pc3Npb24gUGF0aHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG5ldHdvcmsgYm9uZGluZyBjb2RlIGFnYWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdHJhbnNtaXNzaW9uIHBhdGhzLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBib25kaW5nIGRyaXZlciBoYW5kbGVzIEFSUCByZXF1ZXN0cy4gUmlnaHQgbm93LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdHJhbnNtaXNzaW9uLiBJIHNlZSB0aGF0IGBib25kX2FsYl94bWl0YCwgYGJvbmRfdGxiX3htaXRgLCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLCBhbmQgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhcmUgYWxsIGRlY2xhcmVkIGluIGBpbmNsdWRlL25ldC9ib25kX2FsYi5oYC4gVGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlICYjMzQ7YWxiJiMzNDsgYW5kICYjMzQ7dGxiJiMzNDsgcHJlZml4ZXMsIGluZGljYXRpbmcgYWN0aXZlLWJhY2t1cCBhbmQgdHJhbnNtaXQgbG9hZCBiYWxhbmNpbmcgbW9kZXMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHJsYl9hcnBfeG1pdGAgZml0cyBpbnRvIHRoaXMgcGljdHVyZS4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIGNhbGxzIHRvIHRoYXQgZnVuY3Rpb24gdG8gc2VlIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGggdGhlIG90aGVyIGZ1bmN0aW9ucyBJIGp1c3QgbWVudGlvbmVkLiBUaGlzIHdpbGwgaGVscCBtZSB0cmFjZSB0aGUgQVJQIHRyYW5zbWlzc2lvbiBwYXRoIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIEtub3dpbmcgdGhpcywgSSBjYW4gYmVnaW4gdG8gZXhhbWluZSB0aGUgZGF0YSBmbG93IHRocm91Z2ggdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtybGJfYXJwX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz01NTM9c3RhdGljIHN0cnVjdCBzbGF2ZSAqcmxiX2Nob29zZV9jaGFubmVsKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTY1Mi0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzo2NTM6c3RhdGljIHN0cnVjdCBzbGF2ZSAqcmxiX2FycF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTY1NC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE0MjM9c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQ5Ni1cdFx0aWYgKGJvbmRfaW5mby1cdTAwM2VybGJfZW5hYmxlZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNDk3Olx0XHRcdHR4X3NsYXZlID0gcmxiX2FycF94bWl0KHNrYiwgYm9uZCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQ5OC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTY2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipBbmFseXppbmcgVHJhbnNtaXQgRW50cnkgUG9pbnRzIGluIEJvbmRpbmcqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBib25kaW5nIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSB0cmFuc21pdCBwYXRoLiBJIGtub3cgdGhhdCBgYm9uZF9hbGJfeG1pdGAgYW5kIGBib25kX3RsYl94bWl0YCBhcmUgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciB0cmFuc21pdCBvcGVyYXRpb25zLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gYGJvbmRfYWxiX3htaXRgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIHRoYXQgZnVuY3Rpb247IEkgbmVlZCB0byBzZWUgdGhlIGxvZ2ljLCB0aGUgZGF0YSBmbG93LCBhbmQgaG93IGl0IGhhbmRsZXMgcGFja2V0IHRyYW5zbWlzc2lvbiB3aXRoaW4gdGhlIEFjdGl2ZS1CYWNrdXAgYW5kIFRyYW5zbWl0IExvYWQgQmFsYW5jaW5nIGJvbmRpbmcgbW9kZXMuIFdoYXQmIzM5O3MgaXQgZG9pbmcgd2l0aCB0aGUgcGFja2V0cz8gSG93IGRvZXMgaXQgY2hvb3NlIHRoZSBpbnRlcmZhY2U/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgc3dpdGNoaW5nIGhhcHBlbmluZyBpbiBoZXJlPyBMZXQmIzM5O3MgZ2V0IGRvd24gdG8gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTIwOlx0XHRcdFx0XHR0eF9zbGF2ZSA9IHNsYXZlcy1cdTAwM2VhcnJbYm9uZF94bWl0X2hhc2goYm9uZCwgc2tiKSAlXG4xNTIxOlx0XHRcdFx0XHRcdFx0ICAgICAgIGNvdW50XTtcbjE1MjI6XHRcdFx0fVxuMTUyMzpcdFx0fVxuMTUyNDpcdFx0cmV0dXJuIHR4X3NsYXZlO1xuMTUyNTpcdH1cbjE1MjY6XHRcbjE1Mjc6XHRuZXRkZXZfdHhfdCBib25kX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbjE1Mjg6XHR7XG4xNTI5Olx0XHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTtcbjE1MzA6XHRcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xuMTUzMTpcdFxuMTUzMjpcdFx0dHhfc2xhdmUgPSBib25kX3htaXRfYWxiX3NsYXZlX2dldChib25kLCBza2IpO1xuMTUzMzpcdFx0cmV0dXJuIGJvbmRfZG9fYWxiX3htaXQoc2tiLCBib25kLCB0eF9zbGF2ZSk7XG4xNTM0Olx0fVxuMTUzNTpcdFxuMTUzNjpcdHZvaWQgYm9uZF9hbGJfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4xNTM3Olx0e1xuMTUzODpcdFx0c3RydWN0IGJvbmRpbmcgKmJvbmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJvbmRpbmcsXG4xNTM5Olx0XHRcdFx0XHRcdCAgICBhbGJfd29yay53b3JrKTtcbjE1NDA6XHRcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XG4xNTQxOlx0XHRzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCAqY3VycjtcbjE1NDI6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4xNTQzOlx0XG4xNTQ0Olx0XHRpZiAoIWJvbmRfaGFzX3NsYXZlcyhib25kKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgyNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLY29uZmlnIERlcGVuZGVuY3kgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciB0aGUgYEJPTkRJTkdgIGRyaXZlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBuYXZpZ2F0ZSB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUsIHdoaWNoIGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBBbmQgaGVyZSB3ZSBhcmU6CgpgYGBrY29uZmlnCmlmIE5FVF9DT1JFCgpjb25maWcgQk9ORElORwoJdHJpc3RhdGUgJiMzNDtCb25kaW5nIGRyaXZlciBzdXBwb3J0JiMzNDsKCWRlcGVuZHMgb24gSU5FVAoJZGVwZW5kcyBvbiBUTFMgfHwgVExTX0RFVklDRT1uCmBgYAoKUmlnaHQsIHNvIGBCT05ESU5HYCBpcyB0cmlzdGF0ZSwgbWVhbmluZyBpdCBjYW4gYmUgYnVpbHQgYXMgYSBtb2R1bGUsIGJ1aWx0LWluLCBvciBkaXNhYmxlZC4gVGhlIGtleSBpcyB0aGUgYGRlcGVuZHMgb25gIGNsYXVzZXMuIFdlJiMzOTt2ZSBnb3QgZGVwZW5kZW5jaWVzIG9uIGBJTkVUYCAod2hpY2ggaXMgc3RhbmRhcmQgZm9yIGFueXRoaW5nIG5ldHdvcmtpbmcpLCBhbmQgYFRMU2Agb3IsIGlmIGBUTFNgIGlzbiYjMzk7dCBlbmFibGVkLCB0aGVuIGBUTFNfREVWSUNFYCBtdXN0IGJlIHNwZWNpZmljYWxseSBkaXNhYmxlZC4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgYE5FVF9DT1JFYC4gV2hlcmUgaXMgKnRoYXQqIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGRlcGVuZGVuY3kgYmFjayBhbmQgZmlndXJlIG91dCBpdHMgaW1wbGljYXRpb25zLiBJIGtub3cgaXQmIzM5O3MgKmxpa2VseSogZGVmaW5lZCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBvciBwb3NzaWJseSBldmVuIHRoZSBicm9hZGVyIGBORVRERVZJQ0VTYCBmcmFtZXdvcmssIHNvIGxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQmIzM5O3MgZmluZCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9DT1JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0yOT1jb25maWcgTUlJXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMS1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzI6Y29uZmlnIE5FVF9DT1JFXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzLVx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjkxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIEJvbmRpbmcgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgbmV0d29yayBib25kaW5nLCBuYW1lbHkgYENPTkZJR19CT05ESU5HYCBhbmQgYENPTkZJR19JTkVUYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsaWtlbHkgc3VzcGVjdHMuIEJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBsZXQmIzM5O3MganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBzdWJ0bHkgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBsdXJraW5nIGluIGVpdGhlciBgZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZWAgb3IgYGJvbmRfYWxiLmNgIGl0c2VsZi4gSXQmIzM5O3MgZWFzeSB0byBvdmVybG9vayBhIGxlc3Mgb2J2aW91cyBkZXBlbmRlbmN5LCBhbmQgYSBxdWljayBzY2FuIGNhbiBzYXZlIGEgbG90IG9mIGhlYWQtc2NyYXRjaGluZyBsYXRlci4gSSB3YW50IHRvIGJlICp0aG9yb3VnaCouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUtNS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQk9ORElORykgJiM0Mzs9IGJvbmRpbmcub1xuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZS03LVxuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZT04PWJvbmRpbmctb2JqcyA6PSBib25kX21haW4ubyBib25kXzNhZC5vIGJvbmRfYWxiLm8gYm9uZF9zeXNmcy5vIGJvbmRfc3lzZnNfc2xhdmUubyBib25kX2RlYnVnZnMubyBib25kX25ldGxpbmsubyBib25kX29wdGlvbnMub1xuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZS05LVxuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZToxMDpwcm9jLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBib25kX3Byb2Nmcy5vXG5kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlLTExLWJvbmRpbmctb2JqcyAmIzQzOz0gJChwcm9jLXkpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy05LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzoxMDojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIFx1MDAyNlx1MDAyNiAhZGVmaW5lZChDT05GSUdfTkVUX05TKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy0xMS1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jPTg3PXZvaWQgYm9uZF9kZXN0cm95X2RlYnVnZnModm9pZClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTkzLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzo5NDojZWxzZSAvKiAhQ09ORklHX0RFQlVHX0ZTICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTk1LVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM9MTEyPXZvaWQgYm9uZF9kZXN0cm95X2RlYnVnZnModm9pZClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTExNS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM6MTE2OiNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi9cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTg4LSNpbmNsdWRlIFx1MDAzY25ldC9ib25kX2FsYi5oXHUwMDNlXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjg5OiNpZiBJU19FTkFCTEVEKENPTkZJR19UTFNfREVWSUNFKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy05MC0jaW5jbHVkZSBcdTAwM2NuZXQvdGxzLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTIwMD1NT0RVTEVfUEFSTV9ERVNDKGxwX2ludGVydmFsLCBcJiMzNDtUaGUgbnVtYmVyIG9mIHNlY29uZHMgYmV0d2VlbiBpbnN0YW5jZXMgd2hlcmUgXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMDUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjIwNjojaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjA3LURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKG5ldHBvbGxfYmxvY2tfdHgpO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDA3PXN0YXRpYyBpbnQgYm9uZF92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQyNC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDI1OiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQyNi0vKipcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTczOD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1kZXZfb3BzIGJvbmRfeGZybWRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy03NDUtfTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NzQ2OiNlbmRpZiAvKiBDT05GSUdfWEZSTV9PRkZMT0FEICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTc0Ny1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTEyNjY9dm9pZCBib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X2FjdGl2ZSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTEyNzYtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjEyNzc6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTI3OC1cdGJvbmRfaXBzZWNfZGVsX3NhX2FsbChib25kKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTI3OTojZW5kaWYgLyogQ09ORklHX1hGUk1fT0ZGTE9BRCAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMjgwLVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTM0MS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTM0MjojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzQzLVx0Ym9uZF9pcHNlY19hZGRfc2FfYWxsKGJvbmQpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxMzQ0OiNlbmRpZiAvKiBDT05GSUdfWEZSTV9PRkZMT0FEICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTEzNDUtXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xMzcwPXZvaWQgYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTM5MC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTM5MTojaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTM5Mi1zdGF0aWMgaW5saW5lIGludCBzbGF2ZV9lbmFibGVfbmV0cG9sbChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTc0ND1zdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBzbGF2ZV9rdHlwZSA9IHtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTc0NS1cdC5yZWxlYXNlID0gc2xhdmVfa29ial9yZWxlYXNlLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxNzQ2OiNpZmRlZiBDT05GSUdfU1lTRlNcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTc0Ny1cdC5zeXNmc19vcHMgPSBcdTAwMjZzbGF2ZV9zeXNmc19vcHMsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xODg4PWludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjIyMC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MjIyMTojaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjIyMi1cdGlmIChib25kLVx1MDAzZWRldi1cdTAwM2VucGluZm8pIHtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTMxNTI9c3RhdGljIGludCBib25kX2FycF9yY3YoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zMjMxLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozMjMyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zMjMzLXN0YXRpYyB2b2lkIGJvbmRfbnNfc2VuZChzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MzQyMT1pbnQgYm9uZF9yY3ZfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zNDIzLXtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQyNDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQyNS1cdGJvb2wgaXNfaXB2NiA9IHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBfX2NwdV90b19iZTE2KEVUSF9QX0lQVjYpO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQzNC1cdFx0aWYgKChzbGF2ZV9kb19hcnBfdmFsaWRhdGVfb25seShib25kKSBcdTAwMjZcdTAwMjYgaXNfYXJwKSB8fFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozNDM1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zNDM2LVx0XHQgICAgKHNsYXZlX2RvX2FycF92YWxpZGF0ZV9vbmx5KGJvbmQpIFx1MDAyNlx1MDAyNiBpc19pcHY2KSB8fFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ0Mi1cdFx0cmV0dXJuIGJvbmRfYXJwX3Jjdihza2IsIGJvbmQsIHNsYXZlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQ0MzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ0NC1cdH0gZWxzZSBpZiAoaXNfaXB2NiBcdTAwMjZcdTAwMjYgbGlrZWx5KGlwdjZfbW9kX2VuYWJsZWQoKSkpIHtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTM0NTI9c3RhdGljIHZvaWQgYm9uZF9zZW5kX3ZhbGlkYXRlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ1NC1cdGJvbmRfYXJwX3NlbmRfYWxsKGJvbmQsIHNsYXZlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQ1NTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ1Ni1cdGlmIChsaWtlbHkoaXB2Nl9tb2RfZW5hYmxlZCgpKSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTM5MTc9c3RhdGljIGludCBib25kX21hc3Rlcl9uZXRkZXZfZXZlbnQodW5zaWduZWQgbG9uZyBldmVudCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTM5MjgtXHRcdGJvbmRfcmVtb3ZlX3Byb2NfZW50cnkoZXZlbnRfYm9uZCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjM5Mjk6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzkzMC1cdFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChib25kX2RldiksIGJvbmRfZGV2LCB0cnVlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzkzMTojZW5kaWYgLyogQ09ORklHX1hGUk1fT0ZGTE9BRCAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zOTMyLVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQ0NDY9c3RhdGljIHZvaWQgYm9uZF9mb2xkX3N0YXRzKHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqX3Jlcyxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQ0NzEtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQ0NzI6I2lmZGVmIENPTkZJR19MT0NLREVQXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQ0NzMtc3RhdGljIGludCBib25kX2dldF9sb3dlc3RfbGV2ZWxfcmN1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00NTEzPXN0YXRpYyB2b2lkIGJvbmRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQ1MjMtXHRyY3VfcmVhZF9sb2NrKCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQ1MjQ6I2lmZGVmIENPTkZJR19MT0NLREVQXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQ1MjUtXHRuZXN0X2xldmVsID0gYm9uZF9nZXRfbG93ZXN0X2xldmVsX3JjdShib25kX2Rldik7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NDU1PXN0YXRpYyB2b2lkIGJvbmRfc2tfdG9fZmxvdyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93X2tleXMgKmZsb3cpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDU3LVx0c3dpdGNoIChzay1cdTAwM2Vza19mYW1pbHkpIHtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTQ1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTQ1OS1cdGNhc2UgQUZfSU5FVDY6XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NTIwPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9za19nZXRfbG93ZXJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTMzLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NTM0OiNpZiBJU19FTkFCTEVEKENPTkZJR19UTFNfREVWSUNFKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTM1LXN0YXRpYyBuZXRkZXZfdHhfdCBib25kX3Rsc19kZXZpY2VfeG1pdChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU1NTA9c3RhdGljIG5ldGRldl90eF90IF9fYm9uZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTU3LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NTU4OiNpZiBJU19FTkFCTEVEKENPTkZJR19UTFNfREVWSUNFKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTU5LVx0aWYgKHRsc19pc19za2JfdHhfZGV2aWNlX29mZmxvYWRlZChza2IpKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTk0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJvbmRfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU5NTktXHQubmRvX3ZsYW5fcnhfa2lsbF92aWRcdD0gYm9uZF92bGFuX3J4X2tpbGxfdmlkLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1OTYwOiNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01OTYxLVx0Lm5kb19uZXRwb2xsX3NldHVwXHQ9IGJvbmRfbmV0cG9sbF9zZXR1cCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU5OTI9dm9pZCBib25kX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldilcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYwMTctXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYwMTg6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjAxOS1cdC8qIHNldCB1cCB4ZnJtIGRldmljZSBvcHMgKG9ubHkgc3VwcG9ydGVkIGluIGFjdGl2ZS1iYWNrdXAgcmlnaHQgbm93KSAqL1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjAyMi1cdG11dGV4X2luaXQoXHUwMDI2Ym9uZC1cdTAwM2VpcHNlY19sb2NrKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjAyMzojZW5kaWYgLyogQ09ORklHX1hGUk1fT0ZGTE9BRCAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDI0LVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjA0Ny1cdGJvbmRfZGV2LVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfR1NPX1BBUlRJQUw7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYwNDg6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjA0OS1cdGJvbmRfZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IEJPTkRfWEZSTV9GRUFUVVJFUztcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYwNTItXHRcdGJvbmRfZGV2LVx1MDAzZWZlYXR1cmVzIHw9IEJPTkRfWEZSTV9GRUFUVVJFUztcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjA1MzojZW5kaWYgLyogQ09ORklHX1hGUk1fT0ZGTE9BRCAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDU0LX1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTYwNTk9c3RhdGljIHZvaWQgYm9uZF91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjA3MS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjA3MjojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDczLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZib25kLVx1MDAzZWlwc2VjX2xvY2spO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MDc0OiNlbmRpZiAvKiBDT05GSUdfWEZSTV9PRkZMT0FEICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYwNzUtXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz02MDg1PXN0YXRpYyBpbnQgX19pbml0IGJvbmRfY2hlY2tfcGFyYW1zKHN0cnVjdCBib25kX3BhcmFtcyAqcGFyYW1zKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjQ2OC1cdG1lbWNweShwYXJhbXMtXHUwMDNlYXJwX3RhcmdldHMsIGFycF90YXJnZXQsIHNpemVvZihhcnBfdGFyZ2V0KSk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjY0Njk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY0NzAtXHRtZW1zZXQocGFyYW1zLVx1MDAzZW5zX3RhcmdldHMsIDAsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpICogQk9ORF9NQVhfTlNfVEFSR0VUUyk7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz02NjU0PXN0YXRpYyB2b2lkIF9fZXhpdCBib25kaW5nX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY2NjItXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjY2NjM6I2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY2NjQtXHQvKiBNYWtlIHN1cmUgd2UgZG9uJiMzOTt0IGhhdmUgYW4gaW1iYWxhbmNlIG9uIG91ciBuZXRwb2xsIGJsb2NraW5nICovXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYz0yMTY9c3RhdGljIGludCBib25kX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMzM5LVx0fVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzozNDA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTM0MS1cdGlmIChkYXRhW0lGTEFfQk9ORF9OU19JUDZfVEFSR0VUXSkge1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM9NzAwPXN0YXRpYyBpbnQgYm9uZF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTc3MC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NzcxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy03NzItXHR0YXJnZXRzID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJRkxBX0JPTkRfTlNfSVA2X1RBUkdFVCk7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz04OTc9c3RhdGljIGJvb2wgYm9uZF9zZXRfeGZybV9mZWF0dXJlcyhzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMtODk4LXtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6ODk5Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19YRlJNX09GRkxPQUQpKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy05MDAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jPTEyNjA9c3RhdGljIGludCBib25kX29wdGlvbl9hcnBfaXBfdGFyZ2V0c19zZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xMjg1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYzoxMjg2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xMjg3LXN0YXRpYyBib29sIHNsYXZlX2Nhbl9zZXRfbnNfbWFkZHIoY29uc3Qgc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jPTU5PXN0YXRpYyB2b2lkIGJvbmRfaW5mb19zaG93X21hc3RlcihzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMtMTM4LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jOjEzOTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYy0xNDAtXHRcdHByaW50ZWQgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk4MgoJCQkJCQkJb3V0cHV0OiAxODQKCQkJCQkJCXRob3VnaHRzOiAyMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhc29uaW5nIEJlaGluZCB0aGUgQm9uZGVkIFBhY2tldCBUcmFuc21pc3Npb24gTG9naWMgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gd2UmIzM5O3ZlIGNvdmVyZWQgb3VyIGJhc2VzLiBGaXJzdCwgbGV0IG1lIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGBGb2N1c1N5bWJvbHNgIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgdGFyZ2V0aW5nIHRoZSByaWdodCBhcmVhczogYGJvbmRfYWxiX3htaXRgLCBgYm9uZF90bGJfeG1pdGAsIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAsIGFuZCBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgLiBUaGF0IGxvb2tzIHJpZ2h0LCB0aG9zZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRvIGV4YW1pbmUuIE5leHQsIGxldCBtZSB2ZXJpZnkgdGhhdCB0aGUgbmVjZXNzYXJ5IGBFbmFibGVDb25maWdzYCBhcmUgaW4gcGxhY2U6IHNwZWNpZmljYWxseSBgQk9ORElOR2AgYW5kIGBJTkVUYC4gR3JlYXQsIGFsbCBzeXN0ZW1zIG5vbWluYWwgc28gZmFyLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZnV6emFiaWxpdHkuIFllcywgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGRlZmluaXRlbHkgYmUgdHJ1ZSBoZXJlLiBUaGlzIGlzIGEgY3JpdGljYWwgbW9kaWZpY2F0aW9uISBXZSYjMzk7cmUgYWx0ZXJpbmcgdGhlIGZ1bmRhbWVudGFsIHBhY2tldCB0cmFuc21pc3Npb24gcHJvY2VzcyBmb3IgYm9uZGluZyBpbiBBY3RpdmUtTG9hZCBCYWxhbmNpbmcgKEFMQikgYW5kIFRyYW5zbWl0IExvYWQgQmFsYW5jaW5nIChUTEIpIG1vZGVzLiBUaGlzIGltcGFjdHMgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGluZ3MgbGlrZSByZXdyaXRpbmcgc291cmNlIE1BQyBhZGRyZXNzZXMgaW4gQVJQIHBhY2tldHMgYW5kIGV0aGVybmV0IGhlYWRlcnMuIFRoZSBhZGRpdGlvbiBvZiBgc2tiX2Nvd19oZWFkYCBpcyBwYXJ0aWN1bGFybHkgc2lnbmlmaWNhbnQgdG8gZW5zdXJlIHdyaXRhYmxlIGhlYWRyb29tLCBhbmQgc3dpdGNoaW5nIHRoZSBoZWFkZXIgYWNjZXNzb3IgZnJvbSBgc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsgZXRoX2hkcihza2IpYCB0byBgc2tiX2V0aF9oZHIoc2tiKWAgaXMgbm90IGp1c3QgYSBjb3NtZXRpYyBjaGFuZ2UuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQmIzM5O3MgZnVsbHkgdGVzdGFibGUgYW5kIHJlYWNoYWJsZSwgZXNwZWNpYWxseSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGF0IGxldmVsIG9mIGFjY2Vzc2liaWxpdHkgaXMgYSBrZXkgZmFjdG9yLgoKQWxyaWdodCwgdGhhdCYjMzk7cyB0aGUgcmF0aW9uYWxlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgYXJ0aWN1bGF0ZWQgY2xlYXJseSBhbmQgdGhlbiBjYWxsIGBzZXQtcmVzdWx0c2AuIERvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCT05ESU5HJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX2FsYl94bWl0JiMzNDssCiAgICAmIzM0O2JvbmRfdGxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF94bWl0X2FsYl9zbGF2ZV9nZXQmIzM0OywKICAgICYjMzQ7Ym9uZF94bWl0X3RsYl9zbGF2ZV9nZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHRyYW5zbWlzc2lvbiBwYXRocyBpbiB0aGUgYm9uZGluZyBkcml2ZXImIzM5O3MgQUxCIGFuZCBUTEIgbW9kZXMgKGJvbmRfYWxiLmMpLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgc2tiIGhlYWRyb29tIGlzIHByb3Blcmx5IGNvd2VkL3Vuc2hhcmVkIGJlZm9yZSBtb2RpZnlpbmcgc291cmNlIE1BQyBhZGRyZXNzZXMgKGluIEFSUCByZXBsaWVzIGFuZCBldGhlcm5ldCBoZWFkZXJzKSBhbmQgcmVwbGFjZXMgc2tiX3Jlc2V0X21hY19oZWFkZXIvZXRoX2hkciBjYWxscyB3aXRoIHNrYl9ldGhfaGRyLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGNvbmZpZ3VyaW5nIGJvbmRpbmcgbmV0d29yayBpbnRlcmZhY2VzIGluIEFMQiBvciBUTEIgbW9kZSBhbmQgdHJhbnNtaXR0aW5nIHRyYWZmaWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfYWxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF90bGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfYWxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfdGxiX3NsYXZlX2dldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgdHJhbnNtaXNzaW9uIHBhdGhzIGluIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBBTEIgYW5kIFRMQiBtb2RlcyAoYm9uZF9hbGIuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBza2IgaGVhZHJvb20gaXMgcHJvcGVybHkgY293ZWQvdW5zaGFyZWQgYmVmb3JlIG1vZGlmeWluZyBzb3VyY2UgTUFDIGFkZHJlc3NlcyAoaW4gQVJQIHJlcGxpZXMgYW5kIGV0aGVybmV0IGhlYWRlcnMpIGFuZCByZXBsYWNlcyBza2JfcmVzZXRfbWFjX2hlYWRlci9ldGhfaGRyIGNhbGxzIHdpdGggc2tiX2V0aF9oZHIuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY29uZmlndXJpbmcgYm9uZGluZyBuZXR3b3JrIGludGVyZmFjZXMgaW4gQUxCIG9yIFRMQiBtb2RlIGFuZCB0cmFuc21pdHRpbmcgdHJhZmZpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBBTEIvVExCIHRyYW5zbWl0IHBhdGhzIChib25kX2FsYi5jKSB0byBlbnN1cmUgdGhhdCBgc2tiX2Nvd19oZWFkKClgIGlzIGNhbGxlZCBiZWZvcmUgbW9kaWZ5aW5nIHBhY2tldCBoZWFkZXJzIChzdWNoIGFzIGBldGhfaGRyLVx1MDAzZWhfc291cmNlYCBvciB0aGUgQVJQIGhlYWRlciYjMzk7cyBzb3VyY2UgTUFDKSwgYXZvaWRpbmcgbW9kaWZpY2F0aW9uIG9mIHNoYXJlZC9jbG9uZWQgc2tiIGhlYWRlciBtZW1vcnkuIEl0IGFsc28gcmVwbGFjZXMgY2FsbHMgcmVzZXR0aW5nIHRoZSBNQUMgaGVhZGVyIHdpdGggYHNrYl9ldGhfaGRyKClgLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGNvbmNlcm4gc2tiIGhlYWQgY2xvbmFiaWxpdHksIHBhY2tldCBoZWFkZXIgbXV0YXRpb24sIGFuZCBuZXR3b3JrIHBhY2tldCB0cmFuc21pc3Npb246XG4xLiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzIGFyZSBwb3NzaWJsZSB0aHJvdWdoIHRoaXMgcGF0aC5cbjMuIE5vIGJyYW5jaGluZyBvciBsb2dpYyByZWxpZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBzaGFyZWQgbWVtb3J5IG1vZGlmaWNhdGlvbiBvciBza2IgbGlmZWN5Y2xlIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dlcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcwOWFkZjZjZmMwMzY0YjExODQ5YmNiYzYyNjdjMzQwZTY3ZmU4MTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDA5OjA3OjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCmluZGV4IDY1NGYwNTFkMDAyMzkuLjVmNzUwZjA4YTE0NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKQEAgLTY3OCw5ICYjNDM7Njc4LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnJsYl9hcnBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKIAlpZiAoYXJwLSZndDtvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUExZKSkgewogCQkvKiB0aGUgYXJwIG11c3QgYmUgc2VudCBvbiB0aGUgc2VsZWN0ZWQgcnggY2hhbm5lbCAqLwogCQl0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7Ci0JCWlmICh0eF9zbGF2ZSkKJiM0MzsJCWlmICh0eF9zbGF2ZSAmYW1wOyZhbXA7IHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLSZndDtjdXJyX2FjdGl2ZV9zbGF2ZSkpIHsKJiM0MzsJCQlpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKQomIzQzOwkJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCQlhcnAgPSAoc3RydWN0IGFycF9wa3QgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKIAkJCWJvbmRfaHdfYWRkcl9jb3B5KGFycC0mZ3Q7bWFjX3NyYywgdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIsCiAJCQkJCSAgdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7YWRkcl9sZW4pOwomIzQzOwkJfQogCQluZXRkZXZfZGJnKGJvbmQtJmd0O2RldiwgJiMzNDsoc2xhdmUgJXMpOiBTZXJ2ZXIgc2VudCBBUlAgUmVwbHkgcGFja2V0XG4mIzM0OywKIAkJCSAgIHR4X3NsYXZlID8gdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7bmFtZSA6ICYjMzQ7TlVMTCYjMzQ7KTsKIAl9IGVsc2UgaWYgKGFycC0mZ3Q7b3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSkgewpAQCAtMTM0MCw3ICYjNDM7MTM0NCw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLAogCQkJCSAgICBzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlKQogewogCXN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSAmYW1wOyhCT05EX0FMQl9JTkZPKGJvbmQpKTsKLQlzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTsKIAogCWlmICghdHhfc2xhdmUpIHsKIAkJLyogdW5iYWxhbmNlZCBvciB1bmFzc2lnbmVkLCBzZW5kIHRocm91Z2ggcHJpbWFyeSAqLwpAQCAtMTM1MSw3ICYjNDM7MTM1NCw5IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLAogCiAJaWYgKHR4X3NsYXZlICZhbXA7JmFtcDsgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7CiAJCWlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC0mZ3Q7Y3Vycl9hY3RpdmVfc2xhdmUpKSB7Ci0JCQlldGhlcl9hZGRyX2NvcHkoZXRoX2RhdGEtJmd0O2hfc291cmNlLAomIzQzOwkJCWlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpCiYjNDM7CQkJCXJldHVybiBib25kX3R4X2Ryb3AoYm9uZC0mZ3Q7ZGV2LCBza2IpOwomIzQzOwkJCWV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLSZndDtoX3NvdXJjZSwKIAkJCQkJdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIpOwogCQl9CiAKQEAgLTEzNzUsOCAmIzQzOzEzODAsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLAogCXN0cnVjdCBldGhoZHIgKmV0aF9kYXRhOwogCXUzMiBoYXNoX2luZGV4OwogCi0Jc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQlldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTsKJiM0MzsJZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpOwogCiAJLyogRG8gbm90IFRYIGJhbGFuY2UgYW55IG11bHRpY2FzdCBvciBicm9hZGNhc3QgKi8KIAlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLSZndDtoX2Rlc3QpKSB7CkBAIC0xNDI4LDggJiM0MzsxNDMyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKIAl1MzIgaGFzaF9pbmRleCA9IDA7CiAJaW50IGhhc2hfc2l6ZSA9IDA7CiAKLQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCWV0aF9kYXRhID0gZXRoX2hkcihza2IpOwomIzQzOwlldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7CiAKIAlzd2l0Y2ggKG50b2hzKHNrYi0mZ3Q7cHJvdG9jb2wpKSB7CiAJY2FzZSBFVEhfUF9JUDogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDU1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCb25kaW5nIERyaXZlciBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciB0aGUgYm9uZGluZyBkcml2ZXIsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNjcnV0aW5pemUgaXQgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiBhbmFseXNpcy4KCkZyb20gd2hhdCBJIHNlZSwgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgc29tZSBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGUgQVJQIGhhbmRsaW5nIGFuZCB0cmFuc21pc3Npb24gbG9naWMuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIHRvdWNoZXMgdGhlc2UgZnVuY3Rpb25zOiBgcmxiX2FycF94bWl0YCwgYGJvbmRfZG9fYWxiX3htaXRgLCBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgLCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YC4KCkluIGBybGJfYXJwX3htaXRgLCB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIGNoZWNrIGFuZCBwb3RlbnRpYWwgbW9kaWZpY2F0aW9uIG9mIHRoZSBBUlAgcGFja2V0JiMzOTtzIHNvdXJjZSBNQUMgYWRkcmVzcy4gVGhlIGNoYW5nZSBpbnZvbHZlcyBhIGBza2JfY293X2hlYWRgIGNhbGwsIHByZXN1bWFibHkgdG8gaGFuZGxlIGNvcHktb24td3JpdGUsIGFuZCBjb25kaXRpb25hbGx5IGNvcHlpbmcgdGhlIE1BQyBhZGRyZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGFzc2VzcyBpZiB0aGVyZSBhcmUgYW55IHBvaW50cyB3aGVyZSBkYXRhIGlzIHVzZWQgYmVmb3JlIGJlaW5nIGNvcnJlY3RseSBpbml0aWFsaXplZC4gVGhlIG9yaWdpbmFsIGNvZGUgc2VlbXMgdG8gY29weSB0aGUgTUFDIGFkZHJlc3MgdW5jb25kaXRpb25hbGx5IGFuZCB0aGUgZml4IHNlZW1zIHRvIGJlIGNoZWNraW5nIHRvIHNlZSBpZiB0aGUgdHhfc2xhdmUgaXMgdGhlIGN1cnJlbnRseSBhY3RpdmUgc2xhdmUuIFRoZSBvcmlnaW5hbCBjb2RlIGRvZXMgbm90IHNlZW0gdG8gaGFuZGxlIENPVyBzbyB0aGlzIGNvdWxkIGJlIGEgZml4LgoKU2ltaWxhcmx5LCBgYm9uZF9kb19hbGJfeG1pdGAgbm93IHVzZXMgYHNrYl9jb3dfaGVhZGAgdG8gcG90ZW50aWFsbHkgbW9kaWZ5IHRoZSBzb3VyY2UgTUFDIGFkZHJlc3Mgb2YgYW4gRXRoZXJuZXQgZnJhbWUuIFRoaXMgc3VnZ2VzdHMgcG90ZW50aWFsIHJpc2sgdGhhdCBuZWVkcyBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdGhlIGBoX3NvdXJjZWAgZmllbGQsIHdpdGggdGhlIGBza2JfY293X2hlYWRgIGNhbGwgdGhhdCBjYW4gZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKRmluYWxseSwgdGhlIHBhdGNoZXMgaW4gYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCBhcmUgcmVtb3ZpbmcgYHNrYl9yZXNldF9tYWNfaGVhZGVyYCBhbmQgcmVwbGFjaW5nIGBldGhfaGRyKHNrYilgIHdpdGggYHNrYl9ldGhfaGRyKHNrYilgLiBUaGlzIGxvb2tzIGxpa2Ugc29tZSBjbGVhbnVwIHRvIGJlIG1vcmUgYWxpZ25lZCB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgQVBJLCB3aGljaCBjb3VsZCBhbHNvIGJlIHJlbGV2YW50IGluIGEgc2VjdXJpdHkgY29udGV4dC4gSSBhbSBub3Qgc2VlaW5nIHRoYXQgdGhlc2UgY2hhbmdlcyBpbmhlcmVudGx5IG1ha2UgdGhlIGNvZGUgbW9yZSBwcm9uZSB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEkmIzM5O2xsIG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZXNlIGNoYW5nZXMgd2l0aCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGxhcmdlciBib25kaW5nIGRyaXZlciBjb250ZXh0LiBJIHdpbGwgbGlrZWx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgZGF0YSBkZXBlbmRlbmNpZXMuIE15IHByaW1hcnkgY29uY2VybiB3aWxsIGJlIHRvIGFzY2VydGFpbiB3aGV0aGVyIHRoZXJlIGFyZSBub3cgY29kZSBwYXRocyB3aGVyZSBhIHJlYWQgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSBjYW4gb2NjdXIsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBLTVNBTiBhaW1zIHRvIGRldGVjdC4gVGhlIGBza2JfY293X2hlYWRgIGFkZGl0aW9ucyBhcmUgYSByZWQgZmxhZyBhbmQgd29ydGggY2FyZWZ1bCBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjA6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNjYxOlx0XHRhcnAgPSAoc3RydWN0IGFycF9wa3QgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbiA2NjI6XHRcbiA2NjM6XHRcdC8qIERvbiYjMzk7dCBtb2RpZnkgb3IgbG9hZCBiYWxhbmNlIEFSUHMgdGhhdCBkbyBub3Qgb3JpZ2luYXRlXG4gNjY0Olx0XHQgKiBmcm9tIHRoZSBib25kIGl0c2VsZiBvciBhIFZMQU4gZGlyZWN0bHkgYWJvdmUgdGhlIGJvbmQuXG4gNjY1Olx0XHQgKi9cbiA2NjY6XHRcdGlmICghYm9uZF9zbGF2ZV9oYXNfbWFjX3JjdShib25kLCBhcnAtXHUwMDNlbWFjX3NyYykpXG4gNjY3Olx0XHRcdHJldHVybiBOVUxMO1xuIDY2ODpcdFxuIDY2OTpcdFx0ZGV2ID0gaXBfZGV2X2ZpbmQoZGV2X25ldChib25kLVx1MDAzZWRldiksIGFycC1cdTAwM2VpcF9zcmMpO1xuIDY3MDpcdFx0aWYgKGRldikge1xuIDY3MTpcdFx0XHRpZiAobmV0aWZfaXNfYW55X2JyaWRnZV9tYXN0ZXIoZGV2KSkge1xuIDY3MjpcdFx0XHRcdGRldl9wdXQoZGV2KTtcbiA2NzM6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiA2NzQ6XHRcdFx0fVxuIDY3NTpcdFx0XHRkZXZfcHV0KGRldik7XG4gNjc2Olx0XHR9XG4gNjc3Olx0XG4gNjc4Olx0XHRpZiAoYXJwLVx1MDAzZW9wX2NvZGUgPT0gaHRvbnMoQVJQT1BfUkVQTFkpKSB7XG4gNjc5Olx0XHRcdC8qIHRoZSBhcnAgbXVzdCBiZSBzZW50IG9uIHRoZSBzZWxlY3RlZCByeCBjaGFubmVsICovXG4gNjgwOlx0XHRcdHR4X3NsYXZlID0gcmxiX2Nob29zZV9jaGFubmVsKHNrYiwgYm9uZCwgYXJwKTtcbiA2ODE6XHRcdFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNiB0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbiA2ODI6XHRcdFx0XHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxuIDY4MzpcdFx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNjg0Olx0XHRcdFx0YXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gNjg1Olx0XHRcdFx0Ym9uZF9od19hZGRyX2NvcHkoYXJwLVx1MDAzZW1hY19zcmMsIHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcixcbiA2ODY6XHRcdFx0XHRcdFx0ICB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4pO1xuIDY4NzpcdFx0XHR9XG4gNjg4Olx0XHRcdG5ldGRldl9kYmcoYm9uZC1cdTAwM2VkZXYsIFwmIzM0OyhzbGF2ZSAlcyk6IFNlcnZlciBzZW50IEFSUCBSZXBseSBwYWNrZXRcXG5cJiMzNDssXG4gNjg5Olx0XHRcdFx0ICAgdHhfc2xhdmUgPyB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlbmFtZSA6IFwmIzM0O05VTExcJiMzNDspO1xuIDY5MDpcdFx0fSBlbHNlIGlmIChhcnAtXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSkge1xuIDY5MTpcdFx0XHQvKiBDcmVhdGUgYW4gZW50cnkgaW4gdGhlIHJ4X2hhc2h0YmwgZm9yIHRoaXMgY2xpZW50IGFzIGFcbiA2OTI6XHRcdFx0ICogcGxhY2UgaG9sZGVyLlxuIDY5MzpcdFx0XHQgKiBXaGVuIHRoZSBhcnAgcmVwbHkgaXMgcmVjZWl2ZWQgdGhlIGVudHJ5IHdpbGwgYmUgdXBkYXRlZFxuIDY5NDpcdFx0XHQgKiB3aXRoIHRoZSBjb3JyZWN0IHVuaWNhc3QgYWRkcmVzcyBvZiB0aGUgY2xpZW50LlxuIDY5NTpcdFx0XHQgKi9cbiA2OTY6XHRcdFx0dHhfc2xhdmUgPSBybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kLCBhcnApO1xuIDY5NzpcdFxuIDY5ODpcdFx0XHQvKiBUaGUgQVJQIHJlcGx5IHBhY2tldHMgbXVzdCBiZSBkZWxheWVkIHNvIHRoYXRcbiA2OTk6XHRcdFx0ICogdGhleSBjYW4gY2FuY2VsIG91dCB0aGUgaW5mbHVlbmNlIG9mIHRoZSBBUlAgcmVxdWVzdC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWVkIGNvbnRleHQ6CgoqKkFuYWx5emluZyB0aGUgVHJhbnNtaXNzaW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyB3ZSBuZWVkIHRvIGRpdmUgaW50byB0aGlzIHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBgYm9uZF9kb19hbGJfeG1pdGAgZnVuY3Rpb24sIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBmdW5jdGlvbnMgYXJvdW5kIGl0LiBJdCYjMzk7cyByYXJlIGZvciBhIHNpbmdsZSBmdW5jdGlvbiB0byBiZSB0aGUgcm9vdCBvZiBhbiBpc3N1ZSBpbiBhIG5ldHdvcmsgb3IgaGlnaC1wZXJmb3JtYW5jZSBzeXN0ZW0uIEEgYnVnIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgY291bGQgYmUgYSByZXN1bHQgb2YgdGhlIGludGVyYWN0aW9ucyBhbmQgaGFuZG9mZnMgYmV0d2VlbiBtdWx0aXBsZSBjb21wb25lbnRzLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgZXJyb3IgaGFuZGxpbmcsIGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbiBhY3Jvc3MgdGhlIHJlbGV2YW50IGNhbGwgc3RhY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBkYXRhIG9yaWdpbmF0ZXMsIHRoZSB0cmFuc2Zvcm1hdGlvbnMgaXQgdW5kZXJnb2VzLCBhbmQgdGhlIHVsdGltYXRlIGRlc3RpbmF0aW9uLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIHVuZXhwZWN0ZWQgcmVzb3VyY2UgY29udGVudGlvbj8gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGlkZW50aWZ5IGFsbCBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMsIGluY2x1ZGluZyB0aGUgaW5wdXQgZGF0YSBhbmQgY29uZmlndXJhdGlvbiB0aGF0IGlzIHBhc3NlZCBpbnRvIGl0LiBHb3R0YSBiZSBzeXN0ZW1hdGljIGFib3V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM0MDpcdFx0XHRybGJfZGVpbml0aWFsaXplKGJvbmQpO1xuMTM0MTpcdH1cbjEzNDI6XHRcbjEzNDM6XHRzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbjEzNDQ6XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlKVxuMTM0NTpcdHtcbjEzNDY6XHRcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XG4xMzQ3Olx0XG4xMzQ4Olx0XHRpZiAoIXR4X3NsYXZlKSB7XG4xMzQ5Olx0XHRcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cbjEzNTA6XHRcdFx0dHhfc2xhdmUgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSk7XG4xMzUxOlx0XHRcdGlmIChib25kLVx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYilcbjEzNTI6XHRcdFx0XHRib25kX2luZm8tXHUwMDNldW5iYWxhbmNlZF9sb2FkICYjNDM7PSBza2ItXHUwMDNlbGVuO1xuMTM1MzpcdFx0fVxuMTM1NDpcdFxuMTM1NTpcdFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNiBib25kX3NsYXZlX2Nhbl90eCh0eF9zbGF2ZSkpIHtcbjEzNTY6XHRcdFx0aWYgKHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKSkge1xuMTM1NzpcdFx0XHRcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXG4xMzU4Olx0XHRcdFx0XHRyZXR1cm4gYm9uZF90eF9kcm9wKGJvbmQtXHUwMDNlZGV2LCBza2IpO1xuMTM1OTpcdFx0XHRcdGV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLVx1MDAzZWhfc291cmNlLFxuMTM2MDpcdFx0XHRcdFx0XHR0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuMTM2MTpcdFx0XHR9XG4xMzYyOlx0XG4xMzYzOlx0XHRcdHJldHVybiBib25kX2Rldl9xdWV1ZV94bWl0KGJvbmQsIHNrYiwgdHhfc2xhdmUtXHUwMDNlZGV2KTtcbjEzNjQ6XHRcdH1cbjEzNjU6XHRcbjEzNjY6XHRcdGlmICh0eF9zbGF2ZSBcdTAwMjZcdTAwMjYgYm9uZC1cdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcbjEzNjc6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmJvbmQtXHUwMDNlbW9kZV9sb2NrKTtcbjEzNjg6XHRcdFx0X190bGJfY2xlYXJfc2xhdmUoYm9uZCwgdHhfc2xhdmUsIDApO1xuMTM2OTpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4xMzcwOlx0XHR9XG4xMzcxOlx0XG4xMzcyOlx0XHQvKiBubyBzdWl0YWJsZSBpbnRlcmZhY2UsIGZyYW1lIG5vdCBzZW50ICovXG4xMzczOlx0XHRyZXR1cm4gYm9uZF90eF9kcm9wKGJvbmQtXHUwMDNlZGV2LCBza2IpO1xuMTM3NDpcdH1cbjEzNzU6XHRcbjEzNzY6XHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuMTM3NzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEzNzg6XHR7XG4xMzc5Olx0XHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlID0gTlVMTDtcbjEzODA6XHRcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xuMTM4MTpcdFx0dTMyIGhhc2hfaW5kZXg7XG4xMzgyOlx0XG4xMzgzOlx0XHRldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7XG4xMzg0Olx0XG4xMzg1Olx0XHQvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqL1xuMTM4NjpcdFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cdTAwM2VoX2Rlc3QpKSB7XG4xMzg3Olx0XHRcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4xMzg4Olx0XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4xMzg5Olx0XHRcdFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSlcbjEzOTA6XHRcdFx0XHRcdGJyZWFrO1xuMTM5MTpcdFx0XHRcdGZhbGx0aHJvdWdoO1xuMTM5MjpcdFx0XHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbjEzOTM6XHRcdFx0XHRoYXNoX2luZGV4ID0gYm9uZF94bWl0X2hhc2goYm9uZCwgc2tiKTtcbjEzOTQ6XHRcdFx0XHRpZiAoYm9uZC1cdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcbjEzOTU6XHRcdFx0XHRcdHR4X3NsYXZlID0gdGxiX2Nob29zZV9jaGFubmVsKGJvbmQsXG4xMzk2Olx0XHRcdFx0XHRcdFx0XHQgICAgICBoYXNoX2luZGV4IFx1MDAyNiAweEZGLFxuMTM5NzpcdFx0XHRcdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbik7XG4xMzk4Olx0XHRcdFx0fSBlbHNlIHtcbjEzOTk6XHRcdFx0XHRcdHN0cnVjdCBib25kX3VwX3NsYXZlICpzbGF2ZXM7XG4xNDAwOlx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgY291bnQ7XG4xNDAxOlx0XG4xNDAyOlx0XHRcdFx0XHRzbGF2ZXMgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cdTAwM2V1c2FibGVfc2xhdmVzKTtcbjE0MDM6XHRcdFx0XHRcdGNvdW50ID0gc2xhdmVzID8gUkVBRF9PTkNFKHNsYXZlcy1cdTAwM2Vjb3VudCkgOiAwO1xuMTQwNDpcdFx0XHRcdFx0aWYgKGxpa2VseShjb3VudCkpXG4xNDA1Olx0XHRcdFx0XHRcdHR4X3NsYXZlID0gc2xhdmVzLVx1MDAzZWFycltoYXNoX2luZGV4ICVcbjE0MDY6XHRcdFx0XHRcdFx0XHRcdCAgICAgICBjb3VudF07XG4xNDA3Olx0XHRcdFx0fVxuMTQwODpcdFx0XHRcdGJyZWFrO1xuMTQwOTpcdFx0XHR9XG4xNDEwOlx0XHR9XG4xNDExOlx0XHRyZXR1cm4gdHhfc2xhdmU7XG4xNDEyOlx0fVxuMTQxMzpcdFxuMTQxNDpcdG5ldGRldl90eF90IGJvbmRfdGxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuMTQxNTpcdHtcbjE0MTY6XHRcdHN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoYm9uZF9kZXYpO1xuMTQxNzpcdFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZTtcbjE0MTg6XHRcbjE0MTk6XHRcdHR4X3NsYXZlID0gYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcbjE0MjA6XHRcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xuMTQyMTpcdH1cbjE0MjI6XHRcbjE0MjM6XHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuMTQyNDpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjE0MjU6XHR7XG4xNDI2Olx0XHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuMTQyNzpcdFx0c3RhdGljIGNvbnN0IF9fYmUzMiBpcF9iY2FzdCA9IGh0b25sKDB4ZmZmZmZmZmYpO1xuMTQyODpcdFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XG4xNDI5Olx0XHRjb25zdCB1OCAqaGFzaF9zdGFydCA9IE5VTEw7XG4xNDMwOlx0XHRib29sIGRvX3R4X2JhbGFuY2UgPSB0cnVlO1xuMTQzMTpcdFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XG4xNDMyOlx0XHR1MzIgaGFzaF9pbmRleCA9IDA7XG4xNDMzOlx0XHRpbnQgaGFzaF9zaXplID0gMDtcbjE0MzQ6XHRcbjE0MzU6XHRcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcbjE0MzY6XHRcbjE0Mzc6XHRcdHN3aXRjaCAobnRvaHMoc2tiLVx1MDAzZXByb3RvY29sKSkge1xuMTQzODpcdFx0Y2FzZSBFVEhfUF9JUDoge1xuMTQzOTpcdFx0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU3NgoJCQkJCQkJb3V0cHV0OiAyMjYKCQkJCQkJCXRob3VnaHRzOiA1ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgS01TQU4gSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBvZiB0aGUgcGF0Y2ggZm9jdXNlcyBvbiBpdHMgY29yZSBmdW5jdGlvbjogZW5zdXJpbmcgcHJvcGVyIHdyaXRlIHBlcm1pc3Npb25zIGFuZCBjbG9uaW5nIG9mIGBza2JgIGhlYWRlcnMgd2l0aGluIHRoZSBib25kaW5nIGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIE1BQyBhZGRyZXNzIG1vZGlmaWNhdGlvbnMuIFRoZSBjb2RlIGxldmVyYWdlcyBgc2tiX2Nvd19oZWFkKHNrYiwgMClgIGJlZm9yZSBtb2RpZnlpbmcgaGVhZGVyIGZpZWxkcywgbGlrZSBzb3VyY2UgTUFDIChgZXRoX2hkci0mZ3Q7aF9zb3VyY2VgKSwgaW4gYGJvbmRfYWxiLmNgIChzcGVjaWZpY2FsbHkgYHJsYl9hcnBfeG1pdGAgYW5kIGBib25kX2RvX2FsYl94bWl0YCksIGFuZCBzd2l0Y2hlcyB0byB1c2luZyBgc2tiX2V0aF9oZHIoKWAuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHByZXZlbnRpbmcgZGF0YSByYWNlcyBhbmQgYnVmZmVyIHNoYXJpbmcgaXNzdWVzIHdoZW4gZGVhbGluZyB3aXRoIGNsb25lZCBTS0JzLCBhbmQgaXQgYWxzbyBjb250YWlucyBsb2dpYyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBzb3VyY2UgTUFDIG1vZGlmaWNhdGlvbnMgaWYgdGhlIGFjdGl2ZSBzbGF2ZSBtYXRjaGVzIHRoZSB0cmFuc21pdHRpbmcgc2xhdmUuCgpNeSBmaXJzdCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJcyB0aGUgcGF0Y2ggaW50cm9kdWNpbmcgYW55IG5ldyBhdmVudWVzIGZvciB0aGF0PyBJIHNlZSBubyBldmlkZW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zIG9mIHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIGNhbGxzIHRvIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBvciB0aGUgdXNlIG9mIE5ldGxpbmsgU0tCIGF0dHJpYnV0ZXMgb3IgSU9DVExzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLiBDcnVjaWFsbHksIHRoZSB1c2Ugb2YgYHNrYl9jb3dfaGVhZGAgaXMgdGhlIGtleS4gVGhpcyBmdW5jdGlvbiBndWFyYW50ZWVzIHRoZSBgc2tiYCYjMzk7cyBoZWFkIGlzIHdyaXRhYmxlLCBlZmZlY3RpdmVseSBwcmV2ZW50aW5nIGFueSB1bmludGVuZGVkIHdyaXRlcyB0byBzaGFyZWQgbWVtb3J5LiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgd3JpdGUgcGVybWlzc2lvbiBjaGVja3MgYW5kIGNsb25pbmcgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBwYWNrZXQgdHJhbnNtaXNzaW9uLgoKTm93LCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYS4gRG9lcyB0aGlzIHBhdGNoOgoKMS4gICoqRXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLgoyLiAgKipSZWx5IG9uIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgY291bGQgYmUgaW5mbHVlbmNlZCBieSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBOby4KMy4gICoqQWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IG1pZ2h0IGxlYXZlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFjY2Vzc2libGU/KiogTm8uCjQuICAqKkludHJvZHVjZSBuZXcgcG9zc2liaWxpdGllcyBmb3Igb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyoqIE5vLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBhIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC4KCkhlcmUmIzM5O3MgaG93IEkmIzM5O2Qgc3VtbWFyaXplIG15IHJlYXNvbmluZyBmb3IgdGhlIGBLTVNBTlJlYXNvbmluZ2A6IFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGRhdGEgY29ycnVwdGlvbiBpc3N1ZXMgYXJpc2luZyBmcm9tIG1vZGlmeWluZyBoZWFkZXJzIG9mIHNoYXJlZCBTS0JzIGluIHRoZSBib25kaW5nIGRyaXZlci4gSXQgZm9jdXNlcyBvbiB3cml0ZSBwZXJtaXNzaW9uIGNoZWNrcyBieSBsZXZlcmFnaW5nIGBza2JfY293X2hlYWQoKWAgYmVmb3JlIG1vZGlmeWluZyBwYWNrZXQgaGVhZGVycyBhbmQgc3dpdGNoZXMgdG8gYHNrYl9ldGhfaGRyKClgIGZvciBNQUMgaGVhZGVyIGFjY2Vzcy4gVGhlIHBhdGNoIGRvZXMgKm5vdCogYWxsb2NhdGUgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gUG90ZW50aWFsIGlzc3VlcyBoZXJlIGZhbGwgd2l0aGluIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgZG9tYWlucyBhbmQgYXJlIGFscmVhZHkgYWRkcmVzc2VkIGJ5IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIEFMQi9UTEIgdHJhbnNtaXQgcGF0aHMgKGJvbmRfYWxiLmMpIHRvIGVuc3VyZSB0aGF0IGBza2JfY293X2hlYWQoKWAgaXMgY2FsbGVkIGJlZm9yZSBtb2RpZnlpbmcgcGFja2V0IGhlYWRlcnMgKHN1Y2ggYXMgYGV0aF9oZHItXHUwMDNlaF9zb3VyY2VgIG9yIHRoZSBBUlAgaGVhZGVyJiMzOTtzIHNvdXJjZSBNQUMpLCBhdm9pZGluZyBtb2RpZmljYXRpb24gb2Ygc2hhcmVkL2Nsb25lZCBza2IgaGVhZGVyIG1lbW9yeS4gSXQgYWxzbyByZXBsYWNlcyBjYWxscyByZXNldHRpbmcgdGhlIE1BQyBoZWFkZXIgd2l0aCBgc2tiX2V0aF9oZHIoKWAuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgY29uY2VybiBza2IgaGVhZCBjbG9uYWJpbGl0eSwgcGFja2V0IGhlYWRlciBtdXRhdGlvbiwgYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbjpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZC5cbjIuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGluZm8tbGVha3MgYXJlIHBvc3NpYmxlIHRocm91Z2ggdGhpcyBwYXRoLlxuMy4gTm8gYnJhbmNoaW5nIG9yIGxvZ2ljIHJlbGllcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG5cbkFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHNoYXJlZCBtZW1vcnkgbW9kaWZpY2F0aW9uIG9yIHNrYiBsaWZlY3ljbGUgd291bGQgYmUgYWRkcmVzc2VkIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGRlYnVnZ2VycywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBBTEIvVExCIHRyYW5zbWl0IHBhdGhzIChib25kX2FsYi5jKSB0byBlbnN1cmUgdGhhdCBgc2tiX2Nvd19oZWFkKClgIGlzIGNhbGxlZCBiZWZvcmUgbW9kaWZ5aW5nIHBhY2tldCBoZWFkZXJzIChzdWNoIGFzIGBldGhfaGRyLVx1MDAzZWhfc291cmNlYCBvciB0aGUgQVJQIGhlYWRlciYjMzk7cyBzb3VyY2UgTUFDKSwgYXZvaWRpbmcgbW9kaWZpY2F0aW9uIG9mIHNoYXJlZC9jbG9uZWQgc2tiIGhlYWRlciBtZW1vcnkuIEl0IGFsc28gcmVwbGFjZXMgY2FsbHMgcmVzZXR0aW5nIHRoZSBNQUMgaGVhZGVyIHdpdGggYHNrYl9ldGhfaGRyKClgLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGNvbmNlcm4gc2tiIGhlYWQgY2xvbmFiaWxpdHksIHBhY2tldCBoZWFkZXIgbXV0YXRpb24sIGFuZCBuZXR3b3JrIHBhY2tldCB0cmFuc21pc3Npb246XG4xLiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzIGFyZSBwb3NzaWJsZSB0aHJvdWdoIHRoaXMgcGF0aC5cbjMuIE5vIGJyYW5jaGluZyBvciBsb2dpYyByZWxpZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBzaGFyZWQgbWVtb3J5IG1vZGlmaWNhdGlvbiBvciBza2IgbGlmZWN5Y2xlIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dlcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA3OjUwLjY4OTg0Mzg5N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MjMwNjU2OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2FsYl94bWl0XCIsXG4gICAgXCJib25kX3RsYl94bWl0XCIsXG4gICAgXCJib25kX3htaXRfYWxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBib25kaW5nIGRyaXZlcidzIEFMQi9UTEIgdHJhbnNtaXQgcGF0aHMgKGJvbmRfYWxiLmMpIHRvIGVuc3VyZSB0aGF0IGBza2JfY293X2hlYWQoKWAgaXMgY2FsbGVkIGJlZm9yZSBtb2RpZnlpbmcgcGFja2V0IGhlYWRlcnMgKHN1Y2ggYXMgYGV0aF9oZHItXFx1MDAzZWhfc291cmNlYCBvciB0aGUgQVJQIGhlYWRlcidzIHNvdXJjZSBNQUMpLCBhdm9pZGluZyBtb2RpZmljYXRpb24gb2Ygc2hhcmVkL2Nsb25lZCBza2IgaGVhZGVyIG1lbW9yeS4gSXQgYWxzbyByZXBsYWNlcyBjYWxscyByZXNldHRpbmcgdGhlIE1BQyBoZWFkZXIgd2l0aCBgc2tiX2V0aF9oZHIoKWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBjb25jZXJuIHNrYiBoZWFkIGNsb25hYmlsaXR5LCBwYWNrZXQgaGVhZGVyIG11dGF0aW9uLCBhbmQgbmV0d29yayBwYWNrZXQgdHJhbnNtaXNzaW9uOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZC5cXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzIGFyZSBwb3NzaWJsZSB0aHJvdWdoIHRoaXMgcGF0aC5cXG4zLiBObyBicmFuY2hpbmcgb3IgbG9naWMgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBzaGFyZWQgbWVtb3J5IG1vZGlmaWNhdGlvbiBvciBza2IgbGlmZWN5Y2xlIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dlcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHRyYW5zbWlzc2lvbiBwYXRocyBpbiB0aGUgYm9uZGluZyBkcml2ZXIncyBBTEIgYW5kIFRMQiBtb2RlcyAoYm9uZF9hbGIuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBza2IgaGVhZHJvb20gaXMgcHJvcGVybHkgY293ZWQvdW5zaGFyZWQgYmVmb3JlIG1vZGlmeWluZyBzb3VyY2UgTUFDIGFkZHJlc3NlcyAoaW4gQVJQIHJlcGxpZXMgYW5kIGV0aGVybmV0IGhlYWRlcnMpIGFuZCByZXBsYWNlcyBza2JfcmVzZXRfbWFjX2hlYWRlci9ldGhfaGRyIGNhbGxzIHdpdGggc2tiX2V0aF9oZHIuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY29uZmlndXJpbmcgYm9uZGluZyBuZXR3b3JrIGludGVyZmFjZXMgaW4gQUxCIG9yIFRMQiBtb2RlIGFuZCB0cmFuc21pdHRpbmcgdHJhZmZpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDc6NTAuNjg5ODUwODA3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMyMDY1NTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzA5YWRmNmNmYzAzNjRiMTE4NDliY2JjNjI2N2MzNDBlNjdmZTgxMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDA5OjA3OjQ4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xcbmluZGV4IDY1NGYwNTFkMDAyMzkuLjVmNzUwZjA4YTE0NDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXFxuQEAgLTY3OCw5ICs2NzgsMTMgQEAgc3RhdGljIHN0cnVjdCBzbGF2ZSAqcmxiX2FycF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxcbiBcXHRpZiAoYXJwLVxcdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUExZKSkge1xcbiBcXHRcXHQvKiB0aGUgYXJwIG11c3QgYmUgc2VudCBvbiB0aGUgc2VsZWN0ZWQgcnggY2hhbm5lbCAqL1xcbiBcXHRcXHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XFxuLVxcdFxcdGlmICh0eF9zbGF2ZSlcXG4rXFx0XFx0aWYgKHR4X3NsYXZlIFxcdTAwMjZcXHUwMDI2IHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVxcdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcXG4rXFx0XFx0XFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdFxcdGFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiBcXHRcXHRcXHRib25kX2h3X2FkZHJfY29weShhcnAtXFx1MDAzZW1hY19zcmMsIHR4X3NsYXZlLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHR4X3NsYXZlLVxcdTAwM2VkZXYtXFx1MDAzZWFkZHJfbGVuKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRuZXRkZXZfZGJnKGJvbmQtXFx1MDAzZWRldiwgXFxcIihzbGF2ZSAlcyk6IFNlcnZlciBzZW50IEFSUCBSZXBseSBwYWNrZXRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgIHR4X3NsYXZlID8gdHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlbmFtZSA6IFxcXCJOVUxMXFxcIik7XFxuIFxcdH0gZWxzZSBpZiAoYXJwLVxcdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUVVFU1QpKSB7XFxuQEAgLTEzNDAsNyArMTM0NCw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcXG4tXFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XFxuIFxcbiBcXHRpZiAoIXR4X3NsYXZlKSB7XFxuIFxcdFxcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cXG5AQCAtMTM1MSw3ICsxMzU0LDkgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuIFxcbiBcXHRpZiAodHhfc2xhdmUgXFx1MDAyNlxcdTAwMjYgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7XFxuIFxcdFxcdGlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XFxuLVxcdFxcdFxcdGV0aGVyX2FkZHJfY29weShldGhfZGF0YS1cXHUwMDNlaF9zb3VyY2UsXFxuK1xcdFxcdFxcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBib25kX3R4X2Ryb3AoYm9uZC1cXHUwMDNlZGV2LCBza2IpO1xcbitcXHRcXHRcXHRldGhlcl9hZGRyX2NvcHkoc2tiX2V0aF9oZHIoc2tiKS1cXHUwMDNlaF9zb3VyY2UsXFxuIFxcdFxcdFxcdFxcdFxcdHR4X3NsYXZlLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTM3NSw4ICsxMzgwLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4gXFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XFxuIFxcdHUzMiBoYXNoX2luZGV4O1xcbiBcXG4tXFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4tXFx0ZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XFxuK1xcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcXG4gXFxuIFxcdC8qIERvIG5vdCBUWCBiYWxhbmNlIGFueSBtdWx0aWNhc3Qgb3IgYnJvYWRjYXN0ICovXFxuIFxcdGlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtXFx1MDAzZWhfZGVzdCkpIHtcXG5AQCAtMTQyOCw4ICsxNDMyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4gXFx0dTMyIGhhc2hfaW5kZXggPSAwO1xcbiBcXHRpbnQgaGFzaF9zaXplID0gMDtcXG4gXFxuLVxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuLVxcdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xcbitcXHRldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7XFxuIFxcbiBcXHRzd2l0Y2ggKG50b2hzKHNrYi1cXHUwMDNlcHJvdG9jb2wpKSB7XFxuIFxcdGNhc2UgRVRIX1BfSVA6IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDc6NTIuMTIyNTIwNjUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0ODk5MTA2OTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCT05ESU5HXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm9uZF9hbGJfeG1pdFwiLFxuICAgIFwiYm9uZF90bGJfeG1pdFwiLFxuICAgIFwiYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHRyYW5zbWlzc2lvbiBwYXRocyBpbiB0aGUgYm9uZGluZyBkcml2ZXIncyBBTEIgYW5kIFRMQiBtb2RlcyAoYm9uZF9hbGIuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBza2IgaGVhZHJvb20gaXMgcHJvcGVybHkgY293ZWQvdW5zaGFyZWQgYmVmb3JlIG1vZGlmeWluZyBzb3VyY2UgTUFDIGFkZHJlc3NlcyAoaW4gQVJQIHJlcGxpZXMgYW5kIGV0aGVybmV0IGhlYWRlcnMpIGFuZCByZXBsYWNlcyBza2JfcmVzZXRfbWFjX2hlYWRlci9ldGhfaGRyIGNhbGxzIHdpdGggc2tiX2V0aF9oZHIuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY29uZmlndXJpbmcgYm9uZGluZyBuZXR3b3JrIGludGVyZmFjZXMgaW4gQUxCIG9yIFRMQiBtb2RlIGFuZCB0cmFuc21pdHRpbmcgdHJhZmZpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzA5YWRmNmNmYzAzNjRiMTE4NDliY2JjNjI2N2MzNDBlNjdmZTgxMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDk6MDc6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbmluZGV4IDY1NGYwNTFkMDAyMzkuLjVmNzUwZjA4YTE0NDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuQEAgLTY3OCw5ICs2NzgsMTMgQEAgc3RhdGljIHN0cnVjdCBzbGF2ZSAqcmxiX2FycF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxuIFx0aWYgKGFycC1cdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUExZKSkge1xuIFx0XHQvKiB0aGUgYXJwIG11c3QgYmUgc2VudCBvbiB0aGUgc2VsZWN0ZWQgcnggY2hhbm5lbCAqL1xuIFx0XHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XG4tXHRcdGlmICh0eF9zbGF2ZSlcbitcdFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNiB0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbitcdFx0XHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxuK1x0XHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdFx0YXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gXHRcdFx0Ym9uZF9od19hZGRyX2NvcHkoYXJwLVx1MDAzZW1hY19zcmMsIHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcixcbiBcdFx0XHRcdFx0ICB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4pO1xuK1x0XHR9XG4gXHRcdG5ldGRldl9kYmcoYm9uZC1cdTAwM2VkZXYsIFwiKHNsYXZlICVzKTogU2VydmVyIHNlbnQgQVJQIFJlcGx5IHBhY2tldFxcblwiLFxuIFx0XHRcdCAgIHR4X3NsYXZlID8gdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZW5hbWUgOiBcIk5VTExcIik7XG4gXHR9IGVsc2UgaWYgKGFycC1cdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUVVFU1QpKSB7XG5AQCAtMTM0MCw3ICsxMzQ0LDYgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXHRcdFx0XHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcbiB7XG4gXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuLVx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XG4gXG4gXHRpZiAoIXR4X3NsYXZlKSB7XG4gXHRcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cbkBAIC0xMzUxLDcgKzEzNTQsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcbiBcdGlmICh0eF9zbGF2ZSBcdTAwMjZcdTAwMjYgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7XG4gXHRcdGlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbi1cdFx0XHRldGhlcl9hZGRyX2NvcHkoZXRoX2RhdGEtXHUwMDNlaF9zb3VyY2UsXG4rXHRcdFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcbitcdFx0XHRcdHJldHVybiBib25kX3R4X2Ryb3AoYm9uZC1cdTAwM2VkZXYsIHNrYik7XG4rXHRcdFx0ZXRoZXJfYWRkcl9jb3B5KHNrYl9ldGhfaGRyKHNrYiktXHUwMDNlaF9zb3VyY2UsXG4gXHRcdFx0XHRcdHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4gXHRcdH1cbiBcbkBAIC0xMzc1LDggKzEzODAsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XG4gXHR1MzIgaGFzaF9pbmRleDtcbiBcbi1cdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4tXHRldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtcbitcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcbiBcbiBcdC8qIERvIG5vdCBUWCBiYWxhbmNlIGFueSBtdWx0aWNhc3Qgb3IgYnJvYWRjYXN0ICovXG4gXHRpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLVx1MDAzZWhfZGVzdCkpIHtcbkBAIC0xNDI4LDggKzE0MzIsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0dTMyIGhhc2hfaW5kZXggPSAwO1xuIFx0aW50IGhhc2hfc2l6ZSA9IDA7XG4gXG4tXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuLVx0ZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XG4rXHRldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7XG4gXG4gXHRzd2l0Y2ggKG50b2hzKHNrYi1cdTAwM2Vwcm90b2NvbCkpIHtcbiBcdGNhc2UgRVRIX1BfSVA6IHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA3OjUyLjEyMjUyMTkwM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1NzI3MzUzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIGl0cyBmdXp6aW5nIHZpYWJpbGl0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyB3b3J0aCB0aGUgZWZmb3J0LCB3aGF0IGtpbmQgb2YgY29uZmlndXJhdGlvbiBpcyBuZWVkZWQsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgd2hpY2ggc3ltYm9scyBhcmUgbGlrZWx5IHRhcmdldHMgZm9yIGZvY3VzZWQgZnV6emluZy5cblxuRmlyc3QsIEknbSBkaWdnaW5nIGludG8gdGhlIGRpZmYgaXRzZWxmLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBybGJfYXJwX3htaXRgLCBgYm9uZF9kb19hbGJfeG1pdGAsIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAsIGFuZCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBza2JfY293X2hlYWRgIGFuZCB0aGUgY2hhbmdlIGZyb20gYHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYilgIHRvIGBza2JfZXRoX2hkcihza2IpYCBhcmUgdGhlIGtleSBpbmRpY2F0b3JzIGhlcmUuIFRoZXkgc3VnZ2VzdCBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gU2hhcmVkIG1lbW9yeSBvciBjb3B5aW5nIHNrYnNcblxuTm93LCBJIG5lZWQgdG8gcGxhY2UgdGhpcyB3aXRoaW4gaXRzIGNvbnRleHQuIEknbSBkZWFsaW5nIHdpdGggdGhlIGJvbmRpbmcgZHJpdmVyLCBhbmQgaW4gcGFydGljdWxhciwgQWRhcHRpdmUgTG9hZCBCYWxhbmNpbmcgKEFMQikgbW9kZS4gVGhpcyBpcyBhIHNvZnR3YXJlIG5ldHdvcmsgZHJpdmVyIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9gLiBJbXBvcnRhbnRseSwgaXQncyBmdWxseSB2aXJ0dWFsaXplZCBhbmQgZW11bGF0ZWQuIFRoYXQgbWVhbnMgSSBjYW4gc3BpbiB1cCBib25kaW5nIGRldmljZXMgaW4gVk1zLCBjb250YWluZXJzLCBRRU1VLCBvciBldmVuIFN5emthbGxlciB3aXRob3V0IG5lZWRpbmcgYW55IHNwZWNpZmljIGhhcmR3YXJlLiBUaGlzIGlzIGEgKmh1Z2UqIHBsdXMgZm9yIHRlc3RpbmcgYW5kIGZ1enppbmcuIEkgY2FuIHJlcHJvZHVjZSB0aGUgZW52aXJvbm1lbnQgZWFzaWx5IGFuZCBxdWlja2x5LlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvZGUgd2l0aCBncmVhdGVyIGZpZGVsaXR5LiBJIHdpbGwgZG8gc29tZSBzZWFyY2hlcyB1c2luZyBncmVwcGVyIG9yIHJlYWQtZmlsZSB0byBkZXRlcm1pbmUgd2hpY2ggc3ltYm9scyBhbmQgS2NvbmZpZyBvcHRpb25zIGNvbWUgaW50byBwbGF5LiBUaGlzIGlzIGltcG9ydGFudCB0byBkZXRlcm1pbmUgdGhlIGVudmlyb25tZW50J3MgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA3OjU4LjY5NTI1OTI5MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMwODE2NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQk9ORElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0JPTkRJTkcpICs9IGJvbmRpbmcub1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUtNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTI2Nj12b2lkIGJvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfYWN0aXZlKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzMyLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTMzMzpcXHRcXHRcXHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0JPTkRJTkdfRkFJTE9WRVIsIGJvbmQtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzM0LVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xODg4PWludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMDk0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MjA5NTpcXHRzbGF2ZV9kZXYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX0JPTkRJTkc7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMDk2LVxcdC8qIGluaXRpYWxpemUgc2xhdmUgc3RhdHMgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjM3NS1cXHRpZiAoIW5ldGlmX2lzX2JvbmRfbWFzdGVyKHNsYXZlX2RldikpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyMzc2OlxcdFxcdHNsYXZlX2Rldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2PSB+SUZGX0JPTkRJTkc7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMzc3LVxcdGRldl9jbG9zZShzbGF2ZV9kZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0yNDI1PXN0YXRpYyBpbnQgX19ib25kX3JlbGVhc2Vfb25lKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjU5NC1cXHRpZiAoIW5ldGlmX2lzX2JvbmRfbWFzdGVyKHNsYXZlX2RldikpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyNTk1OlxcdFxcdHNsYXZlX2Rldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2PSB+SUZGX0JPTkRJTkc7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNTk2LVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MDY4PXN0YXRpYyBpbnQgYm9uZF9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MDc1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDA3NjpcXHRpZiAoIShldmVudF9kZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNiBJRkZfQk9ORElORykpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MDc3LVxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTk5Mj12b2lkIGJvbmRfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDE0LVxcdGJvbmRfZGV2LVxcdTAwM2VmbGFncyB8PSBJRkZfTUFTVEVSO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjAxNTpcXHRib25kX2Rldi1cXHUwMDNlcHJpdl9mbGFncyB8PSBJRkZfQk9ORElORyB8IElGRl9VTklDQVNUX0ZMVCB8IElGRl9OT19RVUVVRTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYwMTYtXFx0Ym9uZF9kZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNj0gfihJRkZfWE1JVF9EU1RfUkVMRUFTRSB8IElGRl9UWF9TS0JfU0hBUklORyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA3OjU5LjE0ODM0NjQ2M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MTI3MTUxNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipFeGFtaW5pbmcgdGhlIEJPTkRJTkcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSByZWFsbHkgY2xlYXIgcGljdHVyZSBvZiBob3cgQk9ORElORyBpcyBjb25maWd1cmVkIGluIHRoaXMga2VybmVsLiBMZXQncyBub3QgbWFrZSBhc3N1bXB0aW9uczsgbGV0J3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIGBLY29uZmlnYCBmaWxlIGlzIHRoZSBkZWZpbml0aXZlIGFuc3dlciwgYW5kIEknbSBwcmV0dHkgc3VyZSBJIHJlbWVtYmVyIGl0IGJlaW5nIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBwcmVjaXNlIGNvbmZpZyBvcHRpb25zLCB0aGUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGZlYXR1cmVzLCBhbmQgYW55dGhpbmcgZWxzZSBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIEJPTkRJTkcgaW1wbGVtZW50YXRpb24gYmVoYXZlcy4gVGltZSB0byBkaWcgaW4gYW5kIGNsYXJpZnkgYW55IGxpbmdlcmluZyBxdWVzdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNDEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowODowMC44NjEwNjM4NDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNzA3OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCT05ESU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9Mzk9aWYgTkVUX0NPUkVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDE6Y29uZmlnIEJPTkRJTkdcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowODowMS4wMjE3Nzg1MjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTc4NTE0MzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nIHByb2Nlc3MsIHdyaXR0ZW4gYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmc6XG5cbioqRXhhbWluaW5nIHRoZSBLZXJuZWwgTmV0d29yayBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZSBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgNDEuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpcyBzdHJ1Y3R1cmVkLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIG9wdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBhIHNwZWNpZmljIGRyaXZlciBJJ20gcmVzZWFyY2hpbmcgb3IgYSBnZW5lcmFsIGFyZWEgdGhhdCByZXF1aXJlcyBvcHRpbWl6YXRpb24uIE15IGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIEknbSBhbnRpY2lwYXRpbmcgc29tZSBjb25kaXRpb25hbCBsb2dpYywgbWF5YmUgc29tZSBuZXN0ZWQgYGlmYCBzdGF0ZW1lbnRzIGJhc2VkIG9uIGFyY2hpdGVjdHVyZSBvciBvdGhlciBwcmVyZXF1aXNpdGVzLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZm9ybSBhIG1lbnRhbCBtYXAgb2YgdGhpcyBzZWN0aW9uIG9mIHRoZSBLY29uZmlnIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MDEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowODowMy4yMDAyOTYxNzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIHVzZSBhbnkgb2YgdGhlXFxuICAzNzpcXHRcXHQgIG5ldHdvcmtpbmcgY29yZSBkcml2ZXJzIChpLmUuIFZMQU4sIGJyaWRnaW5nLCBib25kaW5nLCBldGMuKVxcbiAgMzg6XFx0XFxuICAzOTpcXHRpZiBORVRfQ09SRVxcbiAgNDA6XFx0XFxuICA0MTpcXHRjb25maWcgQk9ORElOR1xcbiAgNDI6XFx0XFx0dHJpc3RhdGUgXFxcIkJvbmRpbmcgZHJpdmVyIHN1cHBvcnRcXFwiXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gVExTIHx8IFRMU19ERVZJQ0U9blxcbiAgNDU6XFx0XFx0aGVscFxcbiAgNDY6XFx0XFx0ICBTYXkgJ1knIG9yICdNJyBpZiB5b3Ugd2lzaCB0byBiZSBhYmxlIHRvICdib25kJyBtdWx0aXBsZSBFdGhlcm5ldFxcbiAgNDc6XFx0XFx0ICBDaGFubmVscyB0b2dldGhlci4gVGhpcyBpcyBjYWxsZWQgJ0V0aGVyY2hhbm5lbCcgYnkgQ2lzY28sXFxuICA0ODpcXHRcXHQgICdUcnVua2luZycgYnkgU3VuLCA4MDIuM2FkIGJ5IHRoZSBJRUVFLCBhbmQgJ0JvbmRpbmcnIGluIExpbnV4LlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIFRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgYm9uZGluZyBtb2RlcyB0byBhbGxvdyBmb3IgYm90aCBoaWdoXFxuICA1MTpcXHRcXHQgIHBlcmZvcm1hbmNlIGFuZCBoaWdoIGF2YWlsYWJpbGl0eSBvcGVyYXRpb24uXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgUmVmZXIgdG8gXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcucnN0XFx1MDAzZSBmb3IgbW9yZVxcbiAgNTQ6XFx0XFx0ICBpbmZvcm1hdGlvbi5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICA1NzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGJvbmRpbmcuXFxuICA1ODpcXHRcXG4gIDU5OlxcdGNvbmZpZyBEVU1NWVxcbiAgNjA6XFx0XFx0dHJpc3RhdGUgXFxcIkR1bW15IG5ldCBkcml2ZXIgc3VwcG9ydFxcXCJcXG4gIDYxOlxcdFxcdGhlbHBcXG4gIDYyOlxcdFxcdCAgVGhpcyBpcyBlc3NlbnRpYWxseSBhIGJpdC1idWNrZXQgZGV2aWNlIChpLmUuIHRyYWZmaWMgeW91IHNlbmQgdG9cXG4gIDYzOlxcdFxcdCAgdGhpcyBkZXZpY2UgaXMgY29uc2lnbmVkIGludG8gb2JsaXZpb24pIHdpdGggYSBjb25maWd1cmFibGUgSVBcXG4gIDY0OlxcdFxcdCAgYWRkcmVzcy4gSXQgaXMgbW9zdCBjb21tb25seSB1c2VkIGluIG9yZGVyIHRvIG1ha2UgeW91ciBjdXJyZW50bHlcXG4gIDY1OlxcdFxcdCAgaW5hY3RpdmUgU0xJUCBhZGRyZXNzIHNlZW0gbGlrZSBhIHJlYWwgYWRkcmVzcyBmb3IgbG9jYWwgcHJvZ3JhbXMuXFxuICA2NjpcXHRcXHQgIElmIHlvdSB1c2UgU0xJUCBvciBQUFAsIHlvdSBtaWdodCB3YW50IHRvIHNheSBZIGhlcmUuIEl0IHdvbid0XFxuICA2NzpcXHRcXHQgIGVubGFyZ2UgeW91ciBrZXJuZWwuIFdoYXQgYSBkZWFsLiBSZWFkIGFib3V0IGl0IGluIHRoZSBOZXR3b3JrXFxuICA2ODpcXHRcXHQgIEFkbWluaXN0cmF0b3IncyBHdWlkZSwgYXZhaWxhYmxlIGZyb21cXG4gIDY5OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2d1aWRlXFx1MDAzZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6MDMuMjAwMzc2ODM4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2MTQ0MzA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBCb25kIEFMQiBNb2R1bGUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBBY3RpdmUtQmFja3VwIExvYWQgQmFsYW5jaW5nIChBTEIpIG1vZGUgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBib25kaW5nIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIEknbSBoZWFkaW5nIGZvciBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdGhlIGNvcmUgbG9naWMgZm9yIEFMQiB0byByZXNpZGUuIEkgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIHN0cnVjdHVyZSB3aXRoaW4gdGhhdCBmaWxlOiBXaGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucywgaG93IGFyZSB0aGV5IHN0cnVjdHVyZWQsIHdoYXQgdGhleSBkbywgd2hvIGNhbGxzIHRoZW0sIGFuZCBpbXBvcnRhbnRseSwgd2hpY2ggZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBmb3IgdXNlIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgaW5pdGlhbCBzY2FuIHdpbGwgZ2l2ZSBtZSBhIGdvb2QsIGhpZ2gtbGV2ZWwgbWFwIG9mIHRoZSBBTEIgaW1wbGVtZW50YXRpb24uIFRoaXMgd2lsbCBoZWxwIG1lIHdpdGggbXkgZGVidWdnaW5nLCB1bmRlcnN0YW5kaW5nLCBvciBkZXZlbG9wbWVudCB0YXNrIGF0IGhhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNjAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjA1LjM2MTgyMzMxNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ1NjI2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm9uZF9hbGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0JPTkRJTkcpICs9IGJvbmRpbmcub1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUtNy1cXG5kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlOjg6Ym9uZGluZy1vYmpzIDo9IGJvbmRfbWFpbi5vIGJvbmRfM2FkLm8gYm9uZF9hbGIubyBib25kX3N5c2ZzLm8gYm9uZF9zeXNmc19zbGF2ZS5vIGJvbmRfZGVidWdmcy5vIGJvbmRfbmV0bGluay5vIGJvbmRfb3B0aW9ucy5vXFxuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZS05LVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTI0LSNpbmNsdWRlIFxcdTAwM2NuZXQvYm9uZGluZy5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoyNTojaW5jbHVkZSBcXHUwMDNjbmV0L2JvbmRfYWxiLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTI2LVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTIyNz1zdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzMi1cXHQvKiBXZSBkb24ndCBuZWVkIHRvIGRpc2FibGUgc29mdGlycSBoZXJlLCBiZWNhdXNlXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjIzMzpcXHQgKiB0bGJfY2hvb3NlX2NoYW5uZWwoKSBpcyBvbmx5IGNhbGxlZCBieSBib25kX2FsYl94bWl0KClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjM0LVxcdCAqIHdoaWNoIGFscmVhZHkgaGFzIHNvZnRpcnEgZGlzYWJsZWQuXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTI4OD1zdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTMxMC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTMxMTppbnQgYm9uZF9hbGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgaW50IHJsYl9lbmFibGVkKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzEyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzMyLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxMzMzOnZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzM0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNDIzPXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUyNi1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTUyNzpuZXRkZXZfdHhfdCBib25kX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUyOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUzNS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTUzNjp2b2lkIGJvbmRfYWxiX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTM3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNjM5LSAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNjQwOmludCBib25kX2FsYl9pbml0X3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNjQxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNjY5LSAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNjcwOnZvaWQgYm9uZF9hbGJfZGVpbml0X3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNjcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNjgzLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNjg0OnZvaWQgYm9uZF9hbGJfaGFuZGxlX2xpbmtfY2hhbmdlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCBjaGFyIGxpbmspXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE2ODUte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE3MTItLyoqXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE3MTM6ICogYm9uZF9hbGJfaGFuZGxlX2FjdGl2ZV9jaGFuZ2UgLSBhc3NpZ24gbmV3IGN1cnJfYWN0aXZlX3NsYXZlXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE3MTQtICogQGJvbmQ6IG91ciBib25kaW5nIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE3MjEtICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE3MjI6dm9pZCBib25kX2FsYl9oYW5kbGVfYWN0aXZlX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfc2xhdmUpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE3MjMte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE3OTAtLyogQ2FsbGVkIHdpdGggUlROTCAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNzkxOmludCBib25kX2FsYl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCB2b2lkICphZGRyKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzkyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xODM1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxODM2OnZvaWQgYm9uZF9hbGJfY2xlYXJfdmxhbihzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdW5zaWduZWQgc2hvcnQgdmxhbl9pZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTgzNy17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTctI2luY2x1ZGUgXFx1MDAzY25ldC9ib25kaW5nLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzo4OiNpbmNsdWRlIFxcdTAwM2NuZXQvYm9uZF9hbGIuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTktXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTg3LSNpbmNsdWRlIFxcdTAwM2NuZXQvYm9uZF8zYWQuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjg4OiNpbmNsdWRlIFxcdTAwM2NuZXQvYm9uZF9hbGIuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTg5LSNpZiBJU19FTkFCTEVEKENPTkZJR19UTFNfREVWSUNFKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MDc9c3RhdGljIGludCBib25kX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MTctXFx0aWYgKGJvbmRfaXNfbGIoYm9uZCkpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0MTg6XFx0XFx0Ym9uZF9hbGJfY2xlYXJfdmxhbihib25kLCB2aWQpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDE5LVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xMjY2PXZvaWQgYm9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKm5ld19hY3RpdmUpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTEyOTctXFx0XFx0XFx0aWYgKGJvbmRfaXNfbGIoYm9uZCkpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxMjk4OlxcdFxcdFxcdFxcdGJvbmRfYWxiX2hhbmRsZV9saW5rX2NoYW5nZShib25kLCBuZXdfYWN0aXZlLCBCT05EX0xJTktfVVApO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTI5OS1cXHRcXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzA4LVxcdGlmIChib25kX2lzX2xiKGJvbmQpKSB7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxMzA5OlxcdFxcdGJvbmRfYWxiX2hhbmRsZV9hY3RpdmVfY2hhbmdlKGJvbmQsIG5ld19hY3RpdmUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTMxMC1cXHRcXHRpZiAob2xkX2FjdGl2ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTg4OD1pbnQgYm9uZF9lbnNsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjA5OS1cXHRpZiAoYm9uZF9pc19sYihib25kKSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MjEwMDpcXHRcXHQvKiBib25kX2FsYl9pbml0X3NsYXZlKCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFsbCBvdGhlciBzdGFnZXMgc2luY2VcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTIxMDEtXFx0XFx0ICogaXQgbWlnaHQgZmFpbCBhbmQgd2UgZG8gbm90IHdhbnQgdG8gaGF2ZSB0byB1bmRvIGV2ZXJ5dGhpbmdcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTIxMDItXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyMTAzOlxcdFxcdHJlcyA9IGJvbmRfYWxiX2luaXRfc2xhdmUoYm9uZCwgbmV3X3NsYXZlKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTIxMDQtXFx0XFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MjQyNT1zdGF0aWMgaW50IF9fYm9uZF9yZWxlYXNlX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTI1MTYtXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyNTE3OlxcdFxcdGJvbmRfYWxiX2RlaW5pdF9zbGF2ZShib25kLCBzbGF2ZSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNTE4LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9Mjc2ND1zdGF0aWMgdm9pZCBib25kX21paW1vbl9saW5rX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjc3My1cXHRjYXNlIEJPTkRfTU9ERV9BTEI6XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyNzc0OlxcdFxcdGJvbmRfYWxiX2hhbmRsZV9saW5rX2NoYW5nZShib25kLCBzbGF2ZSwgbGluayk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNzc1LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MzE4PXZvaWQgYm9uZF93b3JrX2luaXRfYWxsKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MzI1LVxcdFxcdFxcdCAgYm9uZF9yZXNlbmRfaWdtcF9qb2luX3JlcXVlc3RzX2RlbGF5ZWQpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDMyNjpcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2Ym9uZC1cXHUwMDNlYWxiX3dvcmssIGJvbmRfYWxiX21vbml0b3IpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDMyNy1cXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2Ym9uZC1cXHUwMDNlbWlpX3dvcmssIGJvbmRfbWlpX21vbml0b3IpO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MzQ1PXN0YXRpYyBpbnQgYm9uZF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDM3MS1cXHRpZiAoYm9uZF9pc19sYihib25kKSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDM3MjpcXHRcXHQvKiBib25kX2FsYl9pbml0aWFsaXplIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgdGltZXJcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzNzMtXFx0XFx0ICogaXMgc3RhcnRlZC5cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzNzQtXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0Mzc1OlxcdFxcdGlmIChib25kX2FsYl9pbml0aWFsaXplKGJvbmQsIChCT05EX01PREUoYm9uZCkgPT0gQk9ORF9NT0RFX0FMQikpKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDM3Ni1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDQwOD1zdGF0aWMgaW50IGJvbmRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NDIwLVxcdGlmIChib25kX2lzX2xiKGJvbmQpKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDQyMTpcXHRcXHRib25kX2FsYl9kZWluaXRpYWxpemUoYm9uZCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NDIyLVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00ODMwPXN0YXRpYyBpbnQgYm9uZF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCB2b2lkICphZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00ODM4LVxcdGlmIChCT05EX01PREUoYm9uZCkgPT0gQk9ORF9NT0RFX0FMQilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQ4Mzk6XFx0XFx0cmV0dXJuIGJvbmRfYWxiX3NldF9tYWNfYWRkcmVzcyhib25kX2RldiwgYWRkcik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00ODQwLVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NTUwPXN0YXRpYyBuZXRkZXZfdHhfdCBfX2JvbmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTc2LVxcdGNhc2UgQk9ORF9NT0RFX0FMQjpcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU1Nzc6XFx0XFx0cmV0dXJuIGJvbmRfYWxiX3htaXQoc2tiLCBkZXYpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTU3OC1cXHRjYXNlIEJPTkRfTU9ERV9UTEI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjA1LjQyNjM5MDcyNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTUyMTM2MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBQYXRjaCBNb2RpZmljYXRpb25zIGluIGBib25kX2FsYi5jYCoqXG5cbkFscmlnaHQsIHRoZSBwYXRjaCBoYXMgaGl0IG15IGRlc2ssIGFuZCBteSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyBwaW5wb2ludGluZyB0aGUga2V5IGFyZWFzIG9mIGltcGFjdC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGNoYW5nZXMgbWFkZSB3aXRoaW4gYGJvbmRfYWxiLmNgIGFyb3VuZCBsaW5lcyA2NzgsIDEzNDAsIDEzNzUsIGFuZCAxNDI4LiBUaGVzZSBsaW5lIG51bWJlcnMgYXJlIG15IGluaXRpYWwgY29vcmRpbmF0ZXMuXG5cbkknbGwgc3RhcnQgYnkgcHVsbGluZyB1cCB0aGUgZmlsZSBhbmQgemVyb2luZyBpbiBvbiB0aG9zZSBzcGVjaWZpYyBsaW5lcy4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgKm5hdHVyZSogb2YgdGhlIG1vZGlmaWNhdGlvbnMuIFdlcmUgdGhleSBidWcgZml4ZXMsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMsIG9yIG5ldyBmZWF0dXJlIGltcGxlbWVudGF0aW9ucz8gRG9lcyB0aGUgY29kZSB0b3VjaCB1cG9uIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcywgb3IgZnVuZGFtZW50YWwgYWxnb3JpdGhtcz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmlwcGxlIGVmZmVjdHMgZG93biBzdHJlYW0/XG5cbkknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYXMgd2VsbCDigJMgdGhlIGxpbmVzIGltbWVkaWF0ZWx5IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHNwZWNpZmllZCBsaW5lIG51bWJlcnMgcHJvdmlkZSBjcnVjaWFsIGNvbnRleHQuIEkgd2lsbCBiZSBsb29raW5nIGZvcjpcbiogICAqKkxvZ2ljYWwgZmxvdzoqKiBIb3cgYXJlIHRoZXNlIHNwZWNpZmljIGxpbmVzIGZpdHRpbmcgaW50byB0aGUgZ3JlYXRlciBmdW5jdGlvbiBvciBzZWN0aW9uLlxuKiAgICoqVmFyaWFibGVzOioqIFdoYXQgdmFyaWFibGVzIGFyZSByZWFkLCB1c2VkLCBtb2RpZmllZCwgYW5kIGluaXRpYWxpemVkIHdpdGhpbiB0aGVzZSBsaW5lcz9cbiogICAqKkV4dGVybmFsIGRlcGVuZGVuY2llczoqKiBBcmUgdGhlcmUgY2FsbHMgdG8gZXh0ZXJuYWwgZnVuY3Rpb25zL21hY3Jvcy9zdHJ1Y3R1cmVzP1xuKiAgICoqQ29uZGl0aW9uYWwgZXhlY3V0aW9uOioqIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWxzIHRoYXQgYXJlIHRyaWdnZXJlZCB3aXRoaW4gdGhlc2UgbGluZXMsIGFuZCB3aGF0IGlzIHRoZSBlZmZlY3QgaWYgdGhleSBhcmUuXG5cbk9uY2UgSSBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1tZWRpYXRlIGNoYW5nZXMsIEknbGwgYXNzZXNzIHRoZWlyIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLiBJJ2xsIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCB0aGUgY29kZSBleGVjdXRpb24sIGNvbnNpZGVyaW5nIHZhcmlvdXMgc2NlbmFyaW9zIGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGluZ3MgbGlrZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBkYXRhIGludGVncml0eSwgYW5kIGVycm9yIGhhbmRsaW5nLiBJJ2xsIGFsc28gYmUgY29uc2lkZXJpbmcgd2hldGhlciB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IG5ldyBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIGNvbXBhdGliaWxpdHkgaXNzdWVzLlxuXG5Fc3NlbnRpYWxseSwgSSdtIGZvcm1pbmcgYSBtZW50YWwgbW9kZWwgb2YgaG93IHRoZSBwYXRjaCBhbHRlcnMgdGhlIHVuZGVybHlpbmcgbG9naWMsIGFuZCB3aGF0IHRoYXQgaW1wbGllcyBmb3IgdGhlIHN5c3RlbSdzIHJvYnVzdG5lc3MsIHBlcmZvcm1hbmNlLCBhbmQgZnV0dXJlIG1haW50YWluYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU1NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjA4Ljk3ODUzMDkxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjYwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA2NjE6XFx0XFx0YXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIDY2MjpcXHRcXG4gNjYzOlxcdFxcdC8qIERvbid0IG1vZGlmeSBvciBsb2FkIGJhbGFuY2UgQVJQcyB0aGF0IGRvIG5vdCBvcmlnaW5hdGVcXG4gNjY0OlxcdFxcdCAqIGZyb20gdGhlIGJvbmQgaXRzZWxmIG9yIGEgVkxBTiBkaXJlY3RseSBhYm92ZSB0aGUgYm9uZC5cXG4gNjY1OlxcdFxcdCAqL1xcbiA2NjY6XFx0XFx0aWYgKCFib25kX3NsYXZlX2hhc19tYWNfcmN1KGJvbmQsIGFycC1cXHUwMDNlbWFjX3NyYykpXFxuIDY2NzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjY4OlxcdFxcbiA2Njk6XFx0XFx0ZGV2ID0gaXBfZGV2X2ZpbmQoZGV2X25ldChib25kLVxcdTAwM2VkZXYpLCBhcnAtXFx1MDAzZWlwX3NyYyk7XFxuIDY3MDpcXHRcXHRpZiAoZGV2KSB7XFxuIDY3MTpcXHRcXHRcXHRpZiAobmV0aWZfaXNfYW55X2JyaWRnZV9tYXN0ZXIoZGV2KSkge1xcbiA2NzI6XFx0XFx0XFx0XFx0ZGV2X3B1dChkZXYpO1xcbiA2NzM6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDY3NDpcXHRcXHRcXHR9XFxuIDY3NTpcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuIDY3NjpcXHRcXHR9XFxuIDY3NzpcXHRcXG4gNjc4OlxcdFxcdGlmIChhcnAtXFx1MDAzZW9wX2NvZGUgPT0gaHRvbnMoQVJQT1BfUkVQTFkpKSB7XFxuIDY3OTpcXHRcXHRcXHQvKiB0aGUgYXJwIG11c3QgYmUgc2VudCBvbiB0aGUgc2VsZWN0ZWQgcnggY2hhbm5lbCAqL1xcbiA2ODA6XFx0XFx0XFx0dHhfc2xhdmUgPSBybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kLCBhcnApO1xcbiA2ODE6XFx0XFx0XFx0aWYgKHR4X3NsYXZlIFxcdTAwMjZcXHUwMDI2IHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVxcdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcXG4gNjgyOlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXFxuIDY4MzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjg0OlxcdFxcdFxcdFxcdGFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiA2ODU6XFx0XFx0XFx0XFx0Ym9uZF9od19hZGRyX2NvcHkoYXJwLVxcdTAwM2VtYWNfc3JjLCB0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcixcXG4gNjg2OlxcdFxcdFxcdFxcdFxcdFxcdCAgdHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbiA2ODc6XFx0XFx0XFx0fVxcbiA2ODg6XFx0XFx0XFx0bmV0ZGV2X2RiZyhib25kLVxcdTAwM2VkZXYsIFxcXCIoc2xhdmUgJXMpOiBTZXJ2ZXIgc2VudCBBUlAgUmVwbHkgcGFja2V0XFxcXG5cXFwiLFxcbiA2ODk6XFx0XFx0XFx0XFx0ICAgdHhfc2xhdmUgPyB0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lIDogXFxcIk5VTExcXFwiKTtcXG4gNjkwOlxcdFxcdH0gZWxzZSBpZiAoYXJwLVxcdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUVVFU1QpKSB7XFxuIDY5MTpcXHRcXHRcXHQvKiBDcmVhdGUgYW4gZW50cnkgaW4gdGhlIHJ4X2hhc2h0YmwgZm9yIHRoaXMgY2xpZW50IGFzIGFcXG4gNjkyOlxcdFxcdFxcdCAqIHBsYWNlIGhvbGRlci5cXG4gNjkzOlxcdFxcdFxcdCAqIFdoZW4gdGhlIGFycCByZXBseSBpcyByZWNlaXZlZCB0aGUgZW50cnkgd2lsbCBiZSB1cGRhdGVkXFxuIDY5NDpcXHRcXHRcXHQgKiB3aXRoIHRoZSBjb3JyZWN0IHVuaWNhc3QgYWRkcmVzcyBvZiB0aGUgY2xpZW50LlxcbiA2OTU6XFx0XFx0XFx0ICovXFxuIDY5NjpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XFxuIDY5NzpcXHRcXG4gNjk4OlxcdFxcdFxcdC8qIFRoZSBBUlAgcmVwbHkgcGFja2V0cyBtdXN0IGJlIGRlbGF5ZWQgc28gdGhhdFxcbiA2OTk6XFx0XFx0XFx0ICogdGhleSBjYW4gY2FuY2VsIG91dCB0aGUgaW5mbHVlbmNlIG9mIHRoZSBBUlAgcmVxdWVzdC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6MDguOTc4NjQzNDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk4MTI4MzI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aGVtIHRocm91Z2ggaW4gbXkgdXN1YWwgd2F5OlxuXG4qKkRlZXAgRGl2ZSBvbiBCb25kaW5nIFRyYW5zbWlzc2lvbiBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSB0cmFuc21pdCBzaWRlIG9mIHRoaXMgYm9uZGluZyBzZXR1cCwgYW5kIHRoZXNlIGZ1bmN0aW9ucyBhcmUga2V5OiBgYm9uZF9kb19hbGJfeG1pdGAsIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAsIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAsIGFuZCBgYm9uZF9hbGJfeG1pdGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGFyZSBzdWdnZXN0aW5nIGEgbGluayB0byBBTEIgKEFkYXB0aXZlIExvYWQgQmFsYW5jaW5nKSBhbmQgVExCIChUcmFuc21pdCBMb2FkIEJhbGFuY2luZykgbW9kZXMsIHdoaWNoIGlzIHR5cGljYWwuXG5cbkknbSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gdmlzdWFsaXplIHRoZSBjYWxsIHBhdGhzIGFuZCBkZXBlbmRlbmNpZXMuIGBib25kX2RvX2FsYl94bWl0YCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIGZ1bmN0aW9uLCB0aGUgZGlzcGF0Y2hlciBwZXJoYXBzPyBJJ20gYmV0dGluZyBpdCBoYW5kbGVzIHRoZSBjb3JlIGxvZ2ljIGZvciBlaXRoZXIgQUxCIG9yIG1heWJlIHNvbWUgZ2VuZXJhbCBib25kaW5nLXJlbGF0ZWQgdHJhbnNtaXNzaW9uIHNldHVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVjaWRlcyB3aGljaCBzbGF2ZSB0byB1c2UgYW5kIGhvdyB0aGUgYWN0dWFsIHBhY2tldCB0cmFuc21pc3Npb24gaXMgaW5pdGlhdGVkLiBXaGF0IGRhdGEgc3RydWN0dXJlcyBpcyBpdCB1c2luZyB0byB0cmFjayBzdGF0ZSwgYW5kIHdoZXJlIGFyZSB0aGUgY3J1Y2lhbCBkZWNpc2lvbnMgYmVpbmcgbWFkZT8gRG9lcyB0aGlzIGZ1bmN0aW9uIG1hbmFnZSBxdWV1ZSBzZWxlY3Rpb24gYW5kIGFueSBhc3NvY2lhdGVkIGhhcmR3YXJlIG9mZmxvYWQ/IEkgd2FudCB0byBzZWUgaWYgYW55IGZsb3cgY2xhc3NpZmljYXRpb24gb3IgaGFzaCBmdW5jdGlvbnMgYXJlIGludm9sdmVkLCBhbmQgd2hhdCB0aGUgZmFsbGJhY2sgbWVjaGFuaXNtIGxvb2tzIGxpa2UuXG5cblRoZW4sIHRoZXJlJ3MgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YC4gQ2xlYXJseSwgdGhpcyBpcyBpbnZvbHZlZCBpbiBnZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBzbGF2ZSBpbnRlcmZhY2UgZm9yIFRMQi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIOKAkyBpcyBpdCByb3VuZC1yb2JpbiwgYmFzZWQgb24gbGluayB1dGlsaXphdGlvbiwgcGFja2V0IGNvdW50LCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkPyBXaGF0IGFib3V0IGVycm9yIGhhbmRsaW5nIOKAkyBkb2VzIGl0IHJldHJ5IG9uIGFub3RoZXIgc2xhdmUgaWYgb25lIGlzIGRvd24/XG5cbmBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgaXMgYSB0d2luLCBmb2N1c2VkIG9uIEFMQi4gSSdtIGludGVyZXN0ZWQgaW4gdGhlIGxvYWQgYmFsYW5jaW5nIGFsZ29yaXRobSBoZXJlLiBJcyBpdCBsb29raW5nIGF0IGZsb3cgaGFzaGVzLCBzb3VyY2UvZGVzdGluYXRpb24gTUFDIGFkZHJlc3Nlcywgb3IgbW9yZT8gRG9lcyBpdCBpbmNvcnBvcmF0ZSBhbnkgYmFjay1vZmYgb3IgaHlzdGVyZXNpcyBtZWNoYW5pc21zIHRvIHByZXZlbnQgZmxhcHBpbmcgYmV0d2VlbiBzbGF2ZXM/XG5cbkZpbmFsbHksIGBib25kX2FsYl94bWl0YCBpcyBwb3RlbnRpYWxseSB0aGUgd29ya2hvcnNlLCB0aGUgZnVuY3Rpb24gdGhhdCdzIGFjdHVhbGx5IGRvaW5nIHRoZSB0cmFuc21pc3Npb24gKnVzaW5nKiB0aGUgc2xhdmUgY2hvc2VuIGJ5IGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgb3IgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YC4gSSBleHBlY3QgdGhpcyB0byBiZSB0aGUgcG9pbnQgd2hlcmUgdGhlIHBhY2tldCBpcyBhY3R1YWxseSBoYW5kZWQgb2ZmIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZSBjYXJkIGRyaXZlci4gSSB3YW50IHRvIHNlZSBpZiBhbnkgbW9kaWZpY2F0aW9ucyBhcmUgbWFkZSB0byB0aGUgcGFja2V0IGl0c2VsZiBoZXJlIOKAkyBWTEFOIHRhZ2dpbmcsIGNoZWNrc3VtIHVwZGF0ZXMsIGV0Yy4gV2hhdCBraW5kIG9mIGxvY2tpbmcgaXMgdXNlZCBoZXJlIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucz8gRG9lcyBpdCB1c2UgVFggcmluZ3MsIGFuZCB3aGF0IG1lY2hhbmlzbXMgYXJlIGVtcGxveWVkIGZvciBoYW5kbGluZyB0cmFuc21pc3Npb24gZXJyb3JzIG9yIGxpbmsgZmFpbHVyZXM/XG5cbkknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IHdpdGggdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMgbGlrZSBgYm9uZF9kb19hbGJfeG1pdGAgYW5kIHRyYWNlIGRvd24gZnJvbSB0aGVyZS4gVGhhdCdsbCBnaXZlIG1lIGEgZnJhbWV3b3JrLCBhbmQgdGhlbiBJIGNhbiBkZWx2ZSBpbnRvIHRoZSBzbGF2ZS1zcGVjaWZpYyBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGxvYWQgYmFsYW5jaW5nIGFuZCBzZWxlY3Rpb24gd29ya3MuIEhvcGVmdWxseSwgaXQncyBhbGwgd2VsbC1kb2N1bWVudGVkLiBUaW1lIHRvIGRpZyBpbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzc5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowODoxNy45NTk5MzAyNjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzQwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM0MDpcXHRcXHRcXHRybGJfZGVpbml0aWFsaXplKGJvbmQpO1xcbjEzNDE6XFx0fVxcbjEzNDI6XFx0XFxuMTM0MzpcXHRzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4xMzQ0OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlKVxcbjEzNDU6XFx0e1xcbjEzNDY6XFx0XFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFxcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XFxuMTM0NzpcXHRcXG4xMzQ4OlxcdFxcdGlmICghdHhfc2xhdmUpIHtcXG4xMzQ5OlxcdFxcdFxcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cXG4xMzUwOlxcdFxcdFxcdHR4X3NsYXZlID0gcmN1X2RlcmVmZXJlbmNlKGJvbmQtXFx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKTtcXG4xMzUxOlxcdFxcdFxcdGlmIChib25kLVxcdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpXFxuMTM1MjpcXHRcXHRcXHRcXHRib25kX2luZm8tXFx1MDAzZXVuYmFsYW5jZWRfbG9hZCArPSBza2ItXFx1MDAzZWxlbjtcXG4xMzUzOlxcdFxcdH1cXG4xMzU0OlxcdFxcbjEzNTU6XFx0XFx0aWYgKHR4X3NsYXZlIFxcdTAwMjZcXHUwMDI2IGJvbmRfc2xhdmVfY2FuX3R4KHR4X3NsYXZlKSkge1xcbjEzNTY6XFx0XFx0XFx0aWYgKHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVxcdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcXG4xMzU3OlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXFxuMTM1ODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gYm9uZF90eF9kcm9wKGJvbmQtXFx1MDAzZWRldiwgc2tiKTtcXG4xMzU5OlxcdFxcdFxcdFxcdGV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLVxcdTAwM2VoX3NvdXJjZSxcXG4xMzYwOlxcdFxcdFxcdFxcdFxcdFxcdHR4X3NsYXZlLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4xMzYxOlxcdFxcdFxcdH1cXG4xMzYyOlxcdFxcbjEzNjM6XFx0XFx0XFx0cmV0dXJuIGJvbmRfZGV2X3F1ZXVlX3htaXQoYm9uZCwgc2tiLCB0eF9zbGF2ZS1cXHUwMDNlZGV2KTtcXG4xMzY0OlxcdFxcdH1cXG4xMzY1OlxcdFxcbjEzNjY6XFx0XFx0aWYgKHR4X3NsYXZlIFxcdTAwMjZcXHUwMDI2IGJvbmQtXFx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xcbjEzNjc6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZib25kLVxcdTAwM2Vtb2RlX2xvY2spO1xcbjEzNjg6XFx0XFx0XFx0X190bGJfY2xlYXJfc2xhdmUoYm9uZCwgdHhfc2xhdmUsIDApO1xcbjEzNjk6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmJvbmQtXFx1MDAzZW1vZGVfbG9jayk7XFxuMTM3MDpcXHRcXHR9XFxuMTM3MTpcXHRcXG4xMzcyOlxcdFxcdC8qIG5vIHN1aXRhYmxlIGludGVyZmFjZSwgZnJhbWUgbm90IHNlbnQgKi9cXG4xMzczOlxcdFxcdHJldHVybiBib25kX3R4X2Ryb3AoYm9uZC1cXHUwMDNlZGV2LCBza2IpO1xcbjEzNzQ6XFx0fVxcbjEzNzU6XFx0XFxuMTM3NjpcXHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbjEzNzc6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMzc4OlxcdHtcXG4xMzc5OlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xcbjEzODA6XFx0XFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XFxuMTM4MTpcXHRcXHR1MzIgaGFzaF9pbmRleDtcXG4xMzgyOlxcdFxcbjEzODM6XFx0XFx0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xcbjEzODQ6XFx0XFxuMTM4NTpcXHRcXHQvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqL1xcbjEzODY6XFx0XFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cXHUwMDNlaF9kZXN0KSkge1xcbjEzODc6XFx0XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuMTM4ODpcXHRcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbjEzODk6XFx0XFx0XFx0XFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSlcXG4xMzkwOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjEzOTE6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTM5MjpcXHRcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4xMzkzOlxcdFxcdFxcdFxcdGhhc2hfaW5kZXggPSBib25kX3htaXRfaGFzaChib25kLCBza2IpO1xcbjEzOTQ6XFx0XFx0XFx0XFx0aWYgKGJvbmQtXFx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xcbjEzOTU6XFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUgPSB0bGJfY2hvb3NlX2NoYW5uZWwoYm9uZCxcXG4xMzk2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGhhc2hfaW5kZXggXFx1MDAyNiAweEZGLFxcbjEzOTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4pO1xcbjEzOTg6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xMzk5OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBib25kX3VwX3NsYXZlICpzbGF2ZXM7XFxuMTQwMDpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuMTQwMTpcXHRcXG4xNDAyOlxcdFxcdFxcdFxcdFxcdHNsYXZlcyA9IHJjdV9kZXJlZmVyZW5jZShib25kLVxcdTAwM2V1c2FibGVfc2xhdmVzKTtcXG4xNDAzOlxcdFxcdFxcdFxcdFxcdGNvdW50ID0gc2xhdmVzID8gUkVBRF9PTkNFKHNsYXZlcy1cXHUwMDNlY291bnQpIDogMDtcXG4xNDA0OlxcdFxcdFxcdFxcdFxcdGlmIChsaWtlbHkoY291bnQpKVxcbjE0MDU6XFx0XFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUgPSBzbGF2ZXMtXFx1MDAzZWFycltoYXNoX2luZGV4ICVcXG4xNDA2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjb3VudF07XFxuMTQwNzpcXHRcXHRcXHRcXHR9XFxuMTQwODpcXHRcXHRcXHRcXHRicmVhaztcXG4xNDA5OlxcdFxcdFxcdH1cXG4xNDEwOlxcdFxcdH1cXG4xNDExOlxcdFxcdHJldHVybiB0eF9zbGF2ZTtcXG4xNDEyOlxcdH1cXG4xNDEzOlxcdFxcbjE0MTQ6XFx0bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuMTQxNTpcXHR7XFxuMTQxNjpcXHRcXHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTtcXG4xNDE3OlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmU7XFxuMTQxODpcXHRcXG4xNDE5OlxcdFxcdHR4X3NsYXZlID0gYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcXG4xNDIwOlxcdFxcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xcbjE0MjE6XFx0fVxcbjE0MjI6XFx0XFxuMTQyMzpcXHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbjE0MjQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNDI1OlxcdHtcXG4xNDI2OlxcdFxcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xcbjE0Mjc6XFx0XFx0c3RhdGljIGNvbnN0IF9fYmUzMiBpcF9iY2FzdCA9IGh0b25sKDB4ZmZmZmZmZmYpO1xcbjE0Mjg6XFx0XFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XFxuMTQyOTpcXHRcXHRjb25zdCB1OCAqaGFzaF9zdGFydCA9IE5VTEw7XFxuMTQzMDpcXHRcXHRib29sIGRvX3R4X2JhbGFuY2UgPSB0cnVlO1xcbjE0MzE6XFx0XFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XFxuMTQzMjpcXHRcXHR1MzIgaGFzaF9pbmRleCA9IDA7XFxuMTQzMzpcXHRcXHRpbnQgaGFzaF9zaXplID0gMDtcXG4xNDM0OlxcdFxcbjE0MzU6XFx0XFx0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xcbjE0MzY6XFx0XFxuMTQzNzpcXHRcXHRzd2l0Y2ggKG50b2hzKHNrYi1cXHUwMDNlcHJvdG9jb2wpKSB7XFxuMTQzODpcXHRcXHRjYXNlIEVUSF9QX0lQOiB7XFxuMTQzOTpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6MTcuOTYwMDY3NzE3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3NTEwNDQ4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgQm9uZGluZyBEcml2ZXIgVHJhbnNtaXQgUGF0aCBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBib25kaW5nIGRyaXZlciBjaGFuZ2VzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBmdXp6YWJsZT9cIiBBYnNvbHV0ZWx5ISBUaGlzIGxvb2tzIGxpa2UgYSBwcmltZSB0YXJnZXQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgQUxCL1RMQiB0cmFuc21pdCBwYXRocywgd2hpY2ggaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljLCBhbmQgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gdmlydHVhbGx5IGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIGEgc3RhbmRhcmQgYm9uZGluZyBkZXZpY2UgY29uZmlndXJhdGlvbiBhbmQgbmV0d29yayB0cmFmZmljLiBUaGlzIG9wZW5zIHRoZSBkb29yIHRvIHZlcmlmeWluZyBoZWFkcm9vbSwgbW9kaWZpY2F0aW9ucyB0byBjbG9uZWQgU0tCcywgYW5kIHBhY2tldCB0cmFuc21pc3Npb24gaW4gZ2VuZXJhbC4gRXJyb3IgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmYWlsdXJlIGluIGBza2JfY293X2hlYWRgLCBpcyBhIGtleSBhcmVhIG9mIGZvY3VzIGZvciB0aGVzZSBjaGFuZ2VzLlxuXG5IZXJlJ3MgdGhlIGJyZWFrZG93biBvZiB3aGF0IEkgc2VlOlxuXG4xLiAgKipgcmxiX2FycF94bWl0YCoqOiBUaGUgYmlnZ2VzdCBjaGFuZ2UgaGVyZSBpcyB0aGUgaW5jbHVzaW9uIG9mIGBza2JfY293X2hlYWQoc2tiLCAwKWAgKmJlZm9yZSogbW9kaWZ5aW5nIGBhcnAtXHUwMDNlbWFjX3NyY2AgaW4gYW4gQVJQIHJlcGx5LiBUaGlzIGxvb2tzIGxpa2UgdGhleSdyZSBwcm90ZWN0aW5nIGFnYWluc3QgbW9kaWZpY2F0aW9ucyB0byBzaGFyZWQgU0tCIGhlYWRlcnMuIENydWNpYWxseSwgdGhleSByZS1mZXRjaCBgYXJwYCBhZnRlciB0aGUgYHNrYl9jb3dfaGVhZGAgdG8gaGFuZGxlIGEgcG90ZW50aWFsIHJlbG9jYXRpb24gb2YgYHNrYi1cdTAwM2VoZWFkYC4gR29vZC5cbjIuICAqKmBib25kX2RvX2FsYl94bWl0YCoqOiBTaW1pbGFyIHBhdHRlcm4uIGBza2JfY293X2hlYWQoc2tiLCAwKWAgaXMgY2FsbGVkIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHNvdXJjZSBNQUMgYWRkcmVzcywgYGV0aGVyX2FkZHJfY29weShldGhfZGF0YS1cdTAwM2VoX3NvdXJjZSwgdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKWAuIFRoZSBjb2RlIHRoZW4gdXNlcyBgc2tiX2V0aF9oZHIoc2tiKS1cdTAwM2VoX3NvdXJjZWAuIFRoZSBgYm9uZF90eF9kcm9wYCBwYXRoIGlmIGBza2JfY293X2hlYWRgIGZhaWxzIGlzIGEgcG9zaXRpdmUgc3RlcC5cbjMuICAqKmBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgXHUwMDI2IDQuIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAqKjogSGVyZSwgd2UndmUgZ290IHNvbWUgcmVmYWN0b3JpbmcuIFRoZSBjb2RlIGhhcyBtb3ZlZCBmcm9tIGBza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOyBldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtgIHRvIGBldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7YCBJdCBsb29rcyBsaWtlIGEgY29kZSBzaW1wbGlmaWNhdGlvbiwgbm93IGRpcmVjdGx5IGFjY2Vzc2luZyB0aGUgRXRoZXJuZXQgaGVhZGVyLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gdGFyZ2V0LiBMb29rcyBsaWtlIGBib25kX2FsYl94bWl0YCBhbmQgYGJvbmRfdGxiX3htaXRgLCBhcmUga2V5IHN0YXJ0aW5nIHBvaW50cyBhcyB0aGV5IGFyZSBjYWxsZWQgZnJvbSBgX19ib25kX3N0YXJ0X3htaXRgLiBUaGVuLCB3ZSBzaG91bGQgbG9vayBhdCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgIGFuZCBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgIGFuZCBpZiB0aGV5IGFyZSBleHBvcnRlZCBvciBub24tc3RhdGljLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBpbmNsdWRlL25ldC9ib25kX2FsYi5oYCB0byBtYWtlIHN1cmUuIEknbSB0aGlua2luZywgdGhpcyBtaWdodCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHNvbWUgdGFyZ2V0ZWQgZnV6emluZyBjYW1wYWlnbnMuIFRoZSBjaGFuZ2VzIGhlcmUgc2VlbSB0byBiZSB0byBpbXByb3ZlIHJlbGlhYmlsaXR5IGFuZCBjb3JyZWN0bmVzcyB1bmRlciBjb25jdXJyZW50IGFjY2VzcyBzY2VuYXJpb3MgYW5kIHRvIGNsZWFuIHVwIGNvZGUsIGFuZCBpdCdzIHNvbWV0aGluZyB0aGF0IGlzIGltcG9ydGFudCB0byBhdWRpdCBmb3IgYSByZWxpYWJsZSBuZXR3b3JrIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA3NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjIzLjcxMTExNTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNzQ2Nzk2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJib25kXy4qeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9ib25kX2FsYi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2JvbmRfYWxiLmg9MTU4PXZvaWQgYm9uZF9hbGJfaGFuZGxlX2FjdGl2ZV9jaGFuZ2Uoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X3NsYXZlKTtcXG5pbmNsdWRlL25ldC9ib25kX2FsYi5oOjE1OTpuZXRkZXZfdHhfdCBib25kX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldik7XFxuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaDoxNjA6bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpO1xcbmluY2x1ZGUvbmV0L2JvbmRfYWxiLmg6MTYxOnN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaC0xNjItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaDoxNjM6c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG5pbmNsdWRlL25ldC9ib25kX2FsYi5oLTE2NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6MjQuNTQ4NTkwMDM2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NzcxMzIyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEJvbmRpbmcgVHJhbnNtaXNzaW9uIFBhdGhzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbmV0d29yayBib25kaW5nIGNvZGUgYWdhaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmFuc21pc3Npb24gcGF0aHMsIHNwZWNpZmljYWxseSBob3cgdGhlIGJvbmRpbmcgZHJpdmVyIGhhbmRsZXMgQVJQIHJlcXVlc3RzLiBSaWdodCBub3csIEknbSBmb2N1c2luZyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRyYW5zbWlzc2lvbi4gSSBzZWUgdGhhdCBgYm9uZF9hbGJfeG1pdGAsIGBib25kX3RsYl94bWl0YCwgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCwgYW5kIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYXJlIGFsbCBkZWNsYXJlZCBpbiBgaW5jbHVkZS9uZXQvYm9uZF9hbGIuaGAuIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBcImFsYlwiIGFuZCBcInRsYlwiIHByZWZpeGVzLCBpbmRpY2F0aW5nIGFjdGl2ZS1iYWNrdXAgYW5kIHRyYW5zbWl0IGxvYWQgYmFsYW5jaW5nIG1vZGVzLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBybGJfYXJwX3htaXRgIGZpdHMgaW50byB0aGlzIHBpY3R1cmUuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSBjYWxscyB0byB0aGF0IGZ1bmN0aW9uIHRvIHNlZSBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGggdGhlIG90aGVyIGZ1bmN0aW9ucyBJIGp1c3QgbWVudGlvbmVkLiBUaGlzIHdpbGwgaGVscCBtZSB0cmFjZSB0aGUgQVJQIHRyYW5zbWlzc2lvbiBwYXRoIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIEtub3dpbmcgdGhpcywgSSBjYW4gYmVnaW4gdG8gZXhhbWluZSB0aGUgZGF0YSBmbG93IHRocm91Z2ggdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU4NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjI3LjEyNTcyNDM3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzg4MTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJybGJfYXJwX3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9NTUzPXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnJsYl9jaG9vc2VfY2hhbm5lbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTY1Mi0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6NjUzOnN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnJsYl9hcnBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtNjU0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNDIzPXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQ5Ni1cXHRcXHRpZiAoYm9uZF9pbmZvLVxcdTAwM2VybGJfZW5hYmxlZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQ5NzpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJsYl9hcnBfeG1pdChza2IsIGJvbmQpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNDk4LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowODoyNy4xNzk2MDg5ODlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2MDQ0Nzc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipBbmFseXppbmcgVHJhbnNtaXQgRW50cnkgUG9pbnRzIGluIEJvbmRpbmcqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYm9uZGluZyBkcml2ZXIsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgdHJhbnNtaXQgcGF0aC4gSSBrbm93IHRoYXQgYGJvbmRfYWxiX3htaXRgIGFuZCBgYm9uZF90bGJfeG1pdGAgYXJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBmb3IgdHJhbnNtaXQgb3BlcmF0aW9ucy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gYGJvbmRfYWxiX3htaXRgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBnb2luZyBvbiB3aXRoaW4gdGhhdCBmdW5jdGlvbjsgSSBuZWVkIHRvIHNlZSB0aGUgbG9naWMsIHRoZSBkYXRhIGZsb3csIGFuZCBob3cgaXQgaGFuZGxlcyBwYWNrZXQgdHJhbnNtaXNzaW9uIHdpdGhpbiB0aGUgQWN0aXZlLUJhY2t1cCBhbmQgVHJhbnNtaXQgTG9hZCBCYWxhbmNpbmcgYm9uZGluZyBtb2Rlcy4gV2hhdCdzIGl0IGRvaW5nIHdpdGggdGhlIHBhY2tldHM/IEhvdyBkb2VzIGl0IGNob29zZSB0aGUgaW50ZXJmYWNlPyBXaGF0J3MgdGhlIGNvbnRleHQgc3dpdGNoaW5nIGhhcHBlbmluZyBpbiBoZXJlPyBMZXQncyBnZXQgZG93biB0byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNjYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowODoyOS41NDAwNTk0OTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTIwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTIwOlxcdFxcdFxcdFxcdFxcdHR4X3NsYXZlID0gc2xhdmVzLVxcdTAwM2VhcnJbYm9uZF94bWl0X2hhc2goYm9uZCwgc2tiKSAlXFxuMTUyMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY291bnRdO1xcbjE1MjI6XFx0XFx0XFx0fVxcbjE1MjM6XFx0XFx0fVxcbjE1MjQ6XFx0XFx0cmV0dXJuIHR4X3NsYXZlO1xcbjE1MjU6XFx0fVxcbjE1MjY6XFx0XFxuMTUyNzpcXHRuZXRkZXZfdHhfdCBib25kX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG4xNTI4OlxcdHtcXG4xNTI5OlxcdFxcdHN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoYm9uZF9kZXYpO1xcbjE1MzA6XFx0XFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XFxuMTUzMTpcXHRcXG4xNTMyOlxcdFxcdHR4X3NsYXZlID0gYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcXG4xNTMzOlxcdFxcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xcbjE1MzQ6XFx0fVxcbjE1MzU6XFx0XFxuMTUzNjpcXHR2b2lkIGJvbmRfYWxiX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbjE1Mzc6XFx0e1xcbjE1Mzg6XFx0XFx0c3RydWN0IGJvbmRpbmcgKmJvbmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJvbmRpbmcsXFxuMTUzOTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgYWxiX3dvcmsud29yayk7XFxuMTU0MDpcXHRcXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcXG4xNTQxOlxcdFxcdHN0cnVjdCBzbGF2ZSAqc2xhdmUsICpjdXJyO1xcbjE1NDI6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcXG4xNTQzOlxcdFxcbjE1NDQ6XFx0XFx0aWYgKCFib25kX2hhc19zbGF2ZXMoYm9uZCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6MjkuNTQwMTc2MDg0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NTYwMjc2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2NvbmZpZyBEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIHRoZSBgQk9ORElOR2AgZHJpdmVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIG5hdmlnYXRlIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZSwgd2hpY2ggaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQW5kIGhlcmUgd2UgYXJlOlxuXG5gYGBrY29uZmlnXG5pZiBORVRfQ09SRVxuXG5jb25maWcgQk9ORElOR1xuXHR0cmlzdGF0ZSBcIkJvbmRpbmcgZHJpdmVyIHN1cHBvcnRcIlxuXHRkZXBlbmRzIG9uIElORVRcblx0ZGVwZW5kcyBvbiBUTFMgfHwgVExTX0RFVklDRT1uXG5gYGBcblxuUmlnaHQsIHNvIGBCT05ESU5HYCBpcyB0cmlzdGF0ZSwgbWVhbmluZyBpdCBjYW4gYmUgYnVpbHQgYXMgYSBtb2R1bGUsIGJ1aWx0LWluLCBvciBkaXNhYmxlZC4gVGhlIGtleSBpcyB0aGUgYGRlcGVuZHMgb25gIGNsYXVzZXMuIFdlJ3ZlIGdvdCBkZXBlbmRlbmNpZXMgb24gYElORVRgICh3aGljaCBpcyBzdGFuZGFyZCBmb3IgYW55dGhpbmcgbmV0d29ya2luZyksIGFuZCBgVExTYCBvciwgaWYgYFRMU2AgaXNuJ3QgZW5hYmxlZCwgdGhlbiBgVExTX0RFVklDRWAgbXVzdCBiZSBzcGVjaWZpY2FsbHkgZGlzYWJsZWQuXG5cbk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgYE5FVF9DT1JFYC4gV2hlcmUgaXMgKnRoYXQqIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGRlcGVuZGVuY3kgYmFjayBhbmQgZmlndXJlIG91dCBpdHMgaW1wbGljYXRpb25zLiBJIGtub3cgaXQncyAqbGlrZWx5KiBkZWZpbmVkIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIG9yIHBvc3NpYmx5IGV2ZW4gdGhlIGJyb2FkZXIgYE5FVERFVklDRVNgIGZyYW1ld29yaywgc28gbGV0J3MgcXVpY2tseSBjaGVjayB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gTGV0J3MgZmluZCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MjcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowODozMy4xOTYyMDY0NzFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDM0Nzg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0NPUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0yOT1jb25maWcgTUlJXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMxLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzI6Y29uZmlnIE5FVF9DT1JFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMy1cXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6MzMuMzQwNTU5MjI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NjU3NDI0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byBCb25kaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBuZXR3b3JrIGJvbmRpbmcsIG5hbWVseSBgQ09ORklHX0JPTkRJTkdgIGFuZCBgQ09ORklHX0lORVRgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGxpa2VseSBzdXNwZWN0cy4gQnV0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAsIGxldCdzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2suIEknbGwgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHN1YnRseSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGx1cmtpbmcgaW4gZWl0aGVyIGBkcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlYCBvciBgYm9uZF9hbGIuY2AgaXRzZWxmLiBJdCdzIGVhc3kgdG8gb3Zlcmxvb2sgYSBsZXNzIG9idmlvdXMgZGVwZW5kZW5jeSwgYW5kIGEgcXVpY2sgc2NhbiBjYW4gc2F2ZSBhIGxvdCBvZiBoZWFkLXNjcmF0Y2hpbmcgbGF0ZXIuIEkgd2FudCB0byBiZSAqdGhvcm91Z2gqLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI5MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjM1LjgwNjMwMzgzM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2MjUzMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0JPTkRJTkcpICs9IGJvbmRpbmcub1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUtNy1cXG5kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlPTg9Ym9uZGluZy1vYmpzIDo9IGJvbmRfbWFpbi5vIGJvbmRfM2FkLm8gYm9uZF9hbGIubyBib25kX3N5c2ZzLm8gYm9uZF9zeXNmc19zbGF2ZS5vIGJvbmRfZGVidWdmcy5vIGJvbmRfbmV0bGluay5vIGJvbmRfb3B0aW9ucy5vXFxuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZS05LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGU6MTA6cHJvYy0kKENPTkZJR19QUk9DX0ZTKSArPSBib25kX3Byb2Nmcy5vXFxuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZS0xMS1ib25kaW5nLW9ianMgKz0gJChwcm9jLXkpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTktXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzoxMDojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIFxcdTAwMjZcXHUwMDI2ICFkZWZpbmVkKENPTkZJR19ORVRfTlMpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy0xMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM9ODc9dm9pZCBib25kX2Rlc3Ryb3lfZGVidWdmcyh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy05My1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jOjk0OiNlbHNlIC8qICFDT05GSUdfREVCVUdfRlMgKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTk1LVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYz0xMTI9dm9pZCBib25kX2Rlc3Ryb3lfZGVidWdmcyh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy0xMTUtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzoxMTY6I2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqL1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy04OC0jaW5jbHVkZSBcXHUwMDNjbmV0L2JvbmRfYWxiLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo4OTojaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTkwLSNpbmNsdWRlIFxcdTAwM2NuZXQvdGxzLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTIwMD1NT0RVTEVfUEFSTV9ERVNDKGxwX2ludGVydmFsLCBcXFwiVGhlIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gaW5zdGFuY2VzIHdoZXJlIFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjA1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MjA2OiNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjA3LURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKG5ldHBvbGxfYmxvY2tfdHgpO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MDc9c3RhdGljIGludCBib25kX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MjQtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0MjU6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQyNi0vKipcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NzM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybWRldl9vcHMgYm9uZF94ZnJtZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNzQ1LX07XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo3NDY6I2VuZGlmIC8qIENPTkZJR19YRlJNX09GRkxPQUQgKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTc0Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTI2Nj12b2lkIGJvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfYWN0aXZlKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMjc2LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTI3NzojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTI3OC1cXHRib25kX2lwc2VjX2RlbF9zYV9hbGwoYm9uZCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxMjc5OiNlbmRpZiAvKiBDT05GSUdfWEZSTV9PRkZMT0FEICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMjgwLVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzQxLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTM0MjojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTM0My1cXHRib25kX2lwc2VjX2FkZF9zYV9hbGwoYm9uZCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxMzQ0OiNlbmRpZiAvKiBDT05GSUdfWEZSTV9PRkZMT0FEICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzQ1LVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xMzcwPXZvaWQgYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzkwLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTM5MTojaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTEzOTItc3RhdGljIGlubGluZSBpbnQgc2xhdmVfZW5hYmxlX25ldHBvbGwoc3RydWN0IHNsYXZlICpzbGF2ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTc0ND1zdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBzbGF2ZV9rdHlwZSA9IHtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE3NDUtXFx0LnJlbGVhc2UgPSBzbGF2ZV9rb2JqX3JlbGVhc2UsXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxNzQ2OiNpZmRlZiBDT05GSUdfU1lTRlNcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE3NDctXFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZzbGF2ZV9zeXNmc19vcHMsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTE4ODg9aW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTIyMjAtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyMjIxOiNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjIyMi1cXHRpZiAoYm9uZC1cXHUwMDNlZGV2LVxcdTAwM2VucGluZm8pIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MzE1Mj1zdGF0aWMgaW50IGJvbmRfYXJwX3Jjdihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzIzMS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjMyMzI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zMjMzLXN0YXRpYyB2b2lkIGJvbmRfbnNfc2VuZChzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0zNDIxPWludCBib25kX3Jjdl92YWxpZGF0ZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQyMy17XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozNDI0OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQyNS1cXHRib29sIGlzX2lwdjYgPSBza2ItXFx1MDAzZXByb3RvY29sID09IF9fY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTM0MzQtXFx0XFx0aWYgKChzbGF2ZV9kb19hcnBfdmFsaWRhdGVfb25seShib25kKSBcXHUwMDI2XFx1MDAyNiBpc19hcnApIHx8XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozNDM1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQzNi1cXHRcXHQgICAgKHNsYXZlX2RvX2FycF92YWxpZGF0ZV9vbmx5KGJvbmQpIFxcdTAwMjZcXHUwMDI2IGlzX2lwdjYpIHx8XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTM0NDItXFx0XFx0cmV0dXJuIGJvbmRfYXJwX3Jjdihza2IsIGJvbmQsIHNsYXZlKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjM0NDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zNDQ0LVxcdH0gZWxzZSBpZiAoaXNfaXB2NiBcXHUwMDI2XFx1MDAyNiBsaWtlbHkoaXB2Nl9tb2RfZW5hYmxlZCgpKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0zNDUyPXN0YXRpYyB2b2lkIGJvbmRfc2VuZF92YWxpZGF0ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ1NC1cXHRib25kX2FycF9zZW5kX2FsbChib25kLCBzbGF2ZSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozNDU1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ1Ni1cXHRpZiAobGlrZWx5KGlwdjZfbW9kX2VuYWJsZWQoKSkpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTM5MTc9c3RhdGljIGludCBib25kX21hc3Rlcl9uZXRkZXZfZXZlbnQodW5zaWduZWQgbG9uZyBldmVudCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzkyOC1cXHRcXHRib25kX3JlbW92ZV9wcm9jX2VudHJ5KGV2ZW50X2JvbmQpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzkyOTojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzkzMC1cXHRcXHR4ZnJtX2Rldl9zdGF0ZV9mbHVzaChkZXZfbmV0KGJvbmRfZGV2KSwgYm9uZF9kZXYsIHRydWUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzkzMTojZW5kaWYgLyogQ09ORklHX1hGUk1fT0ZGTE9BRCAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzkzMi1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDQ0Nj1zdGF0aWMgdm9pZCBib25kX2ZvbGRfc3RhdHMoc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpfcmVzLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NDcxLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDQ3MjojaWZkZWYgQ09ORklHX0xPQ0tERVBcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQ0NzMtc3RhdGljIGludCBib25kX2dldF9sb3dlc3RfbGV2ZWxfcmN1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQ1MTM9c3RhdGljIHZvaWQgYm9uZF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NTIzLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQ1MjQ6I2lmZGVmIENPTkZJR19MT0NLREVQXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NTI1LVxcdG5lc3RfbGV2ZWwgPSBib25kX2dldF9sb3dlc3RfbGV2ZWxfcmN1KGJvbmRfZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTQ1NT1zdGF0aWMgdm9pZCBib25kX3NrX3RvX2Zsb3coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd19rZXlzICpmbG93KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDU3LVxcdHN3aXRjaCAoc2stXFx1MDAzZXNrX2ZhbWlseSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTQ1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0NTktXFx0Y2FzZSBBRl9JTkVUNjpcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTUyMD1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfc2tfZ2V0X2xvd2VyX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTMzLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTUzNDojaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1MzUtc3RhdGljIG5ldGRldl90eF90IGJvbmRfdGxzX2RldmljZV94bWl0KHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NTUwPXN0YXRpYyBuZXRkZXZfdHhfdCBfX2JvbmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTU3LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTU1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1NTktXFx0aWYgKHRsc19pc19za2JfdHhfZGV2aWNlX29mZmxvYWRlZChza2IpKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01OTQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm9uZF9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01OTU5LVxcdC5uZG9fdmxhbl9yeF9raWxsX3ZpZFxcdD0gYm9uZF92bGFuX3J4X2tpbGxfdmlkLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTk2MDojaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU5NjEtXFx0Lm5kb19uZXRwb2xsX3NldHVwXFx0PSBib25kX25ldHBvbGxfc2V0dXAsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU5OTI9dm9pZCBib25kX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjAxNy1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYwMTg6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYwMTktXFx0Lyogc2V0IHVwIHhmcm0gZGV2aWNlIG9wcyAob25seSBzdXBwb3J0ZWQgaW4gYWN0aXZlLWJhY2t1cCByaWdodCBub3cpICovXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYwMjItXFx0bXV0ZXhfaW5pdChcXHUwMDI2Ym9uZC1cXHUwMDNlaXBzZWNfbG9jayk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MDIzOiNlbmRpZiAvKiBDT05GSUdfWEZSTV9PRkZMT0FEICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDI0LVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDQ3LVxcdGJvbmRfZGV2LVxcdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0dTT19QQVJUSUFMO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjA0ODojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjA0OS1cXHRib25kX2Rldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gQk9ORF9YRlJNX0ZFQVRVUkVTO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDUyLVxcdFxcdGJvbmRfZGV2LVxcdTAwM2VmZWF0dXJlcyB8PSBCT05EX1hGUk1fRkVBVFVSRVM7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MDUzOiNlbmRpZiAvKiBDT05GSUdfWEZSTV9PRkZMT0FEICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDU0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NjA1OT1zdGF0aWMgdm9pZCBib25kX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYwNzEtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MDcyOiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDczLVxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmJvbmQtXFx1MDAzZWlwc2VjX2xvY2spO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjA3NDojZW5kaWYgLyogQ09ORklHX1hGUk1fT0ZGTE9BRCAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjA3NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NjA4NT1zdGF0aWMgaW50IF9faW5pdCBib25kX2NoZWNrX3BhcmFtcyhzdHJ1Y3QgYm9uZF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjQ2OC1cXHRtZW1jcHkocGFyYW1zLVxcdTAwM2VhcnBfdGFyZ2V0cywgYXJwX3RhcmdldCwgc2l6ZW9mKGFycF90YXJnZXQpKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjY0Njk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02NDcwLVxcdG1lbXNldChwYXJhbXMtXFx1MDAzZW5zX3RhcmdldHMsIDAsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpICogQk9ORF9NQVhfTlNfVEFSR0VUUyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTY2NTQ9c3RhdGljIHZvaWQgX19leGl0IGJvbmRpbmdfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02NjYyLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjY2MzojaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY2NjQtXFx0LyogTWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgYW4gaW1iYWxhbmNlIG9uIG91ciBuZXRwb2xsIGJsb2NraW5nICovXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jPTIxNj1zdGF0aWMgaW50IGJvbmRfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTMzOS1cXHR9XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzozNDA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zNDEtXFx0aWYgKGRhdGFbSUZMQV9CT05EX05TX0lQNl9UQVJHRVRdKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jPTcwMD1zdGF0aWMgaW50IGJvbmRfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTc3MC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjc3MTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTc3Mi1cXHR0YXJnZXRzID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJRkxBX0JPTkRfTlNfSVA2X1RBUkdFVCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jPTg5Nz1zdGF0aWMgYm9vbCBib25kX3NldF94ZnJtX2ZlYXR1cmVzKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMtODk4LXtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jOjg5OTpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1hGUk1fT0ZGTE9BRCkpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy05MDAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz0xMjYwPXN0YXRpYyBpbnQgYm9uZF9vcHRpb25fYXJwX2lwX3RhcmdldHNfc2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xMjg1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6MTI4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTEyODctc3RhdGljIGJvb2wgc2xhdmVfY2FuX3NldF9uc19tYWRkcihjb25zdCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYz01OT1zdGF0aWMgdm9pZCBib25kX2luZm9fc2hvd19tYXN0ZXIoc3RydWN0IHNlcV9maWxlICpzZXEpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMtMTM4LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYzoxMzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jLTE0MC1cXHRcXHRwcmludGVkID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6MzUuODUzOTM0NDMyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxODQ4MTE4MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhc29uaW5nIEJlaGluZCB0aGUgQm9uZGVkIFBhY2tldCBUcmFuc21pc3Npb24gTG9naWMgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHdlJ3ZlIGNvdmVyZWQgb3VyIGJhc2VzLiBGaXJzdCwgbGV0IG1lIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGBGb2N1c1N5bWJvbHNgIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgdGFyZ2V0aW5nIHRoZSByaWdodCBhcmVhczogYGJvbmRfYWxiX3htaXRgLCBgYm9uZF90bGJfeG1pdGAsIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAsIGFuZCBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgLiBUaGF0IGxvb2tzIHJpZ2h0LCB0aG9zZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRvIGV4YW1pbmUuIE5leHQsIGxldCBtZSB2ZXJpZnkgdGhhdCB0aGUgbmVjZXNzYXJ5IGBFbmFibGVDb25maWdzYCBhcmUgaW4gcGxhY2U6IHNwZWNpZmljYWxseSBgQk9ORElOR2AgYW5kIGBJTkVUYC4gR3JlYXQsIGFsbCBzeXN0ZW1zIG5vbWluYWwgc28gZmFyLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIGZ1enphYmlsaXR5LiBZZXMsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBkZWZpbml0ZWx5IGJlIHRydWUgaGVyZS4gVGhpcyBpcyBhIGNyaXRpY2FsIG1vZGlmaWNhdGlvbiEgV2UncmUgYWx0ZXJpbmcgdGhlIGZ1bmRhbWVudGFsIHBhY2tldCB0cmFuc21pc3Npb24gcHJvY2VzcyBmb3IgYm9uZGluZyBpbiBBY3RpdmUtTG9hZCBCYWxhbmNpbmcgKEFMQikgYW5kIFRyYW5zbWl0IExvYWQgQmFsYW5jaW5nIChUTEIpIG1vZGVzLiBUaGlzIGltcGFjdHMgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGluZ3MgbGlrZSByZXdyaXRpbmcgc291cmNlIE1BQyBhZGRyZXNzZXMgaW4gQVJQIHBhY2tldHMgYW5kIGV0aGVybmV0IGhlYWRlcnMuIFRoZSBhZGRpdGlvbiBvZiBgc2tiX2Nvd19oZWFkYCBpcyBwYXJ0aWN1bGFybHkgc2lnbmlmaWNhbnQgdG8gZW5zdXJlIHdyaXRhYmxlIGhlYWRyb29tLCBhbmQgc3dpdGNoaW5nIHRoZSBoZWFkZXIgYWNjZXNzb3IgZnJvbSBgc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsgZXRoX2hkcihza2IpYCB0byBgc2tiX2V0aF9oZHIoc2tiKWAgaXMgbm90IGp1c3QgYSBjb3NtZXRpYyBjaGFuZ2UuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQncyBmdWxseSB0ZXN0YWJsZSBhbmQgcmVhY2hhYmxlLCBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoYXQgbGV2ZWwgb2YgYWNjZXNzaWJpbGl0eSBpcyBhIGtleSBmYWN0b3IuXG5cbkFscmlnaHQsIHRoYXQncyB0aGUgcmF0aW9uYWxlLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIGFydGljdWxhdGVkIGNsZWFybHkgYW5kIHRoZW4gY2FsbCBgc2V0LXJlc3VsdHNgLiBEb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk4MiwiT3V0cHV0VG9rZW5zIjoxODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6NDEuMDM4NzQ5NTI0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4Mzc5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2FsYl94bWl0XCIsXG4gICAgXCJib25kX3RsYl94bWl0XCIsXG4gICAgXCJib25kX3htaXRfYWxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgdHJhbnNtaXNzaW9uIHBhdGhzIGluIHRoZSBib25kaW5nIGRyaXZlcidzIEFMQiBhbmQgVExCIG1vZGVzIChib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHNrYiBoZWFkcm9vbSBpcyBwcm9wZXJseSBjb3dlZC91bnNoYXJlZCBiZWZvcmUgbW9kaWZ5aW5nIHNvdXJjZSBNQUMgYWRkcmVzc2VzIChpbiBBUlAgcmVwbGllcyBhbmQgZXRoZXJuZXQgaGVhZGVycykgYW5kIHJlcGxhY2VzIHNrYl9yZXNldF9tYWNfaGVhZGVyL2V0aF9oZHIgY2FsbHMgd2l0aCBza2JfZXRoX2hkci4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjb25maWd1cmluZyBib25kaW5nIG5ldHdvcmsgaW50ZXJmYWNlcyBpbiBBTEIgb3IgVExCIG1vZGUgYW5kIHRyYW5zbWl0dGluZyB0cmFmZmljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2FsYl94bWl0XCIsXG4gICAgXCJib25kX3RsYl94bWl0XCIsXG4gICAgXCJib25kX3htaXRfYWxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgdHJhbnNtaXNzaW9uIHBhdGhzIGluIHRoZSBib25kaW5nIGRyaXZlcidzIEFMQiBhbmQgVExCIG1vZGVzIChib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHNrYiBoZWFkcm9vbSBpcyBwcm9wZXJseSBjb3dlZC91bnNoYXJlZCBiZWZvcmUgbW9kaWZ5aW5nIHNvdXJjZSBNQUMgYWRkcmVzc2VzIChpbiBBUlAgcmVwbGllcyBhbmQgZXRoZXJuZXQgaGVhZGVycykgYW5kIHJlcGxhY2VzIHNrYl9yZXNldF9tYWNfaGVhZGVyL2V0aF9oZHIgY2FsbHMgd2l0aCBza2JfZXRoX2hkci4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjb25maWd1cmluZyBib25kaW5nIG5ldHdvcmsgaW50ZXJmYWNlcyBpbiBBTEIgb3IgVExCIG1vZGUgYW5kIHRyYW5zbWl0dGluZyB0cmFmZmljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowODo0MS4xMTM1OTM0NTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODA2ODk4OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6NDEuMTEzOTk5NDgzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTM4MDY0ODkwMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBib25kaW5nIGRyaXZlcidzIEFMQi9UTEIgdHJhbnNtaXQgcGF0aHMgKGJvbmRfYWxiLmMpIHRvIGVuc3VyZSB0aGF0IGBza2JfY293X2hlYWQoKWAgaXMgY2FsbGVkIGJlZm9yZSBtb2RpZnlpbmcgcGFja2V0IGhlYWRlcnMgKHN1Y2ggYXMgYGV0aF9oZHItXFx1MDAzZWhfc291cmNlYCBvciB0aGUgQVJQIGhlYWRlcidzIHNvdXJjZSBNQUMpLCBhdm9pZGluZyBtb2RpZmljYXRpb24gb2Ygc2hhcmVkL2Nsb25lZCBza2IgaGVhZGVyIG1lbW9yeS4gSXQgYWxzbyByZXBsYWNlcyBjYWxscyByZXNldHRpbmcgdGhlIE1BQyBoZWFkZXIgd2l0aCBgc2tiX2V0aF9oZHIoKWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBjb25jZXJuIHNrYiBoZWFkIGNsb25hYmlsaXR5LCBwYWNrZXQgaGVhZGVyIG11dGF0aW9uLCBhbmQgbmV0d29yayBwYWNrZXQgdHJhbnNtaXNzaW9uOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZC5cXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzIGFyZSBwb3NzaWJsZSB0aHJvdWdoIHRoaXMgcGF0aC5cXG4zLiBObyBicmFuY2hpbmcgb3IgbG9naWMgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBzaGFyZWQgbWVtb3J5IG1vZGlmaWNhdGlvbiBvciBza2IgbGlmZWN5Y2xlIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dlcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzA5YWRmNmNmYzAzNjRiMTE4NDliY2JjNjI2N2MzNDBlNjdmZTgxMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDk6MDc6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbmluZGV4IDY1NGYwNTFkMDAyMzkuLjVmNzUwZjA4YTE0NDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuQEAgLTY3OCw5ICs2NzgsMTMgQEAgc3RhdGljIHN0cnVjdCBzbGF2ZSAqcmxiX2FycF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxuIFx0aWYgKGFycC1cdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUExZKSkge1xuIFx0XHQvKiB0aGUgYXJwIG11c3QgYmUgc2VudCBvbiB0aGUgc2VsZWN0ZWQgcnggY2hhbm5lbCAqL1xuIFx0XHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XG4tXHRcdGlmICh0eF9zbGF2ZSlcbitcdFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNiB0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbitcdFx0XHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxuK1x0XHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdFx0YXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gXHRcdFx0Ym9uZF9od19hZGRyX2NvcHkoYXJwLVx1MDAzZW1hY19zcmMsIHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcixcbiBcdFx0XHRcdFx0ICB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4pO1xuK1x0XHR9XG4gXHRcdG5ldGRldl9kYmcoYm9uZC1cdTAwM2VkZXYsIFwiKHNsYXZlICVzKTogU2VydmVyIHNlbnQgQVJQIFJlcGx5IHBhY2tldFxcblwiLFxuIFx0XHRcdCAgIHR4X3NsYXZlID8gdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZW5hbWUgOiBcIk5VTExcIik7XG4gXHR9IGVsc2UgaWYgKGFycC1cdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUVVFU1QpKSB7XG5AQCAtMTM0MCw3ICsxMzQ0LDYgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXHRcdFx0XHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcbiB7XG4gXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuLVx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XG4gXG4gXHRpZiAoIXR4X3NsYXZlKSB7XG4gXHRcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cbkBAIC0xMzUxLDcgKzEzNTQsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcbiBcdGlmICh0eF9zbGF2ZSBcdTAwMjZcdTAwMjYgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7XG4gXHRcdGlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbi1cdFx0XHRldGhlcl9hZGRyX2NvcHkoZXRoX2RhdGEtXHUwMDNlaF9zb3VyY2UsXG4rXHRcdFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcbitcdFx0XHRcdHJldHVybiBib25kX3R4X2Ryb3AoYm9uZC1cdTAwM2VkZXYsIHNrYik7XG4rXHRcdFx0ZXRoZXJfYWRkcl9jb3B5KHNrYl9ldGhfaGRyKHNrYiktXHUwMDNlaF9zb3VyY2UsXG4gXHRcdFx0XHRcdHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4gXHRcdH1cbiBcbkBAIC0xMzc1LDggKzEzODAsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XG4gXHR1MzIgaGFzaF9pbmRleDtcbiBcbi1cdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4tXHRldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtcbitcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcbiBcbiBcdC8qIERvIG5vdCBUWCBiYWxhbmNlIGFueSBtdWx0aWNhc3Qgb3IgYnJvYWRjYXN0ICovXG4gXHRpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLVx1MDAzZWhfZGVzdCkpIHtcbkBAIC0xNDI4LDggKzE0MzIsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0dTMyIGhhc2hfaW5kZXggPSAwO1xuIFx0aW50IGhhc2hfc2l6ZSA9IDA7XG4gXG4tXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuLVx0ZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XG4rXHRldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7XG4gXG4gXHRzd2l0Y2ggKG50b2hzKHNrYi1cdTAwM2Vwcm90b2NvbCkpIHtcbiBcdGNhc2UgRVRIX1BfSVA6IHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjQxLjExNDAwMTc3M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTg5MzU2MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJvbmRpbmcgRHJpdmVyIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciB0aGUgYm9uZGluZyBkcml2ZXIsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNjcnV0aW5pemUgaXQgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiBhbmFseXNpcy5cblxuRnJvbSB3aGF0IEkgc2VlLCBpdCBsb29rcyBsaWtlIHRoZXJlIGFyZSBzb21lIG1vZGlmaWNhdGlvbnMgd2l0aGluIHRoZSBBUlAgaGFuZGxpbmcgYW5kIHRyYW5zbWlzc2lvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggdG91Y2hlcyB0aGVzZSBmdW5jdGlvbnM6IGBybGJfYXJwX3htaXRgLCBgYm9uZF9kb19hbGJfeG1pdGAsIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAsIGFuZCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLlxuXG5JbiBgcmxiX2FycF94bWl0YCwgdGhlcmUncyBhIGNvbmRpdGlvbmFsIGNoZWNrIGFuZCBwb3RlbnRpYWwgbW9kaWZpY2F0aW9uIG9mIHRoZSBBUlAgcGFja2V0J3Mgc291cmNlIE1BQyBhZGRyZXNzLiBUaGUgY2hhbmdlIGludm9sdmVzIGEgYHNrYl9jb3dfaGVhZGAgY2FsbCwgcHJlc3VtYWJseSB0byBoYW5kbGUgY29weS1vbi13cml0ZSwgYW5kIGNvbmRpdGlvbmFsbHkgY29weWluZyB0aGUgTUFDIGFkZHJlc3MuIEknbGwgbmVlZCB0byBhc3Nlc3MgaWYgdGhlcmUgYXJlIGFueSBwb2ludHMgd2hlcmUgZGF0YSBpcyB1c2VkIGJlZm9yZSBiZWluZyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuIFRoZSBvcmlnaW5hbCBjb2RlIHNlZW1zIHRvIGNvcHkgdGhlIE1BQyBhZGRyZXNzIHVuY29uZGl0aW9uYWxseSBhbmQgdGhlIGZpeCBzZWVtcyB0byBiZSBjaGVja2luZyB0byBzZWUgaWYgdGhlIHR4X3NsYXZlIGlzIHRoZSBjdXJyZW50bHkgYWN0aXZlIHNsYXZlLiBUaGUgb3JpZ2luYWwgY29kZSBkb2VzIG5vdCBzZWVtIHRvIGhhbmRsZSBDT1cgc28gdGhpcyBjb3VsZCBiZSBhIGZpeC5cblxuU2ltaWxhcmx5LCBgYm9uZF9kb19hbGJfeG1pdGAgbm93IHVzZXMgYHNrYl9jb3dfaGVhZGAgdG8gcG90ZW50aWFsbHkgbW9kaWZ5IHRoZSBzb3VyY2UgTUFDIGFkZHJlc3Mgb2YgYW4gRXRoZXJuZXQgZnJhbWUuIFRoaXMgc3VnZ2VzdHMgcG90ZW50aWFsIHJpc2sgdGhhdCBuZWVkcyBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdGhlIGBoX3NvdXJjZWAgZmllbGQsIHdpdGggdGhlIGBza2JfY293X2hlYWRgIGNhbGwgdGhhdCBjYW4gZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5GaW5hbGx5LCB0aGUgcGF0Y2hlcyBpbiBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgIGFuZCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgIGFyZSByZW1vdmluZyBgc2tiX3Jlc2V0X21hY19oZWFkZXJgIGFuZCByZXBsYWNpbmcgYGV0aF9oZHIoc2tiKWAgd2l0aCBgc2tiX2V0aF9oZHIoc2tiKWAuIFRoaXMgbG9va3MgbGlrZSBzb21lIGNsZWFudXAgdG8gYmUgbW9yZSBhbGlnbmVkIHdpdGggdGhlIGtlcm5lbCdzIEFQSSwgd2hpY2ggY291bGQgYWxzbyBiZSByZWxldmFudCBpbiBhIHNlY3VyaXR5IGNvbnRleHQuIEkgYW0gbm90IHNlZWluZyB0aGF0IHRoZXNlIGNoYW5nZXMgaW5oZXJlbnRseSBtYWtlIHRoZSBjb2RlIG1vcmUgcHJvbmUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEknbGwgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlc2UgY2hhbmdlcyB3aXRoIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgbGFyZ2VyIGJvbmRpbmcgZHJpdmVyIGNvbnRleHQuIEkgd2lsbCBsaWtlbHkgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBkYXRhIGRlcGVuZGVuY2llcy4gTXkgcHJpbWFyeSBjb25jZXJuIHdpbGwgYmUgdG8gYXNjZXJ0YWluIHdoZXRoZXIgdGhlcmUgYXJlIG5vdyBjb2RlIHBhdGhzIHdoZXJlIGEgcmVhZCBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNhbiBvY2N1ciwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEtNU0FOIGFpbXMgdG8gZGV0ZWN0LiBUaGUgYHNrYl9jb3dfaGVhZGAgYWRkaXRpb25zIGFyZSBhIHJlZCBmbGFnIGFuZCB3b3J0aCBjYXJlZnVsIGF0dGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjQ1LjMwMzM2MDkyMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY2MDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjYxOlxcdFxcdGFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiA2NjI6XFx0XFxuIDY2MzpcXHRcXHQvKiBEb24ndCBtb2RpZnkgb3IgbG9hZCBiYWxhbmNlIEFSUHMgdGhhdCBkbyBub3Qgb3JpZ2luYXRlXFxuIDY2NDpcXHRcXHQgKiBmcm9tIHRoZSBib25kIGl0c2VsZiBvciBhIFZMQU4gZGlyZWN0bHkgYWJvdmUgdGhlIGJvbmQuXFxuIDY2NTpcXHRcXHQgKi9cXG4gNjY2OlxcdFxcdGlmICghYm9uZF9zbGF2ZV9oYXNfbWFjX3JjdShib25kLCBhcnAtXFx1MDAzZW1hY19zcmMpKVxcbiA2Njc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDY2ODpcXHRcXG4gNjY5OlxcdFxcdGRldiA9IGlwX2Rldl9maW5kKGRldl9uZXQoYm9uZC1cXHUwMDNlZGV2KSwgYXJwLVxcdTAwM2VpcF9zcmMpO1xcbiA2NzA6XFx0XFx0aWYgKGRldikge1xcbiA2NzE6XFx0XFx0XFx0aWYgKG5ldGlmX2lzX2FueV9icmlkZ2VfbWFzdGVyKGRldikpIHtcXG4gNjcyOlxcdFxcdFxcdFxcdGRldl9wdXQoZGV2KTtcXG4gNjczOlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA2NzQ6XFx0XFx0XFx0fVxcbiA2NzU6XFx0XFx0XFx0ZGV2X3B1dChkZXYpO1xcbiA2NzY6XFx0XFx0fVxcbiA2Nzc6XFx0XFxuIDY3ODpcXHRcXHRpZiAoYXJwLVxcdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUExZKSkge1xcbiA2Nzk6XFx0XFx0XFx0LyogdGhlIGFycCBtdXN0IGJlIHNlbnQgb24gdGhlIHNlbGVjdGVkIHJ4IGNoYW5uZWwgKi9cXG4gNjgwOlxcdFxcdFxcdHR4X3NsYXZlID0gcmxiX2Nob29zZV9jaGFubmVsKHNrYiwgYm9uZCwgYXJwKTtcXG4gNjgxOlxcdFxcdFxcdGlmICh0eF9zbGF2ZSBcXHUwMDI2XFx1MDAyNiB0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XFxuIDY4MjpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxcbiA2ODM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDY4NDpcXHRcXHRcXHRcXHRhcnAgPSAoc3RydWN0IGFycF9wa3QgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gNjg1OlxcdFxcdFxcdFxcdGJvbmRfaHdfYWRkcl9jb3B5KGFycC1cXHUwMDNlbWFjX3NyYywgdHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsXFxuIDY4NjpcXHRcXHRcXHRcXHRcXHRcXHQgIHR4X3NsYXZlLVxcdTAwM2VkZXYtXFx1MDAzZWFkZHJfbGVuKTtcXG4gNjg3OlxcdFxcdFxcdH1cXG4gNjg4OlxcdFxcdFxcdG5ldGRldl9kYmcoYm9uZC1cXHUwMDNlZGV2LCBcXFwiKHNsYXZlICVzKTogU2VydmVyIHNlbnQgQVJQIFJlcGx5IHBhY2tldFxcXFxuXFxcIixcXG4gNjg5OlxcdFxcdFxcdFxcdCAgIHR4X3NsYXZlID8gdHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlbmFtZSA6IFxcXCJOVUxMXFxcIik7XFxuIDY5MDpcXHRcXHR9IGVsc2UgaWYgKGFycC1cXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSkge1xcbiA2OTE6XFx0XFx0XFx0LyogQ3JlYXRlIGFuIGVudHJ5IGluIHRoZSByeF9oYXNodGJsIGZvciB0aGlzIGNsaWVudCBhcyBhXFxuIDY5MjpcXHRcXHRcXHQgKiBwbGFjZSBob2xkZXIuXFxuIDY5MzpcXHRcXHRcXHQgKiBXaGVuIHRoZSBhcnAgcmVwbHkgaXMgcmVjZWl2ZWQgdGhlIGVudHJ5IHdpbGwgYmUgdXBkYXRlZFxcbiA2OTQ6XFx0XFx0XFx0ICogd2l0aCB0aGUgY29ycmVjdCB1bmljYXN0IGFkZHJlc3Mgb2YgdGhlIGNsaWVudC5cXG4gNjk1OlxcdFxcdFxcdCAqL1xcbiA2OTY6XFx0XFx0XFx0dHhfc2xhdmUgPSBybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kLCBhcnApO1xcbiA2OTc6XFx0XFxuIDY5ODpcXHRcXHRcXHQvKiBUaGUgQVJQIHJlcGx5IHBhY2tldHMgbXVzdCBiZSBkZWxheWVkIHNvIHRoYXRcXG4gNjk5OlxcdFxcdFxcdCAqIHRoZXkgY2FuIGNhbmNlbCBvdXQgdGhlIGluZmx1ZW5jZSBvZiB0aGUgQVJQIHJlcXVlc3QuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjQ1LjMwMzUwMzQ3MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzA0MDA5NDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgY29uc2lkZXJpbmcgSSdtIGFuIGV4cGVydCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGllZCBjb250ZXh0OlxuXG4qKkFuYWx5emluZyB0aGUgVHJhbnNtaXNzaW9uIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gZGl2ZSBpbnRvIHRoaXMgdHJhbnNtaXNzaW9uIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBib25kX2RvX2FsYl94bWl0YCBmdW5jdGlvbiwgYnV0IGl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZnVuY3Rpb25zIGFyb3VuZCBpdC4gSXQncyByYXJlIGZvciBhIHNpbmdsZSBmdW5jdGlvbiB0byBiZSB0aGUgcm9vdCBvZiBhbiBpc3N1ZSBpbiBhIG5ldHdvcmsgb3IgaGlnaC1wZXJmb3JtYW5jZSBzeXN0ZW0uIEEgYnVnIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgY291bGQgYmUgYSByZXN1bHQgb2YgdGhlIGludGVyYWN0aW9ucyBhbmQgaGFuZG9mZnMgYmV0d2VlbiBtdWx0aXBsZSBjb21wb25lbnRzLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgZXJyb3IgaGFuZGxpbmcsIGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbiBhY3Jvc3MgdGhlIHJlbGV2YW50IGNhbGwgc3RhY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBkYXRhIG9yaWdpbmF0ZXMsIHRoZSB0cmFuc2Zvcm1hdGlvbnMgaXQgdW5kZXJnb2VzLCBhbmQgdGhlIHVsdGltYXRlIGRlc3RpbmF0aW9uLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIHVuZXhwZWN0ZWQgcmVzb3VyY2UgY29udGVudGlvbj8gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBhbmQgaWRlbnRpZnkgYWxsIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cywgaW5jbHVkaW5nIHRoZSBpbnB1dCBkYXRhIGFuZCBjb25maWd1cmF0aW9uIHRoYXQgaXMgcGFzc2VkIGludG8gaXQuIEdvdHRhIGJlIHN5c3RlbWF0aWMgYWJvdXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcxMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6NDcuNjA3NTE3Mzk3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM0MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNDA6XFx0XFx0XFx0cmxiX2RlaW5pdGlhbGl6ZShib25kKTtcXG4xMzQxOlxcdH1cXG4xMzQyOlxcdFxcbjEzNDM6XFx0c3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuMTM0NDpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcXG4xMzQ1OlxcdHtcXG4xMzQ2OlxcdFxcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xcbjEzNDc6XFx0XFxuMTM0ODpcXHRcXHRpZiAoIXR4X3NsYXZlKSB7XFxuMTM0OTpcXHRcXHRcXHQvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovXFxuMTM1MDpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJjdV9kZXJlZmVyZW5jZShib25kLVxcdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSk7XFxuMTM1MTpcXHRcXHRcXHRpZiAoYm9uZC1cXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKVxcbjEzNTI6XFx0XFx0XFx0XFx0Ym9uZF9pbmZvLVxcdTAwM2V1bmJhbGFuY2VkX2xvYWQgKz0gc2tiLVxcdTAwM2VsZW47XFxuMTM1MzpcXHRcXHR9XFxuMTM1NDpcXHRcXG4xMzU1OlxcdFxcdGlmICh0eF9zbGF2ZSBcXHUwMDI2XFx1MDAyNiBib25kX3NsYXZlX2Nhbl90eCh0eF9zbGF2ZSkpIHtcXG4xMzU2OlxcdFxcdFxcdGlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XFxuMTM1NzpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxcbjEzNTg6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGJvbmRfdHhfZHJvcChib25kLVxcdTAwM2VkZXYsIHNrYik7XFxuMTM1OTpcXHRcXHRcXHRcXHRldGhlcl9hZGRyX2NvcHkoc2tiX2V0aF9oZHIoc2tiKS1cXHUwMDNlaF9zb3VyY2UsXFxuMTM2MDpcXHRcXHRcXHRcXHRcXHRcXHR0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuMTM2MTpcXHRcXHRcXHR9XFxuMTM2MjpcXHRcXG4xMzYzOlxcdFxcdFxcdHJldHVybiBib25kX2Rldl9xdWV1ZV94bWl0KGJvbmQsIHNrYiwgdHhfc2xhdmUtXFx1MDAzZWRldik7XFxuMTM2NDpcXHRcXHR9XFxuMTM2NTpcXHRcXG4xMzY2OlxcdFxcdGlmICh0eF9zbGF2ZSBcXHUwMDI2XFx1MDAyNiBib25kLVxcdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcXG4xMzY3OlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Ym9uZC1cXHUwMDNlbW9kZV9sb2NrKTtcXG4xMzY4OlxcdFxcdFxcdF9fdGxiX2NsZWFyX3NsYXZlKGJvbmQsIHR4X3NsYXZlLCAwKTtcXG4xMzY5OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZib25kLVxcdTAwM2Vtb2RlX2xvY2spO1xcbjEzNzA6XFx0XFx0fVxcbjEzNzE6XFx0XFxuMTM3MjpcXHRcXHQvKiBubyBzdWl0YWJsZSBpbnRlcmZhY2UsIGZyYW1lIG5vdCBzZW50ICovXFxuMTM3MzpcXHRcXHRyZXR1cm4gYm9uZF90eF9kcm9wKGJvbmQtXFx1MDAzZWRldiwgc2tiKTtcXG4xMzc0OlxcdH1cXG4xMzc1OlxcdFxcbjEzNzY6XFx0c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4xMzc3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuMTM3ODpcXHR7XFxuMTM3OTpcXHRcXHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlID0gTlVMTDtcXG4xMzgwOlxcdFxcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xcbjEzODE6XFx0XFx0dTMyIGhhc2hfaW5kZXg7XFxuMTM4MjpcXHRcXG4xMzgzOlxcdFxcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcXG4xMzg0OlxcdFxcbjEzODU6XFx0XFx0LyogRG8gbm90IFRYIGJhbGFuY2UgYW55IG11bHRpY2FzdCBvciBicm9hZGNhc3QgKi9cXG4xMzg2OlxcdFxcdGlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtXFx1MDAzZWhfZGVzdCkpIHtcXG4xMzg3OlxcdFxcdFxcdHN3aXRjaCAoc2tiLVxcdTAwM2Vwcm90b2NvbCkge1xcbjEzODg6XFx0XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4xMzg5OlxcdFxcdFxcdFxcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYikpXFxuMTM5MDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xMzkxOlxcdFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbjEzOTI6XFx0XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxuMTM5MzpcXHRcXHRcXHRcXHRoYXNoX2luZGV4ID0gYm9uZF94bWl0X2hhc2goYm9uZCwgc2tiKTtcXG4xMzk0OlxcdFxcdFxcdFxcdGlmIChib25kLVxcdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcXG4xMzk1OlxcdFxcdFxcdFxcdFxcdHR4X3NsYXZlID0gdGxiX2Nob29zZV9jaGFubmVsKGJvbmQsXFxuMTM5NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBoYXNoX2luZGV4IFxcdTAwMjYgMHhGRixcXG4xMzk3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlbGVuKTtcXG4xMzk4OlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMTM5OTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYm9uZF91cF9zbGF2ZSAqc2xhdmVzO1xcbjE0MDA6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGNvdW50O1xcbjE0MDE6XFx0XFxuMTQwMjpcXHRcXHRcXHRcXHRcXHRzbGF2ZXMgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cXHUwMDNldXNhYmxlX3NsYXZlcyk7XFxuMTQwMzpcXHRcXHRcXHRcXHRcXHRjb3VudCA9IHNsYXZlcyA/IFJFQURfT05DRShzbGF2ZXMtXFx1MDAzZWNvdW50KSA6IDA7XFxuMTQwNDpcXHRcXHRcXHRcXHRcXHRpZiAobGlrZWx5KGNvdW50KSlcXG4xNDA1OlxcdFxcdFxcdFxcdFxcdFxcdHR4X3NsYXZlID0gc2xhdmVzLVxcdTAwM2VhcnJbaGFzaF9pbmRleCAlXFxuMTQwNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY291bnRdO1xcbjE0MDc6XFx0XFx0XFx0XFx0fVxcbjE0MDg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTQwOTpcXHRcXHRcXHR9XFxuMTQxMDpcXHRcXHR9XFxuMTQxMTpcXHRcXHRyZXR1cm4gdHhfc2xhdmU7XFxuMTQxMjpcXHR9XFxuMTQxMzpcXHRcXG4xNDE0OlxcdG5ldGRldl90eF90IGJvbmRfdGxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbjE0MTU6XFx0e1xcbjE0MTY6XFx0XFx0c3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihib25kX2Rldik7XFxuMTQxNzpcXHRcXHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlO1xcbjE0MTg6XFx0XFxuMTQxOTpcXHRcXHR0eF9zbGF2ZSA9IGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KGJvbmQsIHNrYik7XFxuMTQyMDpcXHRcXHRyZXR1cm4gYm9uZF9kb19hbGJfeG1pdChza2IsIGJvbmQsIHR4X3NsYXZlKTtcXG4xNDIxOlxcdH1cXG4xNDIyOlxcdFxcbjE0MjM6XFx0c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4xNDI0OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuMTQyNTpcXHR7XFxuMTQyNjpcXHRcXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcXG4xNDI3OlxcdFxcdHN0YXRpYyBjb25zdCBfX2JlMzIgaXBfYmNhc3QgPSBodG9ubCgweGZmZmZmZmZmKTtcXG4xNDI4OlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xcbjE0Mjk6XFx0XFx0Y29uc3QgdTggKmhhc2hfc3RhcnQgPSBOVUxMO1xcbjE0MzA6XFx0XFx0Ym9vbCBkb190eF9iYWxhbmNlID0gdHJ1ZTtcXG4xNDMxOlxcdFxcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xcbjE0MzI6XFx0XFx0dTMyIGhhc2hfaW5kZXggPSAwO1xcbjE0MzM6XFx0XFx0aW50IGhhc2hfc2l6ZSA9IDA7XFxuMTQzNDpcXHRcXG4xNDM1OlxcdFxcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcXG4xNDM2OlxcdFxcbjE0Mzc6XFx0XFx0c3dpdGNoIChudG9ocyhza2ItXFx1MDAzZXByb3RvY29sKSkge1xcbjE0Mzg6XFx0XFx0Y2FzZSBFVEhfUF9JUDoge1xcbjE0Mzk6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjQ3LjYwNzc2MzQ2NloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MzEyNzAwNDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgS01TQU4gSW1wbGljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIHBhdGNoIGZvY3VzZXMgb24gaXRzIGNvcmUgZnVuY3Rpb246IGVuc3VyaW5nIHByb3BlciB3cml0ZSBwZXJtaXNzaW9ucyBhbmQgY2xvbmluZyBvZiBgc2tiYCBoZWFkZXJzIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBNQUMgYWRkcmVzcyBtb2RpZmljYXRpb25zLiBUaGUgY29kZSBsZXZlcmFnZXMgYHNrYl9jb3dfaGVhZChza2IsIDApYCBiZWZvcmUgbW9kaWZ5aW5nIGhlYWRlciBmaWVsZHMsIGxpa2Ugc291cmNlIE1BQyAoYGV0aF9oZHItXHUwMDNlaF9zb3VyY2VgKSwgaW4gYGJvbmRfYWxiLmNgIChzcGVjaWZpY2FsbHkgYHJsYl9hcnBfeG1pdGAgYW5kIGBib25kX2RvX2FsYl94bWl0YCksIGFuZCBzd2l0Y2hlcyB0byB1c2luZyBgc2tiX2V0aF9oZHIoKWAuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHByZXZlbnRpbmcgZGF0YSByYWNlcyBhbmQgYnVmZmVyIHNoYXJpbmcgaXNzdWVzIHdoZW4gZGVhbGluZyB3aXRoIGNsb25lZCBTS0JzLCBhbmQgaXQgYWxzbyBjb250YWlucyBsb2dpYyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBzb3VyY2UgTUFDIG1vZGlmaWNhdGlvbnMgaWYgdGhlIGFjdGl2ZSBzbGF2ZSBtYXRjaGVzIHRoZSB0cmFuc21pdHRpbmcgc2xhdmUuXG5cbk15IGZpcnN0IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIElzIHRoZSBwYXRjaCBpbnRyb2R1Y2luZyBhbnkgbmV3IGF2ZW51ZXMgZm9yIHRoYXQ/IEkgc2VlIG5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb2Ygc3RhY2sgb3IgaGVhcCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY2FsbHMgdG8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG9yIHRoZSB1c2Ugb2YgTmV0bGluayBTS0IgYXR0cmlidXRlcyBvciBJT0NUTHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQuIENydWNpYWxseSwgdGhlIHVzZSBvZiBgc2tiX2Nvd19oZWFkYCBpcyB0aGUga2V5LiBUaGlzIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhlIGBza2JgJ3MgaGVhZCBpcyB3cml0YWJsZSwgZWZmZWN0aXZlbHkgcHJldmVudGluZyBhbnkgdW5pbnRlbmRlZCB3cml0ZXMgdG8gc2hhcmVkIG1lbW9yeS4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IHdyaXRlIHBlcm1pc3Npb24gY2hlY2tzIGFuZCBjbG9uaW5nIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgYm9uZGluZyBkcml2ZXIncyBwYWNrZXQgdHJhbnNtaXNzaW9uLlxuXG5Ob3csIGxldCdzIHN0ZXAgdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEuIERvZXMgdGhpcyBwYXRjaDpcblxuMS4gICoqRXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLlxuMi4gICoqUmVseSBvbiBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGNvdWxkIGJlIGluZmx1ZW5jZWQgYnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm8uXG4zLiAgKipBbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgbGVhdmUgdW5pbml0aWFsaXplZCBmaWVsZHMgYWNjZXNzaWJsZT8qKiBOby5cbjQuICAqKkludHJvZHVjZSBuZXcgcG9zc2liaWxpdGllcyBmb3Igb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyoqIE5vLlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IHRoYXQgYSBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuXG5cbkhlcmUncyBob3cgSSdkIHN1bW1hcml6ZSBteSByZWFzb25pbmcgZm9yIHRoZSBgS01TQU5SZWFzb25pbmdgOiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzIGFyaXNpbmcgZnJvbSBtb2RpZnlpbmcgaGVhZGVycyBvZiBzaGFyZWQgU0tCcyBpbiB0aGUgYm9uZGluZyBkcml2ZXIuIEl0IGZvY3VzZXMgb24gd3JpdGUgcGVybWlzc2lvbiBjaGVja3MgYnkgbGV2ZXJhZ2luZyBgc2tiX2Nvd19oZWFkKClgIGJlZm9yZSBtb2RpZnlpbmcgcGFja2V0IGhlYWRlcnMgYW5kIHN3aXRjaGVzIHRvIGBza2JfZXRoX2hkcigpYCBmb3IgTUFDIGhlYWRlciBhY2Nlc3MuIFRoZSBwYXRjaCBkb2VzICpub3QqIGFsbG9jYXRlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLCByZWFkIGFueSB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMuIFBvdGVudGlhbCBpc3N1ZXMgaGVyZSBmYWxsIHdpdGhpbiBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGRvbWFpbnMgYW5kIGFyZSBhbHJlYWR5IGFkZHJlc3NlZCBieSBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NzYsIk91dHB1dFRva2VucyI6MjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6NTQuOTIwNDY2MDA5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYm9uZGluZyBkcml2ZXIncyBBTEIvVExCIHRyYW5zbWl0IHBhdGhzIChib25kX2FsYi5jKSB0byBlbnN1cmUgdGhhdCBgc2tiX2Nvd19oZWFkKClgIGlzIGNhbGxlZCBiZWZvcmUgbW9kaWZ5aW5nIHBhY2tldCBoZWFkZXJzIChzdWNoIGFzIGBldGhfaGRyLVxcdTAwM2VoX3NvdXJjZWAgb3IgdGhlIEFSUCBoZWFkZXIncyBzb3VyY2UgTUFDKSwgYXZvaWRpbmcgbW9kaWZpY2F0aW9uIG9mIHNoYXJlZC9jbG9uZWQgc2tiIGhlYWRlciBtZW1vcnkuIEl0IGFsc28gcmVwbGFjZXMgY2FsbHMgcmVzZXR0aW5nIHRoZSBNQUMgaGVhZGVyIHdpdGggYHNrYl9ldGhfaGRyKClgLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgY29uY2VybiBza2IgaGVhZCBjbG9uYWJpbGl0eSwgcGFja2V0IGhlYWRlciBtdXRhdGlvbiwgYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbjpcXG4xLiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuXFxuMi4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrcyBhcmUgcG9zc2libGUgdGhyb3VnaCB0aGlzIHBhdGguXFxuMy4gTm8gYnJhbmNoaW5nIG9yIGxvZ2ljIHJlbGllcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSBtb2RpZmljYXRpb24gb3Igc2tiIGxpZmVjeWNsZSB3b3VsZCBiZSBhZGRyZXNzZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgZGVidWdnZXJzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBib25kaW5nIGRyaXZlcidzIEFMQi9UTEIgdHJhbnNtaXQgcGF0aHMgKGJvbmRfYWxiLmMpIHRvIGVuc3VyZSB0aGF0IGBza2JfY293X2hlYWQoKWAgaXMgY2FsbGVkIGJlZm9yZSBtb2RpZnlpbmcgcGFja2V0IGhlYWRlcnMgKHN1Y2ggYXMgYGV0aF9oZHItXFx1MDAzZWhfc291cmNlYCBvciB0aGUgQVJQIGhlYWRlcidzIHNvdXJjZSBNQUMpLCBhdm9pZGluZyBtb2RpZmljYXRpb24gb2Ygc2hhcmVkL2Nsb25lZCBza2IgaGVhZGVyIG1lbW9yeS4gSXQgYWxzbyByZXBsYWNlcyBjYWxscyByZXNldHRpbmcgdGhlIE1BQyBoZWFkZXIgd2l0aCBgc2tiX2V0aF9oZHIoKWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBjb25jZXJuIHNrYiBoZWFkIGNsb25hYmlsaXR5LCBwYWNrZXQgaGVhZGVyIG11dGF0aW9uLCBhbmQgbmV0d29yayBwYWNrZXQgdHJhbnNtaXNzaW9uOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZC5cXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzIGFyZSBwb3NzaWJsZSB0aHJvdWdoIHRoaXMgcGF0aC5cXG4zLiBObyBicmFuY2hpbmcgb3IgbG9naWMgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBzaGFyZWQgbWVtb3J5IG1vZGlmaWNhdGlvbiBvciBza2IgbGlmZWN5Y2xlIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dlcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrdrdm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 08:33:03 +0000 UTC FinishedAt: 2026-09-03 09:08:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2f38e26a5741abdf152c1b56b22144a06d30fd66", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2f38e26a5741abdf152c1b56b22144a06d30fd66", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET" ], "series_id": "502c55da-fdd3-4e05-988d-377efc02c725" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bond_alb_xmit", "bond_tlb_xmit", "bond_xmit_alb_slave_get", "bond_xmit_tlb_slave_get" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfYWxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF90bGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfYWxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfdGxiX3NsYXZlX2dldCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBBTEIvVExCIHRyYW5zbWl0IHBhdGhzIChib25kX2FsYi5jKSB0byBlbnN1cmUgdGhhdCBgc2tiX2Nvd19oZWFkKClgIGlzIGNhbGxlZCBiZWZvcmUgbW9kaWZ5aW5nIHBhY2tldCBoZWFkZXJzIChzdWNoIGFzIGBldGhfaGRyLVx1MDAzZWhfc291cmNlYCBvciB0aGUgQVJQIGhlYWRlciYjMzk7cyBzb3VyY2UgTUFDKSwgYXZvaWRpbmcgbW9kaWZpY2F0aW9uIG9mIHNoYXJlZC9jbG9uZWQgc2tiIGhlYWRlciBtZW1vcnkuIEl0IGFsc28gcmVwbGFjZXMgY2FsbHMgcmVzZXR0aW5nIHRoZSBNQUMgaGVhZGVyIHdpdGggYHNrYl9ldGhfaGRyKClgLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGNvbmNlcm4gc2tiIGhlYWQgY2xvbmFiaWxpdHksIHBhY2tldCBoZWFkZXIgbXV0YXRpb24sIGFuZCBuZXR3b3JrIHBhY2tldCB0cmFuc21pc3Npb246XG4xLiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzIGFyZSBwb3NzaWJsZSB0aHJvdWdoIHRoaXMgcGF0aC5cbjMuIE5vIGJyYW5jaGluZyBvciBsb2dpYyByZWxpZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBzaGFyZWQgbWVtb3J5IG1vZGlmaWNhdGlvbiBvciBza2IgbGlmZWN5Y2xlIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dlcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCB0cmFuc21pc3Npb24gcGF0aHMgaW4gdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIEFMQiBhbmQgVExCIG1vZGVzIChib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHNrYiBoZWFkcm9vbSBpcyBwcm9wZXJseSBjb3dlZC91bnNoYXJlZCBiZWZvcmUgbW9kaWZ5aW5nIHNvdXJjZSBNQUMgYWRkcmVzc2VzIChpbiBBUlAgcmVwbGllcyBhbmQgZXRoZXJuZXQgaGVhZGVycykgYW5kIHJlcGxhY2VzIHNrYl9yZXNldF9tYWNfaGVhZGVyL2V0aF9oZHIgY2FsbHMgd2l0aCBza2JfZXRoX2hkci4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjb25maWd1cmluZyBib25kaW5nIG5ldHdvcmsgaW50ZXJmYWNlcyBpbiBBTEIgb3IgVExCIG1vZGUgYW5kIHRyYW5zbWl0dGluZyB0cmFmZmljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzA5YWRmNmNmYzAzNjRiMTE4NDliY2JjNjI2N2MzNDBlNjdmZTgxMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDk6MDc6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG5pbmRleCA2NTRmMDUxZDAwMjM5Li41Zjc1MGYwOGExNDQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbkBAIC02NzgsOSAmIzQzOzY3OCwxMyBAQCBzdGF0aWMgc3RydWN0IHNsYXZlICpybGJfYXJwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4gXHRpZiAoYXJwLVx1MDAzZW9wX2NvZGUgPT0gaHRvbnMoQVJQT1BfUkVQTFkpKSB7XG4gXHRcdC8qIHRoZSBhcnAgbXVzdCBiZSBzZW50IG9uIHRoZSBzZWxlY3RlZCByeCBjaGFubmVsICovXG4gXHRcdHR4X3NsYXZlID0gcmxiX2Nob29zZV9jaGFubmVsKHNrYiwgYm9uZCwgYXJwKTtcbi1cdFx0aWYgKHR4X3NsYXZlKVxuJiM0MztcdFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNiB0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbiYjNDM7XHRcdFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRcdFx0YXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gXHRcdFx0Ym9uZF9od19hZGRyX2NvcHkoYXJwLVx1MDAzZW1hY19zcmMsIHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcixcbiBcdFx0XHRcdFx0ICB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4pO1xuJiM0MztcdFx0fVxuIFx0XHRuZXRkZXZfZGJnKGJvbmQtXHUwMDNlZGV2LCBcJiMzNDsoc2xhdmUgJXMpOiBTZXJ2ZXIgc2VudCBBUlAgUmVwbHkgcGFja2V0XFxuXCYjMzQ7LFxuIFx0XHRcdCAgIHR4X3NsYXZlID8gdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZW5hbWUgOiBcJiMzNDtOVUxMXCYjMzQ7KTtcbiBcdH0gZWxzZSBpZiAoYXJwLVx1MDAzZW9wX2NvZGUgPT0gaHRvbnMoQVJQT1BfUkVRVUVTVCkpIHtcbkBAIC0xMzQwLDcgJiM0MzsxMzQ0LDYgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXHRcdFx0XHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcbiB7XG4gXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuLVx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XG4gXG4gXHRpZiAoIXR4X3NsYXZlKSB7XG4gXHRcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cbkBAIC0xMzUxLDcgJiM0MzsxMzU0LDkgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXG4gXHRpZiAodHhfc2xhdmUgXHUwMDI2XHUwMDI2IGJvbmRfc2xhdmVfY2FuX3R4KHR4X3NsYXZlKSkge1xuIFx0XHRpZiAodHhfc2xhdmUgIT0gcmN1X2FjY2Vzc19wb2ludGVyKGJvbmQtXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XG4tXHRcdFx0ZXRoZXJfYWRkcl9jb3B5KGV0aF9kYXRhLVx1MDAzZWhfc291cmNlLFxuJiM0MztcdFx0XHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxuJiM0MztcdFx0XHRcdHJldHVybiBib25kX3R4X2Ryb3AoYm9uZC1cdTAwM2VkZXYsIHNrYik7XG4mIzQzO1x0XHRcdGV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLVx1MDAzZWhfc291cmNlLFxuIFx0XHRcdFx0XHR0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFx0XHR9XG4gXG5AQCAtMTM3NSw4ICYjNDM7MTM4MCw3IEBAIHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXHRzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YTtcbiBcdHUzMiBoYXNoX2luZGV4O1xuIFxuLVx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbi1cdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xuJiM0MztcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcbiBcbiBcdC8qIERvIG5vdCBUWCBiYWxhbmNlIGFueSBtdWx0aWNhc3Qgb3IgYnJvYWRjYXN0ICovXG4gXHRpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLVx1MDAzZWhfZGVzdCkpIHtcbkBAIC0xNDI4LDggJiM0MzsxNDMyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcdHUzMiBoYXNoX2luZGV4ID0gMDtcbiBcdGludCBoYXNoX3NpemUgPSAwO1xuIFxuLVx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbi1cdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xuJiM0MztcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcbiBcbiBcdHN3aXRjaCAobnRvaHMoc2tiLVx1MDAzZXByb3RvY29sKSkge1xuIFx0Y2FzZSBFVEhfUF9JUDoge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfYWxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF90bGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfYWxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfdGxiX3NsYXZlX2dldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgdHJhbnNtaXNzaW9uIHBhdGhzIGluIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBBTEIgYW5kIFRMQiBtb2RlcyAoYm9uZF9hbGIuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBza2IgaGVhZHJvb20gaXMgcHJvcGVybHkgY293ZWQvdW5zaGFyZWQgYmVmb3JlIG1vZGlmeWluZyBzb3VyY2UgTUFDIGFkZHJlc3NlcyAoaW4gQVJQIHJlcGxpZXMgYW5kIGV0aGVybmV0IGhlYWRlcnMpIGFuZCByZXBsYWNlcyBza2JfcmVzZXRfbWFjX2hlYWRlci9ldGhfaGRyIGNhbGxzIHdpdGggc2tiX2V0aF9oZHIuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY29uZmlndXJpbmcgYm9uZGluZyBuZXR3b3JrIGludGVyZmFjZXMgaW4gQUxCIG9yIFRMQiBtb2RlIGFuZCB0cmFuc21pdHRpbmcgdHJhZmZpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcwOWFkZjZjZmMwMzY0YjExODQ5YmNiYzYyNjdjMzQwZTY3ZmU4MTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDA5OjA3OjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCmluZGV4IDY1NGYwNTFkMDAyMzkuLjVmNzUwZjA4YTE0NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKQEAgLTY3OCw5ICYjNDM7Njc4LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnJsYl9hcnBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKIAlpZiAoYXJwLSZndDtvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUExZKSkgewogCQkvKiB0aGUgYXJwIG11c3QgYmUgc2VudCBvbiB0aGUgc2VsZWN0ZWQgcnggY2hhbm5lbCAqLwogCQl0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7Ci0JCWlmICh0eF9zbGF2ZSkKJiM0MzsJCWlmICh0eF9zbGF2ZSAmYW1wOyZhbXA7IHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLSZndDtjdXJyX2FjdGl2ZV9zbGF2ZSkpIHsKJiM0MzsJCQlpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKQomIzQzOwkJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCQlhcnAgPSAoc3RydWN0IGFycF9wa3QgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKIAkJCWJvbmRfaHdfYWRkcl9jb3B5KGFycC0mZ3Q7bWFjX3NyYywgdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIsCiAJCQkJCSAgdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7YWRkcl9sZW4pOwomIzQzOwkJfQogCQluZXRkZXZfZGJnKGJvbmQtJmd0O2RldiwgJiMzNDsoc2xhdmUgJXMpOiBTZXJ2ZXIgc2VudCBBUlAgUmVwbHkgcGFja2V0XG4mIzM0OywKIAkJCSAgIHR4X3NsYXZlID8gdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7bmFtZSA6ICYjMzQ7TlVMTCYjMzQ7KTsKIAl9IGVsc2UgaWYgKGFycC0mZ3Q7b3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSkgewpAQCAtMTM0MCw3ICYjNDM7MTM0NCw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLAogCQkJCSAgICBzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlKQogewogCXN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSAmYW1wOyhCT05EX0FMQl9JTkZPKGJvbmQpKTsKLQlzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTsKIAogCWlmICghdHhfc2xhdmUpIHsKIAkJLyogdW5iYWxhbmNlZCBvciB1bmFzc2lnbmVkLCBzZW5kIHRocm91Z2ggcHJpbWFyeSAqLwpAQCAtMTM1MSw3ICYjNDM7MTM1NCw5IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLAogCiAJaWYgKHR4X3NsYXZlICZhbXA7JmFtcDsgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7CiAJCWlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC0mZ3Q7Y3Vycl9hY3RpdmVfc2xhdmUpKSB7Ci0JCQlldGhlcl9hZGRyX2NvcHkoZXRoX2RhdGEtJmd0O2hfc291cmNlLAomIzQzOwkJCWlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpCiYjNDM7CQkJCXJldHVybiBib25kX3R4X2Ryb3AoYm9uZC0mZ3Q7ZGV2LCBza2IpOwomIzQzOwkJCWV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLSZndDtoX3NvdXJjZSwKIAkJCQkJdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIpOwogCQl9CiAKQEAgLTEzNzUsOCAmIzQzOzEzODAsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLAogCXN0cnVjdCBldGhoZHIgKmV0aF9kYXRhOwogCXUzMiBoYXNoX2luZGV4OwogCi0Jc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQlldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTsKJiM0MzsJZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpOwogCiAJLyogRG8gbm90IFRYIGJhbGFuY2UgYW55IG11bHRpY2FzdCBvciBicm9hZGNhc3QgKi8KIAlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLSZndDtoX2Rlc3QpKSB7CkBAIC0xNDI4LDggJiM0MzsxNDMyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKIAl1MzIgaGFzaF9pbmRleCA9IDA7CiAJaW50IGhhc2hfc2l6ZSA9IDA7CiAKLQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCWV0aF9kYXRhID0gZXRoX2hkcihza2IpOwomIzQzOwlldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7CiAKIAlzd2l0Y2ggKG50b2hzKHNrYi0mZ3Q7cHJvdG9jb2wpKSB7CiAJY2FzZSBFVEhfUF9JUDogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODU2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIGl0cyBmdXp6aW5nIHZpYWJpbGl0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgd29ydGggdGhlIGVmZm9ydCwgd2hhdCBraW5kIG9mIGNvbmZpZ3VyYXRpb24gaXMgbmVlZGVkLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIHdoaWNoIHN5bWJvbHMgYXJlIGxpa2VseSB0YXJnZXRzIGZvciBmb2N1c2VkIGZ1enppbmcuCgpGaXJzdCwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIGRpZmYgaXRzZWxmLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBybGJfYXJwX3htaXRgLCBgYm9uZF9kb19hbGJfeG1pdGAsIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAsIGFuZCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBza2JfY293X2hlYWRgIGFuZCB0aGUgY2hhbmdlIGZyb20gYHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYilgIHRvIGBza2JfZXRoX2hkcihza2IpYCBhcmUgdGhlIGtleSBpbmRpY2F0b3JzIGhlcmUuIFRoZXkgc3VnZ2VzdCBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gU2hhcmVkIG1lbW9yeSBvciBjb3B5aW5nIHNrYnMKCk5vdywgSSBuZWVkIHRvIHBsYWNlIHRoaXMgd2l0aGluIGl0cyBjb250ZXh0LiBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGUgYm9uZGluZyBkcml2ZXIsIGFuZCBpbiBwYXJ0aWN1bGFyLCBBZGFwdGl2ZSBMb2FkIEJhbGFuY2luZyAoQUxCKSBtb2RlLiBUaGlzIGlzIGEgc29mdHdhcmUgbmV0d29yayBkcml2ZXIgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2AuIEltcG9ydGFudGx5LCBpdCYjMzk7cyBmdWxseSB2aXJ0dWFsaXplZCBhbmQgZW11bGF0ZWQuIFRoYXQgbWVhbnMgSSBjYW4gc3BpbiB1cCBib25kaW5nIGRldmljZXMgaW4gVk1zLCBjb250YWluZXJzLCBRRU1VLCBvciBldmVuIFN5emthbGxlciB3aXRob3V0IG5lZWRpbmcgYW55IHNwZWNpZmljIGhhcmR3YXJlLiBUaGlzIGlzIGEgKmh1Z2UqIHBsdXMgZm9yIHRlc3RpbmcgYW5kIGZ1enppbmcuIEkgY2FuIHJlcHJvZHVjZSB0aGUgZW52aXJvbm1lbnQgZWFzaWx5IGFuZCBxdWlja2x5LgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlIHdpdGggZ3JlYXRlciBmaWRlbGl0eS4gSSB3aWxsIGRvIHNvbWUgc2VhcmNoZXMgdXNpbmcgZ3JlcHBlciBvciByZWFkLWZpbGUgdG8gZGV0ZXJtaW5lIHdoaWNoIHN5bWJvbHMgYW5kIEtjb25maWcgb3B0aW9ucyBjb21lIGludG8gcGxheS4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZGV0ZXJtaW5lIHRoZSBlbnZpcm9ubWVudCYjMzk7cyBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JPTkRJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUtNS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQk9ORElORykgJiM0Mzs9IGJvbmRpbmcub1xuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZS03LVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTI2Nj12b2lkIGJvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfYWN0aXZlKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTMzMi1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTMzMzpcdFx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0JPTkRJTkdfRkFJTE9WRVIsIGJvbmQtXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTMzNC1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTE4ODg9aW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMDk0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyMDk1Olx0c2xhdmVfZGV2LVx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX0JPTkRJTkc7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTIwOTYtXHQvKiBpbml0aWFsaXplIHNsYXZlIHN0YXRzICovXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMzc1LVx0aWYgKCFuZXRpZl9pc19ib25kX21hc3RlcihzbGF2ZV9kZXYpKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyMzc2Olx0XHRzbGF2ZV9kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5JRkZfQk9ORElORztcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjM3Ny1cdGRldl9jbG9zZShzbGF2ZV9kZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MjQyNT1zdGF0aWMgaW50IF9fYm9uZF9yZWxlYXNlX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNTk0LVx0aWYgKCFuZXRpZl9pc19ib25kX21hc3RlcihzbGF2ZV9kZXYpKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyNTk1Olx0XHRzbGF2ZV9kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5JRkZfQk9ORElORztcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjU5Ni1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQwNjg9c3RhdGljIGludCBib25kX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MDc1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0MDc2Olx0aWYgKCEoZXZlbnRfZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IElGRl9CT05ESU5HKSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDA3Ny1cdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTk5Mj12b2lkIGJvbmRfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjAxNC1cdGJvbmRfZGV2LVx1MDAzZWZsYWdzIHw9IElGRl9NQVNURVI7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYwMTU6XHRib25kX2Rldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9CT05ESU5HIHwgSUZGX1VOSUNBU1RfRkxUIHwgSUZGX05PX1FVRVVFO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDE2LVx0Ym9uZF9kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH4oSUZGX1hNSVRfRFNUX1JFTEVBU0UgfCBJRkZfVFhfU0tCX1NIQVJJTkcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNDEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRXhhbWluaW5nIHRoZSBCT05ESU5HIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBjbGVhciBwaWN0dXJlIG9mIGhvdyBCT05ESU5HIGlzIGNvbmZpZ3VyZWQgaW4gdGhpcyBrZXJuZWwuIExldCYjMzk7cyBub3QgbWFrZSBhc3N1bXB0aW9uczsgbGV0JiMzOTtzIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBgS2NvbmZpZ2AgZmlsZSBpcyB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIEkgcmVtZW1iZXIgaXQgYmVpbmcgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgcHJlY2lzZSBjb25maWcgb3B0aW9ucywgdGhlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBmZWF0dXJlcywgYW5kIGFueXRoaW5nIGVsc2UgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBCT05ESU5HIGltcGxlbWVudGF0aW9uIGJlaGF2ZXMuIFRpbWUgdG8gZGlnIGluIGFuZCBjbGFyaWZ5IGFueSBsaW5nZXJpbmcgcXVlc3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCT05ESU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zOT1pZiBORVRfQ09SRVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MC1cbmRyaXZlcnMvbmV0L0tjb25maWc6NDE6Y29uZmlnIEJPTkRJTkdcbmRyaXZlcnMvbmV0L0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtCb25kaW5nIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCB3cml0dGVuIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nOgoKKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA0MS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgbmV0d29yayBjb25maWd1cmF0aW9uIGlzIHN0cnVjdHVyZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIG9wdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBhIHNwZWNpZmljIGRyaXZlciBJJiMzOTttIHJlc2VhcmNoaW5nIG9yIGEgZ2VuZXJhbCBhcmVhIHRoYXQgcmVxdWlyZXMgb3B0aW1pemF0aW9uLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljLCBtYXliZSBzb21lIG5lc3RlZCBgaWZgIHN0YXRlbWVudHMgYmFzZWQgb24gYXJjaGl0ZWN0dXJlIG9yIG90aGVyIHByZXJlcXVpc2l0ZXMuIFVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgbWVudGFsIG1hcCBvZiB0aGlzIHNlY3Rpb24gb2YgdGhlIEtjb25maWcgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDM1Olx0XHRoZWxwXG4gIDM2Olx0XHQgIFlvdSBjYW4gc2F5IE4gaGVyZSBpZiB5b3UgZG8gbm90IGludGVuZCB0byB1c2UgYW55IG9mIHRoZVxuICAzNzpcdFx0ICBuZXR3b3JraW5nIGNvcmUgZHJpdmVycyAoaS5lLiBWTEFOLCBicmlkZ2luZywgYm9uZGluZywgZXRjLilcbiAgMzg6XHRcbiAgMzk6XHRpZiBORVRfQ09SRVxuICA0MDpcdFxuICA0MTpcdGNvbmZpZyBCT05ESU5HXG4gIDQyOlx0XHR0cmlzdGF0ZSBcJiMzNDtCb25kaW5nIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4gIDQzOlx0XHRkZXBlbmRzIG9uIElORVRcbiAgNDQ6XHRcdGRlcGVuZHMgb24gVExTIHx8IFRMU19ERVZJQ0U9blxuICA0NTpcdFx0aGVscFxuICA0NjpcdFx0ICBTYXkgJiMzOTtZJiMzOTsgb3IgJiMzOTtNJiMzOTsgaWYgeW91IHdpc2ggdG8gYmUgYWJsZSB0byAmIzM5O2JvbmQmIzM5OyBtdWx0aXBsZSBFdGhlcm5ldFxuICA0NzpcdFx0ICBDaGFubmVscyB0b2dldGhlci4gVGhpcyBpcyBjYWxsZWQgJiMzOTtFdGhlcmNoYW5uZWwmIzM5OyBieSBDaXNjbyxcbiAgNDg6XHRcdCAgJiMzOTtUcnVua2luZyYjMzk7IGJ5IFN1biwgODAyLjNhZCBieSB0aGUgSUVFRSwgYW5kICYjMzk7Qm9uZGluZyYjMzk7IGluIExpbnV4LlxuICA0OTpcdFxuICA1MDpcdFx0ICBUaGUgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGJvbmRpbmcgbW9kZXMgdG8gYWxsb3cgZm9yIGJvdGggaGlnaFxuICA1MTpcdFx0ICBwZXJmb3JtYW5jZSBhbmQgaGlnaCBhdmFpbGFiaWxpdHkgb3BlcmF0aW9uLlxuICA1MjpcdFxuICA1MzpcdFx0ICBSZWZlciB0byBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnJzdFx1MDAzZSBmb3IgbW9yZVxuICA1NDpcdFx0ICBpbmZvcm1hdGlvbi5cbiAgNTU6XHRcbiAgNTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA1NzpcdFx0ICB3aWxsIGJlIGNhbGxlZCBib25kaW5nLlxuICA1ODpcdFxuICA1OTpcdGNvbmZpZyBEVU1NWVxuICA2MDpcdFx0dHJpc3RhdGUgXCYjMzQ7RHVtbXkgbmV0IGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4gIDYxOlx0XHRoZWxwXG4gIDYyOlx0XHQgIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBiaXQtYnVja2V0IGRldmljZSAoaS5lLiB0cmFmZmljIHlvdSBzZW5kIHRvXG4gIDYzOlx0XHQgIHRoaXMgZGV2aWNlIGlzIGNvbnNpZ25lZCBpbnRvIG9ibGl2aW9uKSB3aXRoIGEgY29uZmlndXJhYmxlIElQXG4gIDY0Olx0XHQgIGFkZHJlc3MuIEl0IGlzIG1vc3QgY29tbW9ubHkgdXNlZCBpbiBvcmRlciB0byBtYWtlIHlvdXIgY3VycmVudGx5XG4gIDY1Olx0XHQgIGluYWN0aXZlIFNMSVAgYWRkcmVzcyBzZWVtIGxpa2UgYSByZWFsIGFkZHJlc3MgZm9yIGxvY2FsIHByb2dyYW1zLlxuICA2NjpcdFx0ICBJZiB5b3UgdXNlIFNMSVAgb3IgUFBQLCB5b3UgbWlnaHQgd2FudCB0byBzYXkgWSBoZXJlLiBJdCB3b24mIzM5O3RcbiAgNjc6XHRcdCAgZW5sYXJnZSB5b3VyIGtlcm5lbC4gV2hhdCBhIGRlYWwuIFJlYWQgYWJvdXQgaXQgaW4gdGhlIE5ldHdvcmtcbiAgNjg6XHRcdCAgQWRtaW5pc3RyYXRvciYjMzk7cyBHdWlkZSwgYXZhaWxhYmxlIGZyb21cbiAgNjk6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjZ3VpZGVcdTAwM2UuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM2MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgQm9uZCBBTEIgTW9kdWxlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEFjdGl2ZS1CYWNrdXAgTG9hZCBCYWxhbmNpbmcgKEFMQikgbW9kZSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBoZWFkaW5nIGZvciBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0aGUgY29yZSBsb2dpYyBmb3IgQUxCIHRvIHJlc2lkZS4gSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gc3RydWN0dXJlIHdpdGhpbiB0aGF0IGZpbGU6IFdoYXQgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLCBob3cgYXJlIHRoZXkgc3RydWN0dXJlZCwgd2hhdCB0aGV5IGRvLCB3aG8gY2FsbHMgdGhlbSwgYW5kIGltcG9ydGFudGx5LCB3aGljaCBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZvciB1c2UgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBpbml0aWFsIHNjYW4gd2lsbCBnaXZlIG1lIGEgZ29vZCwgaGlnaC1sZXZlbCBtYXAgb2YgdGhlIEFMQiBpbXBsZW1lbnRhdGlvbi4gVGhpcyB3aWxsIGhlbHAgbWUgd2l0aCBteSBkZWJ1Z2dpbmcsIHVuZGVyc3RhbmRpbmcsIG9yIGRldmVsb3BtZW50IHRhc2sgYXQgaGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9uZF9hbGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQk9ORElORykgJiM0Mzs9IGJvbmRpbmcub1xuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZS03LVxuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZTo4OmJvbmRpbmctb2JqcyA6PSBib25kX21haW4ubyBib25kXzNhZC5vIGJvbmRfYWxiLm8gYm9uZF9zeXNmcy5vIGJvbmRfc3lzZnNfc2xhdmUubyBib25kX2RlYnVnZnMubyBib25kX25ldGxpbmsubyBib25kX29wdGlvbnMub1xuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZS05LVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yNC0jaW5jbHVkZSBcdTAwM2NuZXQvYm9uZGluZy5oXHUwMDNlXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MjU6I2luY2x1ZGUgXHUwMDNjbmV0L2JvbmRfYWxiLmhcdTAwM2VcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yNi1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MjI3PXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9jaG9vc2VfY2hhbm5lbChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdTMyIGhhc2hfaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzMi1cdC8qIFdlIGRvbiYjMzk7dCBuZWVkIHRvIGRpc2FibGUgc29mdGlycSBoZXJlLCBiZWNhdXNlXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MjMzOlx0ICogdGxiX2Nob29zZV9jaGFubmVsKCkgaXMgb25seSBjYWxsZWQgYnkgYm9uZF9hbGJfeG1pdCgpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjM0LVx0ICogd2hpY2ggYWxyZWFkeSBoYXMgc29mdGlycSBkaXNhYmxlZC5cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTI4OD1zdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzMTAtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTMxMTppbnQgYm9uZF9hbGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgaW50IHJsYl9lbmFibGVkKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzMTIte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzMyLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjEzMzM6dm9pZCBib25kX2FsYl9kZWluaXRpYWxpemUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTMzNC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE0MjM9c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUyNi1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNTI3Om5ldGRldl90eF90IGJvbmRfYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1Mjgte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTM1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1MzY6dm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTM3LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTYzOS0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNjQwOmludCBib25kX2FsYl9pbml0X3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE2NDEte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNjY5LSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE2NzA6dm9pZCBib25kX2FsYl9kZWluaXRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTY3MS17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE2ODMtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTY4NDp2b2lkIGJvbmRfYWxiX2hhbmRsZV9saW5rX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSwgY2hhciBsaW5rKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE2ODUte1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzEyLS8qKlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE3MTM6ICogYm9uZF9hbGJfaGFuZGxlX2FjdGl2ZV9jaGFuZ2UgLSBhc3NpZ24gbmV3IGN1cnJfYWN0aXZlX3NsYXZlXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTcxNC0gKiBAYm9uZDogb3VyIGJvbmRpbmcgc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE3MjEtICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTcyMjp2b2lkIGJvbmRfYWxiX2hhbmRsZV9hY3RpdmVfY2hhbmdlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKm5ld19zbGF2ZSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzIzLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTc5MC0vKiBDYWxsZWQgd2l0aCBSVE5MICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTc5MTppbnQgYm9uZF9hbGJfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgdm9pZCAqYWRkcilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzkyLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTgzNS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxODM2OnZvaWQgYm9uZF9hbGJfY2xlYXJfdmxhbihzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdW5zaWduZWQgc2hvcnQgdmxhbl9pZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xODM3LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTctI2luY2x1ZGUgXHUwMDNjbmV0L2JvbmRpbmcuaFx1MDAzZVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzo4OiNpbmNsdWRlIFx1MDAzY25ldC9ib25kX2FsYi5oXHUwMDNlXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTktXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy04Ny0jaW5jbHVkZSBcdTAwM2NuZXQvYm9uZF8zYWQuaFx1MDAzZVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo4ODojaW5jbHVkZSBcdTAwM2NuZXQvYm9uZF9hbGIuaFx1MDAzZVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy04OS0jaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQwNz1zdGF0aWMgaW50IGJvbmRfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MTctXHRpZiAoYm9uZF9pc19sYihib25kKSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDE4Olx0XHRib25kX2FsYl9jbGVhcl92bGFuKGJvbmQsIHZpZCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQxOS1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTEyNjY9dm9pZCBib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X2FjdGl2ZSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTEyOTctXHRcdFx0aWYgKGJvbmRfaXNfbGIoYm9uZCkpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjEyOTg6XHRcdFx0XHRib25kX2FsYl9oYW5kbGVfbGlua19jaGFuZ2UoYm9uZCwgbmV3X2FjdGl2ZSwgQk9ORF9MSU5LX1VQKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTI5OS1cdFx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTEzMDgtXHRpZiAoYm9uZF9pc19sYihib25kKSkge1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxMzA5Olx0XHRib25kX2FsYl9oYW5kbGVfYWN0aXZlX2NoYW5nZShib25kLCBuZXdfYWN0aXZlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTMxMC1cdFx0aWYgKG9sZF9hY3RpdmUpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xODg4PWludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjA5OS1cdGlmIChib25kX2lzX2xiKGJvbmQpKSB7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjIxMDA6XHRcdC8qIGJvbmRfYWxiX2luaXRfc2xhdmUoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYWxsIG90aGVyIHN0YWdlcyBzaW5jZVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMTAxLVx0XHQgKiBpdCBtaWdodCBmYWlsIGFuZCB3ZSBkbyBub3Qgd2FudCB0byBoYXZlIHRvIHVuZG8gZXZlcnl0aGluZ1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMTAyLVx0XHQgKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MjEwMzpcdFx0cmVzID0gYm9uZF9hbGJfaW5pdF9zbGF2ZShib25kLCBuZXdfc2xhdmUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMTA0LVx0XHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MjQyNT1zdGF0aWMgaW50IF9fYm9uZF9yZWxlYXNlX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNTE2LVx0XHQgKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MjUxNzpcdFx0Ym9uZF9hbGJfZGVpbml0X3NsYXZlKGJvbmQsIHNsYXZlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjUxOC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTI3NjQ9c3RhdGljIHZvaWQgYm9uZF9taWltb25fbGlua19jaGFuZ2Uoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNzczLVx0Y2FzZSBCT05EX01PREVfQUxCOlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyNzc0Olx0XHRib25kX2FsYl9oYW5kbGVfbGlua19jaGFuZ2UoYm9uZCwgc2xhdmUsIGxpbmspO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNzc1LVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQzMTg9dm9pZCBib25kX3dvcmtfaW5pdF9hbGwoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MzI1LVx0XHRcdCAgYm9uZF9yZXNlbmRfaWdtcF9qb2luX3JlcXVlc3RzX2RlbGF5ZWQpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0MzI2Olx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2Ym9uZC1cdTAwM2VhbGJfd29yaywgYm9uZF9hbGJfbW9uaXRvcik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzMjctXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZib25kLVx1MDAzZW1paV93b3JrLCBib25kX21paV9tb25pdG9yKTtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQzNDU9c3RhdGljIGludCBib25kX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDM3MS1cdGlmIChib25kX2lzX2xiKGJvbmQpKSB7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQzNzI6XHRcdC8qIGJvbmRfYWxiX2luaXRpYWxpemUgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSB0aW1lclxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MzczLVx0XHQgKiBpcyBzdGFydGVkLlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00Mzc0LVx0XHQgKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDM3NTpcdFx0aWYgKGJvbmRfYWxiX2luaXRpYWxpemUoYm9uZCwgKEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfQUxCKSkpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzNzYtXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00NDA4PXN0YXRpYyBpbnQgYm9uZF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NDIwLVx0aWYgKGJvbmRfaXNfbGIoYm9uZCkpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQ0MjE6XHRcdGJvbmRfYWxiX2RlaW5pdGlhbGl6ZShib25kKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDQyMi1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQ4MzA9c3RhdGljIGludCBib25kX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHZvaWQgKmFkZHIpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00ODM4LVx0aWYgKEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfQUxCKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0ODM5Olx0XHRyZXR1cm4gYm9uZF9hbGJfc2V0X21hY19hZGRyZXNzKGJvbmRfZGV2LCBhZGRyKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDg0MC1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU1NTA9c3RhdGljIG5ldGRldl90eF90IF9fYm9uZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTc2LVx0Y2FzZSBCT05EX01PREVfQUxCOlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NTc3Olx0XHRyZXR1cm4gYm9uZF9hbGJfeG1pdChza2IsIGRldik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1NzgtXHRjYXNlIEJPTkRfTU9ERV9UTEI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NTQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFBhdGNoIE1vZGlmaWNhdGlvbnMgaW4gYGJvbmRfYWxiLmNgKioKCkFscmlnaHQsIHRoZSBwYXRjaCBoYXMgaGl0IG15IGRlc2ssIGFuZCBteSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyBwaW5wb2ludGluZyB0aGUga2V5IGFyZWFzIG9mIGltcGFjdC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGNoYW5nZXMgbWFkZSB3aXRoaW4gYGJvbmRfYWxiLmNgIGFyb3VuZCBsaW5lcyA2NzgsIDEzNDAsIDEzNzUsIGFuZCAxNDI4LiBUaGVzZSBsaW5lIG51bWJlcnMgYXJlIG15IGluaXRpYWwgY29vcmRpbmF0ZXMuCgpJJiMzOTtsbCBzdGFydCBieSBwdWxsaW5nIHVwIHRoZSBmaWxlIGFuZCB6ZXJvaW5nIGluIG9uIHRob3NlIHNwZWNpZmljIGxpbmVzLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSAqbmF0dXJlKiBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gV2VyZSB0aGV5IGJ1ZyBmaXhlcywgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgb3IgbmV3IGZlYXR1cmUgaW1wbGVtZW50YXRpb25zPyBEb2VzIHRoZSBjb2RlIHRvdWNoIHVwb24gY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzLCBvciBmdW5kYW1lbnRhbCBhbGdvcml0aG1zPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByaXBwbGUgZWZmZWN0cyBkb3duIHN0cmVhbT8KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFzIHdlbGwg4oCTIHRoZSBsaW5lcyBpbW1lZGlhdGVseSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzcGVjaWZpZWQgbGluZSBudW1iZXJzIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0LiBJIHdpbGwgYmUgbG9va2luZyBmb3I6CiogICAqKkxvZ2ljYWwgZmxvdzoqKiBIb3cgYXJlIHRoZXNlIHNwZWNpZmljIGxpbmVzIGZpdHRpbmcgaW50byB0aGUgZ3JlYXRlciBmdW5jdGlvbiBvciBzZWN0aW9uLgoqICAgKipWYXJpYWJsZXM6KiogV2hhdCB2YXJpYWJsZXMgYXJlIHJlYWQsIHVzZWQsIG1vZGlmaWVkLCBhbmQgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZXNlIGxpbmVzPwoqICAgKipFeHRlcm5hbCBkZXBlbmRlbmNpZXM6KiogQXJlIHRoZXJlIGNhbGxzIHRvIGV4dGVybmFsIGZ1bmN0aW9ucy9tYWNyb3Mvc3RydWN0dXJlcz8KKiAgICoqQ29uZGl0aW9uYWwgZXhlY3V0aW9uOioqIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWxzIHRoYXQgYXJlIHRyaWdnZXJlZCB3aXRoaW4gdGhlc2UgbGluZXMsIGFuZCB3aGF0IGlzIHRoZSBlZmZlY3QgaWYgdGhleSBhcmUuCgpPbmNlIEkgaGF2ZSBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltbWVkaWF0ZSBjaGFuZ2VzLCBJJiMzOTtsbCBhc3Nlc3MgdGhlaXIgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuIEkmIzM5O2xsIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCB0aGUgY29kZSBleGVjdXRpb24sIGNvbnNpZGVyaW5nIHZhcmlvdXMgc2NlbmFyaW9zIGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhpbmdzIGxpa2UgcmVzb3VyY2UgYWxsb2NhdGlvbiwgZGF0YSBpbnRlZ3JpdHksIGFuZCBlcnJvciBoYW5kbGluZy4gSSYjMzk7bGwgYWxzbyBiZSBjb25zaWRlcmluZyB3aGV0aGVyIHRoZSBjaGFuZ2VzIGludHJvZHVjZSBhbnkgbmV3IGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgY29tcGF0aWJpbGl0eSBpc3N1ZXMuCgpFc3NlbnRpYWxseSwgSSYjMzk7bSBmb3JtaW5nIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLCBhbmQgd2hhdCB0aGF0IGltcGxpZXMgZm9yIHRoZSBzeXN0ZW0mIzM5O3Mgcm9idXN0bmVzcywgcGVyZm9ybWFuY2UsIGFuZCBmdXR1cmUgbWFpbnRhaW5hYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjYwOlx0XHRcdHJldHVybiBOVUxMO1xuIDY2MTpcdFx0YXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gNjYyOlx0XG4gNjYzOlx0XHQvKiBEb24mIzM5O3QgbW9kaWZ5IG9yIGxvYWQgYmFsYW5jZSBBUlBzIHRoYXQgZG8gbm90IG9yaWdpbmF0ZVxuIDY2NDpcdFx0ICogZnJvbSB0aGUgYm9uZCBpdHNlbGYgb3IgYSBWTEFOIGRpcmVjdGx5IGFib3ZlIHRoZSBib25kLlxuIDY2NTpcdFx0ICovXG4gNjY2Olx0XHRpZiAoIWJvbmRfc2xhdmVfaGFzX21hY19yY3UoYm9uZCwgYXJwLVx1MDAzZW1hY19zcmMpKVxuIDY2NzpcdFx0XHRyZXR1cm4gTlVMTDtcbiA2Njg6XHRcbiA2Njk6XHRcdGRldiA9IGlwX2Rldl9maW5kKGRldl9uZXQoYm9uZC1cdTAwM2VkZXYpLCBhcnAtXHUwMDNlaXBfc3JjKTtcbiA2NzA6XHRcdGlmIChkZXYpIHtcbiA2NzE6XHRcdFx0aWYgKG5ldGlmX2lzX2FueV9icmlkZ2VfbWFzdGVyKGRldikpIHtcbiA2NzI6XHRcdFx0XHRkZXZfcHV0KGRldik7XG4gNjczOlx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNjc0Olx0XHRcdH1cbiA2NzU6XHRcdFx0ZGV2X3B1dChkZXYpO1xuIDY3NjpcdFx0fVxuIDY3NzpcdFxuIDY3ODpcdFx0aWYgKGFycC1cdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUExZKSkge1xuIDY3OTpcdFx0XHQvKiB0aGUgYXJwIG11c3QgYmUgc2VudCBvbiB0aGUgc2VsZWN0ZWQgcnggY2hhbm5lbCAqL1xuIDY4MDpcdFx0XHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XG4gNjgxOlx0XHRcdGlmICh0eF9zbGF2ZSBcdTAwMjZcdTAwMjYgdHhfc2xhdmUgIT0gcmN1X2FjY2Vzc19wb2ludGVyKGJvbmQtXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XG4gNjgyOlx0XHRcdFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcbiA2ODM6XHRcdFx0XHRcdHJldHVybiBOVUxMO1xuIDY4NDpcdFx0XHRcdGFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDY4NTpcdFx0XHRcdGJvbmRfaHdfYWRkcl9jb3B5KGFycC1cdTAwM2VtYWNfc3JjLCB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsXG4gNjg2Olx0XHRcdFx0XHRcdCAgdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuKTtcbiA2ODc6XHRcdFx0fVxuIDY4ODpcdFx0XHRuZXRkZXZfZGJnKGJvbmQtXHUwMDNlZGV2LCBcJiMzNDsoc2xhdmUgJXMpOiBTZXJ2ZXIgc2VudCBBUlAgUmVwbHkgcGFja2V0XFxuXCYjMzQ7LFxuIDY4OTpcdFx0XHRcdCAgIHR4X3NsYXZlID8gdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZW5hbWUgOiBcJiMzNDtOVUxMXCYjMzQ7KTtcbiA2OTA6XHRcdH0gZWxzZSBpZiAoYXJwLVx1MDAzZW9wX2NvZGUgPT0gaHRvbnMoQVJQT1BfUkVRVUVTVCkpIHtcbiA2OTE6XHRcdFx0LyogQ3JlYXRlIGFuIGVudHJ5IGluIHRoZSByeF9oYXNodGJsIGZvciB0aGlzIGNsaWVudCBhcyBhXG4gNjkyOlx0XHRcdCAqIHBsYWNlIGhvbGRlci5cbiA2OTM6XHRcdFx0ICogV2hlbiB0aGUgYXJwIHJlcGx5IGlzIHJlY2VpdmVkIHRoZSBlbnRyeSB3aWxsIGJlIHVwZGF0ZWRcbiA2OTQ6XHRcdFx0ICogd2l0aCB0aGUgY29ycmVjdCB1bmljYXN0IGFkZHJlc3Mgb2YgdGhlIGNsaWVudC5cbiA2OTU6XHRcdFx0ICovXG4gNjk2Olx0XHRcdHR4X3NsYXZlID0gcmxiX2Nob29zZV9jaGFubmVsKHNrYiwgYm9uZCwgYXJwKTtcbiA2OTc6XHRcbiA2OTg6XHRcdFx0LyogVGhlIEFSUCByZXBseSBwYWNrZXRzIG11c3QgYmUgZGVsYXllZCBzbyB0aGF0XG4gNjk5Olx0XHRcdCAqIHRoZXkgY2FuIGNhbmNlbCBvdXQgdGhlIGluZmx1ZW5jZSBvZiB0aGUgQVJQIHJlcXVlc3QuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NzkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgdGhpbmtpbmcgdGhlbSB0aHJvdWdoIGluIG15IHVzdWFsIHdheToKCioqRGVlcCBEaXZlIG9uIEJvbmRpbmcgVHJhbnNtaXNzaW9uIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHRyYW5zbWl0IHNpZGUgb2YgdGhpcyBib25kaW5nIHNldHVwLCBhbmQgdGhlc2UgZnVuY3Rpb25zIGFyZSBrZXk6IGBib25kX2RvX2FsYl94bWl0YCwgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCwgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCwgYW5kIGBib25kX2FsYl94bWl0YC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoZSBuYW1pbmcgY29udmVudGlvbnMgYXJlIHN1Z2dlc3RpbmcgYSBsaW5rIHRvIEFMQiAoQWRhcHRpdmUgTG9hZCBCYWxhbmNpbmcpIGFuZCBUTEIgKFRyYW5zbWl0IExvYWQgQmFsYW5jaW5nKSBtb2Rlcywgd2hpY2ggaXMgdHlwaWNhbC4KCkkmIzM5O20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIHZpc3VhbGl6ZSB0aGUgY2FsbCBwYXRocyBhbmQgZGVwZW5kZW5jaWVzLiBgYm9uZF9kb19hbGJfeG1pdGAgc2VlbXMgbGlrZSB0aGUgY2VudHJhbCBmdW5jdGlvbiwgdGhlIGRpc3BhdGNoZXIgcGVyaGFwcz8gSSYjMzk7bSBiZXR0aW5nIGl0IGhhbmRsZXMgdGhlIGNvcmUgbG9naWMgZm9yIGVpdGhlciBBTEIgb3IgbWF5YmUgc29tZSBnZW5lcmFsIGJvbmRpbmctcmVsYXRlZCB0cmFuc21pc3Npb24gc2V0dXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBkZWNpZGVzIHdoaWNoIHNsYXZlIHRvIHVzZSBhbmQgaG93IHRoZSBhY3R1YWwgcGFja2V0IHRyYW5zbWlzc2lvbiBpcyBpbml0aWF0ZWQuIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGlzIGl0IHVzaW5nIHRvIHRyYWNrIHN0YXRlLCBhbmQgd2hlcmUgYXJlIHRoZSBjcnVjaWFsIGRlY2lzaW9ucyBiZWluZyBtYWRlPyBEb2VzIHRoaXMgZnVuY3Rpb24gbWFuYWdlIHF1ZXVlIHNlbGVjdGlvbiBhbmQgYW55IGFzc29jaWF0ZWQgaGFyZHdhcmUgb2ZmbG9hZD8gSSB3YW50IHRvIHNlZSBpZiBhbnkgZmxvdyBjbGFzc2lmaWNhdGlvbiBvciBoYXNoIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQsIGFuZCB3aGF0IHRoZSBmYWxsYmFjayBtZWNoYW5pc20gbG9va3MgbGlrZS4KClRoZW4sIHRoZXJlJiMzOTtzIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAuIENsZWFybHksIHRoaXMgaXMgaW52b2x2ZWQgaW4gZ2V0dGluZyB0aGUgYXBwcm9wcmlhdGUgc2xhdmUgaW50ZXJmYWNlIGZvciBUTEIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyDigJMgaXMgaXQgcm91bmQtcm9iaW4sIGJhc2VkIG9uIGxpbmsgdXRpbGl6YXRpb24sIHBhY2tldCBjb3VudCwgb3Igc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZD8gV2hhdCBhYm91dCBlcnJvciBoYW5kbGluZyDigJMgZG9lcyBpdCByZXRyeSBvbiBhbm90aGVyIHNsYXZlIGlmIG9uZSBpcyBkb3duPwoKYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCBpcyBhIHR3aW4sIGZvY3VzZWQgb24gQUxCLiBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGxvYWQgYmFsYW5jaW5nIGFsZ29yaXRobSBoZXJlLiBJcyBpdCBsb29raW5nIGF0IGZsb3cgaGFzaGVzLCBzb3VyY2UvZGVzdGluYXRpb24gTUFDIGFkZHJlc3Nlcywgb3IgbW9yZT8gRG9lcyBpdCBpbmNvcnBvcmF0ZSBhbnkgYmFjay1vZmYgb3IgaHlzdGVyZXNpcyBtZWNoYW5pc21zIHRvIHByZXZlbnQgZmxhcHBpbmcgYmV0d2VlbiBzbGF2ZXM/CgpGaW5hbGx5LCBgYm9uZF9hbGJfeG1pdGAgaXMgcG90ZW50aWFsbHkgdGhlIHdvcmtob3JzZSwgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYWN0dWFsbHkgZG9pbmcgdGhlIHRyYW5zbWlzc2lvbiAqdXNpbmcqIHRoZSBzbGF2ZSBjaG9zZW4gYnkgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCBvciBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgLiBJIGV4cGVjdCB0aGlzIHRvIGJlIHRoZSBwb2ludCB3aGVyZSB0aGUgcGFja2V0IGlzIGFjdHVhbGx5IGhhbmRlZCBvZmYgdG8gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgZHJpdmVyLiBJIHdhbnQgdG8gc2VlIGlmIGFueSBtb2RpZmljYXRpb25zIGFyZSBtYWRlIHRvIHRoZSBwYWNrZXQgaXRzZWxmIGhlcmUg4oCTIFZMQU4gdGFnZ2luZywgY2hlY2tzdW0gdXBkYXRlcywgZXRjLiBXaGF0IGtpbmQgb2YgbG9ja2luZyBpcyB1c2VkIGhlcmUgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zPyBEb2VzIGl0IHVzZSBUWCByaW5ncywgYW5kIHdoYXQgbWVjaGFuaXNtcyBhcmUgZW1wbG95ZWQgZm9yIGhhbmRsaW5nIHRyYW5zbWlzc2lvbiBlcnJvcnMgb3IgbGluayBmYWlsdXJlcz8KCkkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgaGlnaGVyLWxldmVsIGZ1bmN0aW9ucyBsaWtlIGBib25kX2RvX2FsYl94bWl0YCBhbmQgdHJhY2UgZG93biBmcm9tIHRoZXJlLiBUaGF0JiMzOTtsbCBnaXZlIG1lIGEgZnJhbWV3b3JrLCBhbmQgdGhlbiBJIGNhbiBkZWx2ZSBpbnRvIHRoZSBzbGF2ZS1zcGVjaWZpYyBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGxvYWQgYmFsYW5jaW5nIGFuZCBzZWxlY3Rpb24gd29ya3MuIEhvcGVmdWxseSwgaXQmIzM5O3MgYWxsIHdlbGwtZG9jdW1lbnRlZC4gVGltZSB0byBkaWcgaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzQwOlx0XHRcdHJsYl9kZWluaXRpYWxpemUoYm9uZCk7XG4xMzQxOlx0fVxuMTM0MjpcdFxuMTM0MzpcdHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxuMTM0NDpcdFx0XHRcdFx0ICAgIHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUpXG4xMzQ1Olx0e1xuMTM0NjpcdFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcbjEzNDc6XHRcbjEzNDg6XHRcdGlmICghdHhfc2xhdmUpIHtcbjEzNDk6XHRcdFx0LyogdW5iYWxhbmNlZCBvciB1bmFzc2lnbmVkLCBzZW5kIHRocm91Z2ggcHJpbWFyeSAqL1xuMTM1MDpcdFx0XHR0eF9zbGF2ZSA9IHJjdV9kZXJlZmVyZW5jZShib25kLVx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKTtcbjEzNTE6XHRcdFx0aWYgKGJvbmQtXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKVxuMTM1MjpcdFx0XHRcdGJvbmRfaW5mby1cdTAwM2V1bmJhbGFuY2VkX2xvYWQgJiM0Mzs9IHNrYi1cdTAwM2VsZW47XG4xMzUzOlx0XHR9XG4xMzU0Olx0XG4xMzU1Olx0XHRpZiAodHhfc2xhdmUgXHUwMDI2XHUwMDI2IGJvbmRfc2xhdmVfY2FuX3R4KHR4X3NsYXZlKSkge1xuMTM1NjpcdFx0XHRpZiAodHhfc2xhdmUgIT0gcmN1X2FjY2Vzc19wb2ludGVyKGJvbmQtXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XG4xMzU3Olx0XHRcdFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcbjEzNTg6XHRcdFx0XHRcdHJldHVybiBib25kX3R4X2Ryb3AoYm9uZC1cdTAwM2VkZXYsIHNrYik7XG4xMzU5Olx0XHRcdFx0ZXRoZXJfYWRkcl9jb3B5KHNrYl9ldGhfaGRyKHNrYiktXHUwMDNlaF9zb3VyY2UsXG4xMzYwOlx0XHRcdFx0XHRcdHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4xMzYxOlx0XHRcdH1cbjEzNjI6XHRcbjEzNjM6XHRcdFx0cmV0dXJuIGJvbmRfZGV2X3F1ZXVlX3htaXQoYm9uZCwgc2tiLCB0eF9zbGF2ZS1cdTAwM2VkZXYpO1xuMTM2NDpcdFx0fVxuMTM2NTpcdFxuMTM2NjpcdFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNiBib25kLVx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xuMTM2NzpcdFx0XHRzcGluX2xvY2soXHUwMDI2Ym9uZC1cdTAwM2Vtb2RlX2xvY2spO1xuMTM2ODpcdFx0XHRfX3RsYl9jbGVhcl9zbGF2ZShib25kLCB0eF9zbGF2ZSwgMCk7XG4xMzY5Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmJvbmQtXHUwMDNlbW9kZV9sb2NrKTtcbjEzNzA6XHRcdH1cbjEzNzE6XHRcbjEzNzI6XHRcdC8qIG5vIHN1aXRhYmxlIGludGVyZmFjZSwgZnJhbWUgbm90IHNlbnQgKi9cbjEzNzM6XHRcdHJldHVybiBib25kX3R4X2Ryb3AoYm9uZC1cdTAwM2VkZXYsIHNrYik7XG4xMzc0Olx0fVxuMTM3NTpcdFxuMTM3NjpcdHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4xMzc3Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTM3ODpcdHtcbjEzNzk6XHRcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xuMTM4MDpcdFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XG4xMzgxOlx0XHR1MzIgaGFzaF9pbmRleDtcbjEzODI6XHRcbjEzODM6XHRcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcbjEzODQ6XHRcbjEzODU6XHRcdC8qIERvIG5vdCBUWCBiYWxhbmNlIGFueSBtdWx0aWNhc3Qgb3IgYnJvYWRjYXN0ICovXG4xMzg2Olx0XHRpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLVx1MDAzZWhfZGVzdCkpIHtcbjEzODc6XHRcdFx0c3dpdGNoIChza2ItXHUwMDNlcHJvdG9jb2wpIHtcbjEzODg6XHRcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbjEzODk6XHRcdFx0XHRpZiAoYWxiX2RldGVybWluZV9uZChza2IpKVxuMTM5MDpcdFx0XHRcdFx0YnJlYWs7XG4xMzkxOlx0XHRcdFx0ZmFsbHRocm91Z2g7XG4xMzkyOlx0XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuMTM5MzpcdFx0XHRcdGhhc2hfaW5kZXggPSBib25kX3htaXRfaGFzaChib25kLCBza2IpO1xuMTM5NDpcdFx0XHRcdGlmIChib25kLVx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xuMTM5NTpcdFx0XHRcdFx0dHhfc2xhdmUgPSB0bGJfY2hvb3NlX2NoYW5uZWwoYm9uZCxcbjEzOTY6XHRcdFx0XHRcdFx0XHRcdCAgICAgIGhhc2hfaW5kZXggXHUwMDI2IDB4RkYsXG4xMzk3Olx0XHRcdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuKTtcbjEzOTg6XHRcdFx0XHR9IGVsc2Uge1xuMTM5OTpcdFx0XHRcdFx0c3RydWN0IGJvbmRfdXBfc2xhdmUgKnNsYXZlcztcbjE0MDA6XHRcdFx0XHRcdHVuc2lnbmVkIGludCBjb3VudDtcbjE0MDE6XHRcbjE0MDI6XHRcdFx0XHRcdHNsYXZlcyA9IHJjdV9kZXJlZmVyZW5jZShib25kLVx1MDAzZXVzYWJsZV9zbGF2ZXMpO1xuMTQwMzpcdFx0XHRcdFx0Y291bnQgPSBzbGF2ZXMgPyBSRUFEX09OQ0Uoc2xhdmVzLVx1MDAzZWNvdW50KSA6IDA7XG4xNDA0Olx0XHRcdFx0XHRpZiAobGlrZWx5KGNvdW50KSlcbjE0MDU6XHRcdFx0XHRcdFx0dHhfc2xhdmUgPSBzbGF2ZXMtXHUwMDNlYXJyW2hhc2hfaW5kZXggJVxuMTQwNjpcdFx0XHRcdFx0XHRcdFx0ICAgICAgIGNvdW50XTtcbjE0MDc6XHRcdFx0XHR9XG4xNDA4Olx0XHRcdFx0YnJlYWs7XG4xNDA5Olx0XHRcdH1cbjE0MTA6XHRcdH1cbjE0MTE6XHRcdHJldHVybiB0eF9zbGF2ZTtcbjE0MTI6XHR9XG4xNDEzOlx0XG4xNDE0Olx0bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4xNDE1Olx0e1xuMTQxNjpcdFx0c3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihib25kX2Rldik7XG4xNDE3Olx0XHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlO1xuMTQxODpcdFxuMTQxOTpcdFx0dHhfc2xhdmUgPSBib25kX3htaXRfdGxiX3NsYXZlX2dldChib25kLCBza2IpO1xuMTQyMDpcdFx0cmV0dXJuIGJvbmRfZG9fYWxiX3htaXQoc2tiLCBib25kLCB0eF9zbGF2ZSk7XG4xNDIxOlx0fVxuMTQyMjpcdFxuMTQyMzpcdHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4xNDI0Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTQyNTpcdHtcbjE0MjY6XHRcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XG4xNDI3Olx0XHRzdGF0aWMgY29uc3QgX19iZTMyIGlwX2JjYXN0ID0gaHRvbmwoMHhmZmZmZmZmZik7XG4xNDI4Olx0XHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlID0gTlVMTDtcbjE0Mjk6XHRcdGNvbnN0IHU4ICpoYXNoX3N0YXJ0ID0gTlVMTDtcbjE0MzA6XHRcdGJvb2wgZG9fdHhfYmFsYW5jZSA9IHRydWU7XG4xNDMxOlx0XHRzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YTtcbjE0MzI6XHRcdHUzMiBoYXNoX2luZGV4ID0gMDtcbjE0MzM6XHRcdGludCBoYXNoX3NpemUgPSAwO1xuMTQzNDpcdFxuMTQzNTpcdFx0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xuMTQzNjpcdFxuMTQzNzpcdFx0c3dpdGNoIChudG9ocyhza2ItXHUwMDNlcHJvdG9jb2wpKSB7XG4xNDM4Olx0XHRjYXNlIEVUSF9QX0lQOiB7XG4xNDM5Olx0XHRcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA3NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBCb25kaW5nIERyaXZlciBUcmFuc21pdCBQYXRoIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2UgYm9uZGluZyBkcml2ZXIgY2hhbmdlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgZnV6emFibGU/JiMzNDsgQWJzb2x1dGVseSEgVGhpcyBsb29rcyBsaWtlIGEgcHJpbWUgdGFyZ2V0LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBBTEIvVExCIHRyYW5zbWl0IHBhdGhzLCB3aGljaCBpcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIGFuZCBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsbHkgYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50IHdpdGggYSBzdGFuZGFyZCBib25kaW5nIGRldmljZSBjb25maWd1cmF0aW9uIGFuZCBuZXR3b3JrIHRyYWZmaWMuIFRoaXMgb3BlbnMgdGhlIGRvb3IgdG8gdmVyaWZ5aW5nIGhlYWRyb29tLCBtb2RpZmljYXRpb25zIHRvIGNsb25lZCBTS0JzLCBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiBnZW5lcmFsLiBFcnJvciBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGZhaWx1cmUgaW4gYHNrYl9jb3dfaGVhZGAsIGlzIGEga2V5IGFyZWEgb2YgZm9jdXMgZm9yIHRoZXNlIGNoYW5nZXMuCgpIZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJIHNlZToKCjEuICAqKmBybGJfYXJwX3htaXRgKio6IFRoZSBiaWdnZXN0IGNoYW5nZSBoZXJlIGlzIHRoZSBpbmNsdXNpb24gb2YgYHNrYl9jb3dfaGVhZChza2IsIDApYCAqYmVmb3JlKiBtb2RpZnlpbmcgYGFycC0mZ3Q7bWFjX3NyY2AgaW4gYW4gQVJQIHJlcGx5LiBUaGlzIGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcHJvdGVjdGluZyBhZ2FpbnN0IG1vZGlmaWNhdGlvbnMgdG8gc2hhcmVkIFNLQiBoZWFkZXJzLiBDcnVjaWFsbHksIHRoZXkgcmUtZmV0Y2ggYGFycGAgYWZ0ZXIgdGhlIGBza2JfY293X2hlYWRgIHRvIGhhbmRsZSBhIHBvdGVudGlhbCByZWxvY2F0aW9uIG9mIGBza2ItJmd0O2hlYWRgLiBHb29kLgoyLiAgKipgYm9uZF9kb19hbGJfeG1pdGAqKjogU2ltaWxhciBwYXR0ZXJuLiBgc2tiX2Nvd19oZWFkKHNrYiwgMClgIGlzIGNhbGxlZCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MsIGBldGhlcl9hZGRyX2NvcHkoZXRoX2RhdGEtJmd0O2hfc291cmNlLCB0eF9zbGF2ZS0mZ3Q7ZGV2LSZndDtkZXZfYWRkcilgLiBUaGUgY29kZSB0aGVuIHVzZXMgYHNrYl9ldGhfaGRyKHNrYiktJmd0O2hfc291cmNlYC4gVGhlIGBib25kX3R4X2Ryb3BgIHBhdGggaWYgYHNrYl9jb3dfaGVhZGAgZmFpbHMgaXMgYSBwb3NpdGl2ZSBzdGVwLgozLiAgKipgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgICZhbXA7IDQuIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAqKjogSGVyZSwgd2UmIzM5O3ZlIGdvdCBzb21lIHJlZmFjdG9yaW5nLiBUaGUgY29kZSBoYXMgbW92ZWQgZnJvbSBgc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsgZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7YCB0byBgZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO2AgSXQgbG9va3MgbGlrZSBhIGNvZGUgc2ltcGxpZmljYXRpb24sIG5vdyBkaXJlY3RseSBhY2Nlc3NpbmcgdGhlIEV0aGVybmV0IGhlYWRlci4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gdGFyZ2V0LiBMb29rcyBsaWtlIGBib25kX2FsYl94bWl0YCBhbmQgYGJvbmRfdGxiX3htaXRgLCBhcmUga2V5IHN0YXJ0aW5nIHBvaW50cyBhcyB0aGV5IGFyZSBjYWxsZWQgZnJvbSBgX19ib25kX3N0YXJ0X3htaXRgLiBUaGVuLCB3ZSBzaG91bGQgbG9vayBhdCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgIGFuZCBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgIGFuZCBpZiB0aGV5IGFyZSBleHBvcnRlZCBvciBub24tc3RhdGljLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgaW5jbHVkZS9uZXQvYm9uZF9hbGIuaGAgdG8gbWFrZSBzdXJlLiBJJiMzOTttIHRoaW5raW5nLCB0aGlzIG1pZ2h0IGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3Igc29tZSB0YXJnZXRlZCBmdXp6aW5nIGNhbXBhaWducy4gVGhlIGNoYW5nZXMgaGVyZSBzZWVtIHRvIGJlIHRvIGltcHJvdmUgcmVsaWFiaWxpdHkgYW5kIGNvcnJlY3RuZXNzIHVuZGVyIGNvbmN1cnJlbnQgYWNjZXNzIHNjZW5hcmlvcyBhbmQgdG8gY2xlYW4gdXAgY29kZSwgYW5kIGl0JiMzOTtzIHNvbWV0aGluZyB0aGF0IGlzIGltcG9ydGFudCB0byBhdWRpdCBmb3IgYSByZWxpYWJsZSBuZXR3b3JrIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtib25kXy4qeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2JvbmRfYWxiLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvYm9uZF9hbGIuaD0xNTg9dm9pZCBib25kX2FsYl9oYW5kbGVfYWN0aXZlX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfc2xhdmUpO1xuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaDoxNTk6bmV0ZGV2X3R4X3QgYm9uZF9hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpO1xuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaDoxNjA6bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpO1xuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaDoxNjE6c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbmluY2x1ZGUvbmV0L2JvbmRfYWxiLmgtMTYyLVx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC9ib25kX2FsYi5oOjE2MzpzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaC0xNjQtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1ODUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgQm9uZGluZyBUcmFuc21pc3Npb24gUGF0aHMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG5ldHdvcmsgYm9uZGluZyBjb2RlIGFnYWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdHJhbnNtaXNzaW9uIHBhdGhzLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBib25kaW5nIGRyaXZlciBoYW5kbGVzIEFSUCByZXF1ZXN0cy4gUmlnaHQgbm93LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdHJhbnNtaXNzaW9uLiBJIHNlZSB0aGF0IGBib25kX2FsYl94bWl0YCwgYGJvbmRfdGxiX3htaXRgLCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLCBhbmQgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhcmUgYWxsIGRlY2xhcmVkIGluIGBpbmNsdWRlL25ldC9ib25kX2FsYi5oYC4gVGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlICYjMzQ7YWxiJiMzNDsgYW5kICYjMzQ7dGxiJiMzNDsgcHJlZml4ZXMsIGluZGljYXRpbmcgYWN0aXZlLWJhY2t1cCBhbmQgdHJhbnNtaXQgbG9hZCBiYWxhbmNpbmcgbW9kZXMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYHJsYl9hcnBfeG1pdGAgZml0cyBpbnRvIHRoaXMgcGljdHVyZS4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIGNhbGxzIHRvIHRoYXQgZnVuY3Rpb24gdG8gc2VlIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIHdpdGggdGhlIG90aGVyIGZ1bmN0aW9ucyBJIGp1c3QgbWVudGlvbmVkLiBUaGlzIHdpbGwgaGVscCBtZSB0cmFjZSB0aGUgQVJQIHRyYW5zbWlzc2lvbiBwYXRoIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIEtub3dpbmcgdGhpcywgSSBjYW4gYmVnaW4gdG8gZXhhbWluZSB0aGUgZGF0YSBmbG93IHRocm91Z2ggdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtybGJfYXJwX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz01NTM9c3RhdGljIHN0cnVjdCBzbGF2ZSAqcmxiX2Nob29zZV9jaGFubmVsKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTY1Mi0gKi9cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzo2NTM6c3RhdGljIHN0cnVjdCBzbGF2ZSAqcmxiX2FycF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTY1NC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE0MjM9c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQ5Ni1cdFx0aWYgKGJvbmRfaW5mby1cdTAwM2VybGJfZW5hYmxlZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNDk3Olx0XHRcdHR4X3NsYXZlID0gcmxiX2FycF94bWl0KHNrYiwgYm9uZCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQ5OC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTY2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipBbmFseXppbmcgVHJhbnNtaXQgRW50cnkgUG9pbnRzIGluIEJvbmRpbmcqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBib25kaW5nIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSB0cmFuc21pdCBwYXRoLiBJIGtub3cgdGhhdCBgYm9uZF9hbGJfeG1pdGAgYW5kIGBib25kX3RsYl94bWl0YCBhcmUgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciB0cmFuc21pdCBvcGVyYXRpb25zLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gYGJvbmRfYWxiX3htaXRgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIHRoYXQgZnVuY3Rpb247IEkgbmVlZCB0byBzZWUgdGhlIGxvZ2ljLCB0aGUgZGF0YSBmbG93LCBhbmQgaG93IGl0IGhhbmRsZXMgcGFja2V0IHRyYW5zbWlzc2lvbiB3aXRoaW4gdGhlIEFjdGl2ZS1CYWNrdXAgYW5kIFRyYW5zbWl0IExvYWQgQmFsYW5jaW5nIGJvbmRpbmcgbW9kZXMuIFdoYXQmIzM5O3MgaXQgZG9pbmcgd2l0aCB0aGUgcGFja2V0cz8gSG93IGRvZXMgaXQgY2hvb3NlIHRoZSBpbnRlcmZhY2U/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgc3dpdGNoaW5nIGhhcHBlbmluZyBpbiBoZXJlPyBMZXQmIzM5O3MgZ2V0IGRvd24gdG8gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTIwOlx0XHRcdFx0XHR0eF9zbGF2ZSA9IHNsYXZlcy1cdTAwM2VhcnJbYm9uZF94bWl0X2hhc2goYm9uZCwgc2tiKSAlXG4xNTIxOlx0XHRcdFx0XHRcdFx0ICAgICAgIGNvdW50XTtcbjE1MjI6XHRcdFx0fVxuMTUyMzpcdFx0fVxuMTUyNDpcdFx0cmV0dXJuIHR4X3NsYXZlO1xuMTUyNTpcdH1cbjE1MjY6XHRcbjE1Mjc6XHRuZXRkZXZfdHhfdCBib25kX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbjE1Mjg6XHR7XG4xNTI5Olx0XHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTtcbjE1MzA6XHRcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xuMTUzMTpcdFxuMTUzMjpcdFx0dHhfc2xhdmUgPSBib25kX3htaXRfYWxiX3NsYXZlX2dldChib25kLCBza2IpO1xuMTUzMzpcdFx0cmV0dXJuIGJvbmRfZG9fYWxiX3htaXQoc2tiLCBib25kLCB0eF9zbGF2ZSk7XG4xNTM0Olx0fVxuMTUzNTpcdFxuMTUzNjpcdHZvaWQgYm9uZF9hbGJfbW9uaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4xNTM3Olx0e1xuMTUzODpcdFx0c3RydWN0IGJvbmRpbmcgKmJvbmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJvbmRpbmcsXG4xNTM5Olx0XHRcdFx0XHRcdCAgICBhbGJfd29yay53b3JrKTtcbjE1NDA6XHRcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XG4xNTQxOlx0XHRzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCAqY3VycjtcbjE1NDI6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4xNTQzOlx0XG4xNTQ0Olx0XHRpZiAoIWJvbmRfaGFzX3NsYXZlcyhib25kKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgyNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLY29uZmlnIERlcGVuZGVuY3kgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciB0aGUgYEJPTkRJTkdgIGRyaXZlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBuYXZpZ2F0ZSB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUsIHdoaWNoIGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBBbmQgaGVyZSB3ZSBhcmU6CgpgYGBrY29uZmlnCmlmIE5FVF9DT1JFCgpjb25maWcgQk9ORElORwoJdHJpc3RhdGUgJiMzNDtCb25kaW5nIGRyaXZlciBzdXBwb3J0JiMzNDsKCWRlcGVuZHMgb24gSU5FVAoJZGVwZW5kcyBvbiBUTFMgfHwgVExTX0RFVklDRT1uCmBgYAoKUmlnaHQsIHNvIGBCT05ESU5HYCBpcyB0cmlzdGF0ZSwgbWVhbmluZyBpdCBjYW4gYmUgYnVpbHQgYXMgYSBtb2R1bGUsIGJ1aWx0LWluLCBvciBkaXNhYmxlZC4gVGhlIGtleSBpcyB0aGUgYGRlcGVuZHMgb25gIGNsYXVzZXMuIFdlJiMzOTt2ZSBnb3QgZGVwZW5kZW5jaWVzIG9uIGBJTkVUYCAod2hpY2ggaXMgc3RhbmRhcmQgZm9yIGFueXRoaW5nIG5ldHdvcmtpbmcpLCBhbmQgYFRMU2Agb3IsIGlmIGBUTFNgIGlzbiYjMzk7dCBlbmFibGVkLCB0aGVuIGBUTFNfREVWSUNFYCBtdXN0IGJlIHNwZWNpZmljYWxseSBkaXNhYmxlZC4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgYE5FVF9DT1JFYC4gV2hlcmUgaXMgKnRoYXQqIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGRlcGVuZGVuY3kgYmFjayBhbmQgZmlndXJlIG91dCBpdHMgaW1wbGljYXRpb25zLiBJIGtub3cgaXQmIzM5O3MgKmxpa2VseSogZGVmaW5lZCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBvciBwb3NzaWJseSBldmVuIHRoZSBicm9hZGVyIGBORVRERVZJQ0VTYCBmcmFtZXdvcmssIHNvIGxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQmIzM5O3MgZmluZCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9DT1JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0yOT1jb25maWcgTUlJXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMS1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzI6Y29uZmlnIE5FVF9DT1JFXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzLVx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjkxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIEJvbmRpbmcgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgbmV0d29yayBib25kaW5nLCBuYW1lbHkgYENPTkZJR19CT05ESU5HYCBhbmQgYENPTkZJR19JTkVUYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBsaWtlbHkgc3VzcGVjdHMuIEJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBsZXQmIzM5O3MganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSYjMzk7bGwgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBzdWJ0bHkgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBsdXJraW5nIGluIGVpdGhlciBgZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZWAgb3IgYGJvbmRfYWxiLmNgIGl0c2VsZi4gSXQmIzM5O3MgZWFzeSB0byBvdmVybG9vayBhIGxlc3Mgb2J2aW91cyBkZXBlbmRlbmN5LCBhbmQgYSBxdWljayBzY2FuIGNhbiBzYXZlIGEgbG90IG9mIGhlYWQtc2NyYXRjaGluZyBsYXRlci4gSSB3YW50IHRvIGJlICp0aG9yb3VnaCouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUtNS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQk9ORElORykgJiM0Mzs9IGJvbmRpbmcub1xuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZS03LVxuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZT04PWJvbmRpbmctb2JqcyA6PSBib25kX21haW4ubyBib25kXzNhZC5vIGJvbmRfYWxiLm8gYm9uZF9zeXNmcy5vIGJvbmRfc3lzZnNfc2xhdmUubyBib25kX2RlYnVnZnMubyBib25kX25ldGxpbmsubyBib25kX29wdGlvbnMub1xuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZS05LVxuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZToxMDpwcm9jLSQoQ09ORklHX1BST0NfRlMpICYjNDM7PSBib25kX3Byb2Nmcy5vXG5kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlLTExLWJvbmRpbmctb2JqcyAmIzQzOz0gJChwcm9jLXkpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy05LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzoxMDojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIFx1MDAyNlx1MDAyNiAhZGVmaW5lZChDT05GSUdfTkVUX05TKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy0xMS1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jPTg3PXZvaWQgYm9uZF9kZXN0cm95X2RlYnVnZnModm9pZClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTkzLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzo5NDojZWxzZSAvKiAhQ09ORklHX0RFQlVHX0ZTICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTk1LVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM9MTEyPXZvaWQgYm9uZF9kZXN0cm95X2RlYnVnZnModm9pZClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTExNS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM6MTE2OiNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi9cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTg4LSNpbmNsdWRlIFx1MDAzY25ldC9ib25kX2FsYi5oXHUwMDNlXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjg5OiNpZiBJU19FTkFCTEVEKENPTkZJR19UTFNfREVWSUNFKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy05MC0jaW5jbHVkZSBcdTAwM2NuZXQvdGxzLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTIwMD1NT0RVTEVfUEFSTV9ERVNDKGxwX2ludGVydmFsLCBcJiMzNDtUaGUgbnVtYmVyIG9mIHNlY29uZHMgYmV0d2VlbiBpbnN0YW5jZXMgd2hlcmUgXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMDUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjIwNjojaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjA3LURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKG5ldHBvbGxfYmxvY2tfdHgpO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDA3PXN0YXRpYyBpbnQgYm9uZF92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQyNC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDI1OiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQyNi0vKipcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTczOD1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1kZXZfb3BzIGJvbmRfeGZybWRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy03NDUtfTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NzQ2OiNlbmRpZiAvKiBDT05GSUdfWEZSTV9PRkZMT0FEICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTc0Ny1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTEyNjY9dm9pZCBib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X2FjdGl2ZSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTEyNzYtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjEyNzc6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTI3OC1cdGJvbmRfaXBzZWNfZGVsX3NhX2FsbChib25kKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTI3OTojZW5kaWYgLyogQ09ORklHX1hGUk1fT0ZGTE9BRCAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMjgwLVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTM0MS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTM0MjojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzQzLVx0Ym9uZF9pcHNlY19hZGRfc2FfYWxsKGJvbmQpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxMzQ0OiNlbmRpZiAvKiBDT05GSUdfWEZSTV9PRkZMT0FEICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTEzNDUtXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xMzcwPXZvaWQgYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTM5MC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTM5MTojaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTM5Mi1zdGF0aWMgaW5saW5lIGludCBzbGF2ZV9lbmFibGVfbmV0cG9sbChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTc0ND1zdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBzbGF2ZV9rdHlwZSA9IHtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTc0NS1cdC5yZWxlYXNlID0gc2xhdmVfa29ial9yZWxlYXNlLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxNzQ2OiNpZmRlZiBDT05GSUdfU1lTRlNcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTc0Ny1cdC5zeXNmc19vcHMgPSBcdTAwMjZzbGF2ZV9zeXNmc19vcHMsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xODg4PWludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjIyMC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MjIyMTojaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjIyMi1cdGlmIChib25kLVx1MDAzZWRldi1cdTAwM2VucGluZm8pIHtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTMxNTI9c3RhdGljIGludCBib25kX2FycF9yY3YoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zMjMxLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozMjMyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zMjMzLXN0YXRpYyB2b2lkIGJvbmRfbnNfc2VuZChzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MzQyMT1pbnQgYm9uZF9yY3ZfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zNDIzLXtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQyNDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQyNS1cdGJvb2wgaXNfaXB2NiA9IHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBfX2NwdV90b19iZTE2KEVUSF9QX0lQVjYpO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQzNC1cdFx0aWYgKChzbGF2ZV9kb19hcnBfdmFsaWRhdGVfb25seShib25kKSBcdTAwMjZcdTAwMjYgaXNfYXJwKSB8fFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozNDM1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zNDM2LVx0XHQgICAgKHNsYXZlX2RvX2FycF92YWxpZGF0ZV9vbmx5KGJvbmQpIFx1MDAyNlx1MDAyNiBpc19pcHY2KSB8fFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ0Mi1cdFx0cmV0dXJuIGJvbmRfYXJwX3Jjdihza2IsIGJvbmQsIHNsYXZlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQ0MzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ0NC1cdH0gZWxzZSBpZiAoaXNfaXB2NiBcdTAwMjZcdTAwMjYgbGlrZWx5KGlwdjZfbW9kX2VuYWJsZWQoKSkpIHtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTM0NTI9c3RhdGljIHZvaWQgYm9uZF9zZW5kX3ZhbGlkYXRlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ1NC1cdGJvbmRfYXJwX3NlbmRfYWxsKGJvbmQsIHNsYXZlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzQ1NTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ1Ni1cdGlmIChsaWtlbHkoaXB2Nl9tb2RfZW5hYmxlZCgpKSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTM5MTc9c3RhdGljIGludCBib25kX21hc3Rlcl9uZXRkZXZfZXZlbnQodW5zaWduZWQgbG9uZyBldmVudCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTM5MjgtXHRcdGJvbmRfcmVtb3ZlX3Byb2NfZW50cnkoZXZlbnRfYm9uZCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjM5Mjk6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzkzMC1cdFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChib25kX2RldiksIGJvbmRfZGV2LCB0cnVlKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzkzMTojZW5kaWYgLyogQ09ORklHX1hGUk1fT0ZGTE9BRCAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zOTMyLVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQ0NDY9c3RhdGljIHZvaWQgYm9uZF9mb2xkX3N0YXRzKHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqX3Jlcyxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQ0NzEtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQ0NzI6I2lmZGVmIENPTkZJR19MT0NLREVQXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQ0NzMtc3RhdGljIGludCBib25kX2dldF9sb3dlc3RfbGV2ZWxfcmN1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00NTEzPXN0YXRpYyB2b2lkIGJvbmRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQ1MjMtXHRyY3VfcmVhZF9sb2NrKCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQ1MjQ6I2lmZGVmIENPTkZJR19MT0NLREVQXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQ1MjUtXHRuZXN0X2xldmVsID0gYm9uZF9nZXRfbG93ZXN0X2xldmVsX3JjdShib25kX2Rldik7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NDU1PXN0YXRpYyB2b2lkIGJvbmRfc2tfdG9fZmxvdyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93X2tleXMgKmZsb3cpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDU3LVx0c3dpdGNoIChzay1cdTAwM2Vza19mYW1pbHkpIHtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTQ1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTQ1OS1cdGNhc2UgQUZfSU5FVDY6XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NTIwPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9za19nZXRfbG93ZXJfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTMzLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NTM0OiNpZiBJU19FTkFCTEVEKENPTkZJR19UTFNfREVWSUNFKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTM1LXN0YXRpYyBuZXRkZXZfdHhfdCBib25kX3Rsc19kZXZpY2VfeG1pdChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU1NTA9c3RhdGljIG5ldGRldl90eF90IF9fYm9uZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTU3LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NTU4OiNpZiBJU19FTkFCTEVEKENPTkZJR19UTFNfREVWSUNFKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTU5LVx0aWYgKHRsc19pc19za2JfdHhfZGV2aWNlX29mZmxvYWRlZChza2IpKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTk0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJvbmRfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU5NTktXHQubmRvX3ZsYW5fcnhfa2lsbF92aWRcdD0gYm9uZF92bGFuX3J4X2tpbGxfdmlkLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1OTYwOiNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01OTYxLVx0Lm5kb19uZXRwb2xsX3NldHVwXHQ9IGJvbmRfbmV0cG9sbF9zZXR1cCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU5OTI9dm9pZCBib25kX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldilcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYwMTctXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYwMTg6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjAxOS1cdC8qIHNldCB1cCB4ZnJtIGRldmljZSBvcHMgKG9ubHkgc3VwcG9ydGVkIGluIGFjdGl2ZS1iYWNrdXAgcmlnaHQgbm93KSAqL1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjAyMi1cdG11dGV4X2luaXQoXHUwMDI2Ym9uZC1cdTAwM2VpcHNlY19sb2NrKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjAyMzojZW5kaWYgLyogQ09ORklHX1hGUk1fT0ZGTE9BRCAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDI0LVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjA0Ny1cdGJvbmRfZGV2LVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfR1NPX1BBUlRJQUw7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYwNDg6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjA0OS1cdGJvbmRfZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IEJPTkRfWEZSTV9GRUFUVVJFUztcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYwNTItXHRcdGJvbmRfZGV2LVx1MDAzZWZlYXR1cmVzIHw9IEJPTkRfWEZSTV9GRUFUVVJFUztcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjA1MzojZW5kaWYgLyogQ09ORklHX1hGUk1fT0ZGTE9BRCAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDU0LX1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTYwNTk9c3RhdGljIHZvaWQgYm9uZF91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjA3MS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjA3MjojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDczLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZib25kLVx1MDAzZWlwc2VjX2xvY2spO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MDc0OiNlbmRpZiAvKiBDT05GSUdfWEZSTV9PRkZMT0FEICovXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYwNzUtXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz02MDg1PXN0YXRpYyBpbnQgX19pbml0IGJvbmRfY2hlY2tfcGFyYW1zKHN0cnVjdCBib25kX3BhcmFtcyAqcGFyYW1zKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjQ2OC1cdG1lbWNweShwYXJhbXMtXHUwMDNlYXJwX3RhcmdldHMsIGFycF90YXJnZXQsIHNpemVvZihhcnBfdGFyZ2V0KSk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjY0Njk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY0NzAtXHRtZW1zZXQocGFyYW1zLVx1MDAzZW5zX3RhcmdldHMsIDAsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpICogQk9ORF9NQVhfTlNfVEFSR0VUUyk7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz02NjU0PXN0YXRpYyB2b2lkIF9fZXhpdCBib25kaW5nX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY2NjItXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjY2NjM6I2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY2NjQtXHQvKiBNYWtlIHN1cmUgd2UgZG9uJiMzOTt0IGhhdmUgYW4gaW1iYWxhbmNlIG9uIG91ciBuZXRwb2xsIGJsb2NraW5nICovXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYz0yMTY9c3RhdGljIGludCBib25kX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmMtMzM5LVx0fVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzozNDA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTM0MS1cdGlmIChkYXRhW0lGTEFfQk9ORF9OU19JUDZfVEFSR0VUXSkge1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM9NzAwPXN0YXRpYyBpbnQgYm9uZF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTc3MC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9uZXRsaW5rLmM6NzcxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy03NzItXHR0YXJnZXRzID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJRkxBX0JPTkRfTlNfSVA2X1RBUkdFVCk7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz04OTc9c3RhdGljIGJvb2wgYm9uZF9zZXRfeGZybV9mZWF0dXJlcyhzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMtODk4LXtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6ODk5Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19YRlJNX09GRkxPQUQpKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy05MDAtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jPTEyNjA9c3RhdGljIGludCBib25kX29wdGlvbl9hcnBfaXBfdGFyZ2V0c19zZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xMjg1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYzoxMjg2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xMjg3LXN0YXRpYyBib29sIHNsYXZlX2Nhbl9zZXRfbnNfbWFkZHIoY29uc3Qgc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jPTU5PXN0YXRpYyB2b2lkIGJvbmRfaW5mb19zaG93X21hc3RlcihzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMtMTM4LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jOjEzOTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYy0xNDAtXHRcdHByaW50ZWQgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTk4MgoJCQkJCQkJb3V0cHV0OiAxODQKCQkJCQkJCXRob3VnaHRzOiAyMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhc29uaW5nIEJlaGluZCB0aGUgQm9uZGVkIFBhY2tldCBUcmFuc21pc3Npb24gTG9naWMgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gd2UmIzM5O3ZlIGNvdmVyZWQgb3VyIGJhc2VzLiBGaXJzdCwgbGV0IG1lIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGBGb2N1c1N5bWJvbHNgIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgdGFyZ2V0aW5nIHRoZSByaWdodCBhcmVhczogYGJvbmRfYWxiX3htaXRgLCBgYm9uZF90bGJfeG1pdGAsIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAsIGFuZCBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgLiBUaGF0IGxvb2tzIHJpZ2h0LCB0aG9zZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRvIGV4YW1pbmUuIE5leHQsIGxldCBtZSB2ZXJpZnkgdGhhdCB0aGUgbmVjZXNzYXJ5IGBFbmFibGVDb25maWdzYCBhcmUgaW4gcGxhY2U6IHNwZWNpZmljYWxseSBgQk9ORElOR2AgYW5kIGBJTkVUYC4gR3JlYXQsIGFsbCBzeXN0ZW1zIG5vbWluYWwgc28gZmFyLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZnV6emFiaWxpdHkuIFllcywgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGRlZmluaXRlbHkgYmUgdHJ1ZSBoZXJlLiBUaGlzIGlzIGEgY3JpdGljYWwgbW9kaWZpY2F0aW9uISBXZSYjMzk7cmUgYWx0ZXJpbmcgdGhlIGZ1bmRhbWVudGFsIHBhY2tldCB0cmFuc21pc3Npb24gcHJvY2VzcyBmb3IgYm9uZGluZyBpbiBBY3RpdmUtTG9hZCBCYWxhbmNpbmcgKEFMQikgYW5kIFRyYW5zbWl0IExvYWQgQmFsYW5jaW5nIChUTEIpIG1vZGVzLiBUaGlzIGltcGFjdHMgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGluZ3MgbGlrZSByZXdyaXRpbmcgc291cmNlIE1BQyBhZGRyZXNzZXMgaW4gQVJQIHBhY2tldHMgYW5kIGV0aGVybmV0IGhlYWRlcnMuIFRoZSBhZGRpdGlvbiBvZiBgc2tiX2Nvd19oZWFkYCBpcyBwYXJ0aWN1bGFybHkgc2lnbmlmaWNhbnQgdG8gZW5zdXJlIHdyaXRhYmxlIGhlYWRyb29tLCBhbmQgc3dpdGNoaW5nIHRoZSBoZWFkZXIgYWNjZXNzb3IgZnJvbSBgc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsgZXRoX2hkcihza2IpYCB0byBgc2tiX2V0aF9oZHIoc2tiKWAgaXMgbm90IGp1c3QgYSBjb3NtZXRpYyBjaGFuZ2UuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQmIzM5O3MgZnVsbHkgdGVzdGFibGUgYW5kIHJlYWNoYWJsZSwgZXNwZWNpYWxseSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBUaGF0IGxldmVsIG9mIGFjY2Vzc2liaWxpdHkgaXMgYSBrZXkgZmFjdG9yLgoKQWxyaWdodCwgdGhhdCYjMzk7cyB0aGUgcmF0aW9uYWxlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgYXJ0aWN1bGF0ZWQgY2xlYXJseSBhbmQgdGhlbiBjYWxsIGBzZXQtcmVzdWx0c2AuIERvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCT05ESU5HJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX2FsYl94bWl0JiMzNDssCiAgICAmIzM0O2JvbmRfdGxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF94bWl0X2FsYl9zbGF2ZV9nZXQmIzM0OywKICAgICYjMzQ7Ym9uZF94bWl0X3RsYl9zbGF2ZV9nZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHRyYW5zbWlzc2lvbiBwYXRocyBpbiB0aGUgYm9uZGluZyBkcml2ZXImIzM5O3MgQUxCIGFuZCBUTEIgbW9kZXMgKGJvbmRfYWxiLmMpLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgc2tiIGhlYWRyb29tIGlzIHByb3Blcmx5IGNvd2VkL3Vuc2hhcmVkIGJlZm9yZSBtb2RpZnlpbmcgc291cmNlIE1BQyBhZGRyZXNzZXMgKGluIEFSUCByZXBsaWVzIGFuZCBldGhlcm5ldCBoZWFkZXJzKSBhbmQgcmVwbGFjZXMgc2tiX3Jlc2V0X21hY19oZWFkZXIvZXRoX2hkciBjYWxscyB3aXRoIHNrYl9ldGhfaGRyLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGNvbmZpZ3VyaW5nIGJvbmRpbmcgbmV0d29yayBpbnRlcmZhY2VzIGluIEFMQiBvciBUTEIgbW9kZSBhbmQgdHJhbnNtaXR0aW5nIHRyYWZmaWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfYWxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF90bGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfYWxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfdGxiX3NsYXZlX2dldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgdHJhbnNtaXNzaW9uIHBhdGhzIGluIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBBTEIgYW5kIFRMQiBtb2RlcyAoYm9uZF9hbGIuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBza2IgaGVhZHJvb20gaXMgcHJvcGVybHkgY293ZWQvdW5zaGFyZWQgYmVmb3JlIG1vZGlmeWluZyBzb3VyY2UgTUFDIGFkZHJlc3NlcyAoaW4gQVJQIHJlcGxpZXMgYW5kIGV0aGVybmV0IGhlYWRlcnMpIGFuZCByZXBsYWNlcyBza2JfcmVzZXRfbWFjX2hlYWRlci9ldGhfaGRyIGNhbGxzIHdpdGggc2tiX2V0aF9oZHIuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY29uZmlndXJpbmcgYm9uZGluZyBuZXR3b3JrIGludGVyZmFjZXMgaW4gQUxCIG9yIFRMQiBtb2RlIGFuZCB0cmFuc21pdHRpbmcgdHJhZmZpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBBTEIvVExCIHRyYW5zbWl0IHBhdGhzIChib25kX2FsYi5jKSB0byBlbnN1cmUgdGhhdCBgc2tiX2Nvd19oZWFkKClgIGlzIGNhbGxlZCBiZWZvcmUgbW9kaWZ5aW5nIHBhY2tldCBoZWFkZXJzIChzdWNoIGFzIGBldGhfaGRyLVx1MDAzZWhfc291cmNlYCBvciB0aGUgQVJQIGhlYWRlciYjMzk7cyBzb3VyY2UgTUFDKSwgYXZvaWRpbmcgbW9kaWZpY2F0aW9uIG9mIHNoYXJlZC9jbG9uZWQgc2tiIGhlYWRlciBtZW1vcnkuIEl0IGFsc28gcmVwbGFjZXMgY2FsbHMgcmVzZXR0aW5nIHRoZSBNQUMgaGVhZGVyIHdpdGggYHNrYl9ldGhfaGRyKClgLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGNvbmNlcm4gc2tiIGhlYWQgY2xvbmFiaWxpdHksIHBhY2tldCBoZWFkZXIgbXV0YXRpb24sIGFuZCBuZXR3b3JrIHBhY2tldCB0cmFuc21pc3Npb246XG4xLiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzIGFyZSBwb3NzaWJsZSB0aHJvdWdoIHRoaXMgcGF0aC5cbjMuIE5vIGJyYW5jaGluZyBvciBsb2dpYyByZWxpZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBzaGFyZWQgbWVtb3J5IG1vZGlmaWNhdGlvbiBvciBza2IgbGlmZWN5Y2xlIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dlcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcwOWFkZjZjZmMwMzY0YjExODQ5YmNiYzYyNjdjMzQwZTY3ZmU4MTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDA5OjA3OjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCmluZGV4IDY1NGYwNTFkMDAyMzkuLjVmNzUwZjA4YTE0NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKQEAgLTY3OCw5ICYjNDM7Njc4LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnJsYl9hcnBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKIAlpZiAoYXJwLSZndDtvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUExZKSkgewogCQkvKiB0aGUgYXJwIG11c3QgYmUgc2VudCBvbiB0aGUgc2VsZWN0ZWQgcnggY2hhbm5lbCAqLwogCQl0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7Ci0JCWlmICh0eF9zbGF2ZSkKJiM0MzsJCWlmICh0eF9zbGF2ZSAmYW1wOyZhbXA7IHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLSZndDtjdXJyX2FjdGl2ZV9zbGF2ZSkpIHsKJiM0MzsJCQlpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKQomIzQzOwkJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCQlhcnAgPSAoc3RydWN0IGFycF9wa3QgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKIAkJCWJvbmRfaHdfYWRkcl9jb3B5KGFycC0mZ3Q7bWFjX3NyYywgdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIsCiAJCQkJCSAgdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7YWRkcl9sZW4pOwomIzQzOwkJfQogCQluZXRkZXZfZGJnKGJvbmQtJmd0O2RldiwgJiMzNDsoc2xhdmUgJXMpOiBTZXJ2ZXIgc2VudCBBUlAgUmVwbHkgcGFja2V0XG4mIzM0OywKIAkJCSAgIHR4X3NsYXZlID8gdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7bmFtZSA6ICYjMzQ7TlVMTCYjMzQ7KTsKIAl9IGVsc2UgaWYgKGFycC0mZ3Q7b3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSkgewpAQCAtMTM0MCw3ICYjNDM7MTM0NCw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLAogCQkJCSAgICBzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlKQogewogCXN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSAmYW1wOyhCT05EX0FMQl9JTkZPKGJvbmQpKTsKLQlzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTsKIAogCWlmICghdHhfc2xhdmUpIHsKIAkJLyogdW5iYWxhbmNlZCBvciB1bmFzc2lnbmVkLCBzZW5kIHRocm91Z2ggcHJpbWFyeSAqLwpAQCAtMTM1MSw3ICYjNDM7MTM1NCw5IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLAogCiAJaWYgKHR4X3NsYXZlICZhbXA7JmFtcDsgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7CiAJCWlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC0mZ3Q7Y3Vycl9hY3RpdmVfc2xhdmUpKSB7Ci0JCQlldGhlcl9hZGRyX2NvcHkoZXRoX2RhdGEtJmd0O2hfc291cmNlLAomIzQzOwkJCWlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpCiYjNDM7CQkJCXJldHVybiBib25kX3R4X2Ryb3AoYm9uZC0mZ3Q7ZGV2LCBza2IpOwomIzQzOwkJCWV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLSZndDtoX3NvdXJjZSwKIAkJCQkJdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIpOwogCQl9CiAKQEAgLTEzNzUsOCAmIzQzOzEzODAsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLAogCXN0cnVjdCBldGhoZHIgKmV0aF9kYXRhOwogCXUzMiBoYXNoX2luZGV4OwogCi0Jc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQlldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTsKJiM0MzsJZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpOwogCiAJLyogRG8gbm90IFRYIGJhbGFuY2UgYW55IG11bHRpY2FzdCBvciBicm9hZGNhc3QgKi8KIAlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLSZndDtoX2Rlc3QpKSB7CkBAIC0xNDI4LDggJiM0MzsxNDMyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKIAl1MzIgaGFzaF9pbmRleCA9IDA7CiAJaW50IGhhc2hfc2l6ZSA9IDA7CiAKLQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCWV0aF9kYXRhID0gZXRoX2hkcihza2IpOwomIzQzOwlldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7CiAKIAlzd2l0Y2ggKG50b2hzKHNrYi0mZ3Q7cHJvdG9jb2wpKSB7CiAJY2FzZSBFVEhfUF9JUDogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDU1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCb25kaW5nIERyaXZlciBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciB0aGUgYm9uZGluZyBkcml2ZXIsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNjcnV0aW5pemUgaXQgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiBhbmFseXNpcy4KCkZyb20gd2hhdCBJIHNlZSwgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgc29tZSBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGUgQVJQIGhhbmRsaW5nIGFuZCB0cmFuc21pc3Npb24gbG9naWMuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIHRvdWNoZXMgdGhlc2UgZnVuY3Rpb25zOiBgcmxiX2FycF94bWl0YCwgYGJvbmRfZG9fYWxiX3htaXRgLCBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgLCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YC4KCkluIGBybGJfYXJwX3htaXRgLCB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIGNoZWNrIGFuZCBwb3RlbnRpYWwgbW9kaWZpY2F0aW9uIG9mIHRoZSBBUlAgcGFja2V0JiMzOTtzIHNvdXJjZSBNQUMgYWRkcmVzcy4gVGhlIGNoYW5nZSBpbnZvbHZlcyBhIGBza2JfY293X2hlYWRgIGNhbGwsIHByZXN1bWFibHkgdG8gaGFuZGxlIGNvcHktb24td3JpdGUsIGFuZCBjb25kaXRpb25hbGx5IGNvcHlpbmcgdGhlIE1BQyBhZGRyZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGFzc2VzcyBpZiB0aGVyZSBhcmUgYW55IHBvaW50cyB3aGVyZSBkYXRhIGlzIHVzZWQgYmVmb3JlIGJlaW5nIGNvcnJlY3RseSBpbml0aWFsaXplZC4gVGhlIG9yaWdpbmFsIGNvZGUgc2VlbXMgdG8gY29weSB0aGUgTUFDIGFkZHJlc3MgdW5jb25kaXRpb25hbGx5IGFuZCB0aGUgZml4IHNlZW1zIHRvIGJlIGNoZWNraW5nIHRvIHNlZSBpZiB0aGUgdHhfc2xhdmUgaXMgdGhlIGN1cnJlbnRseSBhY3RpdmUgc2xhdmUuIFRoZSBvcmlnaW5hbCBjb2RlIGRvZXMgbm90IHNlZW0gdG8gaGFuZGxlIENPVyBzbyB0aGlzIGNvdWxkIGJlIGEgZml4LgoKU2ltaWxhcmx5LCBgYm9uZF9kb19hbGJfeG1pdGAgbm93IHVzZXMgYHNrYl9jb3dfaGVhZGAgdG8gcG90ZW50aWFsbHkgbW9kaWZ5IHRoZSBzb3VyY2UgTUFDIGFkZHJlc3Mgb2YgYW4gRXRoZXJuZXQgZnJhbWUuIFRoaXMgc3VnZ2VzdHMgcG90ZW50aWFsIHJpc2sgdGhhdCBuZWVkcyBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdGhlIGBoX3NvdXJjZWAgZmllbGQsIHdpdGggdGhlIGBza2JfY293X2hlYWRgIGNhbGwgdGhhdCBjYW4gZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKRmluYWxseSwgdGhlIHBhdGNoZXMgaW4gYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCBhcmUgcmVtb3ZpbmcgYHNrYl9yZXNldF9tYWNfaGVhZGVyYCBhbmQgcmVwbGFjaW5nIGBldGhfaGRyKHNrYilgIHdpdGggYHNrYl9ldGhfaGRyKHNrYilgLiBUaGlzIGxvb2tzIGxpa2Ugc29tZSBjbGVhbnVwIHRvIGJlIG1vcmUgYWxpZ25lZCB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgQVBJLCB3aGljaCBjb3VsZCBhbHNvIGJlIHJlbGV2YW50IGluIGEgc2VjdXJpdHkgY29udGV4dC4gSSBhbSBub3Qgc2VlaW5nIHRoYXQgdGhlc2UgY2hhbmdlcyBpbmhlcmVudGx5IG1ha2UgdGhlIGNvZGUgbW9yZSBwcm9uZSB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEkmIzM5O2xsIG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZXNlIGNoYW5nZXMgd2l0aCB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGxhcmdlciBib25kaW5nIGRyaXZlciBjb250ZXh0LiBJIHdpbGwgbGlrZWx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgZGF0YSBkZXBlbmRlbmNpZXMuIE15IHByaW1hcnkgY29uY2VybiB3aWxsIGJlIHRvIGFzY2VydGFpbiB3aGV0aGVyIHRoZXJlIGFyZSBub3cgY29kZSBwYXRocyB3aGVyZSBhIHJlYWQgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSBjYW4gb2NjdXIsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBLTVNBTiBhaW1zIHRvIGRldGVjdC4gVGhlIGBza2JfY293X2hlYWRgIGFkZGl0aW9ucyBhcmUgYSByZWQgZmxhZyBhbmQgd29ydGggY2FyZWZ1bCBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjA6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNjYxOlx0XHRhcnAgPSAoc3RydWN0IGFycF9wa3QgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcbiA2NjI6XHRcbiA2NjM6XHRcdC8qIERvbiYjMzk7dCBtb2RpZnkgb3IgbG9hZCBiYWxhbmNlIEFSUHMgdGhhdCBkbyBub3Qgb3JpZ2luYXRlXG4gNjY0Olx0XHQgKiBmcm9tIHRoZSBib25kIGl0c2VsZiBvciBhIFZMQU4gZGlyZWN0bHkgYWJvdmUgdGhlIGJvbmQuXG4gNjY1Olx0XHQgKi9cbiA2NjY6XHRcdGlmICghYm9uZF9zbGF2ZV9oYXNfbWFjX3JjdShib25kLCBhcnAtXHUwMDNlbWFjX3NyYykpXG4gNjY3Olx0XHRcdHJldHVybiBOVUxMO1xuIDY2ODpcdFxuIDY2OTpcdFx0ZGV2ID0gaXBfZGV2X2ZpbmQoZGV2X25ldChib25kLVx1MDAzZWRldiksIGFycC1cdTAwM2VpcF9zcmMpO1xuIDY3MDpcdFx0aWYgKGRldikge1xuIDY3MTpcdFx0XHRpZiAobmV0aWZfaXNfYW55X2JyaWRnZV9tYXN0ZXIoZGV2KSkge1xuIDY3MjpcdFx0XHRcdGRldl9wdXQoZGV2KTtcbiA2NzM6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiA2NzQ6XHRcdFx0fVxuIDY3NTpcdFx0XHRkZXZfcHV0KGRldik7XG4gNjc2Olx0XHR9XG4gNjc3Olx0XG4gNjc4Olx0XHRpZiAoYXJwLVx1MDAzZW9wX2NvZGUgPT0gaHRvbnMoQVJQT1BfUkVQTFkpKSB7XG4gNjc5Olx0XHRcdC8qIHRoZSBhcnAgbXVzdCBiZSBzZW50IG9uIHRoZSBzZWxlY3RlZCByeCBjaGFubmVsICovXG4gNjgwOlx0XHRcdHR4X3NsYXZlID0gcmxiX2Nob29zZV9jaGFubmVsKHNrYiwgYm9uZCwgYXJwKTtcbiA2ODE6XHRcdFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNiB0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbiA2ODI6XHRcdFx0XHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxuIDY4MzpcdFx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNjg0Olx0XHRcdFx0YXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gNjg1Olx0XHRcdFx0Ym9uZF9od19hZGRyX2NvcHkoYXJwLVx1MDAzZW1hY19zcmMsIHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcixcbiA2ODY6XHRcdFx0XHRcdFx0ICB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4pO1xuIDY4NzpcdFx0XHR9XG4gNjg4Olx0XHRcdG5ldGRldl9kYmcoYm9uZC1cdTAwM2VkZXYsIFwmIzM0OyhzbGF2ZSAlcyk6IFNlcnZlciBzZW50IEFSUCBSZXBseSBwYWNrZXRcXG5cJiMzNDssXG4gNjg5Olx0XHRcdFx0ICAgdHhfc2xhdmUgPyB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlbmFtZSA6IFwmIzM0O05VTExcJiMzNDspO1xuIDY5MDpcdFx0fSBlbHNlIGlmIChhcnAtXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSkge1xuIDY5MTpcdFx0XHQvKiBDcmVhdGUgYW4gZW50cnkgaW4gdGhlIHJ4X2hhc2h0YmwgZm9yIHRoaXMgY2xpZW50IGFzIGFcbiA2OTI6XHRcdFx0ICogcGxhY2UgaG9sZGVyLlxuIDY5MzpcdFx0XHQgKiBXaGVuIHRoZSBhcnAgcmVwbHkgaXMgcmVjZWl2ZWQgdGhlIGVudHJ5IHdpbGwgYmUgdXBkYXRlZFxuIDY5NDpcdFx0XHQgKiB3aXRoIHRoZSBjb3JyZWN0IHVuaWNhc3QgYWRkcmVzcyBvZiB0aGUgY2xpZW50LlxuIDY5NTpcdFx0XHQgKi9cbiA2OTY6XHRcdFx0dHhfc2xhdmUgPSBybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kLCBhcnApO1xuIDY5NzpcdFxuIDY5ODpcdFx0XHQvKiBUaGUgQVJQIHJlcGx5IHBhY2tldHMgbXVzdCBiZSBkZWxheWVkIHNvIHRoYXRcbiA2OTk6XHRcdFx0ICogdGhleSBjYW4gY2FuY2VsIG91dCB0aGUgaW5mbHVlbmNlIG9mIHRoZSBBUlAgcmVxdWVzdC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWVkIGNvbnRleHQ6CgoqKkFuYWx5emluZyB0aGUgVHJhbnNtaXNzaW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyB3ZSBuZWVkIHRvIGRpdmUgaW50byB0aGlzIHRyYW5zbWlzc2lvbiBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBgYm9uZF9kb19hbGJfeG1pdGAgZnVuY3Rpb24sIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBmdW5jdGlvbnMgYXJvdW5kIGl0LiBJdCYjMzk7cyByYXJlIGZvciBhIHNpbmdsZSBmdW5jdGlvbiB0byBiZSB0aGUgcm9vdCBvZiBhbiBpc3N1ZSBpbiBhIG5ldHdvcmsgb3IgaGlnaC1wZXJmb3JtYW5jZSBzeXN0ZW0uIEEgYnVnIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgY291bGQgYmUgYSByZXN1bHQgb2YgdGhlIGludGVyYWN0aW9ucyBhbmQgaGFuZG9mZnMgYmV0d2VlbiBtdWx0aXBsZSBjb21wb25lbnRzLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgZXJyb3IgaGFuZGxpbmcsIGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbiBhY3Jvc3MgdGhlIHJlbGV2YW50IGNhbGwgc3RhY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBkYXRhIG9yaWdpbmF0ZXMsIHRoZSB0cmFuc2Zvcm1hdGlvbnMgaXQgdW5kZXJnb2VzLCBhbmQgdGhlIHVsdGltYXRlIGRlc3RpbmF0aW9uLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIHVuZXhwZWN0ZWQgcmVzb3VyY2UgY29udGVudGlvbj8gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGlkZW50aWZ5IGFsbCBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMsIGluY2x1ZGluZyB0aGUgaW5wdXQgZGF0YSBhbmQgY29uZmlndXJhdGlvbiB0aGF0IGlzIHBhc3NlZCBpbnRvIGl0LiBHb3R0YSBiZSBzeXN0ZW1hdGljIGFib3V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM0MDpcdFx0XHRybGJfZGVpbml0aWFsaXplKGJvbmQpO1xuMTM0MTpcdH1cbjEzNDI6XHRcbjEzNDM6XHRzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbjEzNDQ6XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlKVxuMTM0NTpcdHtcbjEzNDY6XHRcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XG4xMzQ3Olx0XG4xMzQ4Olx0XHRpZiAoIXR4X3NsYXZlKSB7XG4xMzQ5Olx0XHRcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cbjEzNTA6XHRcdFx0dHhfc2xhdmUgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSk7XG4xMzUxOlx0XHRcdGlmIChib25kLVx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYilcbjEzNTI6XHRcdFx0XHRib25kX2luZm8tXHUwMDNldW5iYWxhbmNlZF9sb2FkICYjNDM7PSBza2ItXHUwMDNlbGVuO1xuMTM1MzpcdFx0fVxuMTM1NDpcdFxuMTM1NTpcdFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNiBib25kX3NsYXZlX2Nhbl90eCh0eF9zbGF2ZSkpIHtcbjEzNTY6XHRcdFx0aWYgKHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKSkge1xuMTM1NzpcdFx0XHRcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXG4xMzU4Olx0XHRcdFx0XHRyZXR1cm4gYm9uZF90eF9kcm9wKGJvbmQtXHUwMDNlZGV2LCBza2IpO1xuMTM1OTpcdFx0XHRcdGV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLVx1MDAzZWhfc291cmNlLFxuMTM2MDpcdFx0XHRcdFx0XHR0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuMTM2MTpcdFx0XHR9XG4xMzYyOlx0XG4xMzYzOlx0XHRcdHJldHVybiBib25kX2Rldl9xdWV1ZV94bWl0KGJvbmQsIHNrYiwgdHhfc2xhdmUtXHUwMDNlZGV2KTtcbjEzNjQ6XHRcdH1cbjEzNjU6XHRcbjEzNjY6XHRcdGlmICh0eF9zbGF2ZSBcdTAwMjZcdTAwMjYgYm9uZC1cdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcbjEzNjc6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmJvbmQtXHUwMDNlbW9kZV9sb2NrKTtcbjEzNjg6XHRcdFx0X190bGJfY2xlYXJfc2xhdmUoYm9uZCwgdHhfc2xhdmUsIDApO1xuMTM2OTpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4xMzcwOlx0XHR9XG4xMzcxOlx0XG4xMzcyOlx0XHQvKiBubyBzdWl0YWJsZSBpbnRlcmZhY2UsIGZyYW1lIG5vdCBzZW50ICovXG4xMzczOlx0XHRyZXR1cm4gYm9uZF90eF9kcm9wKGJvbmQtXHUwMDNlZGV2LCBza2IpO1xuMTM3NDpcdH1cbjEzNzU6XHRcbjEzNzY6XHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuMTM3NzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEzNzg6XHR7XG4xMzc5Olx0XHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlID0gTlVMTDtcbjEzODA6XHRcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xuMTM4MTpcdFx0dTMyIGhhc2hfaW5kZXg7XG4xMzgyOlx0XG4xMzgzOlx0XHRldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7XG4xMzg0Olx0XG4xMzg1Olx0XHQvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqL1xuMTM4NjpcdFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cdTAwM2VoX2Rlc3QpKSB7XG4xMzg3Olx0XHRcdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG4xMzg4Olx0XHRcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4xMzg5Olx0XHRcdFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSlcbjEzOTA6XHRcdFx0XHRcdGJyZWFrO1xuMTM5MTpcdFx0XHRcdGZhbGx0aHJvdWdoO1xuMTM5MjpcdFx0XHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbjEzOTM6XHRcdFx0XHRoYXNoX2luZGV4ID0gYm9uZF94bWl0X2hhc2goYm9uZCwgc2tiKTtcbjEzOTQ6XHRcdFx0XHRpZiAoYm9uZC1cdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcbjEzOTU6XHRcdFx0XHRcdHR4X3NsYXZlID0gdGxiX2Nob29zZV9jaGFubmVsKGJvbmQsXG4xMzk2Olx0XHRcdFx0XHRcdFx0XHQgICAgICBoYXNoX2luZGV4IFx1MDAyNiAweEZGLFxuMTM5NzpcdFx0XHRcdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbik7XG4xMzk4Olx0XHRcdFx0fSBlbHNlIHtcbjEzOTk6XHRcdFx0XHRcdHN0cnVjdCBib25kX3VwX3NsYXZlICpzbGF2ZXM7XG4xNDAwOlx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgY291bnQ7XG4xNDAxOlx0XG4xNDAyOlx0XHRcdFx0XHRzbGF2ZXMgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cdTAwM2V1c2FibGVfc2xhdmVzKTtcbjE0MDM6XHRcdFx0XHRcdGNvdW50ID0gc2xhdmVzID8gUkVBRF9PTkNFKHNsYXZlcy1cdTAwM2Vjb3VudCkgOiAwO1xuMTQwNDpcdFx0XHRcdFx0aWYgKGxpa2VseShjb3VudCkpXG4xNDA1Olx0XHRcdFx0XHRcdHR4X3NsYXZlID0gc2xhdmVzLVx1MDAzZWFycltoYXNoX2luZGV4ICVcbjE0MDY6XHRcdFx0XHRcdFx0XHRcdCAgICAgICBjb3VudF07XG4xNDA3Olx0XHRcdFx0fVxuMTQwODpcdFx0XHRcdGJyZWFrO1xuMTQwOTpcdFx0XHR9XG4xNDEwOlx0XHR9XG4xNDExOlx0XHRyZXR1cm4gdHhfc2xhdmU7XG4xNDEyOlx0fVxuMTQxMzpcdFxuMTQxNDpcdG5ldGRldl90eF90IGJvbmRfdGxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuMTQxNTpcdHtcbjE0MTY6XHRcdHN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoYm9uZF9kZXYpO1xuMTQxNzpcdFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZTtcbjE0MTg6XHRcbjE0MTk6XHRcdHR4X3NsYXZlID0gYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcbjE0MjA6XHRcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xuMTQyMTpcdH1cbjE0MjI6XHRcbjE0MjM6XHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuMTQyNDpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjE0MjU6XHR7XG4xNDI2Olx0XHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuMTQyNzpcdFx0c3RhdGljIGNvbnN0IF9fYmUzMiBpcF9iY2FzdCA9IGh0b25sKDB4ZmZmZmZmZmYpO1xuMTQyODpcdFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XG4xNDI5Olx0XHRjb25zdCB1OCAqaGFzaF9zdGFydCA9IE5VTEw7XG4xNDMwOlx0XHRib29sIGRvX3R4X2JhbGFuY2UgPSB0cnVlO1xuMTQzMTpcdFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XG4xNDMyOlx0XHR1MzIgaGFzaF9pbmRleCA9IDA7XG4xNDMzOlx0XHRpbnQgaGFzaF9zaXplID0gMDtcbjE0MzQ6XHRcbjE0MzU6XHRcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcbjE0MzY6XHRcbjE0Mzc6XHRcdHN3aXRjaCAobnRvaHMoc2tiLVx1MDAzZXByb3RvY29sKSkge1xuMTQzODpcdFx0Y2FzZSBFVEhfUF9JUDoge1xuMTQzOTpcdFx0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU3NgoJCQkJCQkJb3V0cHV0OiAyMjYKCQkJCQkJCXRob3VnaHRzOiA1ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgS01TQU4gSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBvZiB0aGUgcGF0Y2ggZm9jdXNlcyBvbiBpdHMgY29yZSBmdW5jdGlvbjogZW5zdXJpbmcgcHJvcGVyIHdyaXRlIHBlcm1pc3Npb25zIGFuZCBjbG9uaW5nIG9mIGBza2JgIGhlYWRlcnMgd2l0aGluIHRoZSBib25kaW5nIGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIE1BQyBhZGRyZXNzIG1vZGlmaWNhdGlvbnMuIFRoZSBjb2RlIGxldmVyYWdlcyBgc2tiX2Nvd19oZWFkKHNrYiwgMClgIGJlZm9yZSBtb2RpZnlpbmcgaGVhZGVyIGZpZWxkcywgbGlrZSBzb3VyY2UgTUFDIChgZXRoX2hkci0mZ3Q7aF9zb3VyY2VgKSwgaW4gYGJvbmRfYWxiLmNgIChzcGVjaWZpY2FsbHkgYHJsYl9hcnBfeG1pdGAgYW5kIGBib25kX2RvX2FsYl94bWl0YCksIGFuZCBzd2l0Y2hlcyB0byB1c2luZyBgc2tiX2V0aF9oZHIoKWAuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHByZXZlbnRpbmcgZGF0YSByYWNlcyBhbmQgYnVmZmVyIHNoYXJpbmcgaXNzdWVzIHdoZW4gZGVhbGluZyB3aXRoIGNsb25lZCBTS0JzLCBhbmQgaXQgYWxzbyBjb250YWlucyBsb2dpYyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBzb3VyY2UgTUFDIG1vZGlmaWNhdGlvbnMgaWYgdGhlIGFjdGl2ZSBzbGF2ZSBtYXRjaGVzIHRoZSB0cmFuc21pdHRpbmcgc2xhdmUuCgpNeSBmaXJzdCBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJcyB0aGUgcGF0Y2ggaW50cm9kdWNpbmcgYW55IG5ldyBhdmVudWVzIGZvciB0aGF0PyBJIHNlZSBubyBldmlkZW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zIG9mIHN0YWNrIG9yIGhlYXAgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIGNhbGxzIHRvIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBvciB0aGUgdXNlIG9mIE5ldGxpbmsgU0tCIGF0dHJpYnV0ZXMgb3IgSU9DVExzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLiBDcnVjaWFsbHksIHRoZSB1c2Ugb2YgYHNrYl9jb3dfaGVhZGAgaXMgdGhlIGtleS4gVGhpcyBmdW5jdGlvbiBndWFyYW50ZWVzIHRoZSBgc2tiYCYjMzk7cyBoZWFkIGlzIHdyaXRhYmxlLCBlZmZlY3RpdmVseSBwcmV2ZW50aW5nIGFueSB1bmludGVuZGVkIHdyaXRlcyB0byBzaGFyZWQgbWVtb3J5LiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgd3JpdGUgcGVybWlzc2lvbiBjaGVja3MgYW5kIGNsb25pbmcgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBwYWNrZXQgdHJhbnNtaXNzaW9uLgoKTm93LCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYS4gRG9lcyB0aGlzIHBhdGNoOgoKMS4gICoqRXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLgoyLiAgKipSZWx5IG9uIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgY291bGQgYmUgaW5mbHVlbmNlZCBieSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBOby4KMy4gICoqQWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IG1pZ2h0IGxlYXZlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFjY2Vzc2libGU/KiogTm8uCjQuICAqKkludHJvZHVjZSBuZXcgcG9zc2liaWxpdGllcyBmb3Igb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyoqIE5vLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBhIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC4KCkhlcmUmIzM5O3MgaG93IEkmIzM5O2Qgc3VtbWFyaXplIG15IHJlYXNvbmluZyBmb3IgdGhlIGBLTVNBTlJlYXNvbmluZ2A6IFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGRhdGEgY29ycnVwdGlvbiBpc3N1ZXMgYXJpc2luZyBmcm9tIG1vZGlmeWluZyBoZWFkZXJzIG9mIHNoYXJlZCBTS0JzIGluIHRoZSBib25kaW5nIGRyaXZlci4gSXQgZm9jdXNlcyBvbiB3cml0ZSBwZXJtaXNzaW9uIGNoZWNrcyBieSBsZXZlcmFnaW5nIGBza2JfY293X2hlYWQoKWAgYmVmb3JlIG1vZGlmeWluZyBwYWNrZXQgaGVhZGVycyBhbmQgc3dpdGNoZXMgdG8gYHNrYl9ldGhfaGRyKClgIGZvciBNQUMgaGVhZGVyIGFjY2Vzcy4gVGhlIHBhdGNoIGRvZXMgKm5vdCogYWxsb2NhdGUgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2Vyc3BhY2UsIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgYWx0ZXIgYnVmZmVyIGJvdW5kcy4gUG90ZW50aWFsIGlzc3VlcyBoZXJlIGZhbGwgd2l0aGluIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgZG9tYWlucyBhbmQgYXJlIGFscmVhZHkgYWRkcmVzc2VkIGJ5IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIEFMQi9UTEIgdHJhbnNtaXQgcGF0aHMgKGJvbmRfYWxiLmMpIHRvIGVuc3VyZSB0aGF0IGBza2JfY293X2hlYWQoKWAgaXMgY2FsbGVkIGJlZm9yZSBtb2RpZnlpbmcgcGFja2V0IGhlYWRlcnMgKHN1Y2ggYXMgYGV0aF9oZHItXHUwMDNlaF9zb3VyY2VgIG9yIHRoZSBBUlAgaGVhZGVyJiMzOTtzIHNvdXJjZSBNQUMpLCBhdm9pZGluZyBtb2RpZmljYXRpb24gb2Ygc2hhcmVkL2Nsb25lZCBza2IgaGVhZGVyIG1lbW9yeS4gSXQgYWxzbyByZXBsYWNlcyBjYWxscyByZXNldHRpbmcgdGhlIE1BQyBoZWFkZXIgd2l0aCBgc2tiX2V0aF9oZHIoKWAuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgY29uY2VybiBza2IgaGVhZCBjbG9uYWJpbGl0eSwgcGFja2V0IGhlYWRlciBtdXRhdGlvbiwgYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbjpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZC5cbjIuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGluZm8tbGVha3MgYXJlIHBvc3NpYmxlIHRocm91Z2ggdGhpcyBwYXRoLlxuMy4gTm8gYnJhbmNoaW5nIG9yIGxvZ2ljIHJlbGllcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG5cbkFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHNoYXJlZCBtZW1vcnkgbW9kaWZpY2F0aW9uIG9yIHNrYiBsaWZlY3ljbGUgd291bGQgYmUgYWRkcmVzc2VkIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGRlYnVnZ2VycywgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBBTEIvVExCIHRyYW5zbWl0IHBhdGhzIChib25kX2FsYi5jKSB0byBlbnN1cmUgdGhhdCBgc2tiX2Nvd19oZWFkKClgIGlzIGNhbGxlZCBiZWZvcmUgbW9kaWZ5aW5nIHBhY2tldCBoZWFkZXJzIChzdWNoIGFzIGBldGhfaGRyLVx1MDAzZWhfc291cmNlYCBvciB0aGUgQVJQIGhlYWRlciYjMzk7cyBzb3VyY2UgTUFDKSwgYXZvaWRpbmcgbW9kaWZpY2F0aW9uIG9mIHNoYXJlZC9jbG9uZWQgc2tiIGhlYWRlciBtZW1vcnkuIEl0IGFsc28gcmVwbGFjZXMgY2FsbHMgcmVzZXR0aW5nIHRoZSBNQUMgaGVhZGVyIHdpdGggYHNrYl9ldGhfaGRyKClgLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGNvbmNlcm4gc2tiIGhlYWQgY2xvbmFiaWxpdHksIHBhY2tldCBoZWFkZXIgbXV0YXRpb24sIGFuZCBuZXR3b3JrIHBhY2tldCB0cmFuc21pc3Npb246XG4xLiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzIGFyZSBwb3NzaWJsZSB0aHJvdWdoIHRoaXMgcGF0aC5cbjMuIE5vIGJyYW5jaGluZyBvciBsb2dpYyByZWxpZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBzaGFyZWQgbWVtb3J5IG1vZGlmaWNhdGlvbiBvciBza2IgbGlmZWN5Y2xlIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dlcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA3OjUwLjY4OTg0Mzg5N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MjMwNjU2OTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2FsYl94bWl0XCIsXG4gICAgXCJib25kX3RsYl94bWl0XCIsXG4gICAgXCJib25kX3htaXRfYWxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBib25kaW5nIGRyaXZlcidzIEFMQi9UTEIgdHJhbnNtaXQgcGF0aHMgKGJvbmRfYWxiLmMpIHRvIGVuc3VyZSB0aGF0IGBza2JfY293X2hlYWQoKWAgaXMgY2FsbGVkIGJlZm9yZSBtb2RpZnlpbmcgcGFja2V0IGhlYWRlcnMgKHN1Y2ggYXMgYGV0aF9oZHItXFx1MDAzZWhfc291cmNlYCBvciB0aGUgQVJQIGhlYWRlcidzIHNvdXJjZSBNQUMpLCBhdm9pZGluZyBtb2RpZmljYXRpb24gb2Ygc2hhcmVkL2Nsb25lZCBza2IgaGVhZGVyIG1lbW9yeS4gSXQgYWxzbyByZXBsYWNlcyBjYWxscyByZXNldHRpbmcgdGhlIE1BQyBoZWFkZXIgd2l0aCBgc2tiX2V0aF9oZHIoKWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBjb25jZXJuIHNrYiBoZWFkIGNsb25hYmlsaXR5LCBwYWNrZXQgaGVhZGVyIG11dGF0aW9uLCBhbmQgbmV0d29yayBwYWNrZXQgdHJhbnNtaXNzaW9uOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZC5cXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzIGFyZSBwb3NzaWJsZSB0aHJvdWdoIHRoaXMgcGF0aC5cXG4zLiBObyBicmFuY2hpbmcgb3IgbG9naWMgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBzaGFyZWQgbWVtb3J5IG1vZGlmaWNhdGlvbiBvciBza2IgbGlmZWN5Y2xlIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dlcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHRyYW5zbWlzc2lvbiBwYXRocyBpbiB0aGUgYm9uZGluZyBkcml2ZXIncyBBTEIgYW5kIFRMQiBtb2RlcyAoYm9uZF9hbGIuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBza2IgaGVhZHJvb20gaXMgcHJvcGVybHkgY293ZWQvdW5zaGFyZWQgYmVmb3JlIG1vZGlmeWluZyBzb3VyY2UgTUFDIGFkZHJlc3NlcyAoaW4gQVJQIHJlcGxpZXMgYW5kIGV0aGVybmV0IGhlYWRlcnMpIGFuZCByZXBsYWNlcyBza2JfcmVzZXRfbWFjX2hlYWRlci9ldGhfaGRyIGNhbGxzIHdpdGggc2tiX2V0aF9oZHIuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY29uZmlndXJpbmcgYm9uZGluZyBuZXR3b3JrIGludGVyZmFjZXMgaW4gQUxCIG9yIFRMQiBtb2RlIGFuZCB0cmFuc21pdHRpbmcgdHJhZmZpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDc6NTAuNjg5ODUwODA3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMyMDY1NTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzA5YWRmNmNmYzAzNjRiMTE4NDliY2JjNjI2N2MzNDBlNjdmZTgxMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDA5OjA3OjQ4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xcbmluZGV4IDY1NGYwNTFkMDAyMzkuLjVmNzUwZjA4YTE0NDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXFxuQEAgLTY3OCw5ICs2NzgsMTMgQEAgc3RhdGljIHN0cnVjdCBzbGF2ZSAqcmxiX2FycF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxcbiBcXHRpZiAoYXJwLVxcdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUExZKSkge1xcbiBcXHRcXHQvKiB0aGUgYXJwIG11c3QgYmUgc2VudCBvbiB0aGUgc2VsZWN0ZWQgcnggY2hhbm5lbCAqL1xcbiBcXHRcXHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XFxuLVxcdFxcdGlmICh0eF9zbGF2ZSlcXG4rXFx0XFx0aWYgKHR4X3NsYXZlIFxcdTAwMjZcXHUwMDI2IHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVxcdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcXG4rXFx0XFx0XFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdFxcdGFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiBcXHRcXHRcXHRib25kX2h3X2FkZHJfY29weShhcnAtXFx1MDAzZW1hY19zcmMsIHR4X3NsYXZlLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHR4X3NsYXZlLVxcdTAwM2VkZXYtXFx1MDAzZWFkZHJfbGVuKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRuZXRkZXZfZGJnKGJvbmQtXFx1MDAzZWRldiwgXFxcIihzbGF2ZSAlcyk6IFNlcnZlciBzZW50IEFSUCBSZXBseSBwYWNrZXRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgIHR4X3NsYXZlID8gdHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlbmFtZSA6IFxcXCJOVUxMXFxcIik7XFxuIFxcdH0gZWxzZSBpZiAoYXJwLVxcdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUVVFU1QpKSB7XFxuQEAgLTEzNDAsNyArMTM0NCw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcXG4tXFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XFxuIFxcbiBcXHRpZiAoIXR4X3NsYXZlKSB7XFxuIFxcdFxcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cXG5AQCAtMTM1MSw3ICsxMzU0LDkgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuIFxcbiBcXHRpZiAodHhfc2xhdmUgXFx1MDAyNlxcdTAwMjYgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7XFxuIFxcdFxcdGlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XFxuLVxcdFxcdFxcdGV0aGVyX2FkZHJfY29weShldGhfZGF0YS1cXHUwMDNlaF9zb3VyY2UsXFxuK1xcdFxcdFxcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBib25kX3R4X2Ryb3AoYm9uZC1cXHUwMDNlZGV2LCBza2IpO1xcbitcXHRcXHRcXHRldGhlcl9hZGRyX2NvcHkoc2tiX2V0aF9oZHIoc2tiKS1cXHUwMDNlaF9zb3VyY2UsXFxuIFxcdFxcdFxcdFxcdFxcdHR4X3NsYXZlLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTM3NSw4ICsxMzgwLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4gXFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XFxuIFxcdHUzMiBoYXNoX2luZGV4O1xcbiBcXG4tXFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4tXFx0ZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XFxuK1xcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcXG4gXFxuIFxcdC8qIERvIG5vdCBUWCBiYWxhbmNlIGFueSBtdWx0aWNhc3Qgb3IgYnJvYWRjYXN0ICovXFxuIFxcdGlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtXFx1MDAzZWhfZGVzdCkpIHtcXG5AQCAtMTQyOCw4ICsxNDMyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4gXFx0dTMyIGhhc2hfaW5kZXggPSAwO1xcbiBcXHRpbnQgaGFzaF9zaXplID0gMDtcXG4gXFxuLVxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuLVxcdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xcbitcXHRldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7XFxuIFxcbiBcXHRzd2l0Y2ggKG50b2hzKHNrYi1cXHUwMDNlcHJvdG9jb2wpKSB7XFxuIFxcdGNhc2UgRVRIX1BfSVA6IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDc6NTIuMTIyNTIwNjUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0ODk5MTA2OTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCT05ESU5HXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm9uZF9hbGJfeG1pdFwiLFxuICAgIFwiYm9uZF90bGJfeG1pdFwiLFxuICAgIFwiYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHRyYW5zbWlzc2lvbiBwYXRocyBpbiB0aGUgYm9uZGluZyBkcml2ZXIncyBBTEIgYW5kIFRMQiBtb2RlcyAoYm9uZF9hbGIuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBza2IgaGVhZHJvb20gaXMgcHJvcGVybHkgY293ZWQvdW5zaGFyZWQgYmVmb3JlIG1vZGlmeWluZyBzb3VyY2UgTUFDIGFkZHJlc3NlcyAoaW4gQVJQIHJlcGxpZXMgYW5kIGV0aGVybmV0IGhlYWRlcnMpIGFuZCByZXBsYWNlcyBza2JfcmVzZXRfbWFjX2hlYWRlci9ldGhfaGRyIGNhbGxzIHdpdGggc2tiX2V0aF9oZHIuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY29uZmlndXJpbmcgYm9uZGluZyBuZXR3b3JrIGludGVyZmFjZXMgaW4gQUxCIG9yIFRMQiBtb2RlIGFuZCB0cmFuc21pdHRpbmcgdHJhZmZpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzA5YWRmNmNmYzAzNjRiMTE4NDliY2JjNjI2N2MzNDBlNjdmZTgxMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDk6MDc6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbmluZGV4IDY1NGYwNTFkMDAyMzkuLjVmNzUwZjA4YTE0NDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuQEAgLTY3OCw5ICs2NzgsMTMgQEAgc3RhdGljIHN0cnVjdCBzbGF2ZSAqcmxiX2FycF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxuIFx0aWYgKGFycC1cdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUExZKSkge1xuIFx0XHQvKiB0aGUgYXJwIG11c3QgYmUgc2VudCBvbiB0aGUgc2VsZWN0ZWQgcnggY2hhbm5lbCAqL1xuIFx0XHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XG4tXHRcdGlmICh0eF9zbGF2ZSlcbitcdFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNiB0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbitcdFx0XHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxuK1x0XHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdFx0YXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gXHRcdFx0Ym9uZF9od19hZGRyX2NvcHkoYXJwLVx1MDAzZW1hY19zcmMsIHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcixcbiBcdFx0XHRcdFx0ICB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4pO1xuK1x0XHR9XG4gXHRcdG5ldGRldl9kYmcoYm9uZC1cdTAwM2VkZXYsIFwiKHNsYXZlICVzKTogU2VydmVyIHNlbnQgQVJQIFJlcGx5IHBhY2tldFxcblwiLFxuIFx0XHRcdCAgIHR4X3NsYXZlID8gdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZW5hbWUgOiBcIk5VTExcIik7XG4gXHR9IGVsc2UgaWYgKGFycC1cdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUVVFU1QpKSB7XG5AQCAtMTM0MCw3ICsxMzQ0LDYgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXHRcdFx0XHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcbiB7XG4gXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuLVx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XG4gXG4gXHRpZiAoIXR4X3NsYXZlKSB7XG4gXHRcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cbkBAIC0xMzUxLDcgKzEzNTQsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcbiBcdGlmICh0eF9zbGF2ZSBcdTAwMjZcdTAwMjYgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7XG4gXHRcdGlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbi1cdFx0XHRldGhlcl9hZGRyX2NvcHkoZXRoX2RhdGEtXHUwMDNlaF9zb3VyY2UsXG4rXHRcdFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcbitcdFx0XHRcdHJldHVybiBib25kX3R4X2Ryb3AoYm9uZC1cdTAwM2VkZXYsIHNrYik7XG4rXHRcdFx0ZXRoZXJfYWRkcl9jb3B5KHNrYl9ldGhfaGRyKHNrYiktXHUwMDNlaF9zb3VyY2UsXG4gXHRcdFx0XHRcdHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4gXHRcdH1cbiBcbkBAIC0xMzc1LDggKzEzODAsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XG4gXHR1MzIgaGFzaF9pbmRleDtcbiBcbi1cdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4tXHRldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtcbitcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcbiBcbiBcdC8qIERvIG5vdCBUWCBiYWxhbmNlIGFueSBtdWx0aWNhc3Qgb3IgYnJvYWRjYXN0ICovXG4gXHRpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLVx1MDAzZWhfZGVzdCkpIHtcbkBAIC0xNDI4LDggKzE0MzIsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0dTMyIGhhc2hfaW5kZXggPSAwO1xuIFx0aW50IGhhc2hfc2l6ZSA9IDA7XG4gXG4tXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuLVx0ZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XG4rXHRldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7XG4gXG4gXHRzd2l0Y2ggKG50b2hzKHNrYi1cdTAwM2Vwcm90b2NvbCkpIHtcbiBcdGNhc2UgRVRIX1BfSVA6IHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA3OjUyLjEyMjUyMTkwM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1NzI3MzUzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIGl0cyBmdXp6aW5nIHZpYWJpbGl0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyB3b3J0aCB0aGUgZWZmb3J0LCB3aGF0IGtpbmQgb2YgY29uZmlndXJhdGlvbiBpcyBuZWVkZWQsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgd2hpY2ggc3ltYm9scyBhcmUgbGlrZWx5IHRhcmdldHMgZm9yIGZvY3VzZWQgZnV6emluZy5cblxuRmlyc3QsIEknbSBkaWdnaW5nIGludG8gdGhlIGRpZmYgaXRzZWxmLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGBybGJfYXJwX3htaXRgLCBgYm9uZF9kb19hbGJfeG1pdGAsIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAsIGFuZCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBza2JfY293X2hlYWRgIGFuZCB0aGUgY2hhbmdlIGZyb20gYHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYilgIHRvIGBza2JfZXRoX2hkcihza2IpYCBhcmUgdGhlIGtleSBpbmRpY2F0b3JzIGhlcmUuIFRoZXkgc3VnZ2VzdCBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gU2hhcmVkIG1lbW9yeSBvciBjb3B5aW5nIHNrYnNcblxuTm93LCBJIG5lZWQgdG8gcGxhY2UgdGhpcyB3aXRoaW4gaXRzIGNvbnRleHQuIEknbSBkZWFsaW5nIHdpdGggdGhlIGJvbmRpbmcgZHJpdmVyLCBhbmQgaW4gcGFydGljdWxhciwgQWRhcHRpdmUgTG9hZCBCYWxhbmNpbmcgKEFMQikgbW9kZS4gVGhpcyBpcyBhIHNvZnR3YXJlIG5ldHdvcmsgZHJpdmVyIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9gLiBJbXBvcnRhbnRseSwgaXQncyBmdWxseSB2aXJ0dWFsaXplZCBhbmQgZW11bGF0ZWQuIFRoYXQgbWVhbnMgSSBjYW4gc3BpbiB1cCBib25kaW5nIGRldmljZXMgaW4gVk1zLCBjb250YWluZXJzLCBRRU1VLCBvciBldmVuIFN5emthbGxlciB3aXRob3V0IG5lZWRpbmcgYW55IHNwZWNpZmljIGhhcmR3YXJlLiBUaGlzIGlzIGEgKmh1Z2UqIHBsdXMgZm9yIHRlc3RpbmcgYW5kIGZ1enppbmcuIEkgY2FuIHJlcHJvZHVjZSB0aGUgZW52aXJvbm1lbnQgZWFzaWx5IGFuZCBxdWlja2x5LlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvZGUgd2l0aCBncmVhdGVyIGZpZGVsaXR5LiBJIHdpbGwgZG8gc29tZSBzZWFyY2hlcyB1c2luZyBncmVwcGVyIG9yIHJlYWQtZmlsZSB0byBkZXRlcm1pbmUgd2hpY2ggc3ltYm9scyBhbmQgS2NvbmZpZyBvcHRpb25zIGNvbWUgaW50byBwbGF5LiBUaGlzIGlzIGltcG9ydGFudCB0byBkZXRlcm1pbmUgdGhlIGVudmlyb25tZW50J3MgY29uZmlndXJhdGlvbnMgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1NiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA3OjU4LjY5NTI1OTI5MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMwODE2NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQk9ORElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0JPTkRJTkcpICs9IGJvbmRpbmcub1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUtNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTI2Nj12b2lkIGJvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfYWN0aXZlKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzMyLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTMzMzpcXHRcXHRcXHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0JPTkRJTkdfRkFJTE9WRVIsIGJvbmQtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzM0LVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xODg4PWludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMDk0LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MjA5NTpcXHRzbGF2ZV9kZXYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX0JPTkRJTkc7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMDk2LVxcdC8qIGluaXRpYWxpemUgc2xhdmUgc3RhdHMgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjM3NS1cXHRpZiAoIW5ldGlmX2lzX2JvbmRfbWFzdGVyKHNsYXZlX2RldikpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyMzc2OlxcdFxcdHNsYXZlX2Rldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2PSB+SUZGX0JPTkRJTkc7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMzc3LVxcdGRldl9jbG9zZShzbGF2ZV9kZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0yNDI1PXN0YXRpYyBpbnQgX19ib25kX3JlbGVhc2Vfb25lKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjU5NC1cXHRpZiAoIW5ldGlmX2lzX2JvbmRfbWFzdGVyKHNsYXZlX2RldikpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyNTk1OlxcdFxcdHNsYXZlX2Rldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2PSB+SUZGX0JPTkRJTkc7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNTk2LVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MDY4PXN0YXRpYyBpbnQgYm9uZF9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MDc1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDA3NjpcXHRpZiAoIShldmVudF9kZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNiBJRkZfQk9ORElORykpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MDc3LVxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTk5Mj12b2lkIGJvbmRfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDE0LVxcdGJvbmRfZGV2LVxcdTAwM2VmbGFncyB8PSBJRkZfTUFTVEVSO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjAxNTpcXHRib25kX2Rldi1cXHUwMDNlcHJpdl9mbGFncyB8PSBJRkZfQk9ORElORyB8IElGRl9VTklDQVNUX0ZMVCB8IElGRl9OT19RVUVVRTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYwMTYtXFx0Ym9uZF9kZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNj0gfihJRkZfWE1JVF9EU1RfUkVMRUFTRSB8IElGRl9UWF9TS0JfU0hBUklORyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA3OjU5LjE0ODM0NjQ2M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MTI3MTUxNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipFeGFtaW5pbmcgdGhlIEJPTkRJTkcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSByZWFsbHkgY2xlYXIgcGljdHVyZSBvZiBob3cgQk9ORElORyBpcyBjb25maWd1cmVkIGluIHRoaXMga2VybmVsLiBMZXQncyBub3QgbWFrZSBhc3N1bXB0aW9uczsgbGV0J3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIGBLY29uZmlnYCBmaWxlIGlzIHRoZSBkZWZpbml0aXZlIGFuc3dlciwgYW5kIEknbSBwcmV0dHkgc3VyZSBJIHJlbWVtYmVyIGl0IGJlaW5nIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBwcmVjaXNlIGNvbmZpZyBvcHRpb25zLCB0aGUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGZlYXR1cmVzLCBhbmQgYW55dGhpbmcgZWxzZSBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIEJPTkRJTkcgaW1wbGVtZW50YXRpb24gYmVoYXZlcy4gVGltZSB0byBkaWcgaW4gYW5kIGNsYXJpZnkgYW55IGxpbmdlcmluZyBxdWVzdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNDEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowODowMC44NjEwNjM4NDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNzA3OTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCT05ESU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9Mzk9aWYgTkVUX0NPUkVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDE6Y29uZmlnIEJPTkRJTkdcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowODowMS4wMjE3Nzg1MjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTc4NTE0MzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nIHByb2Nlc3MsIHdyaXR0ZW4gYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmc6XG5cbioqRXhhbWluaW5nIHRoZSBLZXJuZWwgTmV0d29yayBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZSBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgNDEuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpcyBzdHJ1Y3R1cmVkLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIG9wdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBhIHNwZWNpZmljIGRyaXZlciBJJ20gcmVzZWFyY2hpbmcgb3IgYSBnZW5lcmFsIGFyZWEgdGhhdCByZXF1aXJlcyBvcHRpbWl6YXRpb24uIE15IGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIEknbSBhbnRpY2lwYXRpbmcgc29tZSBjb25kaXRpb25hbCBsb2dpYywgbWF5YmUgc29tZSBuZXN0ZWQgYGlmYCBzdGF0ZW1lbnRzIGJhc2VkIG9uIGFyY2hpdGVjdHVyZSBvciBvdGhlciBwcmVyZXF1aXNpdGVzLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZm9ybSBhIG1lbnRhbCBtYXAgb2YgdGhpcyBzZWN0aW9uIG9mIHRoZSBLY29uZmlnIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MDEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowODowMy4yMDAyOTYxNzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIHVzZSBhbnkgb2YgdGhlXFxuICAzNzpcXHRcXHQgIG5ldHdvcmtpbmcgY29yZSBkcml2ZXJzIChpLmUuIFZMQU4sIGJyaWRnaW5nLCBib25kaW5nLCBldGMuKVxcbiAgMzg6XFx0XFxuICAzOTpcXHRpZiBORVRfQ09SRVxcbiAgNDA6XFx0XFxuICA0MTpcXHRjb25maWcgQk9ORElOR1xcbiAgNDI6XFx0XFx0dHJpc3RhdGUgXFxcIkJvbmRpbmcgZHJpdmVyIHN1cHBvcnRcXFwiXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gVExTIHx8IFRMU19ERVZJQ0U9blxcbiAgNDU6XFx0XFx0aGVscFxcbiAgNDY6XFx0XFx0ICBTYXkgJ1knIG9yICdNJyBpZiB5b3Ugd2lzaCB0byBiZSBhYmxlIHRvICdib25kJyBtdWx0aXBsZSBFdGhlcm5ldFxcbiAgNDc6XFx0XFx0ICBDaGFubmVscyB0b2dldGhlci4gVGhpcyBpcyBjYWxsZWQgJ0V0aGVyY2hhbm5lbCcgYnkgQ2lzY28sXFxuICA0ODpcXHRcXHQgICdUcnVua2luZycgYnkgU3VuLCA4MDIuM2FkIGJ5IHRoZSBJRUVFLCBhbmQgJ0JvbmRpbmcnIGluIExpbnV4LlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIFRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgYm9uZGluZyBtb2RlcyB0byBhbGxvdyBmb3IgYm90aCBoaWdoXFxuICA1MTpcXHRcXHQgIHBlcmZvcm1hbmNlIGFuZCBoaWdoIGF2YWlsYWJpbGl0eSBvcGVyYXRpb24uXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgUmVmZXIgdG8gXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcucnN0XFx1MDAzZSBmb3IgbW9yZVxcbiAgNTQ6XFx0XFx0ICBpbmZvcm1hdGlvbi5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICA1NzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGJvbmRpbmcuXFxuICA1ODpcXHRcXG4gIDU5OlxcdGNvbmZpZyBEVU1NWVxcbiAgNjA6XFx0XFx0dHJpc3RhdGUgXFxcIkR1bW15IG5ldCBkcml2ZXIgc3VwcG9ydFxcXCJcXG4gIDYxOlxcdFxcdGhlbHBcXG4gIDYyOlxcdFxcdCAgVGhpcyBpcyBlc3NlbnRpYWxseSBhIGJpdC1idWNrZXQgZGV2aWNlIChpLmUuIHRyYWZmaWMgeW91IHNlbmQgdG9cXG4gIDYzOlxcdFxcdCAgdGhpcyBkZXZpY2UgaXMgY29uc2lnbmVkIGludG8gb2JsaXZpb24pIHdpdGggYSBjb25maWd1cmFibGUgSVBcXG4gIDY0OlxcdFxcdCAgYWRkcmVzcy4gSXQgaXMgbW9zdCBjb21tb25seSB1c2VkIGluIG9yZGVyIHRvIG1ha2UgeW91ciBjdXJyZW50bHlcXG4gIDY1OlxcdFxcdCAgaW5hY3RpdmUgU0xJUCBhZGRyZXNzIHNlZW0gbGlrZSBhIHJlYWwgYWRkcmVzcyBmb3IgbG9jYWwgcHJvZ3JhbXMuXFxuICA2NjpcXHRcXHQgIElmIHlvdSB1c2UgU0xJUCBvciBQUFAsIHlvdSBtaWdodCB3YW50IHRvIHNheSBZIGhlcmUuIEl0IHdvbid0XFxuICA2NzpcXHRcXHQgIGVubGFyZ2UgeW91ciBrZXJuZWwuIFdoYXQgYSBkZWFsLiBSZWFkIGFib3V0IGl0IGluIHRoZSBOZXR3b3JrXFxuICA2ODpcXHRcXHQgIEFkbWluaXN0cmF0b3IncyBHdWlkZSwgYXZhaWxhYmxlIGZyb21cXG4gIDY5OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2d1aWRlXFx1MDAzZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6MDMuMjAwMzc2ODM4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2MTQ0MzA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBCb25kIEFMQiBNb2R1bGUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBBY3RpdmUtQmFja3VwIExvYWQgQmFsYW5jaW5nIChBTEIpIG1vZGUgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBib25kaW5nIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIEknbSBoZWFkaW5nIGZvciBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdGhlIGNvcmUgbG9naWMgZm9yIEFMQiB0byByZXNpZGUuIEkgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIHN0cnVjdHVyZSB3aXRoaW4gdGhhdCBmaWxlOiBXaGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucywgaG93IGFyZSB0aGV5IHN0cnVjdHVyZWQsIHdoYXQgdGhleSBkbywgd2hvIGNhbGxzIHRoZW0sIGFuZCBpbXBvcnRhbnRseSwgd2hpY2ggZnVuY3Rpb25zIGFyZSBleHBvcnRlZCBmb3IgdXNlIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgaW5pdGlhbCBzY2FuIHdpbGwgZ2l2ZSBtZSBhIGdvb2QsIGhpZ2gtbGV2ZWwgbWFwIG9mIHRoZSBBTEIgaW1wbGVtZW50YXRpb24uIFRoaXMgd2lsbCBoZWxwIG1lIHdpdGggbXkgZGVidWdnaW5nLCB1bmRlcnN0YW5kaW5nLCBvciBkZXZlbG9wbWVudCB0YXNrIGF0IGhhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNjAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjA1LjM2MTgyMzMxNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ1NjI2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm9uZF9hbGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0JPTkRJTkcpICs9IGJvbmRpbmcub1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUtNy1cXG5kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlOjg6Ym9uZGluZy1vYmpzIDo9IGJvbmRfbWFpbi5vIGJvbmRfM2FkLm8gYm9uZF9hbGIubyBib25kX3N5c2ZzLm8gYm9uZF9zeXNmc19zbGF2ZS5vIGJvbmRfZGVidWdmcy5vIGJvbmRfbmV0bGluay5vIGJvbmRfb3B0aW9ucy5vXFxuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZS05LVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTI0LSNpbmNsdWRlIFxcdTAwM2NuZXQvYm9uZGluZy5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoyNTojaW5jbHVkZSBcXHUwMDNjbmV0L2JvbmRfYWxiLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTI2LVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTIyNz1zdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzMi1cXHQvKiBXZSBkb24ndCBuZWVkIHRvIGRpc2FibGUgc29mdGlycSBoZXJlLCBiZWNhdXNlXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjIzMzpcXHQgKiB0bGJfY2hvb3NlX2NoYW5uZWwoKSBpcyBvbmx5IGNhbGxlZCBieSBib25kX2FsYl94bWl0KClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjM0LVxcdCAqIHdoaWNoIGFscmVhZHkgaGFzIHNvZnRpcnEgZGlzYWJsZWQuXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTI4OD1zdGF0aWMgYm9vbCBhbGJfZGV0ZXJtaW5lX25kKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTMxMC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTMxMTppbnQgYm9uZF9hbGJfaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgaW50IHJsYl9lbmFibGVkKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzEyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzMyLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxMzMzOnZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzM0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNDIzPXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUyNi1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTUyNzpuZXRkZXZfdHhfdCBib25kX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUyOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUzNS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTUzNjp2b2lkIGJvbmRfYWxiX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTM3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNjM5LSAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNjQwOmludCBib25kX2FsYl9pbml0X3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNjQxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNjY5LSAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNjcwOnZvaWQgYm9uZF9hbGJfZGVpbml0X3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNjcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNjgzLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNjg0OnZvaWQgYm9uZF9hbGJfaGFuZGxlX2xpbmtfY2hhbmdlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCBjaGFyIGxpbmspXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE2ODUte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE3MTItLyoqXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE3MTM6ICogYm9uZF9hbGJfaGFuZGxlX2FjdGl2ZV9jaGFuZ2UgLSBhc3NpZ24gbmV3IGN1cnJfYWN0aXZlX3NsYXZlXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE3MTQtICogQGJvbmQ6IG91ciBib25kaW5nIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE3MjEtICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE3MjI6dm9pZCBib25kX2FsYl9oYW5kbGVfYWN0aXZlX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfc2xhdmUpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE3MjMte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE3OTAtLyogQ2FsbGVkIHdpdGggUlROTCAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNzkxOmludCBib25kX2FsYl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCB2b2lkICphZGRyKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNzkyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xODM1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxODM2OnZvaWQgYm9uZF9hbGJfY2xlYXJfdmxhbihzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdW5zaWduZWQgc2hvcnQgdmxhbl9pZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTgzNy17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTctI2luY2x1ZGUgXFx1MDAzY25ldC9ib25kaW5nLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzo4OiNpbmNsdWRlIFxcdTAwM2NuZXQvYm9uZF9hbGIuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTktXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTg3LSNpbmNsdWRlIFxcdTAwM2NuZXQvYm9uZF8zYWQuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjg4OiNpbmNsdWRlIFxcdTAwM2NuZXQvYm9uZF9hbGIuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTg5LSNpZiBJU19FTkFCTEVEKENPTkZJR19UTFNfREVWSUNFKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MDc9c3RhdGljIGludCBib25kX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MTctXFx0aWYgKGJvbmRfaXNfbGIoYm9uZCkpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0MTg6XFx0XFx0Ym9uZF9hbGJfY2xlYXJfdmxhbihib25kLCB2aWQpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDE5LVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xMjY2PXZvaWQgYm9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKm5ld19hY3RpdmUpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTEyOTctXFx0XFx0XFx0aWYgKGJvbmRfaXNfbGIoYm9uZCkpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxMjk4OlxcdFxcdFxcdFxcdGJvbmRfYWxiX2hhbmRsZV9saW5rX2NoYW5nZShib25kLCBuZXdfYWN0aXZlLCBCT05EX0xJTktfVVApO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTI5OS1cXHRcXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzA4LVxcdGlmIChib25kX2lzX2xiKGJvbmQpKSB7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxMzA5OlxcdFxcdGJvbmRfYWxiX2hhbmRsZV9hY3RpdmVfY2hhbmdlKGJvbmQsIG5ld19hY3RpdmUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTMxMC1cXHRcXHRpZiAob2xkX2FjdGl2ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTg4OD1pbnQgYm9uZF9lbnNsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjA5OS1cXHRpZiAoYm9uZF9pc19sYihib25kKSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MjEwMDpcXHRcXHQvKiBib25kX2FsYl9pbml0X3NsYXZlKCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFsbCBvdGhlciBzdGFnZXMgc2luY2VcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTIxMDEtXFx0XFx0ICogaXQgbWlnaHQgZmFpbCBhbmQgd2UgZG8gbm90IHdhbnQgdG8gaGF2ZSB0byB1bmRvIGV2ZXJ5dGhpbmdcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTIxMDItXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyMTAzOlxcdFxcdHJlcyA9IGJvbmRfYWxiX2luaXRfc2xhdmUoYm9uZCwgbmV3X3NsYXZlKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTIxMDQtXFx0XFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MjQyNT1zdGF0aWMgaW50IF9fYm9uZF9yZWxlYXNlX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTI1MTYtXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyNTE3OlxcdFxcdGJvbmRfYWxiX2RlaW5pdF9zbGF2ZShib25kLCBzbGF2ZSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNTE4LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9Mjc2ND1zdGF0aWMgdm9pZCBib25kX21paW1vbl9saW5rX2NoYW5nZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjc3My1cXHRjYXNlIEJPTkRfTU9ERV9BTEI6XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyNzc0OlxcdFxcdGJvbmRfYWxiX2hhbmRsZV9saW5rX2NoYW5nZShib25kLCBzbGF2ZSwgbGluayk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNzc1LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MzE4PXZvaWQgYm9uZF93b3JrX2luaXRfYWxsKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MzI1LVxcdFxcdFxcdCAgYm9uZF9yZXNlbmRfaWdtcF9qb2luX3JlcXVlc3RzX2RlbGF5ZWQpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDMyNjpcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2Ym9uZC1cXHUwMDNlYWxiX3dvcmssIGJvbmRfYWxiX21vbml0b3IpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDMyNy1cXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2Ym9uZC1cXHUwMDNlbWlpX3dvcmssIGJvbmRfbWlpX21vbml0b3IpO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MzQ1PXN0YXRpYyBpbnQgYm9uZF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDM3MS1cXHRpZiAoYm9uZF9pc19sYihib25kKSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDM3MjpcXHRcXHQvKiBib25kX2FsYl9pbml0aWFsaXplIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgdGltZXJcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzNzMtXFx0XFx0ICogaXMgc3RhcnRlZC5cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQzNzQtXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0Mzc1OlxcdFxcdGlmIChib25kX2FsYl9pbml0aWFsaXplKGJvbmQsIChCT05EX01PREUoYm9uZCkgPT0gQk9ORF9NT0RFX0FMQikpKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDM3Ni1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDQwOD1zdGF0aWMgaW50IGJvbmRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NDIwLVxcdGlmIChib25kX2lzX2xiKGJvbmQpKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDQyMTpcXHRcXHRib25kX2FsYl9kZWluaXRpYWxpemUoYm9uZCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NDIyLVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00ODMwPXN0YXRpYyBpbnQgYm9uZF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCB2b2lkICphZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00ODM4LVxcdGlmIChCT05EX01PREUoYm9uZCkgPT0gQk9ORF9NT0RFX0FMQilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQ4Mzk6XFx0XFx0cmV0dXJuIGJvbmRfYWxiX3NldF9tYWNfYWRkcmVzcyhib25kX2RldiwgYWRkcik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00ODQwLVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NTUwPXN0YXRpYyBuZXRkZXZfdHhfdCBfX2JvbmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTc2LVxcdGNhc2UgQk9ORF9NT0RFX0FMQjpcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU1Nzc6XFx0XFx0cmV0dXJuIGJvbmRfYWxiX3htaXQoc2tiLCBkZXYpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTU3OC1cXHRjYXNlIEJPTkRfTU9ERV9UTEI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjA1LjQyNjM5MDcyNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTUyMTM2MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBQYXRjaCBNb2RpZmljYXRpb25zIGluIGBib25kX2FsYi5jYCoqXG5cbkFscmlnaHQsIHRoZSBwYXRjaCBoYXMgaGl0IG15IGRlc2ssIGFuZCBteSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyBwaW5wb2ludGluZyB0aGUga2V5IGFyZWFzIG9mIGltcGFjdC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGNoYW5nZXMgbWFkZSB3aXRoaW4gYGJvbmRfYWxiLmNgIGFyb3VuZCBsaW5lcyA2NzgsIDEzNDAsIDEzNzUsIGFuZCAxNDI4LiBUaGVzZSBsaW5lIG51bWJlcnMgYXJlIG15IGluaXRpYWwgY29vcmRpbmF0ZXMuXG5cbkknbGwgc3RhcnQgYnkgcHVsbGluZyB1cCB0aGUgZmlsZSBhbmQgemVyb2luZyBpbiBvbiB0aG9zZSBzcGVjaWZpYyBsaW5lcy4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgKm5hdHVyZSogb2YgdGhlIG1vZGlmaWNhdGlvbnMuIFdlcmUgdGhleSBidWcgZml4ZXMsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMsIG9yIG5ldyBmZWF0dXJlIGltcGxlbWVudGF0aW9ucz8gRG9lcyB0aGUgY29kZSB0b3VjaCB1cG9uIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcywgb3IgZnVuZGFtZW50YWwgYWxnb3JpdGhtcz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmlwcGxlIGVmZmVjdHMgZG93biBzdHJlYW0/XG5cbkknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYXMgd2VsbCDigJMgdGhlIGxpbmVzIGltbWVkaWF0ZWx5IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHNwZWNpZmllZCBsaW5lIG51bWJlcnMgcHJvdmlkZSBjcnVjaWFsIGNvbnRleHQuIEkgd2lsbCBiZSBsb29raW5nIGZvcjpcbiogICAqKkxvZ2ljYWwgZmxvdzoqKiBIb3cgYXJlIHRoZXNlIHNwZWNpZmljIGxpbmVzIGZpdHRpbmcgaW50byB0aGUgZ3JlYXRlciBmdW5jdGlvbiBvciBzZWN0aW9uLlxuKiAgICoqVmFyaWFibGVzOioqIFdoYXQgdmFyaWFibGVzIGFyZSByZWFkLCB1c2VkLCBtb2RpZmllZCwgYW5kIGluaXRpYWxpemVkIHdpdGhpbiB0aGVzZSBsaW5lcz9cbiogICAqKkV4dGVybmFsIGRlcGVuZGVuY2llczoqKiBBcmUgdGhlcmUgY2FsbHMgdG8gZXh0ZXJuYWwgZnVuY3Rpb25zL21hY3Jvcy9zdHJ1Y3R1cmVzP1xuKiAgICoqQ29uZGl0aW9uYWwgZXhlY3V0aW9uOioqIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWxzIHRoYXQgYXJlIHRyaWdnZXJlZCB3aXRoaW4gdGhlc2UgbGluZXMsIGFuZCB3aGF0IGlzIHRoZSBlZmZlY3QgaWYgdGhleSBhcmUuXG5cbk9uY2UgSSBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1tZWRpYXRlIGNoYW5nZXMsIEknbGwgYXNzZXNzIHRoZWlyIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgc3lzdGVtIGJlaGF2aW9yLiBJJ2xsIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCB0aGUgY29kZSBleGVjdXRpb24sIGNvbnNpZGVyaW5nIHZhcmlvdXMgc2NlbmFyaW9zIGFuZCBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGluZ3MgbGlrZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBkYXRhIGludGVncml0eSwgYW5kIGVycm9yIGhhbmRsaW5nLiBJJ2xsIGFsc28gYmUgY29uc2lkZXJpbmcgd2hldGhlciB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgYW55IG5ldyBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIGNvbXBhdGliaWxpdHkgaXNzdWVzLlxuXG5Fc3NlbnRpYWxseSwgSSdtIGZvcm1pbmcgYSBtZW50YWwgbW9kZWwgb2YgaG93IHRoZSBwYXRjaCBhbHRlcnMgdGhlIHVuZGVybHlpbmcgbG9naWMsIGFuZCB3aGF0IHRoYXQgaW1wbGllcyBmb3IgdGhlIHN5c3RlbSdzIHJvYnVzdG5lc3MsIHBlcmZvcm1hbmNlLCBhbmQgZnV0dXJlIG1haW50YWluYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU1NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjA4Ljk3ODUzMDkxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjYwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA2NjE6XFx0XFx0YXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIDY2MjpcXHRcXG4gNjYzOlxcdFxcdC8qIERvbid0IG1vZGlmeSBvciBsb2FkIGJhbGFuY2UgQVJQcyB0aGF0IGRvIG5vdCBvcmlnaW5hdGVcXG4gNjY0OlxcdFxcdCAqIGZyb20gdGhlIGJvbmQgaXRzZWxmIG9yIGEgVkxBTiBkaXJlY3RseSBhYm92ZSB0aGUgYm9uZC5cXG4gNjY1OlxcdFxcdCAqL1xcbiA2NjY6XFx0XFx0aWYgKCFib25kX3NsYXZlX2hhc19tYWNfcmN1KGJvbmQsIGFycC1cXHUwMDNlbWFjX3NyYykpXFxuIDY2NzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjY4OlxcdFxcbiA2Njk6XFx0XFx0ZGV2ID0gaXBfZGV2X2ZpbmQoZGV2X25ldChib25kLVxcdTAwM2VkZXYpLCBhcnAtXFx1MDAzZWlwX3NyYyk7XFxuIDY3MDpcXHRcXHRpZiAoZGV2KSB7XFxuIDY3MTpcXHRcXHRcXHRpZiAobmV0aWZfaXNfYW55X2JyaWRnZV9tYXN0ZXIoZGV2KSkge1xcbiA2NzI6XFx0XFx0XFx0XFx0ZGV2X3B1dChkZXYpO1xcbiA2NzM6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDY3NDpcXHRcXHRcXHR9XFxuIDY3NTpcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuIDY3NjpcXHRcXHR9XFxuIDY3NzpcXHRcXG4gNjc4OlxcdFxcdGlmIChhcnAtXFx1MDAzZW9wX2NvZGUgPT0gaHRvbnMoQVJQT1BfUkVQTFkpKSB7XFxuIDY3OTpcXHRcXHRcXHQvKiB0aGUgYXJwIG11c3QgYmUgc2VudCBvbiB0aGUgc2VsZWN0ZWQgcnggY2hhbm5lbCAqL1xcbiA2ODA6XFx0XFx0XFx0dHhfc2xhdmUgPSBybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kLCBhcnApO1xcbiA2ODE6XFx0XFx0XFx0aWYgKHR4X3NsYXZlIFxcdTAwMjZcXHUwMDI2IHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVxcdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcXG4gNjgyOlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXFxuIDY4MzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjg0OlxcdFxcdFxcdFxcdGFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiA2ODU6XFx0XFx0XFx0XFx0Ym9uZF9od19hZGRyX2NvcHkoYXJwLVxcdTAwM2VtYWNfc3JjLCB0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcixcXG4gNjg2OlxcdFxcdFxcdFxcdFxcdFxcdCAgdHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbiA2ODc6XFx0XFx0XFx0fVxcbiA2ODg6XFx0XFx0XFx0bmV0ZGV2X2RiZyhib25kLVxcdTAwM2VkZXYsIFxcXCIoc2xhdmUgJXMpOiBTZXJ2ZXIgc2VudCBBUlAgUmVwbHkgcGFja2V0XFxcXG5cXFwiLFxcbiA2ODk6XFx0XFx0XFx0XFx0ICAgdHhfc2xhdmUgPyB0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lIDogXFxcIk5VTExcXFwiKTtcXG4gNjkwOlxcdFxcdH0gZWxzZSBpZiAoYXJwLVxcdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUVVFU1QpKSB7XFxuIDY5MTpcXHRcXHRcXHQvKiBDcmVhdGUgYW4gZW50cnkgaW4gdGhlIHJ4X2hhc2h0YmwgZm9yIHRoaXMgY2xpZW50IGFzIGFcXG4gNjkyOlxcdFxcdFxcdCAqIHBsYWNlIGhvbGRlci5cXG4gNjkzOlxcdFxcdFxcdCAqIFdoZW4gdGhlIGFycCByZXBseSBpcyByZWNlaXZlZCB0aGUgZW50cnkgd2lsbCBiZSB1cGRhdGVkXFxuIDY5NDpcXHRcXHRcXHQgKiB3aXRoIHRoZSBjb3JyZWN0IHVuaWNhc3QgYWRkcmVzcyBvZiB0aGUgY2xpZW50LlxcbiA2OTU6XFx0XFx0XFx0ICovXFxuIDY5NjpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XFxuIDY5NzpcXHRcXG4gNjk4OlxcdFxcdFxcdC8qIFRoZSBBUlAgcmVwbHkgcGFja2V0cyBtdXN0IGJlIGRlbGF5ZWQgc28gdGhhdFxcbiA2OTk6XFx0XFx0XFx0ICogdGhleSBjYW4gY2FuY2VsIG91dCB0aGUgaW5mbHVlbmNlIG9mIHRoZSBBUlAgcmVxdWVzdC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6MDguOTc4NjQzNDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk4MTI4MzI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aGVtIHRocm91Z2ggaW4gbXkgdXN1YWwgd2F5OlxuXG4qKkRlZXAgRGl2ZSBvbiBCb25kaW5nIFRyYW5zbWlzc2lvbiBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSB0cmFuc21pdCBzaWRlIG9mIHRoaXMgYm9uZGluZyBzZXR1cCwgYW5kIHRoZXNlIGZ1bmN0aW9ucyBhcmUga2V5OiBgYm9uZF9kb19hbGJfeG1pdGAsIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAsIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAsIGFuZCBgYm9uZF9hbGJfeG1pdGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGFyZSBzdWdnZXN0aW5nIGEgbGluayB0byBBTEIgKEFkYXB0aXZlIExvYWQgQmFsYW5jaW5nKSBhbmQgVExCIChUcmFuc21pdCBMb2FkIEJhbGFuY2luZykgbW9kZXMsIHdoaWNoIGlzIHR5cGljYWwuXG5cbkknbSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gdmlzdWFsaXplIHRoZSBjYWxsIHBhdGhzIGFuZCBkZXBlbmRlbmNpZXMuIGBib25kX2RvX2FsYl94bWl0YCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIGZ1bmN0aW9uLCB0aGUgZGlzcGF0Y2hlciBwZXJoYXBzPyBJJ20gYmV0dGluZyBpdCBoYW5kbGVzIHRoZSBjb3JlIGxvZ2ljIGZvciBlaXRoZXIgQUxCIG9yIG1heWJlIHNvbWUgZ2VuZXJhbCBib25kaW5nLXJlbGF0ZWQgdHJhbnNtaXNzaW9uIHNldHVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVjaWRlcyB3aGljaCBzbGF2ZSB0byB1c2UgYW5kIGhvdyB0aGUgYWN0dWFsIHBhY2tldCB0cmFuc21pc3Npb24gaXMgaW5pdGlhdGVkLiBXaGF0IGRhdGEgc3RydWN0dXJlcyBpcyBpdCB1c2luZyB0byB0cmFjayBzdGF0ZSwgYW5kIHdoZXJlIGFyZSB0aGUgY3J1Y2lhbCBkZWNpc2lvbnMgYmVpbmcgbWFkZT8gRG9lcyB0aGlzIGZ1bmN0aW9uIG1hbmFnZSBxdWV1ZSBzZWxlY3Rpb24gYW5kIGFueSBhc3NvY2lhdGVkIGhhcmR3YXJlIG9mZmxvYWQ/IEkgd2FudCB0byBzZWUgaWYgYW55IGZsb3cgY2xhc3NpZmljYXRpb24gb3IgaGFzaCBmdW5jdGlvbnMgYXJlIGludm9sdmVkLCBhbmQgd2hhdCB0aGUgZmFsbGJhY2sgbWVjaGFuaXNtIGxvb2tzIGxpa2UuXG5cblRoZW4sIHRoZXJlJ3MgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YC4gQ2xlYXJseSwgdGhpcyBpcyBpbnZvbHZlZCBpbiBnZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBzbGF2ZSBpbnRlcmZhY2UgZm9yIFRMQi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIOKAkyBpcyBpdCByb3VuZC1yb2JpbiwgYmFzZWQgb24gbGluayB1dGlsaXphdGlvbiwgcGFja2V0IGNvdW50LCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkPyBXaGF0IGFib3V0IGVycm9yIGhhbmRsaW5nIOKAkyBkb2VzIGl0IHJldHJ5IG9uIGFub3RoZXIgc2xhdmUgaWYgb25lIGlzIGRvd24/XG5cbmBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgaXMgYSB0d2luLCBmb2N1c2VkIG9uIEFMQi4gSSdtIGludGVyZXN0ZWQgaW4gdGhlIGxvYWQgYmFsYW5jaW5nIGFsZ29yaXRobSBoZXJlLiBJcyBpdCBsb29raW5nIGF0IGZsb3cgaGFzaGVzLCBzb3VyY2UvZGVzdGluYXRpb24gTUFDIGFkZHJlc3Nlcywgb3IgbW9yZT8gRG9lcyBpdCBpbmNvcnBvcmF0ZSBhbnkgYmFjay1vZmYgb3IgaHlzdGVyZXNpcyBtZWNoYW5pc21zIHRvIHByZXZlbnQgZmxhcHBpbmcgYmV0d2VlbiBzbGF2ZXM/XG5cbkZpbmFsbHksIGBib25kX2FsYl94bWl0YCBpcyBwb3RlbnRpYWxseSB0aGUgd29ya2hvcnNlLCB0aGUgZnVuY3Rpb24gdGhhdCdzIGFjdHVhbGx5IGRvaW5nIHRoZSB0cmFuc21pc3Npb24gKnVzaW5nKiB0aGUgc2xhdmUgY2hvc2VuIGJ5IGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgb3IgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YC4gSSBleHBlY3QgdGhpcyB0byBiZSB0aGUgcG9pbnQgd2hlcmUgdGhlIHBhY2tldCBpcyBhY3R1YWxseSBoYW5kZWQgb2ZmIHRvIHRoZSBuZXR3b3JrIGludGVyZmFjZSBjYXJkIGRyaXZlci4gSSB3YW50IHRvIHNlZSBpZiBhbnkgbW9kaWZpY2F0aW9ucyBhcmUgbWFkZSB0byB0aGUgcGFja2V0IGl0c2VsZiBoZXJlIOKAkyBWTEFOIHRhZ2dpbmcsIGNoZWNrc3VtIHVwZGF0ZXMsIGV0Yy4gV2hhdCBraW5kIG9mIGxvY2tpbmcgaXMgdXNlZCBoZXJlIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucz8gRG9lcyBpdCB1c2UgVFggcmluZ3MsIGFuZCB3aGF0IG1lY2hhbmlzbXMgYXJlIGVtcGxveWVkIGZvciBoYW5kbGluZyB0cmFuc21pc3Npb24gZXJyb3JzIG9yIGxpbmsgZmFpbHVyZXM/XG5cbkknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IHdpdGggdGhlIGhpZ2hlci1sZXZlbCBmdW5jdGlvbnMgbGlrZSBgYm9uZF9kb19hbGJfeG1pdGAgYW5kIHRyYWNlIGRvd24gZnJvbSB0aGVyZS4gVGhhdCdsbCBnaXZlIG1lIGEgZnJhbWV3b3JrLCBhbmQgdGhlbiBJIGNhbiBkZWx2ZSBpbnRvIHRoZSBzbGF2ZS1zcGVjaWZpYyBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGxvYWQgYmFsYW5jaW5nIGFuZCBzZWxlY3Rpb24gd29ya3MuIEhvcGVmdWxseSwgaXQncyBhbGwgd2VsbC1kb2N1bWVudGVkLiBUaW1lIHRvIGRpZyBpbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzc5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowODoxNy45NTk5MzAyNjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzQwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM0MDpcXHRcXHRcXHRybGJfZGVpbml0aWFsaXplKGJvbmQpO1xcbjEzNDE6XFx0fVxcbjEzNDI6XFx0XFxuMTM0MzpcXHRzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4xMzQ0OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlKVxcbjEzNDU6XFx0e1xcbjEzNDY6XFx0XFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFxcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XFxuMTM0NzpcXHRcXG4xMzQ4OlxcdFxcdGlmICghdHhfc2xhdmUpIHtcXG4xMzQ5OlxcdFxcdFxcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cXG4xMzUwOlxcdFxcdFxcdHR4X3NsYXZlID0gcmN1X2RlcmVmZXJlbmNlKGJvbmQtXFx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKTtcXG4xMzUxOlxcdFxcdFxcdGlmIChib25kLVxcdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpXFxuMTM1MjpcXHRcXHRcXHRcXHRib25kX2luZm8tXFx1MDAzZXVuYmFsYW5jZWRfbG9hZCArPSBza2ItXFx1MDAzZWxlbjtcXG4xMzUzOlxcdFxcdH1cXG4xMzU0OlxcdFxcbjEzNTU6XFx0XFx0aWYgKHR4X3NsYXZlIFxcdTAwMjZcXHUwMDI2IGJvbmRfc2xhdmVfY2FuX3R4KHR4X3NsYXZlKSkge1xcbjEzNTY6XFx0XFx0XFx0aWYgKHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVxcdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcXG4xMzU3OlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXFxuMTM1ODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gYm9uZF90eF9kcm9wKGJvbmQtXFx1MDAzZWRldiwgc2tiKTtcXG4xMzU5OlxcdFxcdFxcdFxcdGV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLVxcdTAwM2VoX3NvdXJjZSxcXG4xMzYwOlxcdFxcdFxcdFxcdFxcdFxcdHR4X3NsYXZlLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4xMzYxOlxcdFxcdFxcdH1cXG4xMzYyOlxcdFxcbjEzNjM6XFx0XFx0XFx0cmV0dXJuIGJvbmRfZGV2X3F1ZXVlX3htaXQoYm9uZCwgc2tiLCB0eF9zbGF2ZS1cXHUwMDNlZGV2KTtcXG4xMzY0OlxcdFxcdH1cXG4xMzY1OlxcdFxcbjEzNjY6XFx0XFx0aWYgKHR4X3NsYXZlIFxcdTAwMjZcXHUwMDI2IGJvbmQtXFx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xcbjEzNjc6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZib25kLVxcdTAwM2Vtb2RlX2xvY2spO1xcbjEzNjg6XFx0XFx0XFx0X190bGJfY2xlYXJfc2xhdmUoYm9uZCwgdHhfc2xhdmUsIDApO1xcbjEzNjk6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmJvbmQtXFx1MDAzZW1vZGVfbG9jayk7XFxuMTM3MDpcXHRcXHR9XFxuMTM3MTpcXHRcXG4xMzcyOlxcdFxcdC8qIG5vIHN1aXRhYmxlIGludGVyZmFjZSwgZnJhbWUgbm90IHNlbnQgKi9cXG4xMzczOlxcdFxcdHJldHVybiBib25kX3R4X2Ryb3AoYm9uZC1cXHUwMDNlZGV2LCBza2IpO1xcbjEzNzQ6XFx0fVxcbjEzNzU6XFx0XFxuMTM3NjpcXHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbjEzNzc6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMzc4OlxcdHtcXG4xMzc5OlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xcbjEzODA6XFx0XFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XFxuMTM4MTpcXHRcXHR1MzIgaGFzaF9pbmRleDtcXG4xMzgyOlxcdFxcbjEzODM6XFx0XFx0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xcbjEzODQ6XFx0XFxuMTM4NTpcXHRcXHQvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqL1xcbjEzODY6XFx0XFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cXHUwMDNlaF9kZXN0KSkge1xcbjEzODc6XFx0XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuMTM4ODpcXHRcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbjEzODk6XFx0XFx0XFx0XFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSlcXG4xMzkwOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjEzOTE6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTM5MjpcXHRcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4xMzkzOlxcdFxcdFxcdFxcdGhhc2hfaW5kZXggPSBib25kX3htaXRfaGFzaChib25kLCBza2IpO1xcbjEzOTQ6XFx0XFx0XFx0XFx0aWYgKGJvbmQtXFx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xcbjEzOTU6XFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUgPSB0bGJfY2hvb3NlX2NoYW5uZWwoYm9uZCxcXG4xMzk2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGhhc2hfaW5kZXggXFx1MDAyNiAweEZGLFxcbjEzOTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4pO1xcbjEzOTg6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xMzk5OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBib25kX3VwX3NsYXZlICpzbGF2ZXM7XFxuMTQwMDpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuMTQwMTpcXHRcXG4xNDAyOlxcdFxcdFxcdFxcdFxcdHNsYXZlcyA9IHJjdV9kZXJlZmVyZW5jZShib25kLVxcdTAwM2V1c2FibGVfc2xhdmVzKTtcXG4xNDAzOlxcdFxcdFxcdFxcdFxcdGNvdW50ID0gc2xhdmVzID8gUkVBRF9PTkNFKHNsYXZlcy1cXHUwMDNlY291bnQpIDogMDtcXG4xNDA0OlxcdFxcdFxcdFxcdFxcdGlmIChsaWtlbHkoY291bnQpKVxcbjE0MDU6XFx0XFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUgPSBzbGF2ZXMtXFx1MDAzZWFycltoYXNoX2luZGV4ICVcXG4xNDA2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjb3VudF07XFxuMTQwNzpcXHRcXHRcXHRcXHR9XFxuMTQwODpcXHRcXHRcXHRcXHRicmVhaztcXG4xNDA5OlxcdFxcdFxcdH1cXG4xNDEwOlxcdFxcdH1cXG4xNDExOlxcdFxcdHJldHVybiB0eF9zbGF2ZTtcXG4xNDEyOlxcdH1cXG4xNDEzOlxcdFxcbjE0MTQ6XFx0bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuMTQxNTpcXHR7XFxuMTQxNjpcXHRcXHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTtcXG4xNDE3OlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmU7XFxuMTQxODpcXHRcXG4xNDE5OlxcdFxcdHR4X3NsYXZlID0gYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcXG4xNDIwOlxcdFxcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xcbjE0MjE6XFx0fVxcbjE0MjI6XFx0XFxuMTQyMzpcXHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbjE0MjQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNDI1OlxcdHtcXG4xNDI2OlxcdFxcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xcbjE0Mjc6XFx0XFx0c3RhdGljIGNvbnN0IF9fYmUzMiBpcF9iY2FzdCA9IGh0b25sKDB4ZmZmZmZmZmYpO1xcbjE0Mjg6XFx0XFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XFxuMTQyOTpcXHRcXHRjb25zdCB1OCAqaGFzaF9zdGFydCA9IE5VTEw7XFxuMTQzMDpcXHRcXHRib29sIGRvX3R4X2JhbGFuY2UgPSB0cnVlO1xcbjE0MzE6XFx0XFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XFxuMTQzMjpcXHRcXHR1MzIgaGFzaF9pbmRleCA9IDA7XFxuMTQzMzpcXHRcXHRpbnQgaGFzaF9zaXplID0gMDtcXG4xNDM0OlxcdFxcbjE0MzU6XFx0XFx0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xcbjE0MzY6XFx0XFxuMTQzNzpcXHRcXHRzd2l0Y2ggKG50b2hzKHNrYi1cXHUwMDNlcHJvdG9jb2wpKSB7XFxuMTQzODpcXHRcXHRjYXNlIEVUSF9QX0lQOiB7XFxuMTQzOTpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6MTcuOTYwMDY3NzE3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3NTEwNDQ4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgQm9uZGluZyBEcml2ZXIgVHJhbnNtaXQgUGF0aCBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBib25kaW5nIGRyaXZlciBjaGFuZ2VzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBmdXp6YWJsZT9cIiBBYnNvbHV0ZWx5ISBUaGlzIGxvb2tzIGxpa2UgYSBwcmltZSB0YXJnZXQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgQUxCL1RMQiB0cmFuc21pdCBwYXRocywgd2hpY2ggaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljLCBhbmQgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gdmlydHVhbGx5IGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIGEgc3RhbmRhcmQgYm9uZGluZyBkZXZpY2UgY29uZmlndXJhdGlvbiBhbmQgbmV0d29yayB0cmFmZmljLiBUaGlzIG9wZW5zIHRoZSBkb29yIHRvIHZlcmlmeWluZyBoZWFkcm9vbSwgbW9kaWZpY2F0aW9ucyB0byBjbG9uZWQgU0tCcywgYW5kIHBhY2tldCB0cmFuc21pc3Npb24gaW4gZ2VuZXJhbC4gRXJyb3IgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmYWlsdXJlIGluIGBza2JfY293X2hlYWRgLCBpcyBhIGtleSBhcmVhIG9mIGZvY3VzIGZvciB0aGVzZSBjaGFuZ2VzLlxuXG5IZXJlJ3MgdGhlIGJyZWFrZG93biBvZiB3aGF0IEkgc2VlOlxuXG4xLiAgKipgcmxiX2FycF94bWl0YCoqOiBUaGUgYmlnZ2VzdCBjaGFuZ2UgaGVyZSBpcyB0aGUgaW5jbHVzaW9uIG9mIGBza2JfY293X2hlYWQoc2tiLCAwKWAgKmJlZm9yZSogbW9kaWZ5aW5nIGBhcnAtXHUwMDNlbWFjX3NyY2AgaW4gYW4gQVJQIHJlcGx5LiBUaGlzIGxvb2tzIGxpa2UgdGhleSdyZSBwcm90ZWN0aW5nIGFnYWluc3QgbW9kaWZpY2F0aW9ucyB0byBzaGFyZWQgU0tCIGhlYWRlcnMuIENydWNpYWxseSwgdGhleSByZS1mZXRjaCBgYXJwYCBhZnRlciB0aGUgYHNrYl9jb3dfaGVhZGAgdG8gaGFuZGxlIGEgcG90ZW50aWFsIHJlbG9jYXRpb24gb2YgYHNrYi1cdTAwM2VoZWFkYC4gR29vZC5cbjIuICAqKmBib25kX2RvX2FsYl94bWl0YCoqOiBTaW1pbGFyIHBhdHRlcm4uIGBza2JfY293X2hlYWQoc2tiLCAwKWAgaXMgY2FsbGVkIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHNvdXJjZSBNQUMgYWRkcmVzcywgYGV0aGVyX2FkZHJfY29weShldGhfZGF0YS1cdTAwM2VoX3NvdXJjZSwgdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKWAuIFRoZSBjb2RlIHRoZW4gdXNlcyBgc2tiX2V0aF9oZHIoc2tiKS1cdTAwM2VoX3NvdXJjZWAuIFRoZSBgYm9uZF90eF9kcm9wYCBwYXRoIGlmIGBza2JfY293X2hlYWRgIGZhaWxzIGlzIGEgcG9zaXRpdmUgc3RlcC5cbjMuICAqKmBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgXHUwMDI2IDQuIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAqKjogSGVyZSwgd2UndmUgZ290IHNvbWUgcmVmYWN0b3JpbmcuIFRoZSBjb2RlIGhhcyBtb3ZlZCBmcm9tIGBza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOyBldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtgIHRvIGBldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7YCBJdCBsb29rcyBsaWtlIGEgY29kZSBzaW1wbGlmaWNhdGlvbiwgbm93IGRpcmVjdGx5IGFjY2Vzc2luZyB0aGUgRXRoZXJuZXQgaGVhZGVyLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gdGFyZ2V0LiBMb29rcyBsaWtlIGBib25kX2FsYl94bWl0YCBhbmQgYGJvbmRfdGxiX3htaXRgLCBhcmUga2V5IHN0YXJ0aW5nIHBvaW50cyBhcyB0aGV5IGFyZSBjYWxsZWQgZnJvbSBgX19ib25kX3N0YXJ0X3htaXRgLiBUaGVuLCB3ZSBzaG91bGQgbG9vayBhdCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgIGFuZCBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgIGFuZCBpZiB0aGV5IGFyZSBleHBvcnRlZCBvciBub24tc3RhdGljLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBpbmNsdWRlL25ldC9ib25kX2FsYi5oYCB0byBtYWtlIHN1cmUuIEknbSB0aGlua2luZywgdGhpcyBtaWdodCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHNvbWUgdGFyZ2V0ZWQgZnV6emluZyBjYW1wYWlnbnMuIFRoZSBjaGFuZ2VzIGhlcmUgc2VlbSB0byBiZSB0byBpbXByb3ZlIHJlbGlhYmlsaXR5IGFuZCBjb3JyZWN0bmVzcyB1bmRlciBjb25jdXJyZW50IGFjY2VzcyBzY2VuYXJpb3MgYW5kIHRvIGNsZWFuIHVwIGNvZGUsIGFuZCBpdCdzIHNvbWV0aGluZyB0aGF0IGlzIGltcG9ydGFudCB0byBhdWRpdCBmb3IgYSByZWxpYWJsZSBuZXR3b3JrIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA3NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjIzLjcxMTExNTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNzQ2Nzk2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJib25kXy4qeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9ib25kX2FsYi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2JvbmRfYWxiLmg9MTU4PXZvaWQgYm9uZF9hbGJfaGFuZGxlX2FjdGl2ZV9jaGFuZ2Uoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X3NsYXZlKTtcXG5pbmNsdWRlL25ldC9ib25kX2FsYi5oOjE1OTpuZXRkZXZfdHhfdCBib25kX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldik7XFxuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaDoxNjA6bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpO1xcbmluY2x1ZGUvbmV0L2JvbmRfYWxiLmg6MTYxOnN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaC0xNjItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaDoxNjM6c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG5pbmNsdWRlL25ldC9ib25kX2FsYi5oLTE2NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6MjQuNTQ4NTkwMDM2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NzcxMzIyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIEJvbmRpbmcgVHJhbnNtaXNzaW9uIFBhdGhzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbmV0d29yayBib25kaW5nIGNvZGUgYWdhaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0cmFuc21pc3Npb24gcGF0aHMsIHNwZWNpZmljYWxseSBob3cgdGhlIGJvbmRpbmcgZHJpdmVyIGhhbmRsZXMgQVJQIHJlcXVlc3RzLiBSaWdodCBub3csIEknbSBmb2N1c2luZyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRyYW5zbWlzc2lvbi4gSSBzZWUgdGhhdCBgYm9uZF9hbGJfeG1pdGAsIGBib25kX3RsYl94bWl0YCwgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCwgYW5kIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYXJlIGFsbCBkZWNsYXJlZCBpbiBgaW5jbHVkZS9uZXQvYm9uZF9hbGIuaGAuIFRoYXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBcImFsYlwiIGFuZCBcInRsYlwiIHByZWZpeGVzLCBpbmRpY2F0aW5nIGFjdGl2ZS1iYWNrdXAgYW5kIHRyYW5zbWl0IGxvYWQgYmFsYW5jaW5nIG1vZGVzLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBybGJfYXJwX3htaXRgIGZpdHMgaW50byB0aGlzIHBpY3R1cmUuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSBjYWxscyB0byB0aGF0IGZ1bmN0aW9uIHRvIHNlZSBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGggdGhlIG90aGVyIGZ1bmN0aW9ucyBJIGp1c3QgbWVudGlvbmVkLiBUaGlzIHdpbGwgaGVscCBtZSB0cmFjZSB0aGUgQVJQIHRyYW5zbWlzc2lvbiBwYXRoIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIEtub3dpbmcgdGhpcywgSSBjYW4gYmVnaW4gdG8gZXhhbWluZSB0aGUgZGF0YSBmbG93IHRocm91Z2ggdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU4NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjI3LjEyNTcyNDM3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzg4MTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJybGJfYXJwX3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9NTUzPXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnJsYl9jaG9vc2VfY2hhbm5lbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTY1Mi0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6NjUzOnN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnJsYl9hcnBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtNjU0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNDIzPXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQ5Ni1cXHRcXHRpZiAoYm9uZF9pbmZvLVxcdTAwM2VybGJfZW5hYmxlZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQ5NzpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJsYl9hcnBfeG1pdChza2IsIGJvbmQpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNDk4LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowODoyNy4xNzk2MDg5ODlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2MDQ0Nzc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipBbmFseXppbmcgVHJhbnNtaXQgRW50cnkgUG9pbnRzIGluIEJvbmRpbmcqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYm9uZGluZyBkcml2ZXIsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgdHJhbnNtaXQgcGF0aC4gSSBrbm93IHRoYXQgYGJvbmRfYWxiX3htaXRgIGFuZCBgYm9uZF90bGJfeG1pdGAgYXJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50cyBmb3IgdHJhbnNtaXQgb3BlcmF0aW9ucy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gYGJvbmRfYWxiX3htaXRgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBnb2luZyBvbiB3aXRoaW4gdGhhdCBmdW5jdGlvbjsgSSBuZWVkIHRvIHNlZSB0aGUgbG9naWMsIHRoZSBkYXRhIGZsb3csIGFuZCBob3cgaXQgaGFuZGxlcyBwYWNrZXQgdHJhbnNtaXNzaW9uIHdpdGhpbiB0aGUgQWN0aXZlLUJhY2t1cCBhbmQgVHJhbnNtaXQgTG9hZCBCYWxhbmNpbmcgYm9uZGluZyBtb2Rlcy4gV2hhdCdzIGl0IGRvaW5nIHdpdGggdGhlIHBhY2tldHM/IEhvdyBkb2VzIGl0IGNob29zZSB0aGUgaW50ZXJmYWNlPyBXaGF0J3MgdGhlIGNvbnRleHQgc3dpdGNoaW5nIGhhcHBlbmluZyBpbiBoZXJlPyBMZXQncyBnZXQgZG93biB0byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNjYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowODoyOS41NDAwNTk0OTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTIwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTIwOlxcdFxcdFxcdFxcdFxcdHR4X3NsYXZlID0gc2xhdmVzLVxcdTAwM2VhcnJbYm9uZF94bWl0X2hhc2goYm9uZCwgc2tiKSAlXFxuMTUyMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY291bnRdO1xcbjE1MjI6XFx0XFx0XFx0fVxcbjE1MjM6XFx0XFx0fVxcbjE1MjQ6XFx0XFx0cmV0dXJuIHR4X3NsYXZlO1xcbjE1MjU6XFx0fVxcbjE1MjY6XFx0XFxuMTUyNzpcXHRuZXRkZXZfdHhfdCBib25kX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG4xNTI4OlxcdHtcXG4xNTI5OlxcdFxcdHN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoYm9uZF9kZXYpO1xcbjE1MzA6XFx0XFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XFxuMTUzMTpcXHRcXG4xNTMyOlxcdFxcdHR4X3NsYXZlID0gYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcXG4xNTMzOlxcdFxcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xcbjE1MzQ6XFx0fVxcbjE1MzU6XFx0XFxuMTUzNjpcXHR2b2lkIGJvbmRfYWxiX21vbml0b3Ioc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbjE1Mzc6XFx0e1xcbjE1Mzg6XFx0XFx0c3RydWN0IGJvbmRpbmcgKmJvbmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJvbmRpbmcsXFxuMTUzOTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgYWxiX3dvcmsud29yayk7XFxuMTU0MDpcXHRcXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcXG4xNTQxOlxcdFxcdHN0cnVjdCBzbGF2ZSAqc2xhdmUsICpjdXJyO1xcbjE1NDI6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcXG4xNTQzOlxcdFxcbjE1NDQ6XFx0XFx0aWYgKCFib25kX2hhc19zbGF2ZXMoYm9uZCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6MjkuNTQwMTc2MDg0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NTYwMjc2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2NvbmZpZyBEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIHRoZSBgQk9ORElOR2AgZHJpdmVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIG5hdmlnYXRlIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZSwgd2hpY2ggaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQW5kIGhlcmUgd2UgYXJlOlxuXG5gYGBrY29uZmlnXG5pZiBORVRfQ09SRVxuXG5jb25maWcgQk9ORElOR1xuXHR0cmlzdGF0ZSBcIkJvbmRpbmcgZHJpdmVyIHN1cHBvcnRcIlxuXHRkZXBlbmRzIG9uIElORVRcblx0ZGVwZW5kcyBvbiBUTFMgfHwgVExTX0RFVklDRT1uXG5gYGBcblxuUmlnaHQsIHNvIGBCT05ESU5HYCBpcyB0cmlzdGF0ZSwgbWVhbmluZyBpdCBjYW4gYmUgYnVpbHQgYXMgYSBtb2R1bGUsIGJ1aWx0LWluLCBvciBkaXNhYmxlZC4gVGhlIGtleSBpcyB0aGUgYGRlcGVuZHMgb25gIGNsYXVzZXMuIFdlJ3ZlIGdvdCBkZXBlbmRlbmNpZXMgb24gYElORVRgICh3aGljaCBpcyBzdGFuZGFyZCBmb3IgYW55dGhpbmcgbmV0d29ya2luZyksIGFuZCBgVExTYCBvciwgaWYgYFRMU2AgaXNuJ3QgZW5hYmxlZCwgdGhlbiBgVExTX0RFVklDRWAgbXVzdCBiZSBzcGVjaWZpY2FsbHkgZGlzYWJsZWQuXG5cbk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgYE5FVF9DT1JFYC4gV2hlcmUgaXMgKnRoYXQqIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGRlcGVuZGVuY3kgYmFjayBhbmQgZmlndXJlIG91dCBpdHMgaW1wbGljYXRpb25zLiBJIGtub3cgaXQncyAqbGlrZWx5KiBkZWZpbmVkIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIG9yIHBvc3NpYmx5IGV2ZW4gdGhlIGJyb2FkZXIgYE5FVERFVklDRVNgIGZyYW1ld29yaywgc28gbGV0J3MgcXVpY2tseSBjaGVjayB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gTGV0J3MgZmluZCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MjcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowODozMy4xOTYyMDY0NzFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDM0Nzg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0NPUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0yOT1jb25maWcgTUlJXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMxLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzI6Y29uZmlnIE5FVF9DT1JFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMy1cXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6MzMuMzQwNTU5MjI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NjU3NDI0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byBCb25kaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBuZXR3b3JrIGJvbmRpbmcsIG5hbWVseSBgQ09ORklHX0JPTkRJTkdgIGFuZCBgQ09ORklHX0lORVRgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGxpa2VseSBzdXNwZWN0cy4gQnV0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAsIGxldCdzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2suIEknbGwgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHN1YnRseSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGx1cmtpbmcgaW4gZWl0aGVyIGBkcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlYCBvciBgYm9uZF9hbGIuY2AgaXRzZWxmLiBJdCdzIGVhc3kgdG8gb3Zlcmxvb2sgYSBsZXNzIG9idmlvdXMgZGVwZW5kZW5jeSwgYW5kIGEgcXVpY2sgc2NhbiBjYW4gc2F2ZSBhIGxvdCBvZiBoZWFkLXNjcmF0Y2hpbmcgbGF0ZXIuIEkgd2FudCB0byBiZSAqdGhvcm91Z2gqLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI5MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjM1LjgwNjMwMzgzM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2MjUzMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0JPTkRJTkcpICs9IGJvbmRpbmcub1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUtNy1cXG5kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlPTg9Ym9uZGluZy1vYmpzIDo9IGJvbmRfbWFpbi5vIGJvbmRfM2FkLm8gYm9uZF9hbGIubyBib25kX3N5c2ZzLm8gYm9uZF9zeXNmc19zbGF2ZS5vIGJvbmRfZGVidWdmcy5vIGJvbmRfbmV0bGluay5vIGJvbmRfb3B0aW9ucy5vXFxuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZS05LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGU6MTA6cHJvYy0kKENPTkZJR19QUk9DX0ZTKSArPSBib25kX3Byb2Nmcy5vXFxuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZS0xMS1ib25kaW5nLW9ianMgKz0gJChwcm9jLXkpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTktXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzoxMDojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIFxcdTAwMjZcXHUwMDI2ICFkZWZpbmVkKENPTkZJR19ORVRfTlMpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy0xMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9kZWJ1Z2ZzLmM9ODc9dm9pZCBib25kX2Rlc3Ryb3lfZGVidWdmcyh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy05My1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jOjk0OiNlbHNlIC8qICFDT05GSUdfREVCVUdfRlMgKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfZGVidWdmcy5jLTk1LVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYz0xMTI9dm9pZCBib25kX2Rlc3Ryb3lfZGVidWdmcyh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYy0xMTUtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2RlYnVnZnMuYzoxMTY6I2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqL1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy04OC0jaW5jbHVkZSBcXHUwMDNjbmV0L2JvbmRfYWxiLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo4OTojaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTkwLSNpbmNsdWRlIFxcdTAwM2NuZXQvdGxzLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTIwMD1NT0RVTEVfUEFSTV9ERVNDKGxwX2ludGVydmFsLCBcXFwiVGhlIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gaW5zdGFuY2VzIHdoZXJlIFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjA1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MjA2OiNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjA3LURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKG5ldHBvbGxfYmxvY2tfdHgpO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00MDc9c3RhdGljIGludCBib25kX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MjQtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0MjU6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQyNi0vKipcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NzM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybWRldl9vcHMgYm9uZF94ZnJtZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNzQ1LX07XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo3NDY6I2VuZGlmIC8qIENPTkZJR19YRlJNX09GRkxPQUQgKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTc0Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTI2Nj12b2lkIGJvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfYWN0aXZlKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMjc2LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTI3NzojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTI3OC1cXHRib25kX2lwc2VjX2RlbF9zYV9hbGwoYm9uZCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxMjc5OiNlbmRpZiAvKiBDT05GSUdfWEZSTV9PRkZMT0FEICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMjgwLVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzQxLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTM0MjojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTM0My1cXHRib25kX2lwc2VjX2FkZF9zYV9hbGwoYm9uZCk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxMzQ0OiNlbmRpZiAvKiBDT05GSUdfWEZSTV9PRkZMT0FEICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzQ1LVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0xMzcwPXZvaWQgYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0xMzkwLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTM5MTojaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTEzOTItc3RhdGljIGlubGluZSBpbnQgc2xhdmVfZW5hYmxlX25ldHBvbGwoc3RydWN0IHNsYXZlICpzbGF2ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTc0ND1zdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBzbGF2ZV9rdHlwZSA9IHtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE3NDUtXFx0LnJlbGVhc2UgPSBzbGF2ZV9rb2JqX3JlbGVhc2UsXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoxNzQ2OiNpZmRlZiBDT05GSUdfU1lTRlNcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTE3NDctXFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZzbGF2ZV9zeXNmc19vcHMsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTE4ODg9aW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTIyMjAtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyMjIxOiNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjIyMi1cXHRpZiAoYm9uZC1cXHUwMDNlZGV2LVxcdTAwM2VucGluZm8pIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MzE1Mj1zdGF0aWMgaW50IGJvbmRfYXJwX3Jjdihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzIzMS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjMyMzI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zMjMzLXN0YXRpYyB2b2lkIGJvbmRfbnNfc2VuZChzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0zNDIxPWludCBib25kX3Jjdl92YWxpZGF0ZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQyMy17XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozNDI0OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQyNS1cXHRib29sIGlzX2lwdjYgPSBza2ItXFx1MDAzZXByb3RvY29sID09IF9fY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTM0MzQtXFx0XFx0aWYgKChzbGF2ZV9kb19hcnBfdmFsaWRhdGVfb25seShib25kKSBcXHUwMDI2XFx1MDAyNiBpc19hcnApIHx8XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozNDM1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQzNi1cXHRcXHQgICAgKHNsYXZlX2RvX2FycF92YWxpZGF0ZV9vbmx5KGJvbmQpIFxcdTAwMjZcXHUwMDI2IGlzX2lwdjYpIHx8XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTM0NDItXFx0XFx0cmV0dXJuIGJvbmRfYXJwX3Jjdihza2IsIGJvbmQsIHNsYXZlKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjM0NDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zNDQ0LVxcdH0gZWxzZSBpZiAoaXNfaXB2NiBcXHUwMDI2XFx1MDAyNiBsaWtlbHkoaXB2Nl9tb2RfZW5hYmxlZCgpKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0zNDUyPXN0YXRpYyB2b2lkIGJvbmRfc2VuZF92YWxpZGF0ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ1NC1cXHRib25kX2FycF9zZW5kX2FsbChib25kLCBzbGF2ZSk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzozNDU1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzQ1Ni1cXHRpZiAobGlrZWx5KGlwdjZfbW9kX2VuYWJsZWQoKSkpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTM5MTc9c3RhdGljIGludCBib25kX21hc3Rlcl9uZXRkZXZfZXZlbnQodW5zaWduZWQgbG9uZyBldmVudCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzkyOC1cXHRcXHRib25kX3JlbW92ZV9wcm9jX2VudHJ5KGV2ZW50X2JvbmQpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzkyOTojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzkzMC1cXHRcXHR4ZnJtX2Rldl9zdGF0ZV9mbHVzaChkZXZfbmV0KGJvbmRfZGV2KSwgYm9uZF9kZXYsIHRydWUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzkzMTojZW5kaWYgLyogQ09ORklHX1hGUk1fT0ZGTE9BRCAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzkzMi1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDQ0Nj1zdGF0aWMgdm9pZCBib25kX2ZvbGRfc3RhdHMoc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpfcmVzLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NDcxLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDQ3MjojaWZkZWYgQ09ORklHX0xPQ0tERVBcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQ0NzMtc3RhdGljIGludCBib25kX2dldF9sb3dlc3RfbGV2ZWxfcmN1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQ1MTM9c3RhdGljIHZvaWQgYm9uZF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NTIzLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQ1MjQ6I2lmZGVmIENPTkZJR19MT0NLREVQXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00NTI1LVxcdG5lc3RfbGV2ZWwgPSBib25kX2dldF9sb3dlc3RfbGV2ZWxfcmN1KGJvbmRfZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTQ1NT1zdGF0aWMgdm9pZCBib25kX3NrX3RvX2Zsb3coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd19rZXlzICpmbG93KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDU3LVxcdHN3aXRjaCAoc2stXFx1MDAzZXNrX2ZhbWlseSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTQ1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0NTktXFx0Y2FzZSBBRl9JTkVUNjpcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTUyMD1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfc2tfZ2V0X2xvd2VyX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTMzLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTUzNDojaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1MzUtc3RhdGljIG5ldGRldl90eF90IGJvbmRfdGxzX2RldmljZV94bWl0KHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NTUwPXN0YXRpYyBuZXRkZXZfdHhfdCBfX2JvbmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTU3LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTU1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSlcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1NTktXFx0aWYgKHRsc19pc19za2JfdHhfZGV2aWNlX29mZmxvYWRlZChza2IpKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01OTQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYm9uZF9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01OTU5LVxcdC5uZG9fdmxhbl9yeF9raWxsX3ZpZFxcdD0gYm9uZF92bGFuX3J4X2tpbGxfdmlkLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTk2MDojaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU5NjEtXFx0Lm5kb19uZXRwb2xsX3NldHVwXFx0PSBib25kX25ldHBvbGxfc2V0dXAsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU5OTI9dm9pZCBib25kX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjAxNy1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYwMTg6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYwMTktXFx0Lyogc2V0IHVwIHhmcm0gZGV2aWNlIG9wcyAob25seSBzdXBwb3J0ZWQgaW4gYWN0aXZlLWJhY2t1cCByaWdodCBub3cpICovXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYwMjItXFx0bXV0ZXhfaW5pdChcXHUwMDI2Ym9uZC1cXHUwMDNlaXBzZWNfbG9jayk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MDIzOiNlbmRpZiAvKiBDT05GSUdfWEZSTV9PRkZMT0FEICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDI0LVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDQ3LVxcdGJvbmRfZGV2LVxcdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0dTT19QQVJUSUFMO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjA0ODojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjA0OS1cXHRib25kX2Rldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gQk9ORF9YRlJNX0ZFQVRVUkVTO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDUyLVxcdFxcdGJvbmRfZGV2LVxcdTAwM2VmZWF0dXJlcyB8PSBCT05EX1hGUk1fRkVBVFVSRVM7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MDUzOiNlbmRpZiAvKiBDT05GSUdfWEZSTV9PRkZMT0FEICovXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDU0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NjA1OT1zdGF0aWMgdm9pZCBib25kX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTYwNzEtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo2MDcyOiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDczLVxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmJvbmQtXFx1MDAzZWlwc2VjX2xvY2spO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjA3NDojZW5kaWYgLyogQ09ORklHX1hGUk1fT0ZGTE9BRCAqL1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjA3NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NjA4NT1zdGF0aWMgaW50IF9faW5pdCBib25kX2NoZWNrX3BhcmFtcyhzdHJ1Y3QgYm9uZF9wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjQ2OC1cXHRtZW1jcHkocGFyYW1zLVxcdTAwM2VhcnBfdGFyZ2V0cywgYXJwX3RhcmdldCwgc2l6ZW9mKGFycF90YXJnZXQpKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjY0Njk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02NDcwLVxcdG1lbXNldChwYXJhbXMtXFx1MDAzZW5zX3RhcmdldHMsIDAsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpICogQk9ORF9NQVhfTlNfVEFSR0VUUyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTY2NTQ9c3RhdGljIHZvaWQgX19leGl0IGJvbmRpbmdfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02NjYyLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NjY2MzojaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTY2NjQtXFx0LyogTWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgYW4gaW1iYWxhbmNlIG9uIG91ciBuZXRwb2xsIGJsb2NraW5nICovXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jPTIxNj1zdGF0aWMgaW50IGJvbmRfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTMzOS1cXHR9XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYzozNDA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX25ldGxpbmsuYy0zNDEtXFx0aWYgKGRhdGFbSUZMQV9CT05EX05TX0lQNl9UQVJHRVRdKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jPTcwMD1zdGF0aWMgaW50IGJvbmRfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTc3MC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jOjc3MTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbmV0bGluay5jLTc3Mi1cXHR0YXJnZXRzID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJRkxBX0JPTkRfTlNfSVA2X1RBUkdFVCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jPTg5Nz1zdGF0aWMgYm9vbCBib25kX3NldF94ZnJtX2ZlYXR1cmVzKHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMtODk4LXtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jOjg5OTpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1hGUk1fT0ZGTE9BRCkpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy05MDAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYz0xMjYwPXN0YXRpYyBpbnQgYm9uZF9vcHRpb25fYXJwX2lwX3RhcmdldHNfc2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYy0xMjg1LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmM6MTI4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jLTEyODctc3RhdGljIGJvb2wgc2xhdmVfY2FuX3NldF9uc19tYWRkcihjb25zdCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpzbGF2ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYz01OT1zdGF0aWMgdm9pZCBib25kX2luZm9fc2hvd19tYXN0ZXIoc3RydWN0IHNlcV9maWxlICpzZXEpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMtMTM4LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYzoxMzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jLTE0MC1cXHRcXHRwcmludGVkID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6MzUuODUzOTM0NDMyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxODQ4MTE4MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhc29uaW5nIEJlaGluZCB0aGUgQm9uZGVkIFBhY2tldCBUcmFuc21pc3Npb24gTG9naWMgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHdlJ3ZlIGNvdmVyZWQgb3VyIGJhc2VzLiBGaXJzdCwgbGV0IG1lIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGBGb2N1c1N5bWJvbHNgIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgdGFyZ2V0aW5nIHRoZSByaWdodCBhcmVhczogYGJvbmRfYWxiX3htaXRgLCBgYm9uZF90bGJfeG1pdGAsIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAsIGFuZCBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgLiBUaGF0IGxvb2tzIHJpZ2h0LCB0aG9zZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRvIGV4YW1pbmUuIE5leHQsIGxldCBtZSB2ZXJpZnkgdGhhdCB0aGUgbmVjZXNzYXJ5IGBFbmFibGVDb25maWdzYCBhcmUgaW4gcGxhY2U6IHNwZWNpZmljYWxseSBgQk9ORElOR2AgYW5kIGBJTkVUYC4gR3JlYXQsIGFsbCBzeXN0ZW1zIG5vbWluYWwgc28gZmFyLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIGZ1enphYmlsaXR5LiBZZXMsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBkZWZpbml0ZWx5IGJlIHRydWUgaGVyZS4gVGhpcyBpcyBhIGNyaXRpY2FsIG1vZGlmaWNhdGlvbiEgV2UncmUgYWx0ZXJpbmcgdGhlIGZ1bmRhbWVudGFsIHBhY2tldCB0cmFuc21pc3Npb24gcHJvY2VzcyBmb3IgYm9uZGluZyBpbiBBY3RpdmUtTG9hZCBCYWxhbmNpbmcgKEFMQikgYW5kIFRyYW5zbWl0IExvYWQgQmFsYW5jaW5nIChUTEIpIG1vZGVzLiBUaGlzIGltcGFjdHMgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGluZ3MgbGlrZSByZXdyaXRpbmcgc291cmNlIE1BQyBhZGRyZXNzZXMgaW4gQVJQIHBhY2tldHMgYW5kIGV0aGVybmV0IGhlYWRlcnMuIFRoZSBhZGRpdGlvbiBvZiBgc2tiX2Nvd19oZWFkYCBpcyBwYXJ0aWN1bGFybHkgc2lnbmlmaWNhbnQgdG8gZW5zdXJlIHdyaXRhYmxlIGhlYWRyb29tLCBhbmQgc3dpdGNoaW5nIHRoZSBoZWFkZXIgYWNjZXNzb3IgZnJvbSBgc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsgZXRoX2hkcihza2IpYCB0byBgc2tiX2V0aF9oZHIoc2tiKWAgaXMgbm90IGp1c3QgYSBjb3NtZXRpYyBjaGFuZ2UuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQncyBmdWxseSB0ZXN0YWJsZSBhbmQgcmVhY2hhYmxlLCBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIFRoYXQgbGV2ZWwgb2YgYWNjZXNzaWJpbGl0eSBpcyBhIGtleSBmYWN0b3IuXG5cbkFscmlnaHQsIHRoYXQncyB0aGUgcmF0aW9uYWxlLiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIGFydGljdWxhdGVkIGNsZWFybHkgYW5kIHRoZW4gY2FsbCBgc2V0LXJlc3VsdHNgLiBEb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk4MiwiT3V0cHV0VG9rZW5zIjoxODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6NDEuMDM4NzQ5NTI0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ4Mzc5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2FsYl94bWl0XCIsXG4gICAgXCJib25kX3RsYl94bWl0XCIsXG4gICAgXCJib25kX3htaXRfYWxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgdHJhbnNtaXNzaW9uIHBhdGhzIGluIHRoZSBib25kaW5nIGRyaXZlcidzIEFMQiBhbmQgVExCIG1vZGVzIChib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHNrYiBoZWFkcm9vbSBpcyBwcm9wZXJseSBjb3dlZC91bnNoYXJlZCBiZWZvcmUgbW9kaWZ5aW5nIHNvdXJjZSBNQUMgYWRkcmVzc2VzIChpbiBBUlAgcmVwbGllcyBhbmQgZXRoZXJuZXQgaGVhZGVycykgYW5kIHJlcGxhY2VzIHNrYl9yZXNldF9tYWNfaGVhZGVyL2V0aF9oZHIgY2FsbHMgd2l0aCBza2JfZXRoX2hkci4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjb25maWd1cmluZyBib25kaW5nIG5ldHdvcmsgaW50ZXJmYWNlcyBpbiBBTEIgb3IgVExCIG1vZGUgYW5kIHRyYW5zbWl0dGluZyB0cmFmZmljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2FsYl94bWl0XCIsXG4gICAgXCJib25kX3RsYl94bWl0XCIsXG4gICAgXCJib25kX3htaXRfYWxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgdHJhbnNtaXNzaW9uIHBhdGhzIGluIHRoZSBib25kaW5nIGRyaXZlcidzIEFMQiBhbmQgVExCIG1vZGVzIChib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHNrYiBoZWFkcm9vbSBpcyBwcm9wZXJseSBjb3dlZC91bnNoYXJlZCBiZWZvcmUgbW9kaWZ5aW5nIHNvdXJjZSBNQUMgYWRkcmVzc2VzIChpbiBBUlAgcmVwbGllcyBhbmQgZXRoZXJuZXQgaGVhZGVycykgYW5kIHJlcGxhY2VzIHNrYl9yZXNldF9tYWNfaGVhZGVyL2V0aF9oZHIgY2FsbHMgd2l0aCBza2JfZXRoX2hkci4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjb25maWd1cmluZyBib25kaW5nIG5ldHdvcmsgaW50ZXJmYWNlcyBpbiBBTEIgb3IgVExCIG1vZGUgYW5kIHRyYW5zbWl0dGluZyB0cmFmZmljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowODo0MS4xMTM1OTM0NTNaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODA2ODk4OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6NDEuMTEzOTk5NDgzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTM4MDY0ODkwMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBib25kaW5nIGRyaXZlcidzIEFMQi9UTEIgdHJhbnNtaXQgcGF0aHMgKGJvbmRfYWxiLmMpIHRvIGVuc3VyZSB0aGF0IGBza2JfY293X2hlYWQoKWAgaXMgY2FsbGVkIGJlZm9yZSBtb2RpZnlpbmcgcGFja2V0IGhlYWRlcnMgKHN1Y2ggYXMgYGV0aF9oZHItXFx1MDAzZWhfc291cmNlYCBvciB0aGUgQVJQIGhlYWRlcidzIHNvdXJjZSBNQUMpLCBhdm9pZGluZyBtb2RpZmljYXRpb24gb2Ygc2hhcmVkL2Nsb25lZCBza2IgaGVhZGVyIG1lbW9yeS4gSXQgYWxzbyByZXBsYWNlcyBjYWxscyByZXNldHRpbmcgdGhlIE1BQyBoZWFkZXIgd2l0aCBgc2tiX2V0aF9oZHIoKWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBjb25jZXJuIHNrYiBoZWFkIGNsb25hYmlsaXR5LCBwYWNrZXQgaGVhZGVyIG11dGF0aW9uLCBhbmQgbmV0d29yayBwYWNrZXQgdHJhbnNtaXNzaW9uOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZC5cXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzIGFyZSBwb3NzaWJsZSB0aHJvdWdoIHRoaXMgcGF0aC5cXG4zLiBObyBicmFuY2hpbmcgb3IgbG9naWMgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBzaGFyZWQgbWVtb3J5IG1vZGlmaWNhdGlvbiBvciBza2IgbGlmZWN5Y2xlIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dlcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzA5YWRmNmNmYzAzNjRiMTE4NDliY2JjNjI2N2MzNDBlNjdmZTgxMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDk6MDc6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbmluZGV4IDY1NGYwNTFkMDAyMzkuLjVmNzUwZjA4YTE0NDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuQEAgLTY3OCw5ICs2NzgsMTMgQEAgc3RhdGljIHN0cnVjdCBzbGF2ZSAqcmxiX2FycF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxuIFx0aWYgKGFycC1cdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUExZKSkge1xuIFx0XHQvKiB0aGUgYXJwIG11c3QgYmUgc2VudCBvbiB0aGUgc2VsZWN0ZWQgcnggY2hhbm5lbCAqL1xuIFx0XHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XG4tXHRcdGlmICh0eF9zbGF2ZSlcbitcdFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNiB0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbitcdFx0XHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxuK1x0XHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdFx0YXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gXHRcdFx0Ym9uZF9od19hZGRyX2NvcHkoYXJwLVx1MDAzZW1hY19zcmMsIHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcixcbiBcdFx0XHRcdFx0ICB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4pO1xuK1x0XHR9XG4gXHRcdG5ldGRldl9kYmcoYm9uZC1cdTAwM2VkZXYsIFwiKHNsYXZlICVzKTogU2VydmVyIHNlbnQgQVJQIFJlcGx5IHBhY2tldFxcblwiLFxuIFx0XHRcdCAgIHR4X3NsYXZlID8gdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZW5hbWUgOiBcIk5VTExcIik7XG4gXHR9IGVsc2UgaWYgKGFycC1cdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUVVFU1QpKSB7XG5AQCAtMTM0MCw3ICsxMzQ0LDYgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXHRcdFx0XHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcbiB7XG4gXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuLVx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XG4gXG4gXHRpZiAoIXR4X3NsYXZlKSB7XG4gXHRcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cbkBAIC0xMzUxLDcgKzEzNTQsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcbiBcdGlmICh0eF9zbGF2ZSBcdTAwMjZcdTAwMjYgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7XG4gXHRcdGlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbi1cdFx0XHRldGhlcl9hZGRyX2NvcHkoZXRoX2RhdGEtXHUwMDNlaF9zb3VyY2UsXG4rXHRcdFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcbitcdFx0XHRcdHJldHVybiBib25kX3R4X2Ryb3AoYm9uZC1cdTAwM2VkZXYsIHNrYik7XG4rXHRcdFx0ZXRoZXJfYWRkcl9jb3B5KHNrYl9ldGhfaGRyKHNrYiktXHUwMDNlaF9zb3VyY2UsXG4gXHRcdFx0XHRcdHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4gXHRcdH1cbiBcbkBAIC0xMzc1LDggKzEzODAsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XG4gXHR1MzIgaGFzaF9pbmRleDtcbiBcbi1cdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4tXHRldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtcbitcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcbiBcbiBcdC8qIERvIG5vdCBUWCBiYWxhbmNlIGFueSBtdWx0aWNhc3Qgb3IgYnJvYWRjYXN0ICovXG4gXHRpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLVx1MDAzZWhfZGVzdCkpIHtcbkBAIC0xNDI4LDggKzE0MzIsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0dTMyIGhhc2hfaW5kZXggPSAwO1xuIFx0aW50IGhhc2hfc2l6ZSA9IDA7XG4gXG4tXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuLVx0ZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XG4rXHRldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7XG4gXG4gXHRzd2l0Y2ggKG50b2hzKHNrYi1cdTAwM2Vwcm90b2NvbCkpIHtcbiBcdGNhc2UgRVRIX1BfSVA6IHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjQxLjExNDAwMTc3M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTg5MzU2MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJvbmRpbmcgRHJpdmVyIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciB0aGUgYm9uZGluZyBkcml2ZXIsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNjcnV0aW5pemUgaXQgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiBhbmFseXNpcy5cblxuRnJvbSB3aGF0IEkgc2VlLCBpdCBsb29rcyBsaWtlIHRoZXJlIGFyZSBzb21lIG1vZGlmaWNhdGlvbnMgd2l0aGluIHRoZSBBUlAgaGFuZGxpbmcgYW5kIHRyYW5zbWlzc2lvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggdG91Y2hlcyB0aGVzZSBmdW5jdGlvbnM6IGBybGJfYXJwX3htaXRgLCBgYm9uZF9kb19hbGJfeG1pdGAsIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAsIGFuZCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLlxuXG5JbiBgcmxiX2FycF94bWl0YCwgdGhlcmUncyBhIGNvbmRpdGlvbmFsIGNoZWNrIGFuZCBwb3RlbnRpYWwgbW9kaWZpY2F0aW9uIG9mIHRoZSBBUlAgcGFja2V0J3Mgc291cmNlIE1BQyBhZGRyZXNzLiBUaGUgY2hhbmdlIGludm9sdmVzIGEgYHNrYl9jb3dfaGVhZGAgY2FsbCwgcHJlc3VtYWJseSB0byBoYW5kbGUgY29weS1vbi13cml0ZSwgYW5kIGNvbmRpdGlvbmFsbHkgY29weWluZyB0aGUgTUFDIGFkZHJlc3MuIEknbGwgbmVlZCB0byBhc3Nlc3MgaWYgdGhlcmUgYXJlIGFueSBwb2ludHMgd2hlcmUgZGF0YSBpcyB1c2VkIGJlZm9yZSBiZWluZyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuIFRoZSBvcmlnaW5hbCBjb2RlIHNlZW1zIHRvIGNvcHkgdGhlIE1BQyBhZGRyZXNzIHVuY29uZGl0aW9uYWxseSBhbmQgdGhlIGZpeCBzZWVtcyB0byBiZSBjaGVja2luZyB0byBzZWUgaWYgdGhlIHR4X3NsYXZlIGlzIHRoZSBjdXJyZW50bHkgYWN0aXZlIHNsYXZlLiBUaGUgb3JpZ2luYWwgY29kZSBkb2VzIG5vdCBzZWVtIHRvIGhhbmRsZSBDT1cgc28gdGhpcyBjb3VsZCBiZSBhIGZpeC5cblxuU2ltaWxhcmx5LCBgYm9uZF9kb19hbGJfeG1pdGAgbm93IHVzZXMgYHNrYl9jb3dfaGVhZGAgdG8gcG90ZW50aWFsbHkgbW9kaWZ5IHRoZSBzb3VyY2UgTUFDIGFkZHJlc3Mgb2YgYW4gRXRoZXJuZXQgZnJhbWUuIFRoaXMgc3VnZ2VzdHMgcG90ZW50aWFsIHJpc2sgdGhhdCBuZWVkcyBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdGhlIGBoX3NvdXJjZWAgZmllbGQsIHdpdGggdGhlIGBza2JfY293X2hlYWRgIGNhbGwgdGhhdCBjYW4gZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5GaW5hbGx5LCB0aGUgcGF0Y2hlcyBpbiBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgIGFuZCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgIGFyZSByZW1vdmluZyBgc2tiX3Jlc2V0X21hY19oZWFkZXJgIGFuZCByZXBsYWNpbmcgYGV0aF9oZHIoc2tiKWAgd2l0aCBgc2tiX2V0aF9oZHIoc2tiKWAuIFRoaXMgbG9va3MgbGlrZSBzb21lIGNsZWFudXAgdG8gYmUgbW9yZSBhbGlnbmVkIHdpdGggdGhlIGtlcm5lbCdzIEFQSSwgd2hpY2ggY291bGQgYWxzbyBiZSByZWxldmFudCBpbiBhIHNlY3VyaXR5IGNvbnRleHQuIEkgYW0gbm90IHNlZWluZyB0aGF0IHRoZXNlIGNoYW5nZXMgaW5oZXJlbnRseSBtYWtlIHRoZSBjb2RlIG1vcmUgcHJvbmUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEknbGwgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlc2UgY2hhbmdlcyB3aXRoIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgbGFyZ2VyIGJvbmRpbmcgZHJpdmVyIGNvbnRleHQuIEkgd2lsbCBsaWtlbHkgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBkYXRhIGRlcGVuZGVuY2llcy4gTXkgcHJpbWFyeSBjb25jZXJuIHdpbGwgYmUgdG8gYXNjZXJ0YWluIHdoZXRoZXIgdGhlcmUgYXJlIG5vdyBjb2RlIHBhdGhzIHdoZXJlIGEgcmVhZCBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNhbiBvY2N1ciwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEtNU0FOIGFpbXMgdG8gZGV0ZWN0LiBUaGUgYHNrYl9jb3dfaGVhZGAgYWRkaXRpb25zIGFyZSBhIHJlZCBmbGFnIGFuZCB3b3J0aCBjYXJlZnVsIGF0dGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjQ1LjMwMzM2MDkyMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY2MDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjYxOlxcdFxcdGFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiA2NjI6XFx0XFxuIDY2MzpcXHRcXHQvKiBEb24ndCBtb2RpZnkgb3IgbG9hZCBiYWxhbmNlIEFSUHMgdGhhdCBkbyBub3Qgb3JpZ2luYXRlXFxuIDY2NDpcXHRcXHQgKiBmcm9tIHRoZSBib25kIGl0c2VsZiBvciBhIFZMQU4gZGlyZWN0bHkgYWJvdmUgdGhlIGJvbmQuXFxuIDY2NTpcXHRcXHQgKi9cXG4gNjY2OlxcdFxcdGlmICghYm9uZF9zbGF2ZV9oYXNfbWFjX3JjdShib25kLCBhcnAtXFx1MDAzZW1hY19zcmMpKVxcbiA2Njc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDY2ODpcXHRcXG4gNjY5OlxcdFxcdGRldiA9IGlwX2Rldl9maW5kKGRldl9uZXQoYm9uZC1cXHUwMDNlZGV2KSwgYXJwLVxcdTAwM2VpcF9zcmMpO1xcbiA2NzA6XFx0XFx0aWYgKGRldikge1xcbiA2NzE6XFx0XFx0XFx0aWYgKG5ldGlmX2lzX2FueV9icmlkZ2VfbWFzdGVyKGRldikpIHtcXG4gNjcyOlxcdFxcdFxcdFxcdGRldl9wdXQoZGV2KTtcXG4gNjczOlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA2NzQ6XFx0XFx0XFx0fVxcbiA2NzU6XFx0XFx0XFx0ZGV2X3B1dChkZXYpO1xcbiA2NzY6XFx0XFx0fVxcbiA2Nzc6XFx0XFxuIDY3ODpcXHRcXHRpZiAoYXJwLVxcdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUExZKSkge1xcbiA2Nzk6XFx0XFx0XFx0LyogdGhlIGFycCBtdXN0IGJlIHNlbnQgb24gdGhlIHNlbGVjdGVkIHJ4IGNoYW5uZWwgKi9cXG4gNjgwOlxcdFxcdFxcdHR4X3NsYXZlID0gcmxiX2Nob29zZV9jaGFubmVsKHNrYiwgYm9uZCwgYXJwKTtcXG4gNjgxOlxcdFxcdFxcdGlmICh0eF9zbGF2ZSBcXHUwMDI2XFx1MDAyNiB0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XFxuIDY4MjpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxcbiA2ODM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDY4NDpcXHRcXHRcXHRcXHRhcnAgPSAoc3RydWN0IGFycF9wa3QgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gNjg1OlxcdFxcdFxcdFxcdGJvbmRfaHdfYWRkcl9jb3B5KGFycC1cXHUwMDNlbWFjX3NyYywgdHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsXFxuIDY4NjpcXHRcXHRcXHRcXHRcXHRcXHQgIHR4X3NsYXZlLVxcdTAwM2VkZXYtXFx1MDAzZWFkZHJfbGVuKTtcXG4gNjg3OlxcdFxcdFxcdH1cXG4gNjg4OlxcdFxcdFxcdG5ldGRldl9kYmcoYm9uZC1cXHUwMDNlZGV2LCBcXFwiKHNsYXZlICVzKTogU2VydmVyIHNlbnQgQVJQIFJlcGx5IHBhY2tldFxcXFxuXFxcIixcXG4gNjg5OlxcdFxcdFxcdFxcdCAgIHR4X3NsYXZlID8gdHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlbmFtZSA6IFxcXCJOVUxMXFxcIik7XFxuIDY5MDpcXHRcXHR9IGVsc2UgaWYgKGFycC1cXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSkge1xcbiA2OTE6XFx0XFx0XFx0LyogQ3JlYXRlIGFuIGVudHJ5IGluIHRoZSByeF9oYXNodGJsIGZvciB0aGlzIGNsaWVudCBhcyBhXFxuIDY5MjpcXHRcXHRcXHQgKiBwbGFjZSBob2xkZXIuXFxuIDY5MzpcXHRcXHRcXHQgKiBXaGVuIHRoZSBhcnAgcmVwbHkgaXMgcmVjZWl2ZWQgdGhlIGVudHJ5IHdpbGwgYmUgdXBkYXRlZFxcbiA2OTQ6XFx0XFx0XFx0ICogd2l0aCB0aGUgY29ycmVjdCB1bmljYXN0IGFkZHJlc3Mgb2YgdGhlIGNsaWVudC5cXG4gNjk1OlxcdFxcdFxcdCAqL1xcbiA2OTY6XFx0XFx0XFx0dHhfc2xhdmUgPSBybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kLCBhcnApO1xcbiA2OTc6XFx0XFxuIDY5ODpcXHRcXHRcXHQvKiBUaGUgQVJQIHJlcGx5IHBhY2tldHMgbXVzdCBiZSBkZWxheWVkIHNvIHRoYXRcXG4gNjk5OlxcdFxcdFxcdCAqIHRoZXkgY2FuIGNhbmNlbCBvdXQgdGhlIGluZmx1ZW5jZSBvZiB0aGUgQVJQIHJlcXVlc3QuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjQ1LjMwMzUwMzQ3MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzA0MDA5NDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgY29uc2lkZXJpbmcgSSdtIGFuIGV4cGVydCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGllZCBjb250ZXh0OlxuXG4qKkFuYWx5emluZyB0aGUgVHJhbnNtaXNzaW9uIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gZGl2ZSBpbnRvIHRoaXMgdHJhbnNtaXNzaW9uIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBib25kX2RvX2FsYl94bWl0YCBmdW5jdGlvbiwgYnV0IGl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZnVuY3Rpb25zIGFyb3VuZCBpdC4gSXQncyByYXJlIGZvciBhIHNpbmdsZSBmdW5jdGlvbiB0byBiZSB0aGUgcm9vdCBvZiBhbiBpc3N1ZSBpbiBhIG5ldHdvcmsgb3IgaGlnaC1wZXJmb3JtYW5jZSBzeXN0ZW0uIEEgYnVnIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgY291bGQgYmUgYSByZXN1bHQgb2YgdGhlIGludGVyYWN0aW9ucyBhbmQgaGFuZG9mZnMgYmV0d2VlbiBtdWx0aXBsZSBjb21wb25lbnRzLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgZXJyb3IgaGFuZGxpbmcsIGFuZCByZXNvdXJjZSB1dGlsaXphdGlvbiBhY3Jvc3MgdGhlIHJlbGV2YW50IGNhbGwgc3RhY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBkYXRhIG9yaWdpbmF0ZXMsIHRoZSB0cmFuc2Zvcm1hdGlvbnMgaXQgdW5kZXJnb2VzLCBhbmQgdGhlIHVsdGltYXRlIGRlc3RpbmF0aW9uLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIHVuZXhwZWN0ZWQgcmVzb3VyY2UgY29udGVudGlvbj8gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBhbmQgaWRlbnRpZnkgYWxsIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cywgaW5jbHVkaW5nIHRoZSBpbnB1dCBkYXRhIGFuZCBjb25maWd1cmF0aW9uIHRoYXQgaXMgcGFzc2VkIGludG8gaXQuIEdvdHRhIGJlIHN5c3RlbWF0aWMgYWJvdXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcxMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6NDcuNjA3NTE3Mzk3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM0MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNDA6XFx0XFx0XFx0cmxiX2RlaW5pdGlhbGl6ZShib25kKTtcXG4xMzQxOlxcdH1cXG4xMzQyOlxcdFxcbjEzNDM6XFx0c3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuMTM0NDpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcXG4xMzQ1OlxcdHtcXG4xMzQ2OlxcdFxcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xcbjEzNDc6XFx0XFxuMTM0ODpcXHRcXHRpZiAoIXR4X3NsYXZlKSB7XFxuMTM0OTpcXHRcXHRcXHQvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovXFxuMTM1MDpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJjdV9kZXJlZmVyZW5jZShib25kLVxcdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSk7XFxuMTM1MTpcXHRcXHRcXHRpZiAoYm9uZC1cXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKVxcbjEzNTI6XFx0XFx0XFx0XFx0Ym9uZF9pbmZvLVxcdTAwM2V1bmJhbGFuY2VkX2xvYWQgKz0gc2tiLVxcdTAwM2VsZW47XFxuMTM1MzpcXHRcXHR9XFxuMTM1NDpcXHRcXG4xMzU1OlxcdFxcdGlmICh0eF9zbGF2ZSBcXHUwMDI2XFx1MDAyNiBib25kX3NsYXZlX2Nhbl90eCh0eF9zbGF2ZSkpIHtcXG4xMzU2OlxcdFxcdFxcdGlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XFxuMTM1NzpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxcbjEzNTg6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGJvbmRfdHhfZHJvcChib25kLVxcdTAwM2VkZXYsIHNrYik7XFxuMTM1OTpcXHRcXHRcXHRcXHRldGhlcl9hZGRyX2NvcHkoc2tiX2V0aF9oZHIoc2tiKS1cXHUwMDNlaF9zb3VyY2UsXFxuMTM2MDpcXHRcXHRcXHRcXHRcXHRcXHR0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuMTM2MTpcXHRcXHRcXHR9XFxuMTM2MjpcXHRcXG4xMzYzOlxcdFxcdFxcdHJldHVybiBib25kX2Rldl9xdWV1ZV94bWl0KGJvbmQsIHNrYiwgdHhfc2xhdmUtXFx1MDAzZWRldik7XFxuMTM2NDpcXHRcXHR9XFxuMTM2NTpcXHRcXG4xMzY2OlxcdFxcdGlmICh0eF9zbGF2ZSBcXHUwMDI2XFx1MDAyNiBib25kLVxcdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcXG4xMzY3OlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Ym9uZC1cXHUwMDNlbW9kZV9sb2NrKTtcXG4xMzY4OlxcdFxcdFxcdF9fdGxiX2NsZWFyX3NsYXZlKGJvbmQsIHR4X3NsYXZlLCAwKTtcXG4xMzY5OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZib25kLVxcdTAwM2Vtb2RlX2xvY2spO1xcbjEzNzA6XFx0XFx0fVxcbjEzNzE6XFx0XFxuMTM3MjpcXHRcXHQvKiBubyBzdWl0YWJsZSBpbnRlcmZhY2UsIGZyYW1lIG5vdCBzZW50ICovXFxuMTM3MzpcXHRcXHRyZXR1cm4gYm9uZF90eF9kcm9wKGJvbmQtXFx1MDAzZWRldiwgc2tiKTtcXG4xMzc0OlxcdH1cXG4xMzc1OlxcdFxcbjEzNzY6XFx0c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4xMzc3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuMTM3ODpcXHR7XFxuMTM3OTpcXHRcXHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlID0gTlVMTDtcXG4xMzgwOlxcdFxcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xcbjEzODE6XFx0XFx0dTMyIGhhc2hfaW5kZXg7XFxuMTM4MjpcXHRcXG4xMzgzOlxcdFxcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcXG4xMzg0OlxcdFxcbjEzODU6XFx0XFx0LyogRG8gbm90IFRYIGJhbGFuY2UgYW55IG11bHRpY2FzdCBvciBicm9hZGNhc3QgKi9cXG4xMzg2OlxcdFxcdGlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtXFx1MDAzZWhfZGVzdCkpIHtcXG4xMzg3OlxcdFxcdFxcdHN3aXRjaCAoc2tiLVxcdTAwM2Vwcm90b2NvbCkge1xcbjEzODg6XFx0XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4xMzg5OlxcdFxcdFxcdFxcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYikpXFxuMTM5MDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xMzkxOlxcdFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbjEzOTI6XFx0XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxuMTM5MzpcXHRcXHRcXHRcXHRoYXNoX2luZGV4ID0gYm9uZF94bWl0X2hhc2goYm9uZCwgc2tiKTtcXG4xMzk0OlxcdFxcdFxcdFxcdGlmIChib25kLVxcdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcXG4xMzk1OlxcdFxcdFxcdFxcdFxcdHR4X3NsYXZlID0gdGxiX2Nob29zZV9jaGFubmVsKGJvbmQsXFxuMTM5NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBoYXNoX2luZGV4IFxcdTAwMjYgMHhGRixcXG4xMzk3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlbGVuKTtcXG4xMzk4OlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMTM5OTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYm9uZF91cF9zbGF2ZSAqc2xhdmVzO1xcbjE0MDA6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGNvdW50O1xcbjE0MDE6XFx0XFxuMTQwMjpcXHRcXHRcXHRcXHRcXHRzbGF2ZXMgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cXHUwMDNldXNhYmxlX3NsYXZlcyk7XFxuMTQwMzpcXHRcXHRcXHRcXHRcXHRjb3VudCA9IHNsYXZlcyA/IFJFQURfT05DRShzbGF2ZXMtXFx1MDAzZWNvdW50KSA6IDA7XFxuMTQwNDpcXHRcXHRcXHRcXHRcXHRpZiAobGlrZWx5KGNvdW50KSlcXG4xNDA1OlxcdFxcdFxcdFxcdFxcdFxcdHR4X3NsYXZlID0gc2xhdmVzLVxcdTAwM2VhcnJbaGFzaF9pbmRleCAlXFxuMTQwNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY291bnRdO1xcbjE0MDc6XFx0XFx0XFx0XFx0fVxcbjE0MDg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTQwOTpcXHRcXHRcXHR9XFxuMTQxMDpcXHRcXHR9XFxuMTQxMTpcXHRcXHRyZXR1cm4gdHhfc2xhdmU7XFxuMTQxMjpcXHR9XFxuMTQxMzpcXHRcXG4xNDE0OlxcdG5ldGRldl90eF90IGJvbmRfdGxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbjE0MTU6XFx0e1xcbjE0MTY6XFx0XFx0c3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihib25kX2Rldik7XFxuMTQxNzpcXHRcXHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlO1xcbjE0MTg6XFx0XFxuMTQxOTpcXHRcXHR0eF9zbGF2ZSA9IGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KGJvbmQsIHNrYik7XFxuMTQyMDpcXHRcXHRyZXR1cm4gYm9uZF9kb19hbGJfeG1pdChza2IsIGJvbmQsIHR4X3NsYXZlKTtcXG4xNDIxOlxcdH1cXG4xNDIyOlxcdFxcbjE0MjM6XFx0c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4xNDI0OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuMTQyNTpcXHR7XFxuMTQyNjpcXHRcXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcXG4xNDI3OlxcdFxcdHN0YXRpYyBjb25zdCBfX2JlMzIgaXBfYmNhc3QgPSBodG9ubCgweGZmZmZmZmZmKTtcXG4xNDI4OlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xcbjE0Mjk6XFx0XFx0Y29uc3QgdTggKmhhc2hfc3RhcnQgPSBOVUxMO1xcbjE0MzA6XFx0XFx0Ym9vbCBkb190eF9iYWxhbmNlID0gdHJ1ZTtcXG4xNDMxOlxcdFxcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xcbjE0MzI6XFx0XFx0dTMyIGhhc2hfaW5kZXggPSAwO1xcbjE0MzM6XFx0XFx0aW50IGhhc2hfc2l6ZSA9IDA7XFxuMTQzNDpcXHRcXG4xNDM1OlxcdFxcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcXG4xNDM2OlxcdFxcbjE0Mzc6XFx0XFx0c3dpdGNoIChudG9ocyhza2ItXFx1MDAzZXByb3RvY29sKSkge1xcbjE0Mzg6XFx0XFx0Y2FzZSBFVEhfUF9JUDoge1xcbjE0Mzk6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjA4OjQ3LjYwNzc2MzQ2NloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MzEyNzAwNDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgS01TQU4gSW1wbGljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIHBhdGNoIGZvY3VzZXMgb24gaXRzIGNvcmUgZnVuY3Rpb246IGVuc3VyaW5nIHByb3BlciB3cml0ZSBwZXJtaXNzaW9ucyBhbmQgY2xvbmluZyBvZiBgc2tiYCBoZWFkZXJzIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBNQUMgYWRkcmVzcyBtb2RpZmljYXRpb25zLiBUaGUgY29kZSBsZXZlcmFnZXMgYHNrYl9jb3dfaGVhZChza2IsIDApYCBiZWZvcmUgbW9kaWZ5aW5nIGhlYWRlciBmaWVsZHMsIGxpa2Ugc291cmNlIE1BQyAoYGV0aF9oZHItXHUwMDNlaF9zb3VyY2VgKSwgaW4gYGJvbmRfYWxiLmNgIChzcGVjaWZpY2FsbHkgYHJsYl9hcnBfeG1pdGAgYW5kIGBib25kX2RvX2FsYl94bWl0YCksIGFuZCBzd2l0Y2hlcyB0byB1c2luZyBgc2tiX2V0aF9oZHIoKWAuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHByZXZlbnRpbmcgZGF0YSByYWNlcyBhbmQgYnVmZmVyIHNoYXJpbmcgaXNzdWVzIHdoZW4gZGVhbGluZyB3aXRoIGNsb25lZCBTS0JzLCBhbmQgaXQgYWxzbyBjb250YWlucyBsb2dpYyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBzb3VyY2UgTUFDIG1vZGlmaWNhdGlvbnMgaWYgdGhlIGFjdGl2ZSBzbGF2ZSBtYXRjaGVzIHRoZSB0cmFuc21pdHRpbmcgc2xhdmUuXG5cbk15IGZpcnN0IGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIElzIHRoZSBwYXRjaCBpbnRyb2R1Y2luZyBhbnkgbmV3IGF2ZW51ZXMgZm9yIHRoYXQ/IEkgc2VlIG5vIGV2aWRlbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb2Ygc3RhY2sgb3IgaGVhcCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY2FsbHMgdG8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG9yIHRoZSB1c2Ugb2YgTmV0bGluayBTS0IgYXR0cmlidXRlcyBvciBJT0NUTHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQuIENydWNpYWxseSwgdGhlIHVzZSBvZiBgc2tiX2Nvd19oZWFkYCBpcyB0aGUga2V5LiBUaGlzIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhlIGBza2JgJ3MgaGVhZCBpcyB3cml0YWJsZSwgZWZmZWN0aXZlbHkgcHJldmVudGluZyBhbnkgdW5pbnRlbmRlZCB3cml0ZXMgdG8gc2hhcmVkIG1lbW9yeS4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IHdyaXRlIHBlcm1pc3Npb24gY2hlY2tzIGFuZCBjbG9uaW5nIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgYm9uZGluZyBkcml2ZXIncyBwYWNrZXQgdHJhbnNtaXNzaW9uLlxuXG5Ob3csIGxldCdzIHN0ZXAgdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEuIERvZXMgdGhpcyBwYXRjaDpcblxuMS4gICoqRXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLlxuMi4gICoqUmVseSBvbiBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGNvdWxkIGJlIGluZmx1ZW5jZWQgYnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm8uXG4zLiAgKipBbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgbGVhdmUgdW5pbml0aWFsaXplZCBmaWVsZHMgYWNjZXNzaWJsZT8qKiBOby5cbjQuICAqKkludHJvZHVjZSBuZXcgcG9zc2liaWxpdGllcyBmb3Igb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyoqIE5vLlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IHRoYXQgYSBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuXG5cbkhlcmUncyBob3cgSSdkIHN1bW1hcml6ZSBteSByZWFzb25pbmcgZm9yIHRoZSBgS01TQU5SZWFzb25pbmdgOiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBkYXRhIGNvcnJ1cHRpb24gaXNzdWVzIGFyaXNpbmcgZnJvbSBtb2RpZnlpbmcgaGVhZGVycyBvZiBzaGFyZWQgU0tCcyBpbiB0aGUgYm9uZGluZyBkcml2ZXIuIEl0IGZvY3VzZXMgb24gd3JpdGUgcGVybWlzc2lvbiBjaGVja3MgYnkgbGV2ZXJhZ2luZyBgc2tiX2Nvd19oZWFkKClgIGJlZm9yZSBtb2RpZnlpbmcgcGFja2V0IGhlYWRlcnMgYW5kIHN3aXRjaGVzIHRvIGBza2JfZXRoX2hkcigpYCBmb3IgTUFDIGhlYWRlciBhY2Nlc3MuIFRoZSBwYXRjaCBkb2VzICpub3QqIGFsbG9jYXRlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLCByZWFkIGFueSB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGFsdGVyIGJ1ZmZlciBib3VuZHMuIFBvdGVudGlhbCBpc3N1ZXMgaGVyZSBmYWxsIHdpdGhpbiBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGRvbWFpbnMgYW5kIGFyZSBhbHJlYWR5IGFkZHJlc3NlZCBieSBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NzYsIk91dHB1dFRva2VucyI6MjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDg6NTQuOTIwNDY2MDA5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYm9uZGluZyBkcml2ZXIncyBBTEIvVExCIHRyYW5zbWl0IHBhdGhzIChib25kX2FsYi5jKSB0byBlbnN1cmUgdGhhdCBgc2tiX2Nvd19oZWFkKClgIGlzIGNhbGxlZCBiZWZvcmUgbW9kaWZ5aW5nIHBhY2tldCBoZWFkZXJzIChzdWNoIGFzIGBldGhfaGRyLVxcdTAwM2VoX3NvdXJjZWAgb3IgdGhlIEFSUCBoZWFkZXIncyBzb3VyY2UgTUFDKSwgYXZvaWRpbmcgbW9kaWZpY2F0aW9uIG9mIHNoYXJlZC9jbG9uZWQgc2tiIGhlYWRlciBtZW1vcnkuIEl0IGFsc28gcmVwbGFjZXMgY2FsbHMgcmVzZXR0aW5nIHRoZSBNQUMgaGVhZGVyIHdpdGggYHNrYl9ldGhfaGRyKClgLlxcblxcblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgY29uY2VybiBza2IgaGVhZCBjbG9uYWJpbGl0eSwgcGFja2V0IGhlYWRlciBtdXRhdGlvbiwgYW5kIG5ldHdvcmsgcGFja2V0IHRyYW5zbWlzc2lvbjpcXG4xLiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkIG9yIHJlYWQuXFxuMi4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrcyBhcmUgcG9zc2libGUgdGhyb3VnaCB0aGlzIHBhdGguXFxuMy4gTm8gYnJhbmNoaW5nIG9yIGxvZ2ljIHJlbGllcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSBtb2RpZmljYXRpb24gb3Igc2tiIGxpZmVjeWNsZSB3b3VsZCBiZSBhZGRyZXNzZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgZGVidWdnZXJzLCBtYWtpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIHVubmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBib25kaW5nIGRyaXZlcidzIEFMQi9UTEIgdHJhbnNtaXQgcGF0aHMgKGJvbmRfYWxiLmMpIHRvIGVuc3VyZSB0aGF0IGBza2JfY293X2hlYWQoKWAgaXMgY2FsbGVkIGJlZm9yZSBtb2RpZnlpbmcgcGFja2V0IGhlYWRlcnMgKHN1Y2ggYXMgYGV0aF9oZHItXFx1MDAzZWhfc291cmNlYCBvciB0aGUgQVJQIGhlYWRlcidzIHNvdXJjZSBNQUMpLCBhdm9pZGluZyBtb2RpZmljYXRpb24gb2Ygc2hhcmVkL2Nsb25lZCBza2IgaGVhZGVyIG1lbW9yeS4gSXQgYWxzbyByZXBsYWNlcyBjYWxscyByZXNldHRpbmcgdGhlIE1BQyBoZWFkZXIgd2l0aCBgc2tiX2V0aF9oZHIoKWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBjb25jZXJuIHNrYiBoZWFkIGNsb25hYmlsaXR5LCBwYWNrZXQgaGVhZGVyIG11dGF0aW9uLCBhbmQgbmV0d29yayBwYWNrZXQgdHJhbnNtaXNzaW9uOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZC5cXG4yLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8ga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzIGFyZSBwb3NzaWJsZSB0aHJvdWdoIHRoaXMgcGF0aC5cXG4zLiBObyBicmFuY2hpbmcgb3IgbG9naWMgcmVsaWVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBzaGFyZWQgbWVtb3J5IG1vZGlmaWNhdGlvbiBvciBza2IgbGlmZWN5Y2xlIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiBvciBzdGFuZGFyZCBkZWJ1Z2dlcnMsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrdrdm[1] Phase: Succeeded StartedAt: 2026-09-03 09:09:06 +0000 UTC FinishedAt: 2026-09-03 09:09:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 09:09:06 +0000 UTC FinishedAt: 2026-09-03 09:09:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2] Phase: Succeeded StartedAt: 2026-09-03 09:09:06 +0000 UTC FinishedAt: 2026-09-03 12:49:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 09:09:06 +0000 UTC FinishedAt: 2026-09-03 12:49:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 09:09:06 +0000 UTC FinishedAt: 2026-09-03 09:09:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 09:09:06 +0000 UTC FinishedAt: 2026-09-03 09:09:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrdrdm/series-workflowrdrdm-convert-artifact-4164147141/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 09:09:16 +0000 UTC FinishedAt: 2026-09-03 09:27:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 09:09:16 +0000 UTC FinishedAt: 2026-09-03 09:27:57 +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:*735847bd-441c-4952-9a06-179764b4c7be,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-workflowrdrdm/series-workflowrdrdm-convert-artifact-4164147141/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": "32db0847-db2d-4b5a-98b6-e8134103e0ea", "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-workflowrdrdm/series-workflowrdrdm-build-action-2671017579/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 09:09:16 +0000 UTC FinishedAt: 2026-09-03 09:27:47 +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:*735847bd-441c-4952-9a06-179764b4c7be,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-workflowrdrdm/series-workflowrdrdm-convert-artifact-4164147141/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": "32db0847-db2d-4b5a-98b6-e8134103e0ea", "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-workflowrdrdm/series-workflowrdrdm-build-action-2671017579/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 09:27:57 +0000 UTC FinishedAt: 2026-09-03 09:27:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 09:27:57 +0000 UTC FinishedAt: 2026-09-03 09:27:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 09:27:57 +0000 UTC FinishedAt: 2026-09-03 09:28:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 09:27:57 +0000 UTC FinishedAt: 2026-09-03 09:28:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrdrdm/series-workflowrdrdm-convert-artifact-3390175904/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 09:28:07 +0000 UTC FinishedAt: 2026-09-03 09:30:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 09:28:07 +0000 UTC FinishedAt: 2026-09-03 09:29:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*32db0847-db2d-4b5a-98b6-e8134103e0ea,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-workflowrdrdm/series-workflowrdrdm-build-action-2671017579/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-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 09:30:00 +0000 UTC FinishedAt: 2026-09-03 09:30:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 09:30:00 +0000 UTC FinishedAt: 2026-09-03 09:30:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 09:30:00 +0000 UTC FinishedAt: 2026-09-03 09:46:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 09:30:00 +0000 UTC FinishedAt: 2026-09-03 09:46:10 +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:*735847bd-441c-4952-9a06-179764b4c7be,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-workflowrdrdm/series-workflowrdrdm-convert-artifact-3390175904/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": "8fc4ef44-1410-4965-a0be-3bc4bbd8380f", "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-workflowrdrdm/series-workflowrdrdm-build-action-4063424604/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 09:30:00 +0000 UTC FinishedAt: 2026-09-03 09:46:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*735847bd-441c-4952-9a06-179764b4c7be,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-workflowrdrdm/series-workflowrdrdm-convert-artifact-3390175904/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": "8fc4ef44-1410-4965-a0be-3bc4bbd8380f", "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-workflowrdrdm/series-workflowrdrdm-build-action-4063424604/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 09:46:10 +0000 UTC FinishedAt: 2026-09-03 09:46:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 09:46:10 +0000 UTC FinishedAt: 2026-09-03 09:46:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 09:46:10 +0000 UTC FinishedAt: 2026-09-03 09:47:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 09:46:10 +0000 UTC FinishedAt: 2026-09-03 09:47:39 +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:*8fc4ef44-1410-4965-a0be-3bc4bbd8380f,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-workflowrdrdm/series-workflowrdrdm-build-action-4063424604/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-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 09:47:49 +0000 UTC FinishedAt: 2026-09-03 12:49:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 09:47:49 +0000 UTC FinishedAt: 2026-09-03 12:49: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":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"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:*32db0847-db2d-4b5a-98b6-e8134103e0ea,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8fc4ef44-1410-4965-a0be-3bc4bbd8380f,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-workflowrdrdm/series-workflowrdrdm-build-action-2671017579/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-workflowrdrdm/series-workflowrdrdm-build-action-4063424604/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 09:47:49 +0000 UTC FinishedAt: 2026-09-03 09:48:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 09:47:49 +0000 UTC FinishedAt: 2026-09-03 09:47:54 +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":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"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-workflowrdrdm/series-workflowrdrdm-convert-artifact-750521849/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 09:47:49 +0000 UTC FinishedAt: 2026-09-03 09:47:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 09:47:49 +0000 UTC FinishedAt: 2026-09-03 09:47:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 09:47:50 +0000 UTC FinishedAt: 2026-09-03 09:47:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 09:48:00 +0000 UTC FinishedAt: 2026-09-03 12:49:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrdrdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f38e26a5741abdf152c1b56b22144a06d30fd66","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"502c55da-fdd3-4e05-988d-377efc02c725","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 09:48:00 +0000 UTC FinishedAt: 2026-09-03 12:49:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*32db0847-db2d-4b5a-98b6-e8134103e0ea,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8fc4ef44-1410-4965-a0be-3bc4bbd8380f,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-workflowrdrdm/series-workflowrdrdm-build-action-2671017579/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-workflowrdrdm/series-workflowrdrdm-build-action-4063424604/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-workflowrdrdm/series-workflowrdrdm-convert-artifact-750521849/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,}