Name: series-workflowql4x5 Phase: Succeeded StartedAt: 2026-09-04 21:54:23 +0000 UTC FinishedAt: 2026-09-05 02:06:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[0] Phase: Succeeded StartedAt: 2026-09-04 21:54:23 +0000 UTC FinishedAt: 2026-09-04 22:26:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 21:54:23 +0000 UTC FinishedAt: 2026-09-04 22:26:25 +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": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "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": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET" ], "series_id": "a97ddf6b-7083-4486-9b49-9ba9033607aa" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bond_alb_xmit", "bond_tlb_xmit", "bond_xmit_alb_slave_get", "bond_xmit_tlb_slave_get", "bond_do_alb_xmit", "rlb_arp_xmit" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfYWxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF90bGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfYWxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfdGxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX2RvX2FsYl94bWl0JiMzNDssCiAgICAmIzM0O3JsYl9hcnBfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBza2IgaGVhZGVyIG11dGFiaWxpdHkgaW4gdGhlIGJvbmRpbmcgQUxCL1RMQiB0cmFuc21pdCBwYXRocyAoZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgYWRkcyBgc2tiX2Nvd19oZWFkKHNrYiwgMClgIGNhbGxzIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHNvdXJjZSBNQUMgYWRkcmVzcyBpbiBBUlAgcGFja2V0cyAoYHJsYl9hcnBfeG1pdGApIGFuZCBFdGhlcm5ldCBoZWFkZXJzIChgYm9uZF9kb19hbGJfeG1pdGApLCBlbnN1cmluZyBjbG9uZWQvc2hhcmVkIHNrYiBoZWFkcyBhcmUgY29waWVkIGJlZm9yZSB3cml0aW5nLlxuMi4gSXQgcmVsb2FkcyB0aGUgcG9pbnRlciB0byB0aGUgQVJQL0V0aGVybmV0IGhlYWRlciBhZnRlciBgc2tiX2Nvd19oZWFkYCB0byBhdm9pZCBzdGFsZSBwb2ludGVyIGRlcmVmZXJlbmNlcy5cbjMuIEl0IGNsZWFucyB1cCByZWR1bmRhbnQgYHNrYl9yZXNldF9tYWNfaGVhZGVyKClgIGNhbGxzIGluIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgYnkgdXNpbmcgYHNrYl9ldGhfaGRyKHNrYilgLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIG1hbmFnZSBwYWNrZXQgYnVmZmVyIG11dGFiaWxpdHkgYW5kIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1yZWFsbG9jIGJ1Z3Mgb24gc2hhcmVkL2Nsb25lZCBza2JzIChpc3N1ZXMgZGV0ZWN0YWJsZSBieSBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBwYWRkaW5ncywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHRyYW5zbWlzc2lvbiBwYXRocyBpbiB0aGUgYm9uZGluZyBkcml2ZXIgZm9yIGJhbGFuY2UtYWxiIGFuZCBiYWxhbmNlLXRsYiBtb2RlcyAoYm9uZF9hbGIuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBza2IgaGVhZGVyIHdyaXRhYmlsaXR5IHVzaW5nIHNrYl9jb3dfaGVhZCBiZWZvcmUgbW9kaWZ5aW5nIE1BQy9BUlAgaGVhZGVycyBhbmQgdXNlcyBza2JfZXRoX2hkciBzYWZlbHkuIFRoZSBib25kaW5nIGRyaXZlciBpcyBhIHNvZnR3YXJlIG5ldGRldiBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYTM1YzI3OTUzMjk3NmViMzYyOGNhN2U3MzM1MmJjZTY0NTliYTc4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAyMjoyNToxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbmluZGV4IDY1NGYwNTFkMDAyMzkuLjQzYWM4ZTI4ZTQxODIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuQEAgLTY3OCw5ICYjNDM7Njc4LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnJsYl9hcnBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcdGlmIChhcnAtXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVBMWSkpIHtcbiBcdFx0LyogdGhlIGFycCBtdXN0IGJlIHNlbnQgb24gdGhlIHNlbGVjdGVkIHJ4IGNoYW5uZWwgKi9cbiBcdFx0dHhfc2xhdmUgPSBybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kLCBhcnApO1xuLVx0XHRpZiAodHhfc2xhdmUpXG4mIzQzO1x0XHRpZiAodHhfc2xhdmUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGFycC1cdTAwM2VtYWNfc3JjLFxuJiM0MztcdFx0XHRcdFx0ICAgICB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpKSB7XG4mIzQzO1x0XHRcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHRcdGFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0XHRcdGJvbmRfaHdfYWRkcl9jb3B5KGFycC1cdTAwM2VtYWNfc3JjLCB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsXG4gXHRcdFx0XHRcdCAgdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuKTtcbiYjNDM7XHRcdH1cbiBcdFx0bmV0ZGV2X2RiZyhib25kLVx1MDAzZWRldiwgXCYjMzQ7KHNsYXZlICVzKTogU2VydmVyIHNlbnQgQVJQIFJlcGx5IHBhY2tldFxcblwmIzM0OyxcbiBcdFx0XHQgICB0eF9zbGF2ZSA/IHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VuYW1lIDogXCYjMzQ7TlVMTFwmIzM0Oyk7XG4gXHR9IGVsc2UgaWYgKGFycC1cdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUVVFU1QpKSB7XG5AQCAtMTM0MCw3ICYjNDM7MTM0Niw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUpXG4ge1xuIFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcbi1cdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xuIFxuIFx0aWYgKCF0eF9zbGF2ZSkge1xuIFx0XHQvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovXG5AQCAtMTM1MSw3ICYjNDM7MTM1Niw5IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxuIFxuIFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNiBib25kX3NsYXZlX2Nhbl90eCh0eF9zbGF2ZSkpIHtcbiBcdFx0aWYgKHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKSkge1xuLVx0XHRcdGV0aGVyX2FkZHJfY29weShldGhfZGF0YS1cdTAwM2VoX3NvdXJjZSxcbiYjNDM7XHRcdFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gYm9uZF90eF9kcm9wKGJvbmQtXHUwMDNlZGV2LCBza2IpO1xuJiM0MztcdFx0XHRldGhlcl9hZGRyX2NvcHkoc2tiX2V0aF9oZHIoc2tiKS1cdTAwM2VoX3NvdXJjZSxcbiBcdFx0XHRcdFx0dHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbiBcdFx0fVxuIFxuQEAgLTEzNzUsOCAmIzQzOzEzODIsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XG4gXHR1MzIgaGFzaF9pbmRleDtcbiBcbi1cdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4tXHRldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtcbiYjNDM7XHRldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7XG4gXG4gXHQvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqL1xuIFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cdTAwM2VoX2Rlc3QpKSB7XG5AQCAtMTQyOCw4ICYjNDM7MTQzNCw3IEBAIHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXHR1MzIgaGFzaF9pbmRleCA9IDA7XG4gXHRpbnQgaGFzaF9zaXplID0gMDtcbiBcbi1cdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4tXHRldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtcbiYjNDM7XHRldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7XG4gXG4gXHRzd2l0Y2ggKG50b2hzKHNrYi1cdTAwM2Vwcm90b2NvbCkpIHtcbiBcdGNhc2UgRVRIX1BfSVA6IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCT05ESU5HJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX2FsYl94bWl0JiMzNDssCiAgICAmIzM0O2JvbmRfdGxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF94bWl0X2FsYl9zbGF2ZV9nZXQmIzM0OywKICAgICYjMzQ7Ym9uZF94bWl0X3RsYl9zbGF2ZV9nZXQmIzM0OywKICAgICYjMzQ7Ym9uZF9kb19hbGJfeG1pdCYjMzQ7LAogICAgJiMzNDtybGJfYXJwX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHRyYW5zbWlzc2lvbiBwYXRocyBpbiB0aGUgYm9uZGluZyBkcml2ZXIgZm9yIGJhbGFuY2UtYWxiIGFuZCBiYWxhbmNlLXRsYiBtb2RlcyAoYm9uZF9hbGIuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBza2IgaGVhZGVyIHdyaXRhYmlsaXR5IHVzaW5nIHNrYl9jb3dfaGVhZCBiZWZvcmUgbW9kaWZ5aW5nIE1BQy9BUlAgaGVhZGVycyBhbmQgdXNlcyBza2JfZXRoX2hkciBzYWZlbHkuIFRoZSBib25kaW5nIGRyaXZlciBpcyBhIHNvZnR3YXJlIG5ldGRldiBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYTM1YzI3OTUzMjk3NmViMzYyOGNhN2U3MzM1MmJjZTY0NTliYTc4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAyMjoyNToxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwppbmRleCA2NTRmMDUxZDAwMjM5Li40M2FjOGUyOGU0MTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCkBAIC02NzgsOSAmIzQzOzY3OCwxNSBAQCBzdGF0aWMgc3RydWN0IHNsYXZlICpybGJfYXJwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQpCiAJaWYgKGFycC0mZ3Q7b3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVBMWSkpIHsKIAkJLyogdGhlIGFycCBtdXN0IGJlIHNlbnQgb24gdGhlIHNlbGVjdGVkIHJ4IGNoYW5uZWwgKi8KIAkJdHhfc2xhdmUgPSBybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kLCBhcnApOwotCQlpZiAodHhfc2xhdmUpCiYjNDM7CQlpZiAodHhfc2xhdmUgJmFtcDsmYW1wOwomIzQzOwkJICAgICFldGhlcl9hZGRyX2VxdWFsXzY0Yml0cyhhcnAtJmd0O21hY19zcmMsCiYjNDM7CQkJCQkgICAgIHR4X3NsYXZlLSZndDtkZXYtJmd0O2Rldl9hZGRyKSkgewomIzQzOwkJCWlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpCiYjNDM7CQkJCXJldHVybiBOVUxMOwomIzQzOwkJCWFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpOwogCQkJYm9uZF9od19hZGRyX2NvcHkoYXJwLSZndDttYWNfc3JjLCB0eF9zbGF2ZS0mZ3Q7ZGV2LSZndDtkZXZfYWRkciwKIAkJCQkJICB0eF9zbGF2ZS0mZ3Q7ZGV2LSZndDthZGRyX2xlbik7CiYjNDM7CQl9CiAJCW5ldGRldl9kYmcoYm9uZC0mZ3Q7ZGV2LCAmIzM0OyhzbGF2ZSAlcyk6IFNlcnZlciBzZW50IEFSUCBSZXBseSBwYWNrZXRcbiYjMzQ7LAogCQkJICAgdHhfc2xhdmUgPyB0eF9zbGF2ZS0mZ3Q7ZGV2LSZndDtuYW1lIDogJiMzNDtOVUxMJiMzNDspOwogCX0gZWxzZSBpZiAoYXJwLSZndDtvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUVVFU1QpKSB7CkBAIC0xMzQwLDcgJiM0MzsxMzQ2LDYgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsCiAJCQkJICAgIHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUpCiB7CiAJc3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9ICZhbXA7KEJPTkRfQUxCX0lORk8oYm9uZCkpOwotCXN0cnVjdCBldGhoZHIgKmV0aF9kYXRhID0gZXRoX2hkcihza2IpOwogCiAJaWYgKCF0eF9zbGF2ZSkgewogCQkvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovCkBAIC0xMzUxLDcgJiM0MzsxMzU2LDkgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsCiAKIAlpZiAodHhfc2xhdmUgJmFtcDsmYW1wOyBib25kX3NsYXZlX2Nhbl90eCh0eF9zbGF2ZSkpIHsKIAkJaWYgKHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLSZndDtjdXJyX2FjdGl2ZV9zbGF2ZSkpIHsKLQkJCWV0aGVyX2FkZHJfY29weShldGhfZGF0YS0mZ3Q7aF9zb3VyY2UsCiYjNDM7CQkJaWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSkKJiM0MzsJCQkJcmV0dXJuIGJvbmRfdHhfZHJvcChib25kLSZndDtkZXYsIHNrYik7CiYjNDM7CQkJZXRoZXJfYWRkcl9jb3B5KHNrYl9ldGhfaGRyKHNrYiktJmd0O2hfc291cmNlLAogCQkJCQl0eF9zbGF2ZS0mZ3Q7ZGV2LSZndDtkZXZfYWRkcik7CiAJCX0KIApAQCAtMTM3NSw4ICYjNDM7MTM4Miw3IEBAIHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsCiAJc3RydWN0IGV0aGhkciAqZXRoX2RhdGE7CiAJdTMyIGhhc2hfaW5kZXg7CiAKLQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCWV0aF9kYXRhID0gZXRoX2hkcihza2IpOwomIzQzOwlldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7CiAKIAkvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqLwogCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtJmd0O2hfZGVzdCkpIHsKQEAgLTE0MjgsOCAmIzQzOzE0MzQsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLAogCXUzMiBoYXNoX2luZGV4ID0gMDsKIAlpbnQgaGFzaF9zaXplID0gMDsKIAotCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0JZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7CiYjNDM7CWV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTsKIAogCXN3aXRjaCAobnRvaHMoc2tiLSZndDtwcm90b2NvbCkpIHsKIAljYXNlIEVUSF9QX0lQOiB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCb25kaW5nIERyaXZlciBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZSBmaWxlIGltcGFjdGVkIGlzIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBBY3RpdmUtQmFja3VwIExvYWQgQmFsYW5jaW5nIG1vZHVsZSByZXNpZGVzLCBzbyBpdCBwaXF1ZXMgbXkgaW50ZXJlc3QuIE5vdywgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBhcmUgYHJsYl9hcnBfeG1pdGAsIGBib25kX2RvX2FsYl94bWl0YCwgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCwgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAuIEtub3dpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYWxsb3cgbWUgdG8gdHJhY2sgdGhlIGNoYW5nZXMgaW4gdGhlaXIgY29udGV4dC4KCk9mIGNvdXJzZSwgdGhlIGJvbmRpbmcgZHJpdmVyIGl0c2VsZiwgYSBzb2Z0d2FyZSBuZXRkZXYgZHJpdmVyLCBpcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwgbmV0d29yayBzdGFjaywgYW5kIGl0JiMzOTtzIGxvY2F0ZWQgaW4gdGhlIGBkcml2ZXJzL25ldC9ib25kaW5nL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIGdvb2Q7IEkgY2FuIHF1aWNrbHkgYWNjZXNzIGl0LiBCZWluZyBhYmxlIHRvIGNvbmZpZ3VyZSBhbmQgdGVzdCBpdCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIHVzaW5nIHN5emthbGxlciBpcyBjcnVjaWFsIOKAkyBJIGNhbiBpbW1lZGlhdGVseSB0aGluayBvZiBob3cgdGhpcyBhZmZlY3RzIG15IGF1dG9tYXRlZCB0ZXN0aW5nIHByb2NlZHVyZXMuIEFuZCBvZiBjb3Vyc2UsIHRoZSBuZXRsaW5rL2lwcm91dGUyIGludGVyZmFjZSAoZS5nLiwgYGlwIGxpbmsgYWRkIGJvbmQwIHR5cGUgYm9uZCBtb2RlIGJhbGFuY2UtYWxiYCAvIGBiYWxhbmNlLXRsYmApIGlzIGhvdyBJIHdvdWxkIGludGVyYWN0IHdpdGggaXQsIHdoaWNoIGlzIGVzc2VudGlhbCB0byBiZWFyIGluIG1pbmQuCgpCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBjb25mbGljdCB3aXRoIGFueSBvdGhlciBmZWF0dXJlcyBJIGRlcGVuZCBvbi4gVGhlbiwgSSYjMzk7bGwgbmVlZCB0byB1c2Ugb3VyIGVzdGFibGlzaGVkIHRvb2xzIHRvIGRvIGEgcHJvcGVyIGNvZGUgaW5zcGVjdGlvbi4gTGV0JiMzOTtzIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JPTkRJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUtNS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQk9ORElORykgJiM0Mzs9IGJvbmRpbmcub1xuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZS03LVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTI2Nj12b2lkIGJvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfYWN0aXZlKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTMzMi1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTMzMzpcdFx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0JPTkRJTkdfRkFJTE9WRVIsIGJvbmQtXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTMzNC1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTE4ODg9aW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMDk0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyMDk1Olx0c2xhdmVfZGV2LVx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX0JPTkRJTkc7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTIwOTYtXHQvKiBpbml0aWFsaXplIHNsYXZlIHN0YXRzICovXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMzc1LVx0aWYgKCFuZXRpZl9pc19ib25kX21hc3RlcihzbGF2ZV9kZXYpKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyMzc2Olx0XHRzbGF2ZV9kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5JRkZfQk9ORElORztcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjM3Ny1cdGRldl9jbG9zZShzbGF2ZV9kZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MjQyNT1zdGF0aWMgaW50IF9fYm9uZF9yZWxlYXNlX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNTk0LVx0aWYgKCFuZXRpZl9pc19ib25kX21hc3RlcihzbGF2ZV9kZXYpKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyNTk1Olx0XHRzbGF2ZV9kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5JRkZfQk9ORElORztcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjU5Ni1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQwNjg9c3RhdGljIGludCBib25kX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MDc1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0MDc2Olx0aWYgKCEoZXZlbnRfZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IElGRl9CT05ESU5HKSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDA3Ny1cdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTk5Mj12b2lkIGJvbmRfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjAxNC1cdGJvbmRfZGV2LVx1MDAzZWZsYWdzIHw9IElGRl9NQVNURVI7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYwMTU6XHRib25kX2Rldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9CT05ESU5HIHwgSUZGX1VOSUNBU1RfRkxUIHwgSUZGX05PX1FVRVVFO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDE2LVx0Ym9uZF9kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH4oSUZGX1hNSVRfRFNUX1JFTEVBU0UgfCBJRkZfVFhfU0tCX1NIQVJJTkcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMDYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBCb25kaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciBuZXR3b3JrIGJvbmRpbmcuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBkcml2ZXJzL25ldC9ib25kaW5nL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGdvLXRvIHBsYWNlIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzbyBJJiMzOTtsbCBiZSBhYmxlIHRvIHNlZSB0aGUgcmVsZXZhbnQgYENPTkZJR19gIG9wdGlvbnMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlLCBhbmQgbWF5YmUgZXZlbiBzb21lIHVzZWZ1bCBoZWxwIHRleHQgcmlnaHQgb2ZmIHRoZSBiYXQuIFRoaXMgaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIHNvbGlkIG92ZXJ2aWV3IGJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZS4gVGltZSB0byBuYXZpZ2F0ZSB0aGUgZmlsZSBzeXN0ZW0gYW5kIHN0YXJ0IHBva2luZyBhcm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJPTkRJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXG5kcml2ZXJzL25ldC9LY29uZmlnLTQwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MTpjb25maWcgQk9ORElOR1xuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O0JvbmRpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjY3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcHJvY2Vzc2luZyB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBCT05ESU5HIEtjb25maWcgRW50cnkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYm9uZGluZyBkcml2ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIG92ZXIgdG8gdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlIGFuZCB6ZXJvIGluIG9uIHRoZSBgQk9ORElOR2Agc2VjdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM5LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgb3ZlcnZpZXcgb2YgdGhlIGNvbmZpZ3VyYWJsZSBmZWF0dXJlcyByZWxhdGVkIHRvIGxpbmsgYWdncmVnYXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBhdmFpbGFibGUgYm9uZGluZyBtb2RlcywgYW55IGhhcmR3YXJlIGRlcGVuZGVuY2llcywgYW5kIHRoZSB0eXBpY2FsIGRlZmF1bHQgc2V0dGluZ3MuIEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBhZGp1c3QgdGhlaXIgYm9uZGluZyBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDM5Olx0aWYgTkVUX0NPUkVcbiAgNDA6XHRcbiAgNDE6XHRjb25maWcgQk9ORElOR1xuICA0MjpcdFx0dHJpc3RhdGUgXCYjMzQ7Qm9uZGluZyBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDQ0Olx0XHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cbiAgNDU6XHRcdGhlbHBcbiAgNDY6XHRcdCAgU2F5ICYjMzk7WSYjMzk7IG9yICYjMzk7TSYjMzk7IGlmIHlvdSB3aXNoIHRvIGJlIGFibGUgdG8gJiMzOTtib25kJiMzOTsgbXVsdGlwbGUgRXRoZXJuZXRcbiAgNDc6XHRcdCAgQ2hhbm5lbHMgdG9nZXRoZXIuIFRoaXMgaXMgY2FsbGVkICYjMzk7RXRoZXJjaGFubmVsJiMzOTsgYnkgQ2lzY28sXG4gIDQ4Olx0XHQgICYjMzk7VHJ1bmtpbmcmIzM5OyBieSBTdW4sIDgwMi4zYWQgYnkgdGhlIElFRUUsIGFuZCAmIzM5O0JvbmRpbmcmIzM5OyBpbiBMaW51eC5cbiAgNDk6XHRcbiAgNTA6XHRcdCAgVGhlIGRyaXZlciBzdXBwb3J0cyBtdWx0aXBsZSBib25kaW5nIG1vZGVzIHRvIGFsbG93IGZvciBib3RoIGhpZ2hcbiAgNTE6XHRcdCAgcGVyZm9ybWFuY2UgYW5kIGhpZ2ggYXZhaWxhYmlsaXR5IG9wZXJhdGlvbi5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgUmVmZXIgdG8gXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy5yc3RcdTAwM2UgZm9yIG1vcmVcbiAgNTQ6XHRcdCAgaW5mb3JtYXRpb24uXG4gIDU1Olx0XG4gIDU2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgNTc6XHRcdCAgd2lsbCBiZSBjYWxsZWQgYm9uZGluZy5cbiAgNTg6XHRcbiAgNTk6XHRjb25maWcgRFVNTVlcbiAgNjA6XHRcdHRyaXN0YXRlIFwmIzM0O0R1bW15IG5ldCBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuICA2MTpcdFx0aGVscFxuICA2MjpcdFx0ICBUaGlzIGlzIGVzc2VudGlhbGx5IGEgYml0LWJ1Y2tldCBkZXZpY2UgKGkuZS4gdHJhZmZpYyB5b3Ugc2VuZCB0b1xuICA2MzpcdFx0ICB0aGlzIGRldmljZSBpcyBjb25zaWduZWQgaW50byBvYmxpdmlvbikgd2l0aCBhIGNvbmZpZ3VyYWJsZSBJUFxuICA2NDpcdFx0ICBhZGRyZXNzLiBJdCBpcyBtb3N0IGNvbW1vbmx5IHVzZWQgaW4gb3JkZXIgdG8gbWFrZSB5b3VyIGN1cnJlbnRseVxuICA2NTpcdFx0ICBpbmFjdGl2ZSBTTElQIGFkZHJlc3Mgc2VlbSBsaWtlIGEgcmVhbCBhZGRyZXNzIGZvciBsb2NhbCBwcm9ncmFtcy5cbiAgNjY6XHRcdCAgSWYgeW91IHVzZSBTTElQIG9yIFBQUCwgeW91IG1pZ2h0IHdhbnQgdG8gc2F5IFkgaGVyZS4gSXQgd29uJiMzOTt0XG4gIDY3Olx0XHQgIGVubGFyZ2UgeW91ciBrZXJuZWwuIFdoYXQgYSBkZWFsLiBSZWFkIGFib3V0IGl0IGluIHRoZSBOZXR3b3JrXG4gIDY4Olx0XHQgIEFkbWluaXN0cmF0b3ImIzM5O3MgR3VpZGUsIGF2YWlsYWJsZSBmcm9tXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkyNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgaW4gYGJvbmRfYWxiLmNgLiBMZXQmIzM5O3MgZGlnIGluOgoKKipEaXZpbmcgaW50byBgYm9uZF9hbGIuY2AgZm9yIHNvbWUgdGFyZ2V0ZWQgaW5zcGVjdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgemVybyBpbiBvbiBgYm9uZF9hbGIuY2AgYW5kIHRha2UgYSBsb29rIGF0IGEgZmV3IHNwZWNpZmljIHNwb3RzLiBNeSBndXQgZmVlbGluZyBpcyB0ZWxsaW5nIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZyBpbnRlcmVzdGluZyBoYXBwZW5pbmcgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYXJvdW5kIGxpbmVzIDY3OCwgMTM0MCwgMTM3NSwgYW5kIDE0MjguIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoYXQgYXJlYSwgc28gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgd2hhdCBraW5kIG9mIG9wZXJhdGlvbnMgYXJlIGJlaW5nIGRvbmUgdGhlcmUsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byB0aGUgaW50ZXJhY3Rpb25zIG9mIG1lbW9yeSBvciBzeXN0ZW0gY2FsbHMuIFByb2JhYmx5IHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBib25kaW5nIHByb2Nlc3MuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBrZWVuIHRvIHNlZSBob3cgdGhlIGNvZGUgaGFuZGxlcyBlcnJvciBjb25kaXRpb25zIG9yIGVkZ2UgY2FzZXMgYXJvdW5kIHRob3NlIGFyZWFzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgaW4gdXNlIG9uIHRob3NlIGxpbmVzIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGludGVudGlvbiBvZiB0aGUgY29kZSBpcy4gVWx0aW1hdGVseSwgSSYjMzk7bSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHJhY2UgY29uZGl0aW9ucywgb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBiZSBvcHRpbWl6ZWQgb3IsIHdvcnNlLCBpbnRyb2R1Y2UgYnVncy4gVGhlc2UgbGluZXMgYXJlIGxpa2VseSBjcml0aWNhbCB0byB0aGUgc3RhYmlsaXR5IG9mIHRoZSBib25kaW5nIGZ1bmN0aW9uLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgcnVubmluZyBzbW9vdGhseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY3MDpcdFx0aWYgKGRldikge1xuIDY3MTpcdFx0XHRpZiAobmV0aWZfaXNfYW55X2JyaWRnZV9tYXN0ZXIoZGV2KSkge1xuIDY3MjpcdFx0XHRcdGRldl9wdXQoZGV2KTtcbiA2NzM6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiA2NzQ6XHRcdFx0fVxuIDY3NTpcdFx0XHRkZXZfcHV0KGRldik7XG4gNjc2Olx0XHR9XG4gNjc3Olx0XG4gNjc4Olx0XHRpZiAoYXJwLVx1MDAzZW9wX2NvZGUgPT0gaHRvbnMoQVJQT1BfUkVQTFkpKSB7XG4gNjc5Olx0XHRcdC8qIHRoZSBhcnAgbXVzdCBiZSBzZW50IG9uIHRoZSBzZWxlY3RlZCByeCBjaGFubmVsICovXG4gNjgwOlx0XHRcdHR4X3NsYXZlID0gcmxiX2Nob29zZV9jaGFubmVsKHNrYiwgYm9uZCwgYXJwKTtcbiA2ODE6XHRcdFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNlxuIDY4MjpcdFx0XHQgICAgIWV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGFycC1cdTAwM2VtYWNfc3JjLFxuIDY4MzpcdFx0XHRcdFx0XHQgICAgIHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcikpIHtcbiA2ODQ6XHRcdFx0XHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxuIDY4NTpcdFx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNjg2Olx0XHRcdFx0YXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gNjg3Olx0XHRcdFx0Ym9uZF9od19hZGRyX2NvcHkoYXJwLVx1MDAzZW1hY19zcmMsIHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcixcbiA2ODg6XHRcdFx0XHRcdFx0ICB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4pO1xuIDY4OTpcdFx0XHR9XG4gNjkwOlx0XHRcdG5ldGRldl9kYmcoYm9uZC1cdTAwM2VkZXYsIFwmIzM0OyhzbGF2ZSAlcyk6IFNlcnZlciBzZW50IEFSUCBSZXBseSBwYWNrZXRcXG5cJiMzNDssXG4gNjkxOlx0XHRcdFx0ICAgdHhfc2xhdmUgPyB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlbmFtZSA6IFwmIzM0O05VTExcJiMzNDspO1xuIDY5MjpcdFx0fSBlbHNlIGlmIChhcnAtXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSkge1xuIDY5MzpcdFx0XHQvKiBDcmVhdGUgYW4gZW50cnkgaW4gdGhlIHJ4X2hhc2h0YmwgZm9yIHRoaXMgY2xpZW50IGFzIGFcbiA2OTQ6XHRcdFx0ICogcGxhY2UgaG9sZGVyLlxuIDY5NTpcdFx0XHQgKiBXaGVuIHRoZSBhcnAgcmVwbHkgaXMgcmVjZWl2ZWQgdGhlIGVudHJ5IHdpbGwgYmUgdXBkYXRlZFxuIDY5NjpcdFx0XHQgKiB3aXRoIHRoZSBjb3JyZWN0IHVuaWNhc3QgYWRkcmVzcyBvZiB0aGUgY2xpZW50LlxuIDY5NzpcdFx0XHQgKi9cbiA2OTg6XHRcdFx0dHhfc2xhdmUgPSBybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kLCBhcnApO1xuIDY5OTpcdFxuIDcwMDpcdFx0XHQvKiBUaGUgQVJQIHJlcGx5IHBhY2tldHMgbXVzdCBiZSBkZWxheWVkIHNvIHRoYXRcbiA3MDE6XHRcdFx0ICogdGhleSBjYW4gY2FuY2VsIG91dCB0aGUgaW5mbHVlbmNlIG9mIHRoZSBBUlAgcmVxdWVzdC5cbiA3MDI6XHRcdFx0ICovXG4gNzAzOlx0XHRcdGJvbmQtXHUwMDNlYWxiX2luZm8ucmxiX3VwZGF0ZV9kZWxheV9jb3VudGVyID0gUkxCX1VQREFURV9ERUxBWTtcbiA3MDQ6XHRcbiA3MDU6XHRcdFx0LyogYXJwIHJlcXVlc3RzIGFyZSBicm9hZGNhc3QgYW5kIGFyZSBzZW50IG9uIHRoZSBwcmltYXJ5XG4gNzA2Olx0XHRcdCAqIHRoZSBhcnAgcmVxdWVzdCB3aWxsIGNvbGxhcHNlIGFsbCBjbGllbnRzIG9uIHRoZSBzdWJuZXQgdG9cbiA3MDc6XHRcdFx0ICogdGhlIHByaW1hcnkgc2xhdmUuIFdlIG11c3QgcmVnaXN0ZXIgdGhlc2UgY2xpZW50cyB0byBiZVxuIDcwODpcdFx0XHQgKiB1cGRhdGVkIHdpdGggdGhlaXIgYXNzaWduZWQgbWFjLlxuIDcwOTpcdFx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gYGJvbmRfYWxiLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayBhbmQgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBib25kX2FsYi5jYCBmaWxlLiBJJiMzOTt2ZSBiZWVuIG1lYW5pbmcgdG8gcmV2aXNpdCB0aGlzIHNlY3Rpb24uIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGxvZ2ljIGFyb3VuZCBsaW5lcyAxMzQwLTE0NTAuIEkgdmFndWVseSByZWNhbGwgdGhlcmUgd2FzIHNvbWV0aGluZyB0aGF0IEkgd2FudGVkIHRvIGNoZWNrOyBwZXJoYXBzIGEgc3VidGxlIGVkZ2UgY2FzZSBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkgdGhhdCB3YXJyYW50cyBhIHNlY29uZCBnbGFuY2UuIEl0IGNvdWxkIGJlIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBzcGVjaWZpYyBib25kaW5nIGNvbmZpZ3VyYXRpb25zLCBvciBtYXliZSBqdXN0IGEgY2hhbmNlIHRvIGNvbmZpcm0gdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIGFyZSBzdGlsbCBvcHRpbWFsIGdpdmVuIGhvdyB3ZSB1c2UgdGhlbSBub3cuIEl0JiMzOTtzIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHN0aWxsIHNoaXAtc2hhcGUgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM0MDpcdFxuMTM0MTpcdFx0aWYgKGJvbmRfaW5mby1cdTAwM2VybGJfZW5hYmxlZClcbjEzNDI6XHRcdFx0cmxiX2RlaW5pdGlhbGl6ZShib25kKTtcbjEzNDM6XHR9XG4xMzQ0Olx0XG4xMzQ1Olx0c3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4xMzQ2Olx0XHRcdFx0XHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcbjEzNDc6XHR7XG4xMzQ4Olx0XHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuMTM0OTpcdFxuMTM1MDpcdFx0aWYgKCF0eF9zbGF2ZSkge1xuMTM1MTpcdFx0XHQvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovXG4xMzUyOlx0XHRcdHR4X3NsYXZlID0gcmN1X2RlcmVmZXJlbmNlKGJvbmQtXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpO1xuMTM1MzpcdFx0XHRpZiAoYm9uZC1cdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpXG4xMzU0Olx0XHRcdFx0Ym9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbjEzNTU6XHRcdH1cbjEzNTY6XHRcbjEzNTc6XHRcdGlmICh0eF9zbGF2ZSBcdTAwMjZcdTAwMjYgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7XG4xMzU4Olx0XHRcdGlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbjEzNTk6XHRcdFx0XHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxuMTM2MDpcdFx0XHRcdFx0cmV0dXJuIGJvbmRfdHhfZHJvcChib25kLVx1MDAzZWRldiwgc2tiKTtcbjEzNjE6XHRcdFx0XHRldGhlcl9hZGRyX2NvcHkoc2tiX2V0aF9oZHIoc2tiKS1cdTAwM2VoX3NvdXJjZSxcbjEzNjI6XHRcdFx0XHRcdFx0dHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbjEzNjM6XHRcdFx0fVxuMTM2NDpcdFxuMTM2NTpcdFx0XHRyZXR1cm4gYm9uZF9kZXZfcXVldWVfeG1pdChib25kLCBza2IsIHR4X3NsYXZlLVx1MDAzZWRldik7XG4xMzY2Olx0XHR9XG4xMzY3Olx0XG4xMzY4Olx0XHRpZiAodHhfc2xhdmUgXHUwMDI2XHUwMDI2IGJvbmQtXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKSB7XG4xMzY5Olx0XHRcdHNwaW5fbG9jayhcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4xMzcwOlx0XHRcdF9fdGxiX2NsZWFyX3NsYXZlKGJvbmQsIHR4X3NsYXZlLCAwKTtcbjEzNzE6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2Ym9uZC1cdTAwM2Vtb2RlX2xvY2spO1xuMTM3MjpcdFx0fVxuMTM3MzpcdFxuMTM3NDpcdFx0Lyogbm8gc3VpdGFibGUgaW50ZXJmYWNlLCBmcmFtZSBub3Qgc2VudCAqL1xuMTM3NTpcdFx0cmV0dXJuIGJvbmRfdHhfZHJvcChib25kLVx1MDAzZWRldiwgc2tiKTtcbjEzNzY6XHR9XG4xMzc3Olx0XG4xMzc4Olx0c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbjEzNzk6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4xMzgwOlx0e1xuMTM4MTpcdFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XG4xMzgyOlx0XHRzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YTtcbjEzODM6XHRcdHUzMiBoYXNoX2luZGV4O1xuMTM4NDpcdFxuMTM4NTpcdFx0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xuMTM4NjpcdFxuMTM4NzpcdFx0LyogRG8gbm90IFRYIGJhbGFuY2UgYW55IG11bHRpY2FzdCBvciBicm9hZGNhc3QgKi9cbjEzODg6XHRcdGlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtXHUwMDNlaF9kZXN0KSkge1xuMTM4OTpcdFx0XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuMTM5MDpcdFx0XHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuMTM5MTpcdFx0XHRcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYikpXG4xMzkyOlx0XHRcdFx0XHRicmVhaztcbjEzOTM6XHRcdFx0XHRmYWxsdGhyb3VnaDtcbjEzOTQ6XHRcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4xMzk1Olx0XHRcdFx0aGFzaF9pbmRleCA9IGJvbmRfeG1pdF9oYXNoKGJvbmQsIHNrYik7XG4xMzk2Olx0XHRcdFx0aWYgKGJvbmQtXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKSB7XG4xMzk3Olx0XHRcdFx0XHR0eF9zbGF2ZSA9IHRsYl9jaG9vc2VfY2hhbm5lbChib25kLFxuMTM5ODpcdFx0XHRcdFx0XHRcdFx0ICAgICAgaGFzaF9pbmRleCBcdTAwMjYgMHhGRixcbjEzOTk6XHRcdFx0XHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4pO1xuMTQwMDpcdFx0XHRcdH0gZWxzZSB7XG4xNDAxOlx0XHRcdFx0XHRzdHJ1Y3QgYm9uZF91cF9zbGF2ZSAqc2xhdmVzO1xuMTQwMjpcdFx0XHRcdFx0dW5zaWduZWQgaW50IGNvdW50O1xuMTQwMzpcdFxuMTQwNDpcdFx0XHRcdFx0c2xhdmVzID0gcmN1X2RlcmVmZXJlbmNlKGJvbmQtXHUwMDNldXNhYmxlX3NsYXZlcyk7XG4xNDA1Olx0XHRcdFx0XHRjb3VudCA9IHNsYXZlcyA/IFJFQURfT05DRShzbGF2ZXMtXHUwMDNlY291bnQpIDogMDtcbjE0MDY6XHRcdFx0XHRcdGlmIChsaWtlbHkoY291bnQpKVxuMTQwNzpcdFx0XHRcdFx0XHR0eF9zbGF2ZSA9IHNsYXZlcy1cdTAwM2VhcnJbaGFzaF9pbmRleCAlXG4xNDA4Olx0XHRcdFx0XHRcdFx0XHQgICAgICAgY291bnRdO1xuMTQwOTpcdFx0XHRcdH1cbjE0MTA6XHRcdFx0XHRicmVhaztcbjE0MTE6XHRcdFx0fVxuMTQxMjpcdFx0fVxuMTQxMzpcdFx0cmV0dXJuIHR4X3NsYXZlO1xuMTQxNDpcdH1cbjE0MTU6XHRcbjE0MTY6XHRuZXRkZXZfdHhfdCBib25kX3RsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbjE0MTc6XHR7XG4xNDE4Olx0XHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTtcbjE0MTk6XHRcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmU7XG4xNDIwOlx0XG4xNDIxOlx0XHR0eF9zbGF2ZSA9IGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KGJvbmQsIHNrYik7XG4xNDIyOlx0XHRyZXR1cm4gYm9uZF9kb19hbGJfeG1pdChza2IsIGJvbmQsIHR4X3NsYXZlKTtcbjE0MjM6XHR9XG4xNDI0Olx0XG4xNDI1Olx0c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbjE0MjY6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4xNDI3Olx0e1xuMTQyODpcdFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcbjE0Mjk6XHRcdHN0YXRpYyBjb25zdCBfX2JlMzIgaXBfYmNhc3QgPSBodG9ubCgweGZmZmZmZmZmKTtcbjE0MzA6XHRcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xuMTQzMTpcdFx0Y29uc3QgdTggKmhhc2hfc3RhcnQgPSBOVUxMO1xuMTQzMjpcdFx0Ym9vbCBkb190eF9iYWxhbmNlID0gdHJ1ZTtcbjE0MzM6XHRcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xuMTQzNDpcdFx0dTMyIGhhc2hfaW5kZXggPSAwO1xuMTQzNTpcdFx0aW50IGhhc2hfc2l6ZSA9IDA7XG4xNDM2Olx0XG4xNDM3Olx0XHRldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7XG4xNDM4Olx0XG4xNDM5Olx0XHRzd2l0Y2ggKG50b2hzKHNrYi1cdTAwM2Vwcm90b2NvbCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc3MwoJCQkJCQkJb3V0cHV0OiA1NgoJCQkJCQkJdGhvdWdodHM6IDQ5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgUGFja2V0IEhlYWRlciBNb2RpZmljYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHBhdGNoIHRoYXQmIzM5O3MgY3J1Y2lhbCBmb3IgYXZvaWRpbmcgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yayBwYWNrZXQgaGVhZGVycywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGFyZSBnb29kIGNoYW5nZXMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHByZXZlbnRpbmcgbW9kaWZpY2F0aW9ucyB0byBzaGFyZWQgb3IgY2xvbmVkIGBza2JgIGhlYWRlcnMgaW4tcGxhY2UsIHdoaWNoIGlzIGEgY29tbW9uIGNhdXNlIG9mIGhhcmQtdG8tZGVidWcgaXNzdWVzLiBUaGUgdXNlIG9mIGBza2JfY293X2hlYWQoc2tiLCAwKWAgaXMgZXhhY3RseSB0aGUgcmlnaHQgYXBwcm9hY2ggdG8gZW5zdXJlIGNvcHktb24td3JpdGUgc2VtYW50aWNzIGJlZm9yZSBtYWtpbmcgY2hhbmdlcy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgdGVjaG5pcXVlIGluIHRoaXMgY29udGV4dC4KCkxvb2tpbmcgYXQgdGhlIHNwZWNpZmljIGV4YW1wbGVzIHByb3ZpZGVkLCBpdCYjMzk7cyBjbGVhciB3aGF0JiMzOTtzIGJlaW5nIGFkZHJlc3NlZDoKCjEuICBJbiBgcmxiX2FycF94bWl0YCwgd2UgaGF2ZSB0aGUgYHNrYl9jb3dfaGVhZGAgY2hlY2sgYmVmb3JlIG1vZGlmeWluZyB0aGUgQVJQIHNvdXJjZSBNQUMgYWRkcmVzcy4gVGhlIGdvYWwgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIHNvdXJjZSBNQUMgYWRkcmVzcyBpc24mIzM5O3Qgb3ZlcndyaXR0ZW4gb24gc2hhcmVkIGJ1ZmZlcnMsIGFuZCB0aGVyZWZvcmUgdGhhdCB0aGUgZGF0YSBoYXMgYSB1bmlxdWUgYmFja2luZy4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIGxpa2VseSB2dWxuZXJhYmxlIHRvIG1vZGlmeWluZyBzaGFyZWQgZGF0YSBpZiB0aGUgc291cmNlIE1BQyBvbiB0aGUgcGFja2V0IGRpZG4mIzM5O3QgbWF0Y2ggdGhlIHNsYXZlJiMzOTtzIGFkZHJlc3MsIGxlYWRpbmcgdG8gYSByYWNlIGNvbmRpdGlvbiBvciBpbmNvcnJlY3QgYmVoYXZpb3Igb24gbXVsdGlwbGUgdGhyZWFkcy4KCjIuICBJbiBgYm9uZF9kb19hbGJfeG1pdGAsIGEgc2ltaWxhciBhcHByb2FjaCBpcyB0YWtlbiwgYnV0IHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgaXMgbW9kaWZpZWQgbW9yZSBnZW5lcmljYWxseS4gSXQmIzM5O3MgZ3JlYXQgdG8gc2VlIGBza2JfY293X2hlYWRgIGVtcGxveWVkIGJlZm9yZSBjb3B5aW5nIHRoZSBzbGF2ZSYjMzk7cyBNQUMgYWRkcmVzcyBpbnRvIHRoZSBwYWNrZXQuIFRoZSBjb2RlIHRoZW4gdXNlcyBgc2tiX2V0aF9oZHIoc2tiKWAgdG8gYWNjZXNzIHRoZSBFdGhlcm5ldCBoZWFkZXIsIHdoaWNoIGlzIGFsc28gY29ycmVjdCBhbmQgbXVjaCBzYWZlci4KCjMuICBJbiBib3RoIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBza2JfZXRoX2hkcihza2IpYCBkaXJlY3RseS4gVGhpcyBpcyBhIHN1YnRsZSBidXQgaW1wb3J0YW50IGNoYW5nZSwgZml4aW5nIGluc3RhbmNlcyB3aGVyZSBgZXRoX2hkcihza2IpYCB3YXMgcHJldmlvdXNseSB1c2VkLiBUaGUgcmVhc29uIHdoeSB0aGlzIGlzIGFuIGlzc3VlIGlzIHRoYXQgYGV0aF9oZHJgIGhhcyBiZWVuIGtub3duIHRvIGJlIHByb2JsZW1hdGljLCBhbmQgaXMgbm93IGdlbmVyYWxseSBkZXByZWNhdGVkLgoKTm93LCBteSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gcmV2aWV3IHRoZSBjYWxsZXJzIG9mIHRoZXNlIGZ1bmN0aW9ucyB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoZSBmaXggYW5kIGVuc3VyZSBubyBvdGhlciBpbnN0YW5jZXMgb2YgdnVsbmVyYWJsZSBjb2RlIHJlbWFpbiB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyLiBUaGUgZnVuY3Rpb25zIG9mIGludGVyZXN0IGFyZSBgcmxiX2FycF94bWl0YCwgYGJvbmRfZG9fYWxiX3htaXRgLCBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgLCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLCBgYm9uZF9hbGJfeG1pdGAsIGFuZCBgYm9uZF90bGJfeG1pdGAuIEEgdGhvcm91Z2ggYW5hbHlzaXMgb2YgdGhlc2UgY2FsbGVycyB3aWxsIGJlIGVzc2VudGlhbC4gVGhpcyBwYXRjaCBhcHBlYXJzIHRvIGFkZHJlc3MgcmVhbCBjb25jdXJyZW5jeSBpc3N1ZXMgdGhhdCBjYW4gbGVhZCB0byBzdWJ0bGUgYnVncywgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIG15IHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JsYl9hcnBfeG1pdHxib25kX2RvX2FsYl94bWl0fGJvbmRfYWxiX3htaXR8Ym9uZF90bGJfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTIyNz1zdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMzItXHQvKiBXZSBkb24mIzM5O3QgbmVlZCB0byBkaXNhYmxlIHNvZnRpcnEgaGVyZSwgYmVjYXVzZVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjIzMzpcdCAqIHRsYl9jaG9vc2VfY2hhbm5lbCgpIGlzIG9ubHkgY2FsbGVkIGJ5IGJvbmRfYWxiX3htaXQoKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzNC1cdCAqIHdoaWNoIGFscmVhZHkgaGFzIHNvZnRpcnEgZGlzYWJsZWQuXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTU1Mz1zdGF0aWMgc3RydWN0IHNsYXZlICpybGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtNjUyLSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjY1MzpzdGF0aWMgc3RydWN0IHNsYXZlICpybGJfYXJwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtNjU0LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTMzNT12b2lkIGJvbmRfYWxiX2RlaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTM0NC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxMzQ1OnN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzNDYtXHRcdFx0XHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTM3OD1zdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNDE1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE0MTY6bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQxNy17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MjEtXHR0eF9zbGF2ZSA9IGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KGJvbmQsIHNrYik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQyMjpcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MjMtfVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNDI1PXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0OTgtXHRcdGlmIChib25kX2luZm8tXHUwMDNlcmxiX2VuYWJsZWQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQ5OTpcdFx0XHR0eF9zbGF2ZSA9IHJsYl9hcnBfeG1pdChza2IsIGJvbmQpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MDAtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTI4LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1Mjk6bmV0ZGV2X3R4X3QgYm9uZF9hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUzMC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MzQtXHR0eF9zbGF2ZSA9IGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KGJvbmQsIHNrYik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTUzNTpcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MzYtfVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTU1MD1zdGF0aWMgbmV0ZGV2X3R4X3QgX19ib25kX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1NzYtXHRjYXNlIEJPTkRfTU9ERV9BTEI6XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU1Nzc6XHRcdHJldHVybiBib25kX2FsYl94bWl0KHNrYiwgZGV2KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTU3OC1cdGNhc2UgQk9ORF9NT0RFX1RMQjpcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTU3OTpcdFx0cmV0dXJuIGJvbmRfdGxiX3htaXQoc2tiLCBkZXYpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTgwLVx0ZGVmYXVsdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMjMKCQkJCQkJCW91dHB1dDogMTgyCgkJCQkJCQl0aG91Z2h0czogNzUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEJvbmRpbmcgQUxCL1RMQiBNb2RlIFJlYWNoYWJpbGl0eSBhbmQgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O20gZm9jdXNpbmcgb24gcmVhY2hhYmlsaXR5IHdpdGhpbiB0aGUgbmV0d29ya2luZy9ib25kaW5nIGRyaXZlciAoYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2ApLiBUaGUgYm9uZGluZyBkZXZpY2UgaXRzZWxmIGlzIGEgdmlydHVhbCBzb2Z0d2FyZSBjb25zdHJ1Y3QgY3JlYXRlZCB1c2luZyBuZXRsaW5rIChzcGVjaWZpY2FsbHkgYFJUTV9ORVdMSU5LYCksIGFuZCBpdCBwbGF5cyBuaWNlbHkgd2l0aCBvdGhlciB2aXJ0dWFsIGludGVyZmFjZXMgbGlrZSBkdW1teSBvciB2ZXRoIGRldmljZXMgb2Z0ZW4gc2VlbiBpbiBRRU1VIG9yIHN5emthbGxlciBlbnZpcm9ubWVudHMuIFRoaXMgaXMgaW1wb3J0YW50LgoKTm93LCBsb29raW5nIGF0IHBhY2tldCB0cmFuc21pc3Npb24gaW4gVExCIG9yIEFMQiBtb2RlIChgQk9ORF9NT0RFX1RMQmAgb3IgYEJPTkRfTU9ERV9BTEJgKSwgSSYjMzk7dmUgdHJhY2VkIHRoZSBleGVjdXRpb24gcGF0aDogYGJvbmRfYWxiX3htaXRgIG9yIGBib25kX3RsYl94bWl0YCBkaXJlY3RseSBpbnZva2UgYGJvbmRfZG9fYWxiX3htaXRgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAsIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAsIGFuZCBgcmxiX2FycF94bWl0YC4gQ3J1Y2lhbGx5LCB0aGlzIG1lYW5zIHRob3NlIGZ1bmN0aW9ucyBhcmUgKmRpcmVjdGx5KiBpbnZvbHZlZCBpbiBwYWNrZXQgdHJhbnNtaXNzaW9uIG9uIHRoZSBib25kIGRldmljZS4KCkJhc2VkIG9uIHRoaXMsIGl0JiMzOTtzIGNsZWFyOiBSZWFjaGFiaWxpdHkgaXMgKllFUyohIFN5emthbGxlciBpcyBjYXBhYmxlIG9mIGNyZWF0aW5nIGJvbmQgZGV2aWNlcyBhbmQgc2VuZGluZyBwYWNrZXRzIHRocm91Z2ggdGhlbS4gRXhjZWxsZW50LiBUaGlzIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1enppbmcuCgpOb3csIHRoZSBqdWljeSBwYXJ0OiBXb3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LCAqWUVTKiEgVGhlIGNvZGUgbW9kaWZpZXMgdGhlIHBhY2tldCB0cmFuc21pc3Npb24gcGF0aC4gU3BlY2lmaWNhbGx5LCBJIHNlZSBtYW5pcHVsYXRpb25zIGluIGhlYWRlciBhY2Nlc3MgYW5kIHNrYiBjbG9uaW5nL2NvdyBoZWFkIHJlLWFsbG9jYXRpb24gaGFuZGxpbmcgYXJlIHByZXNlbnQgaW4gdGhpcyBjb2RlIHBhdGguIFRoaXMgYXJlYSByZXByZXNlbnRzIGEgZ29vZCBzdXJmYWNlIGZvciB1bmNvdmVyaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgpMZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzLiBUaGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIGludGVyZXN0ZWQgaW4gYXJlOgoKKiAgIGBybGJfYXJwX3htaXRgIChzdGF0aWMsIGluIGBib25kX2FsYi5jYCkKKiAgIGBib25kX2RvX2FsYl94bWl0YCAoc3RhdGljLCBpbiBgYm9uZF9hbGIuY2ApCiogICBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgIChub24tc3RhdGljLCBpbiBgYm9uZF9hbGIuY2ApCiogICBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgIChub24tc3RhdGljLCBpbiBgYm9uZF9hbGIuY2ApCiogICBgYm9uZF9hbGJfeG1pdGAgKGVudHJ5IHBvaW50LCBub24tc3RhdGljLCBpbiBgYm9uZF9hbGIuY2ApCiogICBgYm9uZF90bGJfeG1pdGAgKGVudHJ5IHBvaW50LCBub24tc3RhdGljLCBpbiBgYm9uZF9hbGIuY2ApCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGVzZSBzeW1ib2xzIGFyZSAqbm90KiB1YmlxdWl0b3VzLiBUaGV5JiMzOTtyZSBhbGwgdmVyeSBzcGVjaWZpYyB0byB0aGUgYm9uZGluZyBBTEIvVExCIG1vZGUgdHJhbnNtaXNzaW9uIHBhdGhzLCBtYWtpbmcgdGhlbSBleGNlbGxlbnQgY2FuZGlkYXRlcy4KClJlZ2FyZGluZyBjb25maWdzLCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgQk9ORElOR2AgYW5kIGBJTkVUYCBhcmUgdGhlIGVzc2VudGlhbCBmbGFncy4gYElORVRgIGlzIGEgZGVwZW5kZW5jeSBvZiBgQk9ORElOR2AsIGFuZCBgQk9ORElOR2AgYWxzbyBkZXBlbmRzIG9uIGBUTFMgfHwgVExTX0RFVklDRT1uYCBhcyBkZWZpbmVkIGluIGBkcml2ZXJzL25ldC9LY29uZmlnYCwgYnV0IGZvciBzaW1wbGljaXR5LCBgQk9ORElOR2Agd2lsbCBzdWZmaWNlLgoKVGhlcmVmb3JlLCBteSBmaW5hbCBhbmFseXNpcywgZm9sbG93aW5nIHRoZSBwcmVzY3JpYmVkIGZvcm1hdCwgaXM6CgoqICAgKipFbmFibGVDb25maWdzOioqIGBbJiMzNDtCT05ESU5HJiMzNDssICYjMzQ7SU5FVCYjMzQ7XWAgKG9yIHNpbXBsaWZpZWQsIGBbJiMzNDtCT05ESU5HJiMzNDtdYCkKKiAgICoqRm9jdXNTeW1ib2xzOioqCiAgICAqICAgYGJvbmRfYWxiX3htaXRgCiAgICAqICAgYGJvbmRfdGxiX3htaXRgCiAgICAqICAgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YAogICAgKiAgIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAKICAgICogICBgYm9uZF9kb19hbGJfeG1pdGAKICAgICogICBgcmxiX2FycF94bWl0YAoqICAgKipXb3J0aEZ1enppbmc6KiogYHRydWVgCiogICAqKlJlYXNvbmluZzoqKiBUaGUgY29kZSBtb2RpZmllcyBwYWNrZXQgdHJhbnNtaXNzaW9uLCBoZWFkZXIgYWNjZXNzLCBhbmQgc2tiIGhhbmRsaW5nIGluIEFMQi9UTEIgbW9kZXMsIG1ha2luZyBpdCBhIHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0IGFuZCByZWFjaGFibGUgdmlhIHN5emthbGxlci1jcmVhdGVkIGJvbmQgZGV2aWNlcy4KCk9rYXksIGV2ZXJ5dGhpbmcgbG9va3MgZ29vZC4gUmVhZHkgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfYWxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF90bGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfYWxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfdGxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX2RvX2FsYl94bWl0JiMzNDssCiAgICAmIzM0O3JsYl9hcnBfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgdHJhbnNtaXNzaW9uIHBhdGhzIGluIHRoZSBib25kaW5nIGRyaXZlciBmb3IgYmFsYW5jZS1hbGIgYW5kIGJhbGFuY2UtdGxiIG1vZGVzIChib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHNrYiBoZWFkZXIgd3JpdGFiaWxpdHkgdXNpbmcgc2tiX2Nvd19oZWFkIGJlZm9yZSBtb2RpZnlpbmcgTUFDL0FSUCBoZWFkZXJzIGFuZCB1c2VzIHNrYl9ldGhfaGRyIHNhZmVseS4gVGhlIGJvbmRpbmcgZHJpdmVyIGlzIGEgc29mdHdhcmUgbmV0ZGV2IGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk9ORElORyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9uZF9hbGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3RsYl94bWl0JiMzNDssCiAgICAmIzM0O2JvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0JiMzNDssCiAgICAmIzM0O2JvbmRfeG1pdF90bGJfc2xhdmVfZ2V0JiMzNDssCiAgICAmIzM0O2JvbmRfZG9fYWxiX3htaXQmIzM0OywKICAgICYjMzQ7cmxiX2FycF94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCB0cmFuc21pc3Npb24gcGF0aHMgaW4gdGhlIGJvbmRpbmcgZHJpdmVyIGZvciBiYWxhbmNlLWFsYiBhbmQgYmFsYW5jZS10bGIgbW9kZXMgKGJvbmRfYWxiLmMpLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgc2tiIGhlYWRlciB3cml0YWJpbGl0eSB1c2luZyBza2JfY293X2hlYWQgYmVmb3JlIG1vZGlmeWluZyBNQUMvQVJQIGhlYWRlcnMgYW5kIHVzZXMgc2tiX2V0aF9oZHIgc2FmZWx5LiBUaGUgYm9uZGluZyBkcml2ZXIgaXMgYSBzb2Z0d2FyZSBuZXRkZXYgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNrYiBoZWFkZXIgbXV0YWJpbGl0eSBpbiB0aGUgYm9uZGluZyBBTEIvVExCIHRyYW5zbWl0IHBhdGhzIChkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMpLiBTcGVjaWZpY2FsbHk6XG4xLiBJdCBhZGRzIGBza2JfY293X2hlYWQoc2tiLCAwKWAgY2FsbHMgYmVmb3JlIG1vZGlmeWluZyB0aGUgc291cmNlIE1BQyBhZGRyZXNzIGluIEFSUCBwYWNrZXRzIChgcmxiX2FycF94bWl0YCkgYW5kIEV0aGVybmV0IGhlYWRlcnMgKGBib25kX2RvX2FsYl94bWl0YCksIGVuc3VyaW5nIGNsb25lZC9zaGFyZWQgc2tiIGhlYWRzIGFyZSBjb3BpZWQgYmVmb3JlIHdyaXRpbmcuXG4yLiBJdCByZWxvYWRzIHRoZSBwb2ludGVyIHRvIHRoZSBBUlAvRXRoZXJuZXQgaGVhZGVyIGFmdGVyIGBza2JfY293X2hlYWRgIHRvIGF2b2lkIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2VzLlxuMy4gSXQgY2xlYW5zIHVwIHJlZHVuZGFudCBgc2tiX3Jlc2V0X21hY19oZWFkZXIoKWAgY2FsbHMgaW4gYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCBieSB1c2luZyBgc2tiX2V0aF9oZHIoc2tiKWAuXG5cblRoZXNlIG1vZGlmaWNhdGlvbnMgbWFuYWdlIHBhY2tldCBidWZmZXIgbXV0YWJpbGl0eSBhbmQgcHJldmVudCBkYXRhIGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLXJlYWxsb2MgYnVncyBvbiBzaGFyZWQvY2xvbmVkIHNrYnMgKGlzc3VlcyBkZXRlY3RhYmxlIGJ5IEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMsIHBhZGRpbmdzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGEzNWMyNzk1MzI5NzZlYjM2MjhjYTdlNzMzNTJiY2U2NDU5YmE3OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMjI6MjU6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKaW5kZXggNjU0ZjA1MWQwMDIzOS4uNDNhYzhlMjhlNDE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwpAQCAtNjc4LDkgJiM0Mzs2NzgsMTUgQEAgc3RhdGljIHN0cnVjdCBzbGF2ZSAqcmxiX2FycF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKQogCWlmIChhcnAtJmd0O29wX2NvZGUgPT0gaHRvbnMoQVJQT1BfUkVQTFkpKSB7CiAJCS8qIHRoZSBhcnAgbXVzdCBiZSBzZW50IG9uIHRoZSBzZWxlY3RlZCByeCBjaGFubmVsICovCiAJCXR4X3NsYXZlID0gcmxiX2Nob29zZV9jaGFubmVsKHNrYiwgYm9uZCwgYXJwKTsKLQkJaWYgKHR4X3NsYXZlKQomIzQzOwkJaWYgKHR4X3NsYXZlICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhZXRoZXJfYWRkcl9lcXVhbF82NGJpdHMoYXJwLSZndDttYWNfc3JjLAomIzQzOwkJCQkJICAgICB0eF9zbGF2ZS0mZ3Q7ZGV2LSZndDtkZXZfYWRkcikpIHsKJiM0MzsJCQlpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKQomIzQzOwkJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCQlhcnAgPSAoc3RydWN0IGFycF9wa3QgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKIAkJCWJvbmRfaHdfYWRkcl9jb3B5KGFycC0mZ3Q7bWFjX3NyYywgdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIsCiAJCQkJCSAgdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7YWRkcl9sZW4pOwomIzQzOwkJfQogCQluZXRkZXZfZGJnKGJvbmQtJmd0O2RldiwgJiMzNDsoc2xhdmUgJXMpOiBTZXJ2ZXIgc2VudCBBUlAgUmVwbHkgcGFja2V0XG4mIzM0OywKIAkJCSAgIHR4X3NsYXZlID8gdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7bmFtZSA6ICYjMzQ7TlVMTCYjMzQ7KTsKIAl9IGVsc2UgaWYgKGFycC0mZ3Q7b3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSkgewpAQCAtMTM0MCw3ICYjNDM7MTM0Niw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLAogCQkJCSAgICBzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlKQogewogCXN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSAmYW1wOyhCT05EX0FMQl9JTkZPKGJvbmQpKTsKLQlzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTsKIAogCWlmICghdHhfc2xhdmUpIHsKIAkJLyogdW5iYWxhbmNlZCBvciB1bmFzc2lnbmVkLCBzZW5kIHRocm91Z2ggcHJpbWFyeSAqLwpAQCAtMTM1MSw3ICYjNDM7MTM1Niw5IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLAogCiAJaWYgKHR4X3NsYXZlICZhbXA7JmFtcDsgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7CiAJCWlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC0mZ3Q7Y3Vycl9hY3RpdmVfc2xhdmUpKSB7Ci0JCQlldGhlcl9hZGRyX2NvcHkoZXRoX2RhdGEtJmd0O2hfc291cmNlLAomIzQzOwkJCWlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpCiYjNDM7CQkJCXJldHVybiBib25kX3R4X2Ryb3AoYm9uZC0mZ3Q7ZGV2LCBza2IpOwomIzQzOwkJCWV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLSZndDtoX3NvdXJjZSwKIAkJCQkJdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIpOwogCQl9CiAKQEAgLTEzNzUsOCAmIzQzOzEzODIsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLAogCXN0cnVjdCBldGhoZHIgKmV0aF9kYXRhOwogCXUzMiBoYXNoX2luZGV4OwogCi0Jc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQlldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTsKJiM0MzsJZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpOwogCiAJLyogRG8gbm90IFRYIGJhbGFuY2UgYW55IG11bHRpY2FzdCBvciBicm9hZGNhc3QgKi8KIAlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLSZndDtoX2Rlc3QpKSB7CkBAIC0xNDI4LDggJiM0MzsxNDM0LDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKIAl1MzIgaGFzaF9pbmRleCA9IDA7CiAJaW50IGhhc2hfc2l6ZSA9IDA7CiAKLQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCWV0aF9kYXRhID0gZXRoX2hkcihza2IpOwomIzQzOwlldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7CiAKIAlzd2l0Y2ggKG50b2hzKHNrYi0mZ3Q7cHJvdG9jb2wpKSB7CiAJY2FzZSBFVEhfUF9JUDogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBKdXN0aWZpY2F0aW9uIGZvciBib25kX2FsYi5jIFBhdGNoKioKCk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYCB3YXJyYW50cyBpdHMgb3duIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgcmVxdWVzdCDigJMgZXNzZW50aWFsbHkgYSBjb2RlIHJldmlldyBmb3IgbWVtb3J5IHNhZmV0eSBpbXBsaWNhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gYW5hbHl6ZSB0aGUgcGF0Y2ggYW5kIGRldGVybWluZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSBwb3RlbnRpYWxseSBLTVNBTi1zcGVjaWZpYyBpc3N1ZXMgdGhhdCBLQVNBTiBtaWdodCBtaXNzLgoKRmlyc3QsIHRoZSByaXNrIGlzIG1pbmltYWw7IGl0JiMzOTtzIGp1c3QgUUEgb24gYSBkZXZlbG9wZXIgcGF0Y2guIFRoZSBhY3Rpb24gaXMgY2xlYXI6IHJldmlldyB0aGUgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBhY3R1YWxseSAqc2VlKiB0aGUgY29kZSwgc28gSSYjMzk7bGwgcHJvYmFibHkgcHVsbCB1cCB0aGUgZmlsZSBkaXJlY3RseSwgb3IgdXNlIGEgdG9vbCBsaWtlIGBncmVwcGVyYCB0byBleGFtaW5lIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IHNjcmVhbXMgJiMzNDtLTVNBTiBjYW5kaWRhdGUmIzM0OyDigJMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyB0aGF0IGFyZSBoaWdobHkgdGltaW5nLWRlcGVuZGVudCwgb3IgYW55dGhpbmcgdGhhdCBLTVNBTiBpcyBrbm93biB0byBleGNlbCBhdCBmaW5kaW5nLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2g7IEkmIzM5O20gaGVyZSB0byBlbnN1cmUgd2UgY2F0Y2ggdGhvc2Ugc3VidGxlIG1lbW9yeSBlcnJvcnMgdGhhdCBLQVNBTiBtaWdodCBvdmVybG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY3MDpcdFx0aWYgKGRldikge1xuIDY3MTpcdFx0XHRpZiAobmV0aWZfaXNfYW55X2JyaWRnZV9tYXN0ZXIoZGV2KSkge1xuIDY3MjpcdFx0XHRcdGRldl9wdXQoZGV2KTtcbiA2NzM6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiA2NzQ6XHRcdFx0fVxuIDY3NTpcdFx0XHRkZXZfcHV0KGRldik7XG4gNjc2Olx0XHR9XG4gNjc3Olx0XG4gNjc4Olx0XHRpZiAoYXJwLVx1MDAzZW9wX2NvZGUgPT0gaHRvbnMoQVJQT1BfUkVQTFkpKSB7XG4gNjc5Olx0XHRcdC8qIHRoZSBhcnAgbXVzdCBiZSBzZW50IG9uIHRoZSBzZWxlY3RlZCByeCBjaGFubmVsICovXG4gNjgwOlx0XHRcdHR4X3NsYXZlID0gcmxiX2Nob29zZV9jaGFubmVsKHNrYiwgYm9uZCwgYXJwKTtcbiA2ODE6XHRcdFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNlxuIDY4MjpcdFx0XHQgICAgIWV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGFycC1cdTAwM2VtYWNfc3JjLFxuIDY4MzpcdFx0XHRcdFx0XHQgICAgIHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcikpIHtcbiA2ODQ6XHRcdFx0XHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxuIDY4NTpcdFx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNjg2Olx0XHRcdFx0YXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gNjg3Olx0XHRcdFx0Ym9uZF9od19hZGRyX2NvcHkoYXJwLVx1MDAzZW1hY19zcmMsIHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcixcbiA2ODg6XHRcdFx0XHRcdFx0ICB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4pO1xuIDY4OTpcdFx0XHR9XG4gNjkwOlx0XHRcdG5ldGRldl9kYmcoYm9uZC1cdTAwM2VkZXYsIFwmIzM0OyhzbGF2ZSAlcyk6IFNlcnZlciBzZW50IEFSUCBSZXBseSBwYWNrZXRcXG5cJiMzNDssXG4gNjkxOlx0XHRcdFx0ICAgdHhfc2xhdmUgPyB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlbmFtZSA6IFwmIzM0O05VTExcJiMzNDspO1xuIDY5MjpcdFx0fSBlbHNlIGlmIChhcnAtXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSkge1xuIDY5MzpcdFx0XHQvKiBDcmVhdGUgYW4gZW50cnkgaW4gdGhlIHJ4X2hhc2h0YmwgZm9yIHRoaXMgY2xpZW50IGFzIGFcbiA2OTQ6XHRcdFx0ICogcGxhY2UgaG9sZGVyLlxuIDY5NTpcdFx0XHQgKiBXaGVuIHRoZSBhcnAgcmVwbHkgaXMgcmVjZWl2ZWQgdGhlIGVudHJ5IHdpbGwgYmUgdXBkYXRlZFxuIDY5NjpcdFx0XHQgKiB3aXRoIHRoZSBjb3JyZWN0IHVuaWNhc3QgYWRkcmVzcyBvZiB0aGUgY2xpZW50LlxuIDY5NzpcdFx0XHQgKi9cbiA2OTg6XHRcdFx0dHhfc2xhdmUgPSBybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kLCBhcnApO1xuIDY5OTpcdFxuIDcwMDpcdFx0XHQvKiBUaGUgQVJQIHJlcGx5IHBhY2tldHMgbXVzdCBiZSBkZWxheWVkIHNvIHRoYXRcbiA3MDE6XHRcdFx0ICogdGhleSBjYW4gY2FuY2VsIG91dCB0aGUgaW5mbHVlbmNlIG9mIHRoZSBBUlAgcmVxdWVzdC5cbiA3MDI6XHRcdFx0ICovXG4gNzAzOlx0XHRcdGJvbmQtXHUwMDNlYWxiX2luZm8ucmxiX3VwZGF0ZV9kZWxheV9jb3VudGVyID0gUkxCX1VQREFURV9ERUxBWTtcbiA3MDQ6XHRcbiA3MDU6XHRcdFx0LyogYXJwIHJlcXVlc3RzIGFyZSBicm9hZGNhc3QgYW5kIGFyZSBzZW50IG9uIHRoZSBwcmltYXJ5XG4gNzA2Olx0XHRcdCAqIHRoZSBhcnAgcmVxdWVzdCB3aWxsIGNvbGxhcHNlIGFsbCBjbGllbnRzIG9uIHRoZSBzdWJuZXQgdG9cbiA3MDc6XHRcdFx0ICogdGhlIHByaW1hcnkgc2xhdmUuIFdlIG11c3QgcmVnaXN0ZXIgdGhlc2UgY2xpZW50cyB0byBiZVxuIDcwODpcdFx0XHQgKiB1cGRhdGVkIHdpdGggdGhlaXIgYXNzaWduZWQgbWFjLlxuIDcwOTpcdFx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA2MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodCBwcm9jZXNzZXM6CgoqKlF1aWNrIFNjYW4gb2YgQm9uZCBUcmFuc21pdCBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRob3NlIGNvcmUgYm9uZCB0cmFuc21pdCBmdW5jdGlvbnM6IGBib25kX2RvX2FsYl94bWl0YCwgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCwgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAuIEkgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7bSBrZWVwaW5nIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhleSBmaXQgdG9nZXRoZXIsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gYWN0aXZlLWJhY2t1cCBhbmQgdHJhbnNtaXQgbG9hZCBiYWxhbmNpbmcuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHRyYW5zbWl0IHNpZGUsIHNvIHRoaXMgaXMgd2hlcmUgdGhlIGRldGFpbHMgcmVzaWRlIGFuZCB0aGUgbG9naWMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIG9mIHRoZXNlIGJvbmQgdHJhbnNtaXQgZnVuY3Rpb25zIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgZ2FwcyBvciBvdmVybGFwcywgb3IgY29uZmxpY3RzIGluIHRoZSBmbG93IGNvbnRyb2wgb3IgaG93IHRoZSBkaWZmZXJlbnQgbW9kZXMgYXJlIGhhbmRsZWQuIEdvdHRhIGtlZXAgdGhhdCBtZW50YWwgbW9kZWwgc2hhcnAhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMzNTpcdHZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxuMTMzNjpcdHtcbjEzMzc6XHRcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XG4xMzM4Olx0XG4xMzM5Olx0XHR0bGJfZGVpbml0aWFsaXplKGJvbmQpO1xuMTM0MDpcdFxuMTM0MTpcdFx0aWYgKGJvbmRfaW5mby1cdTAwM2VybGJfZW5hYmxlZClcbjEzNDI6XHRcdFx0cmxiX2RlaW5pdGlhbGl6ZShib25kKTtcbjEzNDM6XHR9XG4xMzQ0Olx0XG4xMzQ1Olx0c3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4xMzQ2Olx0XHRcdFx0XHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcbjEzNDc6XHR7XG4xMzQ4Olx0XHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuMTM0OTpcdFxuMTM1MDpcdFx0aWYgKCF0eF9zbGF2ZSkge1xuMTM1MTpcdFx0XHQvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovXG4xMzUyOlx0XHRcdHR4X3NsYXZlID0gcmN1X2RlcmVmZXJlbmNlKGJvbmQtXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpO1xuMTM1MzpcdFx0XHRpZiAoYm9uZC1cdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpXG4xMzU0Olx0XHRcdFx0Ym9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbjEzNTU6XHRcdH1cbjEzNTY6XHRcbjEzNTc6XHRcdGlmICh0eF9zbGF2ZSBcdTAwMjZcdTAwMjYgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7XG4xMzU4Olx0XHRcdGlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbjEzNTk6XHRcdFx0XHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxuMTM2MDpcdFx0XHRcdFx0cmV0dXJuIGJvbmRfdHhfZHJvcChib25kLVx1MDAzZWRldiwgc2tiKTtcbjEzNjE6XHRcdFx0XHRldGhlcl9hZGRyX2NvcHkoc2tiX2V0aF9oZHIoc2tiKS1cdTAwM2VoX3NvdXJjZSxcbjEzNjI6XHRcdFx0XHRcdFx0dHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbjEzNjM6XHRcdFx0fVxuMTM2NDpcdFxuMTM2NTpcdFx0XHRyZXR1cm4gYm9uZF9kZXZfcXVldWVfeG1pdChib25kLCBza2IsIHR4X3NsYXZlLVx1MDAzZWRldik7XG4xMzY2Olx0XHR9XG4xMzY3Olx0XG4xMzY4Olx0XHRpZiAodHhfc2xhdmUgXHUwMDI2XHUwMDI2IGJvbmQtXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKSB7XG4xMzY5Olx0XHRcdHNwaW5fbG9jayhcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4xMzcwOlx0XHRcdF9fdGxiX2NsZWFyX3NsYXZlKGJvbmQsIHR4X3NsYXZlLCAwKTtcbjEzNzE6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2Ym9uZC1cdTAwM2Vtb2RlX2xvY2spO1xuMTM3MjpcdFx0fVxuMTM3MzpcdFxuMTM3NDpcdFx0Lyogbm8gc3VpdGFibGUgaW50ZXJmYWNlLCBmcmFtZSBub3Qgc2VudCAqL1xuMTM3NTpcdFx0cmV0dXJuIGJvbmRfdHhfZHJvcChib25kLVx1MDAzZWRldiwgc2tiKTtcbjEzNzY6XHR9XG4xMzc3Olx0XG4xMzc4Olx0c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbjEzNzk6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4xMzgwOlx0e1xuMTM4MTpcdFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XG4xMzgyOlx0XHRzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YTtcbjEzODM6XHRcdHUzMiBoYXNoX2luZGV4O1xuMTM4NDpcdFxuMTM4NTpcdFx0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xuMTM4NjpcdFxuMTM4NzpcdFx0LyogRG8gbm90IFRYIGJhbGFuY2UgYW55IG11bHRpY2FzdCBvciBicm9hZGNhc3QgKi9cbjEzODg6XHRcdGlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtXHUwMDNlaF9kZXN0KSkge1xuMTM4OTpcdFx0XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuMTM5MDpcdFx0XHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuMTM5MTpcdFx0XHRcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYikpXG4xMzkyOlx0XHRcdFx0XHRicmVhaztcbjEzOTM6XHRcdFx0XHRmYWxsdGhyb3VnaDtcbjEzOTQ6XHRcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4xMzk1Olx0XHRcdFx0aGFzaF9pbmRleCA9IGJvbmRfeG1pdF9oYXNoKGJvbmQsIHNrYik7XG4xMzk2Olx0XHRcdFx0aWYgKGJvbmQtXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKSB7XG4xMzk3Olx0XHRcdFx0XHR0eF9zbGF2ZSA9IHRsYl9jaG9vc2VfY2hhbm5lbChib25kLFxuMTM5ODpcdFx0XHRcdFx0XHRcdFx0ICAgICAgaGFzaF9pbmRleCBcdTAwMjYgMHhGRixcbjEzOTk6XHRcdFx0XHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4pO1xuMTQwMDpcdFx0XHRcdH0gZWxzZSB7XG4xNDAxOlx0XHRcdFx0XHRzdHJ1Y3QgYm9uZF91cF9zbGF2ZSAqc2xhdmVzO1xuMTQwMjpcdFx0XHRcdFx0dW5zaWduZWQgaW50IGNvdW50O1xuMTQwMzpcdFxuMTQwNDpcdFx0XHRcdFx0c2xhdmVzID0gcmN1X2RlcmVmZXJlbmNlKGJvbmQtXHUwMDNldXNhYmxlX3NsYXZlcyk7XG4xNDA1Olx0XHRcdFx0XHRjb3VudCA9IHNsYXZlcyA/IFJFQURfT05DRShzbGF2ZXMtXHUwMDNlY291bnQpIDogMDtcbjE0MDY6XHRcdFx0XHRcdGlmIChsaWtlbHkoY291bnQpKVxuMTQwNzpcdFx0XHRcdFx0XHR0eF9zbGF2ZSA9IHNsYXZlcy1cdTAwM2VhcnJbaGFzaF9pbmRleCAlXG4xNDA4Olx0XHRcdFx0XHRcdFx0XHQgICAgICAgY291bnRdO1xuMTQwOTpcdFx0XHRcdH1cbjE0MTA6XHRcdFx0XHRicmVhaztcbjE0MTE6XHRcdFx0fVxuMTQxMjpcdFx0fVxuMTQxMzpcdFx0cmV0dXJuIHR4X3NsYXZlO1xuMTQxNDpcdH1cbjE0MTU6XHRcbjE0MTY6XHRuZXRkZXZfdHhfdCBib25kX3RsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbjE0MTc6XHR7XG4xNDE4Olx0XHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTtcbjE0MTk6XHRcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmU7XG4xNDIwOlx0XG4xNDIxOlx0XHR0eF9zbGF2ZSA9IGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KGJvbmQsIHNrYik7XG4xNDIyOlx0XHRyZXR1cm4gYm9uZF9kb19hbGJfeG1pdChza2IsIGJvbmQsIHR4X3NsYXZlKTtcbjE0MjM6XHR9XG4xNDI0Olx0XG4xNDI1Olx0c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbjE0MjY6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4xNDI3Olx0e1xuMTQyODpcdFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcbjE0Mjk6XHRcdHN0YXRpYyBjb25zdCBfX2JlMzIgaXBfYmNhc3QgPSBodG9ubCgweGZmZmZmZmZmKTtcbjE0MzA6XHRcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xuMTQzMTpcdFx0Y29uc3QgdTggKmhhc2hfc3RhcnQgPSBOVUxMO1xuMTQzMjpcdFx0Ym9vbCBkb190eF9iYWxhbmNlID0gdHJ1ZTtcbjE0MzM6XHRcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xuMTQzNDpcdFx0dTMyIGhhc2hfaW5kZXggPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTA2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogODQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IEVuc3VyaW5nIFdyaXRhYmxlIFNLQiBIZWFkZXJzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIGEgYm9uZGluZyBkcml2ZXIsIHNwZWNpZmljYWxseSBhcm91bmQgQWN0aXZlLUJhY2t1cCBvciBBY3RpdmUtTG9hZC1CYWxhbmNpbmcgbW9kZXMsIGFuZCBpcyBhaW1pbmcgdG8gZW5zdXJlIHRoZSBwYWNrZXRzIGFyZSBjb3JyZWN0bHkgZm9ybWF0dGVkIGJlZm9yZSBiZWluZyBzZW50IG91dC4gVGhlIGtleSBzZWVtcyB0byBiZSBtYW5hZ2luZyB0aGUgU0tCIChTb2NrZXQgQnVmZmVyKSBoZWFkZXJzIGZvciB3cml0ZSBvcGVyYXRpb25zLiBJIHNlZSBpdCBpbiB0aHJlZSBrZXkgYXJlYXM6CgoxLiAgKipgcmxiX2FycF94bWl0YCoqOiBUaGUgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gY29ycmVjdCBBUlAgcmVwbGllcy4gSWYgdGhlIHNvdXJjZSBNQUMgYWRkcmVzcyAoYGFycC0mZ3Q7bWFjX3NyY2ApIGluIGFuIEFSUCByZXBseSBkb2VzbiYjMzk7dCBtYXRjaCB0aGUgaW50ZXJmYWNlJiMzOTtzIE1BQyBhZGRyZXNzIChgdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHJgKSwgdGhlIGNvZGUgbm93IHByb2FjdGl2ZWx5IGVuc3VyZXMgdGhlIFNLQiBoZWFkZXIgaXMgd3JpdGFibGUgdXNpbmcgYHNrYl9jb3dfaGVhZChza2IsIDApYC4gVGhpcyBpcyBjcnVjaWFsIHRvIGF2b2lkIG1vZGlmeWluZyBzaGFyZWQgbWVtb3J5LiBJZiBgc2tiX2Nvd19oZWFkYCBpcyBzdWNjZXNzZnVsIChpdCByZXR1cm5zIHplcm8pLCB0aGUgQVJQIHBvaW50ZXIgaXMgcmVsb2FkZWQgdG8gcG9pbnQgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24uIEl0IHRoZW4gY29waWVzIHRoZSBjb3JyZWN0IE1BQyBhZGRyZXNzLiBUaGlzIGlzIGEgc29saWQgZGVmZW5zaXZlIHByb2dyYW1taW5nIGFwcHJvYWNoIHRvIG1ha2Ugc3VyZSB0aGUgcGFja2V0IGlzIG5vdCBjb3JydXB0ZWQgYW5kIHRoZSBBUlAgcmVwbHkgZ29lcyBvdXQgd2l0aCB0aGUgY29ycmVjdCBzb3VyY2UgTUFDLgoKMi4gICoqYGJvbmRfZG9fYWxiX3htaXRgKio6IFNpbWlsYXIgdG8gdGhlIEFSUCBjYXNlLCB0aGUgY29kZSBub3cgY2hlY2tzIGZvciB3cml0YWJpbGl0eSAqYmVmb3JlKiBjb3B5aW5nIHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgKGBoX3NvdXJjZWApIGludG8gdGhlIEV0aGVybmV0IGhlYWRlci4gYHNrYl9jb3dfaGVhZChza2IsIDApYCBpcyB1c2VkIHRvIGVuc3VyZSB0aGUgaGVhZGVyIGlzIHdyaXRlYWJsZSwgYW5kIGlmIGl0IGZhaWxzLCB0aGUgcGFja2V0IGlzIGRyb3BwZWQgd2l0aCBgYm9uZF90eF9kcm9wYC4gVGhlIHVzZSBvZiBgc2tiX2V0aF9oZHIoc2tiKWAgdG8gYWNjZXNzIHRoZSBFdGhlcm5ldCBoZWFkZXIgaXMgYWxzbyBub3RlZC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBTS0IgbWF5IGJlIHJlYWxsb2NhdGVkLCBzbyB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwuCgozLiAgKipgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgIGFuZCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgKio6IFRoaXMgc2VjdGlvbiBpcyBzaW1wbGVyLiBJdCBoYXMgcmVtb3ZlZCBgc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsgZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7YCBhbmQgbm93IHNpbXBseSByZWxpZXMgb24gYGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtgLiBUaGlzIGNoYW5nZSBpbXBsaWVzIHRoYXQgdGhlIE1BQyBoZWFkZXIgaXMgZWl0aGVyIGFscmVhZHkgc2V0ICh3aGljaCBpcyBsaWtlbHksIHNpbmNlIGl0JiMzOTtzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRyYW5zbWlzc2lvbikgb3IgdGhhdCB0aGUgZnVuY3Rpb24gY2FsbGluZyB0aGlzIGFscmVhZHkga25vd3Mgd2hlcmUgdGhlIGV0aGVybmV0IGhlYWRlciB3aWxsIGJlLiBNeSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyB0aGF0IHRoZSBkZXZlbG9wZXIgaW50ZW5kcyBgc2tiX2V0aF9oZHJgIHRvIGJlIHVzZWQgZm9yIGNvbnNpc3RlbmN5IHNpbmNlIHRoZSBwcmV2aW91cyBzZWN0aW9ucyBvZiBjb2RlIHdlcmUgbW9kaWZpZWQuIFRoaXMgYWxzbyBpbXBsaWVzIHRoYXQgdGhlIFNLQiBpcyBndWFyYW50ZWVkIHRvIGhhdmUgdGhlIGV0aGVybmV0IGhlYWRlciBvciB0aGF0IGBza2JfZXRoX2hkcmAgaGFuZGxlcyB0aGUgaW5pdGlhbCBzZXR1cCAodGhpcyBpcyB3b3J0aCBsb29raW5nIGludG8pLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYHNrYl9ldGhfaGRyYCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIHN0cnVjdCBldGhoZHIgXFwqc2tiX2V0aF9oZHImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZl9ldGhlci5oPTI1PXN0YXRpYyBpbmxpbmUgc3RydWN0IGV0aGhkciAqZXRoX2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvaWZfZXRoZXIuaC0zMi0gKi9cbmluY2x1ZGUvbGludXgvaWZfZXRoZXIuaDozMzpzdGF0aWMgaW5saW5lIHN0cnVjdCBldGhoZHIgKnNrYl9ldGhfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgtMzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDg4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBpZl9ldGhlci5oOiBVbmRlcnN0YW5kaW5nIEV0aGVybmV0JiMzOTtzIEZvdW5kYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSwgb3IgbWF5YmUgZHJpbGwgZG93biBpbnRvIGEgc3BlY2lmaWMgYXNwZWN0IG9mIEV0aGVybmV0IGZyYW1lIHN0cnVjdHVyZSwgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBwdWxsaW5nIHVwIGBpbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmhgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgZm9jdXMgb24gbGluZXMgMjAtNDAsIHdoaWNoIHVzdWFsbHkgZGVmaW5lcyB0aGUgY29yZSBFdGhlcm5ldCBoZWFkZXIgc3RydWN0dXJlLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBxdWljayByZWZyZXNoZXIgb24gdGhlIGtleSBmaWVsZHMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgYHN0cnVjdCBldGhoZHJgLCBwcm9iYWJseSB3aXRoIHRoZSBkZXN0aW5hdGlvbiBhbmQgc291cmNlIE1BQyBhZGRyZXNzZXMsIHRoZSBFdGhlclR5cGUgZmllbGQsIGFuZCBwb3RlbnRpYWxseSBzb21lIHBhZGRpbmcgb3IgcmVzZXJ2ZWQgYXJlYXMgaWYgaXQmIzM5O3MgYW4gb2xkZXIgZGVmaW5pdGlvbi4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGFueSBjb21tZW50cyB0aGF0IG1pZ2h0IGdpdmUgaGludHMgYWJvdXQgaXRzIHVzZSBvciBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGFsaWdubWVudCBjb25zaWRlcmF0aW9ucy4gVGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcmVzdGluZyBkZWZpbmVzIGluIHRoZXJlIHRvbyDigJMgcGVyaGFwcyBmb3IgY29tbW9uIEV0aGVyVHlwZSB2YWx1ZXMuIEl0JiMzOTtzIHRpbWUgdG8gcXVpY2tseSBhbmFseXplIGFuZCBzZWUgaWYgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgZGVmaW5pdGlvbnMgb2YgdGhvc2Ugc3BlY2lmaWMgc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIwOlx0I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9pZl9ldGhlci5oXHUwMDNlXG4gIDIxOlx0XG4gIDIyOlx0LyogWFg6WFg6WFg6WFg6WFg6WFggKi9cbiAgMjM6XHQjZGVmaW5lIE1BQ19BRERSX1NUUl9MRU4gKDMgKiBFVEhfQUxFTiAtIDEpXG4gIDI0Olx0XG4gIDI1Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgZXRoaGRyICpldGhfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4gIDI2Olx0e1xuICAyNzpcdFx0cmV0dXJuIChzdHJ1Y3QgZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTtcbiAgMjg6XHR9XG4gIDI5Olx0XG4gIDMwOlx0LyogUHJlZmVyIHRoaXMgdmVyc2lvbiBpbiBUWCBwYXRoLCBpbnN0ZWFkIG9mXG4gIDMxOlx0ICogc2tiX3Jlc2V0X21hY19oZWFkZXIoKSAmIzQzOyBldGhfaGRyKClcbiAgMzI6XHQgKi9cbiAgMzM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBldGhoZHIgKnNrYl9ldGhfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4gIDM0Olx0e1xuICAzNTpcdFx0cmV0dXJuIChzdHJ1Y3QgZXRoaGRyICopc2tiLVx1MDAzZWRhdGE7XG4gIDM2Olx0fVxuICAzNzpcdFxuICAzODpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGV0aGhkciAqaW5uZXJfZXRoX2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICAzOTpcdHtcbiAgNDA6XHRcdHJldHVybiAoc3RydWN0IGV0aGhkciAqKXNrYl9pbm5lcl9tYWNfaGVhZGVyKHNrYik7XG4gIDQxOlx0fVxuICA0MjpcdFxuICA0MzpcdGludCBldGhfaGVhZGVyX3BhcnNlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gIDQ0Olx0XHRcdCAgICAgdW5zaWduZWQgY2hhciAqaGFkZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTU5CgkJCQkJCQlvdXRwdXQ6IDI4OAoJCQkJCQkJdGhvdWdodHM6IDQ5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggZm9yIE5ldHdvcmsgVHJhbnNtaXQgUGF0aCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IHJldmlld2VkIHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBuZXR3b3JrIHRyYW5zbWl0IHBhdGggZm9yIGJvbmRpbmcg4oCTIEFMQi9UTEIsIHRvIGJlIHByZWNpc2UuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGhhbmRsaW5nIFNLQiAoc29ja2V0IGJ1ZmZlcikgQ29weS1vbi1Xcml0ZSBmb3Igc2hhcmVkIG9yIGNsb25lZCBwYWNrZXRzICpiZWZvcmUqIG1vZGlmeWluZyB0aGUgTUFDIGFkZHJlc3NlcyBpbiB0aGUgaGVhZGVyLiBUaGF0JiMzOTtzIGdvb2QsIHByZXZlbnRzIHRob3NlIG5hc3R5IHNoYXJlZCBidWZmZXIgbW9kaWZpY2F0aW9uIGlzc3VlcyBvciBwb2ludGVyIGludmFsaWRhdGlvbnMgYWZ0ZXIgaGVhZGVyIHJlYWxsb2NhdGlvbnMuIEl0IGFsc28gbW92ZXMgZnJvbSB0aGUgYHNrYl9yZXNldF9tYWNfaGVhZGVyKCkgJiM0MzsgZXRoX2hkcigpYCBjb21iaW5hdGlvbiB0byBqdXN0IHVzaW5nIGBza2JfZXRoX2hkcigpYCwgYXMgaXMgcHJlZmVyYWJsZSBpbiB0aGlzIFRYIGNvbnRleHQuCgpOb3csIG15IHByaW1hcnkgY29uY2VybiB3aGVuIHJldmlld2luZyBwYXRjaGVzIGxpa2UgdGhpcywgYW5kIEkmIzM5O20gc3VyZSBpdCYjMzk7cyB0aGUgc2FtZSBmb3IgYW55b25lIGluIHRoZSBzZWN1cml0eSBmaWVsZCwgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBydW4gZG93biB0aGUgY2hlY2tsaXN0OgoKMS4gICoqS2VybmVsIHRvIFVzZXIgU3BhY2UgRGF0YToqKiBObywgdGhlcmUmIzM5O3Mgbm90aGluZyBoZXJlIHRoYXQgbG9va3MgbGlrZSBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXIgc3BhY2UgdmlhIHRoaW5ncyBsaWtlIGBjb3B5X3RvX3VzZXJgIG9yIG5ldGxpbmsgYXR0cmlidXRlcy4gVGhpcyBpcyBlbnRpcmVseSBpbnRlcm5hbCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIHN0YWNrLgoyLiAgKipDb25kaXRpb25hbCBMb2dpYzoqKiBOby4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gaW50cm9kdWNlIGFueSBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcy4KMy4gICoqRGF0YSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb246KiogTm90aGluZyBjb21wbGV4IGlzIGJlaW5nIGluaXRpYWxpemVkIGhlcmUgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gVGhlIGZvY3VzIGlzIG9uICpwcmV2ZW50aW5nKiBtb2RpZmljYXRpb24gb2Ygc2hhcmVkIGJ1ZmZlcnMgdGhyb3VnaCBDT1cuCjQuICAqKkJvdW5kcy9MZW5ndGggQ2hlY2tzOioqIE5vLCBub3RoaW5nIGhlcmUgc3VnZ2VzdHMgdGhhdCB0aGlzIGlzIGludHJvZHVjaW5nIGFueSB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBib3VuZHMsIGxlbmd0aHMsIG9yIHBvdGVudGlhbGx5IGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBleGlzdGluZyBidWZmZXJzLiBUaGUgdXNlIG9mIGBza2JfY293X2hlYWRgIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBoYW5kbGUgdGhpcyBpc3N1ZS4KClNvLCAqbm8qLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEl0JiMzOTtzIHJlYWxseSBqdXN0IG1ha2luZyBzdXJlIHRoZSBwYWNrZXQgaGVhZGVycyBhcmUgc2FmZWx5IHVuc2hhcmVkIHdpdGggYHNrYl9jb3dfaGVhZGAgYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8sIGFuZCBtYWtpbmcgc3VyZSBhbGwgcG9pbnRlcnMgYXJlIGNvcnJlY3RseSByZWxvYWRlZCBhZnRlciBwb3RlbnRpYWwgcmVhbGxvY2F0aW9ucy4gQW5kIHRoYXQgS0FTQU4gc2hvdWxkIGhhbmRsZSBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gLyBPT0IgLyBVQUYgZXJyb3JzIHJlbGF0ZWQgdG8gdGhlc2UgcG90ZW50aWFsIHJlYWxsb2NhdGlvbnMuCgpDb25zZXF1ZW50bHksIGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBmYWxzZSBoZXJlLiBLTVNBTiBpcyBmb3IgY2F0Y2hpbmcgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSByZWFkcywgYW5kIHdlJiMzOTt2ZSBlc3RhYmxpc2hlZCB0aGF0IHRoZSBwYXRjaCBpdHNlbGYgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueS4gS0FTQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBkZWFscyB3aXRoIGEgYnJvYWRlciBzZXQgb2YgbWVtb3J5IGVycm9ycywgaW5jbHVkaW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24sIGFsbCBvZiB3aGljaCBjb3VsZCB0aGVvcmV0aWNhbGx5IGFyaXNlIGZyb20gaW5jb3JyZWN0IGhhbmRsaW5nIG9mIGBza2JgIHJlYWxsb2NhdGlvbnMgb3IgcG9pbnRlciBpbnZhbGlkYXRpb25zLiBLQVNBTiYjMzk7cyBicm9hZGVyIHNjb3BlIG1ha2VzIGl0IG1vcmUgYXBwcm9wcmlhdGUgZm9yIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8sIGFzIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIG9yIGV2ZW4gcmVsZXZhbnQsIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBza2IgaGVhZGVyIG11dGFiaWxpdHkgaW4gdGhlIGJvbmRpbmcgQUxCL1RMQiB0cmFuc21pdCBwYXRocyAoZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgYWRkcyBgc2tiX2Nvd19oZWFkKHNrYiwgMClgIGNhbGxzIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHNvdXJjZSBNQUMgYWRkcmVzcyBpbiBBUlAgcGFja2V0cyAoYHJsYl9hcnBfeG1pdGApIGFuZCBFdGhlcm5ldCBoZWFkZXJzIChgYm9uZF9kb19hbGJfeG1pdGApLCBlbnN1cmluZyBjbG9uZWQvc2hhcmVkIHNrYiBoZWFkcyBhcmUgY29waWVkIGJlZm9yZSB3cml0aW5nLlxuMi4gSXQgcmVsb2FkcyB0aGUgcG9pbnRlciB0byB0aGUgQVJQL0V0aGVybmV0IGhlYWRlciBhZnRlciBgc2tiX2Nvd19oZWFkYCB0byBhdm9pZCBzdGFsZSBwb2ludGVyIGRlcmVmZXJlbmNlcy5cbjMuIEl0IGNsZWFucyB1cCByZWR1bmRhbnQgYHNrYl9yZXNldF9tYWNfaGVhZGVyKClgIGNhbGxzIGluIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgYnkgdXNpbmcgYHNrYl9ldGhfaGRyKHNrYilgLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIG1hbmFnZSBwYWNrZXQgYnVmZmVyIG11dGFiaWxpdHkgYW5kIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1yZWFsbG9jIGJ1Z3Mgb24gc2hhcmVkL2Nsb25lZCBza2JzIChpc3N1ZXMgZGV0ZWN0YWJsZSBieSBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBwYWRkaW5ncywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBza2IgaGVhZGVyIG11dGFiaWxpdHkgaW4gdGhlIGJvbmRpbmcgQUxCL1RMQiB0cmFuc21pdCBwYXRocyAoZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgYWRkcyBgc2tiX2Nvd19oZWFkKHNrYiwgMClgIGNhbGxzIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHNvdXJjZSBNQUMgYWRkcmVzcyBpbiBBUlAgcGFja2V0cyAoYHJsYl9hcnBfeG1pdGApIGFuZCBFdGhlcm5ldCBoZWFkZXJzIChgYm9uZF9kb19hbGJfeG1pdGApLCBlbnN1cmluZyBjbG9uZWQvc2hhcmVkIHNrYiBoZWFkcyBhcmUgY29waWVkIGJlZm9yZSB3cml0aW5nLlxuMi4gSXQgcmVsb2FkcyB0aGUgcG9pbnRlciB0byB0aGUgQVJQL0V0aGVybmV0IGhlYWRlciBhZnRlciBgc2tiX2Nvd19oZWFkYCB0byBhdm9pZCBzdGFsZSBwb2ludGVyIGRlcmVmZXJlbmNlcy5cbjMuIEl0IGNsZWFucyB1cCByZWR1bmRhbnQgYHNrYl9yZXNldF9tYWNfaGVhZGVyKClgIGNhbGxzIGluIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgYnkgdXNpbmcgYHNrYl9ldGhfaGRyKHNrYilgLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIG1hbmFnZSBwYWNrZXQgYnVmZmVyIG11dGFiaWxpdHkgYW5kIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1yZWFsbG9jIGJ1Z3Mgb24gc2hhcmVkL2Nsb25lZCBza2JzIChpc3N1ZXMgZGV0ZWN0YWJsZSBieSBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBwYWRkaW5ncywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6MjU6MTIuNzkyMDM5NzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTg0MDg3MjkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCT05ESU5HXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm9uZF9hbGJfeG1pdFwiLFxuICAgIFwiYm9uZF90bGJfeG1pdFwiLFxuICAgIFwiYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0XCIsXG4gICAgXCJib25kX2RvX2FsYl94bWl0XCIsXG4gICAgXCJybGJfYXJwX3htaXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBza2IgaGVhZGVyIG11dGFiaWxpdHkgaW4gdGhlIGJvbmRpbmcgQUxCL1RMQiB0cmFuc21pdCBwYXRocyAoZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IGFkZHMgYHNrYl9jb3dfaGVhZChza2IsIDApYCBjYWxscyBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgaW4gQVJQIHBhY2tldHMgKGBybGJfYXJwX3htaXRgKSBhbmQgRXRoZXJuZXQgaGVhZGVycyAoYGJvbmRfZG9fYWxiX3htaXRgKSwgZW5zdXJpbmcgY2xvbmVkL3NoYXJlZCBza2IgaGVhZHMgYXJlIGNvcGllZCBiZWZvcmUgd3JpdGluZy5cXG4yLiBJdCByZWxvYWRzIHRoZSBwb2ludGVyIHRvIHRoZSBBUlAvRXRoZXJuZXQgaGVhZGVyIGFmdGVyIGBza2JfY293X2hlYWRgIHRvIGF2b2lkIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2VzLlxcbjMuIEl0IGNsZWFucyB1cCByZWR1bmRhbnQgYHNrYl9yZXNldF9tYWNfaGVhZGVyKClgIGNhbGxzIGluIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgYnkgdXNpbmcgYHNrYl9ldGhfaGRyKHNrYilgLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgbWFuYWdlIHBhY2tldCBidWZmZXIgbXV0YWJpbGl0eSBhbmQgcHJldmVudCBkYXRhIGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLXJlYWxsb2MgYnVncyBvbiBzaGFyZWQvY2xvbmVkIHNrYnMgKGlzc3VlcyBkZXRlY3RhYmxlIGJ5IEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMsIHBhZGRpbmdzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCB0cmFuc21pc3Npb24gcGF0aHMgaW4gdGhlIGJvbmRpbmcgZHJpdmVyIGZvciBiYWxhbmNlLWFsYiBhbmQgYmFsYW5jZS10bGIgbW9kZXMgKGJvbmRfYWxiLmMpLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgc2tiIGhlYWRlciB3cml0YWJpbGl0eSB1c2luZyBza2JfY293X2hlYWQgYmVmb3JlIG1vZGlmeWluZyBNQUMvQVJQIGhlYWRlcnMgYW5kIHVzZXMgc2tiX2V0aF9oZHIgc2FmZWx5LiBUaGUgYm9uZGluZyBkcml2ZXIgaXMgYSBzb2Z0d2FyZSBuZXRkZXYgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNToxMi43OTIwNDUwNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMzNjQ0NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGEzNWMyNzk1MzI5NzZlYjM2MjhjYTdlNzMzNTJiY2U2NDU5YmE3OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDIyOjI1OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xcbmluZGV4IDY1NGYwNTFkMDAyMzkuLjQzYWM4ZTI4ZTQxODIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXFxuQEAgLTY3OCw5ICs2NzgsMTUgQEAgc3RhdGljIHN0cnVjdCBzbGF2ZSAqcmxiX2FycF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxcbiBcXHRpZiAoYXJwLVxcdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUExZKSkge1xcbiBcXHRcXHQvKiB0aGUgYXJwIG11c3QgYmUgc2VudCBvbiB0aGUgc2VsZWN0ZWQgcnggY2hhbm5lbCAqL1xcbiBcXHRcXHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XFxuLVxcdFxcdGlmICh0eF9zbGF2ZSlcXG4rXFx0XFx0aWYgKHR4X3NsYXZlIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhZXRoZXJfYWRkcl9lcXVhbF82NGJpdHMoYXJwLVxcdTAwM2VtYWNfc3JjLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHR4X3NsYXZlLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyKSkge1xcbitcXHRcXHRcXHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0XFx0YXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIFxcdFxcdFxcdGJvbmRfaHdfYWRkcl9jb3B5KGFycC1cXHUwMDNlbWFjX3NyYywgdHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgdHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbitcXHRcXHR9XFxuIFxcdFxcdG5ldGRldl9kYmcoYm9uZC1cXHUwMDNlZGV2LCBcXFwiKHNsYXZlICVzKTogU2VydmVyIHNlbnQgQVJQIFJlcGx5IHBhY2tldFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgdHhfc2xhdmUgPyB0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lIDogXFxcIk5VTExcXFwiKTtcXG4gXFx0fSBlbHNlIGlmIChhcnAtXFx1MDAzZW9wX2NvZGUgPT0gaHRvbnMoQVJQT1BfUkVRVUVTVCkpIHtcXG5AQCAtMTM0MCw3ICsxMzQ2LDYgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlKVxcbiB7XFxuIFxcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xcbi1cXHRzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtcXG4gXFxuIFxcdGlmICghdHhfc2xhdmUpIHtcXG4gXFx0XFx0LyogdW5iYWxhbmNlZCBvciB1bmFzc2lnbmVkLCBzZW5kIHRocm91Z2ggcHJpbWFyeSAqL1xcbkBAIC0xMzUxLDcgKzEzNTYsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4gXFxuIFxcdGlmICh0eF9zbGF2ZSBcXHUwMDI2XFx1MDAyNiBib25kX3NsYXZlX2Nhbl90eCh0eF9zbGF2ZSkpIHtcXG4gXFx0XFx0aWYgKHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVxcdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcXG4tXFx0XFx0XFx0ZXRoZXJfYWRkcl9jb3B5KGV0aF9kYXRhLVxcdTAwM2VoX3NvdXJjZSxcXG4rXFx0XFx0XFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGJvbmRfdHhfZHJvcChib25kLVxcdTAwM2VkZXYsIHNrYik7XFxuK1xcdFxcdFxcdGV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLVxcdTAwM2VoX3NvdXJjZSxcXG4gXFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xMzc1LDggKzEzODIsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbiBcXHRzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YTtcXG4gXFx0dTMyIGhhc2hfaW5kZXg7XFxuIFxcbi1cXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbi1cXHRldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtcXG4rXFx0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xcbiBcXG4gXFx0LyogRG8gbm90IFRYIGJhbGFuY2UgYW55IG11bHRpY2FzdCBvciBicm9hZGNhc3QgKi9cXG4gXFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cXHUwMDNlaF9kZXN0KSkge1xcbkBAIC0xNDI4LDggKzE0MzQsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbiBcXHR1MzIgaGFzaF9pbmRleCA9IDA7XFxuIFxcdGludCBoYXNoX3NpemUgPSAwO1xcbiBcXG4tXFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4tXFx0ZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XFxuK1xcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcXG4gXFxuIFxcdHN3aXRjaCAobnRvaHMoc2tiLVxcdTAwM2Vwcm90b2NvbCkpIHtcXG4gXFx0Y2FzZSBFVEhfUF9JUDoge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNToxMy4zMjYyOTc5ODlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMwMDMzMjU2Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2FsYl94bWl0XCIsXG4gICAgXCJib25kX3RsYl94bWl0XCIsXG4gICAgXCJib25kX3htaXRfYWxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfZG9fYWxiX3htaXRcIixcbiAgICBcInJsYl9hcnBfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCB0cmFuc21pc3Npb24gcGF0aHMgaW4gdGhlIGJvbmRpbmcgZHJpdmVyIGZvciBiYWxhbmNlLWFsYiBhbmQgYmFsYW5jZS10bGIgbW9kZXMgKGJvbmRfYWxiLmMpLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgc2tiIGhlYWRlciB3cml0YWJpbGl0eSB1c2luZyBza2JfY293X2hlYWQgYmVmb3JlIG1vZGlmeWluZyBNQUMvQVJQIGhlYWRlcnMgYW5kIHVzZXMgc2tiX2V0aF9oZHIgc2FmZWx5LiBUaGUgYm9uZGluZyBkcml2ZXIgaXMgYSBzb2Z0d2FyZSBuZXRkZXYgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRhMzVjMjc5NTMyOTc2ZWIzNjI4Y2E3ZTczMzUyYmNlNjQ1OWJhNzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDIyOjI1OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG5pbmRleCA2NTRmMDUxZDAwMjM5Li40M2FjOGUyOGU0MTgyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbkBAIC02NzgsOSArNjc4LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnJsYl9hcnBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcdGlmIChhcnAtXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVBMWSkpIHtcbiBcdFx0LyogdGhlIGFycCBtdXN0IGJlIHNlbnQgb24gdGhlIHNlbGVjdGVkIHJ4IGNoYW5uZWwgKi9cbiBcdFx0dHhfc2xhdmUgPSBybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kLCBhcnApO1xuLVx0XHRpZiAodHhfc2xhdmUpXG4rXHRcdGlmICh0eF9zbGF2ZSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFldGhlcl9hZGRyX2VxdWFsXzY0Yml0cyhhcnAtXHUwMDNlbWFjX3NyYyxcbitcdFx0XHRcdFx0ICAgICB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpKSB7XG4rXHRcdFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcbitcdFx0XHRcdHJldHVybiBOVUxMO1xuK1x0XHRcdGFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0XHRcdGJvbmRfaHdfYWRkcl9jb3B5KGFycC1cdTAwM2VtYWNfc3JjLCB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsXG4gXHRcdFx0XHRcdCAgdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuKTtcbitcdFx0fVxuIFx0XHRuZXRkZXZfZGJnKGJvbmQtXHUwMDNlZGV2LCBcIihzbGF2ZSAlcyk6IFNlcnZlciBzZW50IEFSUCBSZXBseSBwYWNrZXRcXG5cIixcbiBcdFx0XHQgICB0eF9zbGF2ZSA/IHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VuYW1lIDogXCJOVUxMXCIpO1xuIFx0fSBlbHNlIGlmIChhcnAtXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSkge1xuQEAgLTEzNDAsNyArMTM0Niw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUpXG4ge1xuIFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcbi1cdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xuIFxuIFx0aWYgKCF0eF9zbGF2ZSkge1xuIFx0XHQvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovXG5AQCAtMTM1MSw3ICsxMzU2LDkgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXG4gXHRpZiAodHhfc2xhdmUgXHUwMDI2XHUwMDI2IGJvbmRfc2xhdmVfY2FuX3R4KHR4X3NsYXZlKSkge1xuIFx0XHRpZiAodHhfc2xhdmUgIT0gcmN1X2FjY2Vzc19wb2ludGVyKGJvbmQtXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XG4tXHRcdFx0ZXRoZXJfYWRkcl9jb3B5KGV0aF9kYXRhLVx1MDAzZWhfc291cmNlLFxuK1x0XHRcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXG4rXHRcdFx0XHRyZXR1cm4gYm9uZF90eF9kcm9wKGJvbmQtXHUwMDNlZGV2LCBza2IpO1xuK1x0XHRcdGV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLVx1MDAzZWhfc291cmNlLFxuIFx0XHRcdFx0XHR0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFx0XHR9XG4gXG5AQCAtMTM3NSw4ICsxMzgyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xuIFx0dTMyIGhhc2hfaW5kZXg7XG4gXG4tXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuLVx0ZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XG4rXHRldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7XG4gXG4gXHQvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqL1xuIFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cdTAwM2VoX2Rlc3QpKSB7XG5AQCAtMTQyOCw4ICsxNDM0LDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcdHUzMiBoYXNoX2luZGV4ID0gMDtcbiBcdGludCBoYXNoX3NpemUgPSAwO1xuIFxuLVx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbi1cdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xuK1x0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xuIFxuIFx0c3dpdGNoIChudG9ocyhza2ItXHUwMDNlcHJvdG9jb2wpKSB7XG4gXHRjYXNlIEVUSF9QX0lQOiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNToxMy4zMjYyOTk1MDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzY0OTY3NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQm9uZGluZyBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhlIGZpbGUgaW1wYWN0ZWQgaXMgYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AuIFRoYXQncyB3aGVyZSB0aGUgQWN0aXZlLUJhY2t1cCBMb2FkIEJhbGFuY2luZyBtb2R1bGUgcmVzaWRlcywgc28gaXQgcGlxdWVzIG15IGludGVyZXN0LiBOb3csIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgYXJlIGBybGJfYXJwX3htaXRgLCBgYm9uZF9kb19hbGJfeG1pdGAsIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAsIGFuZCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLiBLbm93aW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGFsbG93IG1lIHRvIHRyYWNrIHRoZSBjaGFuZ2VzIGluIHRoZWlyIGNvbnRleHQuXG5cbk9mIGNvdXJzZSwgdGhlIGJvbmRpbmcgZHJpdmVyIGl0c2VsZiwgYSBzb2Z0d2FyZSBuZXRkZXYgZHJpdmVyLCBpcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwgbmV0d29yayBzdGFjaywgYW5kIGl0J3MgbG9jYXRlZCBpbiB0aGUgYGRyaXZlcnMvbmV0L2JvbmRpbmcvYCBkaXJlY3RvcnkuIFRoYXQncyBnb29kOyBJIGNhbiBxdWlja2x5IGFjY2VzcyBpdC4gQmVpbmcgYWJsZSB0byBjb25maWd1cmUgYW5kIHRlc3QgaXQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciB1c2luZyBzeXprYWxsZXIgaXMgY3J1Y2lhbCDigJMgSSBjYW4gaW1tZWRpYXRlbHkgdGhpbmsgb2YgaG93IHRoaXMgYWZmZWN0cyBteSBhdXRvbWF0ZWQgdGVzdGluZyBwcm9jZWR1cmVzLiBBbmQgb2YgY291cnNlLCB0aGUgbmV0bGluay9pcHJvdXRlMiBpbnRlcmZhY2UgKGUuZy4sIGBpcCBsaW5rIGFkZCBib25kMCB0eXBlIGJvbmQgbW9kZSBiYWxhbmNlLWFsYmAgLyBgYmFsYW5jZS10bGJgKSBpcyBob3cgSSB3b3VsZCBpbnRlcmFjdCB3aXRoIGl0LCB3aGljaCBpcyBlc3NlbnRpYWwgdG8gYmVhciBpbiBtaW5kLlxuXG5CZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGNvbmZsaWN0IHdpdGggYW55IG90aGVyIGZlYXR1cmVzIEkgZGVwZW5kIG9uLiBUaGVuLCBJJ2xsIG5lZWQgdG8gdXNlIG91ciBlc3RhYmxpc2hlZCB0b29scyB0byBkbyBhIHByb3BlciBjb2RlIGluc3BlY3Rpb24uIExldCdzIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjYzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6MjU6MTkuMDkxMjY5MjI2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzOTkyMDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJPTkRJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlLTUtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19CT05ESU5HKSArPSBib25kaW5nLm9cXG5kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlLTctXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTEyNjY9dm9pZCBib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X2FjdGl2ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTMzMi1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjEzMzM6XFx0XFx0XFx0Y2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9CT05ESU5HX0ZBSUxPVkVSLCBib25kLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTMzNC1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTg4OD1pbnQgYm9uZF9lbnNsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjA5NC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjIwOTU6XFx0c2xhdmVfZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9CT05ESU5HO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjA5Ni1cXHQvKiBpbml0aWFsaXplIHNsYXZlIHN0YXRzICovXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTIzNzUtXFx0aWYgKCFuZXRpZl9pc19ib25kX21hc3RlcihzbGF2ZV9kZXYpKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MjM3NjpcXHRcXHRzbGF2ZV9kZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNj0gfklGRl9CT05ESU5HO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjM3Ny1cXHRkZXZfY2xvc2Uoc2xhdmVfZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MjQyNT1zdGF0aWMgaW50IF9fYm9uZF9yZWxlYXNlX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTI1OTQtXFx0aWYgKCFuZXRpZl9pc19ib25kX21hc3RlcihzbGF2ZV9kZXYpKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MjU5NTpcXHRcXHRzbGF2ZV9kZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNj0gfklGRl9CT05ESU5HO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjU5Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDA2OD1zdGF0aWMgaW50IGJvbmRfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDA3NS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQwNzY6XFx0aWYgKCEoZXZlbnRfZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX0JPTkRJTkcpKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDA3Ny1cXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU5OTI9dm9pZCBib25kX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjAxNC1cXHRib25kX2Rldi1cXHUwMDNlZmxhZ3MgfD0gSUZGX01BU1RFUjtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYwMTU6XFx0Ym9uZF9kZXYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX0JPTkRJTkcgfCBJRkZfVU5JQ0FTVF9GTFQgfCBJRkZfTk9fUVVFVUU7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDE2LVxcdGJvbmRfZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjY9IH4oSUZGX1hNSVRfRFNUX1JFTEVBU0UgfCBJRkZfVFhfU0tCX1NIQVJJTkcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNToxOS4xNTUyNjY1MDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzc4MDI1NjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBCb25kaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIG5ldHdvcmsgYm9uZGluZy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgYGRyaXZlcnMvbmV0L2JvbmRpbmcvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBnby10byBwbGFjZSBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gSSdsbCBiZSBhYmxlIHRvIHNlZSB0aGUgcmVsZXZhbnQgYENPTkZJR19gIG9wdGlvbnMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlLCBhbmQgbWF5YmUgZXZlbiBzb21lIHVzZWZ1bCBoZWxwIHRleHQgcmlnaHQgb2ZmIHRoZSBiYXQuIFRoaXMgaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIHNvbGlkIG92ZXJ2aWV3IGJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZS4gVGltZSB0byBuYXZpZ2F0ZSB0aGUgZmlsZSBzeXN0ZW0gYW5kIHN0YXJ0IHBva2luZyBhcm91bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMDYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNToyMC45MzMyOTQ4MjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MDg1NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCT05ESU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9Mzk9aWYgTkVUX0NPUkVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDE6Y29uZmlnIEJPTkRJTkdcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNToyMS4wNzczODUyMjVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjUxNzA1NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSBwcm9jZXNzaW5nIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgQk9ORElORyBLY29uZmlnIEVudHJ5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBib25kaW5nIGRyaXZlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBnb2luZyB0byBuYXZpZ2F0ZSBvdmVyIHRvIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aGUgYEJPTkRJTkdgIHNlY3Rpb24sIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzOS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIHRoZSBjb25maWd1cmFibGUgZmVhdHVyZXMgcmVsYXRlZCB0byBsaW5rIGFnZ3JlZ2F0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBhdmFpbGFibGUgYm9uZGluZyBtb2RlcywgYW55IGhhcmR3YXJlIGRlcGVuZGVuY2llcywgYW5kIHRoZSB0eXBpY2FsIGRlZmF1bHQgc2V0dGluZ3MuIEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBhZGp1c3QgdGhlaXIgYm9uZGluZyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI2NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjIzLjMyOTA5MzM4NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzksXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzk6XFx0aWYgTkVUX0NPUkVcXG4gIDQwOlxcdFxcbiAgNDE6XFx0Y29uZmlnIEJPTkRJTkdcXG4gIDQyOlxcdFxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcbiAgNDM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cXG4gIDQ1OlxcdFxcdGhlbHBcXG4gIDQ2OlxcdFxcdCAgU2F5ICdZJyBvciAnTScgaWYgeW91IHdpc2ggdG8gYmUgYWJsZSB0byAnYm9uZCcgbXVsdGlwbGUgRXRoZXJuZXRcXG4gIDQ3OlxcdFxcdCAgQ2hhbm5lbHMgdG9nZXRoZXIuIFRoaXMgaXMgY2FsbGVkICdFdGhlcmNoYW5uZWwnIGJ5IENpc2NvLFxcbiAgNDg6XFx0XFx0ICAnVHJ1bmtpbmcnIGJ5IFN1biwgODAyLjNhZCBieSB0aGUgSUVFRSwgYW5kICdCb25kaW5nJyBpbiBMaW51eC5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBUaGUgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGJvbmRpbmcgbW9kZXMgdG8gYWxsb3cgZm9yIGJvdGggaGlnaFxcbiAgNTE6XFx0XFx0ICBwZXJmb3JtYW5jZSBhbmQgaGlnaCBhdmFpbGFiaWxpdHkgb3BlcmF0aW9uLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIFJlZmVyIHRvIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnJzdFxcdTAwM2UgZm9yIG1vcmVcXG4gIDU0OlxcdFxcdCAgaW5mb3JtYXRpb24uXFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgNTc6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBib25kaW5nLlxcbiAgNTg6XFx0XFxuICA1OTpcXHRjb25maWcgRFVNTVlcXG4gIDYwOlxcdFxcdHRyaXN0YXRlIFxcXCJEdW1teSBuZXQgZHJpdmVyIHN1cHBvcnRcXFwiXFxuICA2MTpcXHRcXHRoZWxwXFxuICA2MjpcXHRcXHQgIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBiaXQtYnVja2V0IGRldmljZSAoaS5lLiB0cmFmZmljIHlvdSBzZW5kIHRvXFxuICA2MzpcXHRcXHQgIHRoaXMgZGV2aWNlIGlzIGNvbnNpZ25lZCBpbnRvIG9ibGl2aW9uKSB3aXRoIGEgY29uZmlndXJhYmxlIElQXFxuICA2NDpcXHRcXHQgIGFkZHJlc3MuIEl0IGlzIG1vc3QgY29tbW9ubHkgdXNlZCBpbiBvcmRlciB0byBtYWtlIHlvdXIgY3VycmVudGx5XFxuICA2NTpcXHRcXHQgIGluYWN0aXZlIFNMSVAgYWRkcmVzcyBzZWVtIGxpa2UgYSByZWFsIGFkZHJlc3MgZm9yIGxvY2FsIHByb2dyYW1zLlxcbiAgNjY6XFx0XFx0ICBJZiB5b3UgdXNlIFNMSVAgb3IgUFBQLCB5b3UgbWlnaHQgd2FudCB0byBzYXkgWSBoZXJlLiBJdCB3b24ndFxcbiAgNjc6XFx0XFx0ICBlbmxhcmdlIHlvdXIga2VybmVsLiBXaGF0IGEgZGVhbC4gUmVhZCBhYm91dCBpdCBpbiB0aGUgTmV0d29ya1xcbiAgNjg6XFx0XFx0ICBBZG1pbmlzdHJhdG9yJ3MgR3VpZGUsIGF2YWlsYWJsZSBmcm9tXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjIzLjMyOTE2OTI4NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxODE1NDA3MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGluIGBib25kX2FsYi5jYC4gTGV0J3MgZGlnIGluOlxuXG4qKkRpdmluZyBpbnRvIGBib25kX2FsYi5jYCBmb3Igc29tZSB0YXJnZXRlZCBpbnNwZWN0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nLCBsZXQncyB6ZXJvIGluIG9uIGBib25kX2FsYi5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgYSBmZXcgc3BlY2lmaWMgc3BvdHMuIE15IGd1dCBmZWVsaW5nIGlzIHRlbGxpbmcgbWUgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIGludGVyZXN0aW5nIGhhcHBlbmluZyBvciBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBhcm91bmQgbGluZXMgNjc4LCAxMzQwLCAxMzc1LCBhbmQgMTQyOC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQncyBnb2luZyBvbiBpbiB0aGF0IGFyZWEsIHNvIEknbGwgYmUgbG9va2luZyB0byBzZWUgd2hhdCBraW5kIG9mIG9wZXJhdGlvbnMgYXJlIGJlaW5nIGRvbmUgdGhlcmUsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byB0aGUgaW50ZXJhY3Rpb25zIG9mIG1lbW9yeSBvciBzeXN0ZW0gY2FsbHMuIFByb2JhYmx5IHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBib25kaW5nIHByb2Nlc3MuIEknbGwgYmUgcGFydGljdWxhcmx5IGtlZW4gdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGVycm9yIGNvbmRpdGlvbnMgb3IgZWRnZSBjYXNlcyBhcm91bmQgdGhvc2UgYXJlYXMuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgdmFyaWFibGVzIG9yIGZ1bmN0aW9ucyBpbiB1c2Ugb24gdGhvc2UgbGluZXMgYW5kIHdoYXQgdGhlIG92ZXJhbGwgaW50ZW50aW9uIG9mIHRoZSBjb2RlIGlzLiBVbHRpbWF0ZWx5LCBJJ20gbG9va2luZyBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgYmUgb3B0aW1pemVkIG9yLCB3b3JzZSwgaW50cm9kdWNlIGJ1Z3MuIFRoZXNlIGxpbmVzIGFyZSBsaWtlbHkgY3JpdGljYWwgdG8gdGhlIHN0YWJpbGl0eSBvZiB0aGUgYm9uZGluZyBmdW5jdGlvbiwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgcnVubmluZyBzbW9vdGhseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkyNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6MjU6MjcuNTEwNzEyOTE2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjcwOlxcdFxcdGlmIChkZXYpIHtcXG4gNjcxOlxcdFxcdFxcdGlmIChuZXRpZl9pc19hbnlfYnJpZGdlX21hc3RlcihkZXYpKSB7XFxuIDY3MjpcXHRcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuIDY3MzpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjc0OlxcdFxcdFxcdH1cXG4gNjc1OlxcdFxcdFxcdGRldl9wdXQoZGV2KTtcXG4gNjc2OlxcdFxcdH1cXG4gNjc3OlxcdFxcbiA2Nzg6XFx0XFx0aWYgKGFycC1cXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVBMWSkpIHtcXG4gNjc5OlxcdFxcdFxcdC8qIHRoZSBhcnAgbXVzdCBiZSBzZW50IG9uIHRoZSBzZWxlY3RlZCByeCBjaGFubmVsICovXFxuIDY4MDpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XFxuIDY4MTpcXHRcXHRcXHRpZiAodHhfc2xhdmUgXFx1MDAyNlxcdTAwMjZcXG4gNjgyOlxcdFxcdFxcdCAgICAhZXRoZXJfYWRkcl9lcXVhbF82NGJpdHMoYXJwLVxcdTAwM2VtYWNfc3JjLFxcbiA2ODM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcikpIHtcXG4gNjg0OlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXFxuIDY4NTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjg2OlxcdFxcdFxcdFxcdGFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiA2ODc6XFx0XFx0XFx0XFx0Ym9uZF9od19hZGRyX2NvcHkoYXJwLVxcdTAwM2VtYWNfc3JjLCB0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcixcXG4gNjg4OlxcdFxcdFxcdFxcdFxcdFxcdCAgdHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbiA2ODk6XFx0XFx0XFx0fVxcbiA2OTA6XFx0XFx0XFx0bmV0ZGV2X2RiZyhib25kLVxcdTAwM2VkZXYsIFxcXCIoc2xhdmUgJXMpOiBTZXJ2ZXIgc2VudCBBUlAgUmVwbHkgcGFja2V0XFxcXG5cXFwiLFxcbiA2OTE6XFx0XFx0XFx0XFx0ICAgdHhfc2xhdmUgPyB0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lIDogXFxcIk5VTExcXFwiKTtcXG4gNjkyOlxcdFxcdH0gZWxzZSBpZiAoYXJwLVxcdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUVVFU1QpKSB7XFxuIDY5MzpcXHRcXHRcXHQvKiBDcmVhdGUgYW4gZW50cnkgaW4gdGhlIHJ4X2hhc2h0YmwgZm9yIHRoaXMgY2xpZW50IGFzIGFcXG4gNjk0OlxcdFxcdFxcdCAqIHBsYWNlIGhvbGRlci5cXG4gNjk1OlxcdFxcdFxcdCAqIFdoZW4gdGhlIGFycCByZXBseSBpcyByZWNlaXZlZCB0aGUgZW50cnkgd2lsbCBiZSB1cGRhdGVkXFxuIDY5NjpcXHRcXHRcXHQgKiB3aXRoIHRoZSBjb3JyZWN0IHVuaWNhc3QgYWRkcmVzcyBvZiB0aGUgY2xpZW50LlxcbiA2OTc6XFx0XFx0XFx0ICovXFxuIDY5ODpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XFxuIDY5OTpcXHRcXG4gNzAwOlxcdFxcdFxcdC8qIFRoZSBBUlAgcmVwbHkgcGFja2V0cyBtdXN0IGJlIGRlbGF5ZWQgc28gdGhhdFxcbiA3MDE6XFx0XFx0XFx0ICogdGhleSBjYW4gY2FuY2VsIG91dCB0aGUgaW5mbHVlbmNlIG9mIHRoZSBBUlAgcmVxdWVzdC5cXG4gNzAyOlxcdFxcdFxcdCAqL1xcbiA3MDM6XFx0XFx0XFx0Ym9uZC1cXHUwMDNlYWxiX2luZm8ucmxiX3VwZGF0ZV9kZWxheV9jb3VudGVyID0gUkxCX1VQREFURV9ERUxBWTtcXG4gNzA0OlxcdFxcbiA3MDU6XFx0XFx0XFx0LyogYXJwIHJlcXVlc3RzIGFyZSBicm9hZGNhc3QgYW5kIGFyZSBzZW50IG9uIHRoZSBwcmltYXJ5XFxuIDcwNjpcXHRcXHRcXHQgKiB0aGUgYXJwIHJlcXVlc3Qgd2lsbCBjb2xsYXBzZSBhbGwgY2xpZW50cyBvbiB0aGUgc3VibmV0IHRvXFxuIDcwNzpcXHRcXHRcXHQgKiB0aGUgcHJpbWFyeSBzbGF2ZS4gV2UgbXVzdCByZWdpc3RlciB0aGVzZSBjbGllbnRzIHRvIGJlXFxuIDcwODpcXHRcXHRcXHQgKiB1cGRhdGVkIHdpdGggdGhlaXIgYXNzaWduZWQgbWFjLlxcbiA3MDk6XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjI3LjUxMDgzODgxNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDc2NzQ4OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIGBib25kX2FsYi5jYCoqXG5cbkFscmlnaHQsIGxldCdzIGNpcmNsZSBiYWNrIGFuZCB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgYGJvbmRfYWxiLmNgIGZpbGUuIEkndmUgYmVlbiBtZWFuaW5nIHRvIHJldmlzaXQgdGhpcyBzZWN0aW9uLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBsb2dpYyBhcm91bmQgbGluZXMgMTM0MC0xNDUwLiBJIHZhZ3VlbHkgcmVjYWxsIHRoZXJlIHdhcyBzb21ldGhpbmcgdGhhdCBJIHdhbnRlZCB0byBjaGVjazsgcGVyaGFwcyBhIHN1YnRsZSBlZGdlIGNhc2Ugb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5IHRoYXQgd2FycmFudHMgYSBzZWNvbmQgZ2xhbmNlLiBJdCBjb3VsZCBiZSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2Ygc3BlY2lmaWMgYm9uZGluZyBjb25maWd1cmF0aW9ucywgb3IgbWF5YmUganVzdCBhIGNoYW5jZSB0byBjb25maXJtIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBhcmUgc3RpbGwgb3B0aW1hbCBnaXZlbiBob3cgd2UgdXNlIHRoZW0gbm93LiBJdCdzIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHN0aWxsIHNoaXAtc2hhcGUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NjAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjI5Ljk4NzU5MDg1NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNDAsXG4gIFwiTGluZUNvdW50XCI6IDExMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzQwOlxcdFxcbjEzNDE6XFx0XFx0aWYgKGJvbmRfaW5mby1cXHUwMDNlcmxiX2VuYWJsZWQpXFxuMTM0MjpcXHRcXHRcXHRybGJfZGVpbml0aWFsaXplKGJvbmQpO1xcbjEzNDM6XFx0fVxcbjEzNDQ6XFx0XFxuMTM0NTpcXHRzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4xMzQ2OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlKVxcbjEzNDc6XFx0e1xcbjEzNDg6XFx0XFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFxcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XFxuMTM0OTpcXHRcXG4xMzUwOlxcdFxcdGlmICghdHhfc2xhdmUpIHtcXG4xMzUxOlxcdFxcdFxcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cXG4xMzUyOlxcdFxcdFxcdHR4X3NsYXZlID0gcmN1X2RlcmVmZXJlbmNlKGJvbmQtXFx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKTtcXG4xMzUzOlxcdFxcdFxcdGlmIChib25kLVxcdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpXFxuMTM1NDpcXHRcXHRcXHRcXHRib25kX2luZm8tXFx1MDAzZXVuYmFsYW5jZWRfbG9hZCArPSBza2ItXFx1MDAzZWxlbjtcXG4xMzU1OlxcdFxcdH1cXG4xMzU2OlxcdFxcbjEzNTc6XFx0XFx0aWYgKHR4X3NsYXZlIFxcdTAwMjZcXHUwMDI2IGJvbmRfc2xhdmVfY2FuX3R4KHR4X3NsYXZlKSkge1xcbjEzNTg6XFx0XFx0XFx0aWYgKHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVxcdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcXG4xMzU5OlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXFxuMTM2MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gYm9uZF90eF9kcm9wKGJvbmQtXFx1MDAzZWRldiwgc2tiKTtcXG4xMzYxOlxcdFxcdFxcdFxcdGV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLVxcdTAwM2VoX3NvdXJjZSxcXG4xMzYyOlxcdFxcdFxcdFxcdFxcdFxcdHR4X3NsYXZlLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4xMzYzOlxcdFxcdFxcdH1cXG4xMzY0OlxcdFxcbjEzNjU6XFx0XFx0XFx0cmV0dXJuIGJvbmRfZGV2X3F1ZXVlX3htaXQoYm9uZCwgc2tiLCB0eF9zbGF2ZS1cXHUwMDNlZGV2KTtcXG4xMzY2OlxcdFxcdH1cXG4xMzY3OlxcdFxcbjEzNjg6XFx0XFx0aWYgKHR4X3NsYXZlIFxcdTAwMjZcXHUwMDI2IGJvbmQtXFx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xcbjEzNjk6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZib25kLVxcdTAwM2Vtb2RlX2xvY2spO1xcbjEzNzA6XFx0XFx0XFx0X190bGJfY2xlYXJfc2xhdmUoYm9uZCwgdHhfc2xhdmUsIDApO1xcbjEzNzE6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmJvbmQtXFx1MDAzZW1vZGVfbG9jayk7XFxuMTM3MjpcXHRcXHR9XFxuMTM3MzpcXHRcXG4xMzc0OlxcdFxcdC8qIG5vIHN1aXRhYmxlIGludGVyZmFjZSwgZnJhbWUgbm90IHNlbnQgKi9cXG4xMzc1OlxcdFxcdHJldHVybiBib25kX3R4X2Ryb3AoYm9uZC1cXHUwMDNlZGV2LCBza2IpO1xcbjEzNzY6XFx0fVxcbjEzNzc6XFx0XFxuMTM3ODpcXHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbjEzNzk6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMzgwOlxcdHtcXG4xMzgxOlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xcbjEzODI6XFx0XFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XFxuMTM4MzpcXHRcXHR1MzIgaGFzaF9pbmRleDtcXG4xMzg0OlxcdFxcbjEzODU6XFx0XFx0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xcbjEzODY6XFx0XFxuMTM4NzpcXHRcXHQvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqL1xcbjEzODg6XFx0XFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cXHUwMDNlaF9kZXN0KSkge1xcbjEzODk6XFx0XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuMTM5MDpcXHRcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbjEzOTE6XFx0XFx0XFx0XFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSlcXG4xMzkyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjEzOTM6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTM5NDpcXHRcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4xMzk1OlxcdFxcdFxcdFxcdGhhc2hfaW5kZXggPSBib25kX3htaXRfaGFzaChib25kLCBza2IpO1xcbjEzOTY6XFx0XFx0XFx0XFx0aWYgKGJvbmQtXFx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xcbjEzOTc6XFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUgPSB0bGJfY2hvb3NlX2NoYW5uZWwoYm9uZCxcXG4xMzk4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGhhc2hfaW5kZXggXFx1MDAyNiAweEZGLFxcbjEzOTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4pO1xcbjE0MDA6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xNDAxOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBib25kX3VwX3NsYXZlICpzbGF2ZXM7XFxuMTQwMjpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuMTQwMzpcXHRcXG4xNDA0OlxcdFxcdFxcdFxcdFxcdHNsYXZlcyA9IHJjdV9kZXJlZmVyZW5jZShib25kLVxcdTAwM2V1c2FibGVfc2xhdmVzKTtcXG4xNDA1OlxcdFxcdFxcdFxcdFxcdGNvdW50ID0gc2xhdmVzID8gUkVBRF9PTkNFKHNsYXZlcy1cXHUwMDNlY291bnQpIDogMDtcXG4xNDA2OlxcdFxcdFxcdFxcdFxcdGlmIChsaWtlbHkoY291bnQpKVxcbjE0MDc6XFx0XFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUgPSBzbGF2ZXMtXFx1MDAzZWFycltoYXNoX2luZGV4ICVcXG4xNDA4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjb3VudF07XFxuMTQwOTpcXHRcXHRcXHRcXHR9XFxuMTQxMDpcXHRcXHRcXHRcXHRicmVhaztcXG4xNDExOlxcdFxcdFxcdH1cXG4xNDEyOlxcdFxcdH1cXG4xNDEzOlxcdFxcdHJldHVybiB0eF9zbGF2ZTtcXG4xNDE0OlxcdH1cXG4xNDE1OlxcdFxcbjE0MTY6XFx0bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuMTQxNzpcXHR7XFxuMTQxODpcXHRcXHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTtcXG4xNDE5OlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmU7XFxuMTQyMDpcXHRcXG4xNDIxOlxcdFxcdHR4X3NsYXZlID0gYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcXG4xNDIyOlxcdFxcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xcbjE0MjM6XFx0fVxcbjE0MjQ6XFx0XFxuMTQyNTpcXHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbjE0MjY6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNDI3OlxcdHtcXG4xNDI4OlxcdFxcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xcbjE0Mjk6XFx0XFx0c3RhdGljIGNvbnN0IF9fYmUzMiBpcF9iY2FzdCA9IGh0b25sKDB4ZmZmZmZmZmYpO1xcbjE0MzA6XFx0XFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XFxuMTQzMTpcXHRcXHRjb25zdCB1OCAqaGFzaF9zdGFydCA9IE5VTEw7XFxuMTQzMjpcXHRcXHRib29sIGRvX3R4X2JhbGFuY2UgPSB0cnVlO1xcbjE0MzM6XFx0XFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XFxuMTQzNDpcXHRcXHR1MzIgaGFzaF9pbmRleCA9IDA7XFxuMTQzNTpcXHRcXHRpbnQgaGFzaF9zaXplID0gMDtcXG4xNDM2OlxcdFxcbjE0Mzc6XFx0XFx0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xcbjE0Mzg6XFx0XFxuMTQzOTpcXHRcXHRzd2l0Y2ggKG50b2hzKHNrYi1cXHUwMDNlcHJvdG9jb2wpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjI5Ljk4Nzc0NzM5NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzgxODI3NTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBQYWNrZXQgSGVhZGVyIE1vZGlmaWNhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIGEgcGF0Y2ggdGhhdCdzIGNydWNpYWwgZm9yIGF2b2lkaW5nIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmsgcGFja2V0IGhlYWRlcnMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBhcmUgZ29vZCBjaGFuZ2VzLiBXZSdyZSB0YWxraW5nIGFib3V0IHByZXZlbnRpbmcgbW9kaWZpY2F0aW9ucyB0byBzaGFyZWQgb3IgY2xvbmVkIGBza2JgIGhlYWRlcnMgaW4tcGxhY2UsIHdoaWNoIGlzIGEgY29tbW9uIGNhdXNlIG9mIGhhcmQtdG8tZGVidWcgaXNzdWVzLiBUaGUgdXNlIG9mIGBza2JfY293X2hlYWQoc2tiLCAwKWAgaXMgZXhhY3RseSB0aGUgcmlnaHQgYXBwcm9hY2ggdG8gZW5zdXJlIGNvcHktb24td3JpdGUgc2VtYW50aWNzIGJlZm9yZSBtYWtpbmcgY2hhbmdlcy4gSXQncyBhIGZ1bmRhbWVudGFsIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyB0ZWNobmlxdWUgaW4gdGhpcyBjb250ZXh0LlxuXG5Mb29raW5nIGF0IHRoZSBzcGVjaWZpYyBleGFtcGxlcyBwcm92aWRlZCwgaXQncyBjbGVhciB3aGF0J3MgYmVpbmcgYWRkcmVzc2VkOlxuXG4xLiAgSW4gYHJsYl9hcnBfeG1pdGAsIHdlIGhhdmUgdGhlIGBza2JfY293X2hlYWRgIGNoZWNrIGJlZm9yZSBtb2RpZnlpbmcgdGhlIEFSUCBzb3VyY2UgTUFDIGFkZHJlc3MuIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgaXNuJ3Qgb3ZlcndyaXR0ZW4gb24gc2hhcmVkIGJ1ZmZlcnMsIGFuZCB0aGVyZWZvcmUgdGhhdCB0aGUgZGF0YSBoYXMgYSB1bmlxdWUgYmFja2luZy4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIGxpa2VseSB2dWxuZXJhYmxlIHRvIG1vZGlmeWluZyBzaGFyZWQgZGF0YSBpZiB0aGUgc291cmNlIE1BQyBvbiB0aGUgcGFja2V0IGRpZG4ndCBtYXRjaCB0aGUgc2xhdmUncyBhZGRyZXNzLCBsZWFkaW5nIHRvIGEgcmFjZSBjb25kaXRpb24gb3IgaW5jb3JyZWN0IGJlaGF2aW9yIG9uIG11bHRpcGxlIHRocmVhZHMuXG5cbjIuICBJbiBgYm9uZF9kb19hbGJfeG1pdGAsIGEgc2ltaWxhciBhcHByb2FjaCBpcyB0YWtlbiwgYnV0IHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgaXMgbW9kaWZpZWQgbW9yZSBnZW5lcmljYWxseS4gSXQncyBncmVhdCB0byBzZWUgYHNrYl9jb3dfaGVhZGAgZW1wbG95ZWQgYmVmb3JlIGNvcHlpbmcgdGhlIHNsYXZlJ3MgTUFDIGFkZHJlc3MgaW50byB0aGUgcGFja2V0LiBUaGUgY29kZSB0aGVuIHVzZXMgYHNrYl9ldGhfaGRyKHNrYilgIHRvIGFjY2VzcyB0aGUgRXRoZXJuZXQgaGVhZGVyLCB3aGljaCBpcyBhbHNvIGNvcnJlY3QgYW5kIG11Y2ggc2FmZXIuXG5cbjMuICBJbiBib3RoIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBza2JfZXRoX2hkcihza2IpYCBkaXJlY3RseS4gVGhpcyBpcyBhIHN1YnRsZSBidXQgaW1wb3J0YW50IGNoYW5nZSwgZml4aW5nIGluc3RhbmNlcyB3aGVyZSBgZXRoX2hkcihza2IpYCB3YXMgcHJldmlvdXNseSB1c2VkLiBUaGUgcmVhc29uIHdoeSB0aGlzIGlzIGFuIGlzc3VlIGlzIHRoYXQgYGV0aF9oZHJgIGhhcyBiZWVuIGtub3duIHRvIGJlIHByb2JsZW1hdGljLCBhbmQgaXMgbm93IGdlbmVyYWxseSBkZXByZWNhdGVkLlxuXG5Ob3csIG15IG5leHQgc3RlcCB3b3VsZCBiZSB0byByZXZpZXcgdGhlIGNhbGxlcnMgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIGFzc2VzcyB0aGUgc2NvcGUgb2YgdGhlIGZpeCBhbmQgZW5zdXJlIG5vIG90aGVyIGluc3RhbmNlcyBvZiB2dWxuZXJhYmxlIGNvZGUgcmVtYWluIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIFRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgYXJlIGBybGJfYXJwX3htaXRgLCBgYm9uZF9kb19hbGJfeG1pdGAsIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAsIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAsIGBib25kX2FsYl94bWl0YCwgYW5kIGBib25kX3RsYl94bWl0YC4gQSB0aG9yb3VnaCBhbmFseXNpcyBvZiB0aGVzZSBjYWxsZXJzIHdpbGwgYmUgZXNzZW50aWFsLiBUaGlzIHBhdGNoIGFwcGVhcnMgdG8gYWRkcmVzcyByZWFsIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGF0IGNhbiBsZWFkIHRvIHN1YnRsZSBidWdzLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggbXkgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc3MywiT3V0cHV0VG9rZW5zIjo1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjM1LjM2OTU3NzY3OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3ODU0MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmxiX2FycF94bWl0fGJvbmRfZG9fYWxiX3htaXR8Ym9uZF9hbGJfeG1pdHxib25kX3RsYl94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTIyNz1zdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzMi1cXHQvKiBXZSBkb24ndCBuZWVkIHRvIGRpc2FibGUgc29mdGlycSBoZXJlLCBiZWNhdXNlXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjIzMzpcXHQgKiB0bGJfY2hvb3NlX2NoYW5uZWwoKSBpcyBvbmx5IGNhbGxlZCBieSBib25kX2FsYl94bWl0KClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjM0LVxcdCAqIHdoaWNoIGFscmVhZHkgaGFzIHNvZnRpcnEgZGlzYWJsZWQuXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9NTUzPXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnJsYl9jaG9vc2VfY2hhbm5lbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTY1Mi0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6NjUzOnN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnJsYl9hcnBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtNjU0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMzM1PXZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzNDQtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjEzNDU6c3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzNDYtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTM3OD1zdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MTUtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE0MTY6bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MTcte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MjEtXFx0dHhfc2xhdmUgPSBib25kX3htaXRfdGxiX3NsYXZlX2dldChib25kLCBza2IpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNDIyOlxcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNDIzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNDI1PXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQ5OC1cXHRcXHRpZiAoYm9uZF9pbmZvLVxcdTAwM2VybGJfZW5hYmxlZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQ5OTpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJsYl9hcnBfeG1pdChza2IsIGJvbmQpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTAwLVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MjgtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1Mjk6bmV0ZGV2X3R4X3QgYm9uZF9hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MzAte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MzQtXFx0dHhfc2xhdmUgPSBib25kX3htaXRfYWxiX3NsYXZlX2dldChib25kLCBza2IpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNTM1OlxcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTM2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTU1MD1zdGF0aWMgbmV0ZGV2X3R4X3QgX19ib25kX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTU3Ni1cXHRjYXNlIEJPTkRfTU9ERV9BTEI6XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NTc3OlxcdFxcdHJldHVybiBib25kX2FsYl94bWl0KHNrYiwgZGV2KTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1NzgtXFx0Y2FzZSBCT05EX01PREVfVExCOlxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTU3OTpcXHRcXHRyZXR1cm4gYm9uZF90bGJfeG1pdChza2IsIGRldik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTgwLVxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjM1LjQxNzM2NzM2N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3ODYzNzgxNzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEJvbmRpbmcgQUxCL1RMQiBNb2RlIFJlYWNoYWJpbGl0eSBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gZm9jdXNpbmcgb24gcmVhY2hhYmlsaXR5IHdpdGhpbiB0aGUgbmV0d29ya2luZy9ib25kaW5nIGRyaXZlciAoYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2ApLiBUaGUgYm9uZGluZyBkZXZpY2UgaXRzZWxmIGlzIGEgdmlydHVhbCBzb2Z0d2FyZSBjb25zdHJ1Y3QgY3JlYXRlZCB1c2luZyBuZXRsaW5rIChzcGVjaWZpY2FsbHkgYFJUTV9ORVdMSU5LYCksIGFuZCBpdCBwbGF5cyBuaWNlbHkgd2l0aCBvdGhlciB2aXJ0dWFsIGludGVyZmFjZXMgbGlrZSBkdW1teSBvciB2ZXRoIGRldmljZXMgb2Z0ZW4gc2VlbiBpbiBRRU1VIG9yIHN5emthbGxlciBlbnZpcm9ubWVudHMuIFRoaXMgaXMgaW1wb3J0YW50LlxuXG5Ob3csIGxvb2tpbmcgYXQgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiBUTEIgb3IgQUxCIG1vZGUgKGBCT05EX01PREVfVExCYCBvciBgQk9ORF9NT0RFX0FMQmApLCBJJ3ZlIHRyYWNlZCB0aGUgZXhlY3V0aW9uIHBhdGg6IGBib25kX2FsYl94bWl0YCBvciBgYm9uZF90bGJfeG1pdGAgZGlyZWN0bHkgaW52b2tlIGBib25kX2RvX2FsYl94bWl0YCwgd2hpY2ggaW4gdHVybiBjYWxscyBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgLCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLCBhbmQgYHJsYl9hcnBfeG1pdGAuIENydWNpYWxseSwgdGhpcyBtZWFucyB0aG9zZSBmdW5jdGlvbnMgYXJlICpkaXJlY3RseSogaW52b2x2ZWQgaW4gcGFja2V0IHRyYW5zbWlzc2lvbiBvbiB0aGUgYm9uZCBkZXZpY2UuXG5cbkJhc2VkIG9uIHRoaXMsIGl0J3MgY2xlYXI6IFJlYWNoYWJpbGl0eSBpcyAqWUVTKiEgU3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgY3JlYXRpbmcgYm9uZCBkZXZpY2VzIGFuZCBzZW5kaW5nIHBhY2tldHMgdGhyb3VnaCB0aGVtLiBFeGNlbGxlbnQuIFRoaXMgaXMgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZy5cblxuTm93LCB0aGUganVpY3kgcGFydDogV29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgKllFUyohIFRoZSBjb2RlIG1vZGlmaWVzIHRoZSBwYWNrZXQgdHJhbnNtaXNzaW9uIHBhdGguIFNwZWNpZmljYWxseSwgSSBzZWUgbWFuaXB1bGF0aW9ucyBpbiBoZWFkZXIgYWNjZXNzIGFuZCBza2IgY2xvbmluZy9jb3cgaGVhZCByZS1hbGxvY2F0aW9uIGhhbmRsaW5nIGFyZSBwcmVzZW50IGluIHRoaXMgY29kZSBwYXRoLiBUaGlzIGFyZWEgcmVwcmVzZW50cyBhIGdvb2Qgc3VyZmFjZSBmb3IgdW5jb3ZlcmluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5MZXQncyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMuIFRoZSBrZXkgZnVuY3Rpb25zIEknbSBpbnRlcmVzdGVkIGluIGFyZTpcblxuKiAgIGBybGJfYXJwX3htaXRgIChzdGF0aWMsIGluIGBib25kX2FsYi5jYClcbiogICBgYm9uZF9kb19hbGJfeG1pdGAgKHN0YXRpYywgaW4gYGJvbmRfYWxiLmNgKVxuKiAgIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgKG5vbi1zdGF0aWMsIGluIGBib25kX2FsYi5jYClcbiogICBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgIChub24tc3RhdGljLCBpbiBgYm9uZF9hbGIuY2ApXG4qICAgYGJvbmRfYWxiX3htaXRgIChlbnRyeSBwb2ludCwgbm9uLXN0YXRpYywgaW4gYGJvbmRfYWxiLmNgKVxuKiAgIGBib25kX3RsYl94bWl0YCAoZW50cnkgcG9pbnQsIG5vbi1zdGF0aWMsIGluIGBib25kX2FsYi5jYClcblxuSSd2ZSBjb25maXJtZWQgdGhhdCB0aGVzZSBzeW1ib2xzIGFyZSAqbm90KiB1YmlxdWl0b3VzLiBUaGV5J3JlIGFsbCB2ZXJ5IHNwZWNpZmljIHRvIHRoZSBib25kaW5nIEFMQi9UTEIgbW9kZSB0cmFuc21pc3Npb24gcGF0aHMsIG1ha2luZyB0aGVtIGV4Y2VsbGVudCBjYW5kaWRhdGVzLlxuXG5SZWdhcmRpbmcgY29uZmlncywgSSd2ZSBjb25maXJtZWQgdGhhdCBgQk9ORElOR2AgYW5kIGBJTkVUYCBhcmUgdGhlIGVzc2VudGlhbCBmbGFncy4gYElORVRgIGlzIGEgZGVwZW5kZW5jeSBvZiBgQk9ORElOR2AsIGFuZCBgQk9ORElOR2AgYWxzbyBkZXBlbmRzIG9uIGBUTFMgfHwgVExTX0RFVklDRT1uYCBhcyBkZWZpbmVkIGluIGBkcml2ZXJzL25ldC9LY29uZmlnYCwgYnV0IGZvciBzaW1wbGljaXR5LCBgQk9ORElOR2Agd2lsbCBzdWZmaWNlLlxuXG5UaGVyZWZvcmUsIG15IGZpbmFsIGFuYWx5c2lzLCBmb2xsb3dpbmcgdGhlIHByZXNjcmliZWQgZm9ybWF0LCBpczpcblxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgW1wiQk9ORElOR1wiLCBcIklORVRcIl1gIChvciBzaW1wbGlmaWVkLCBgW1wiQk9ORElOR1wiXWApXG4qICAgKipGb2N1c1N5bWJvbHM6KipcbiAgICAqICAgYGJvbmRfYWxiX3htaXRgXG4gICAgKiAgIGBib25kX3RsYl94bWl0YFxuICAgICogICBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgXG4gICAgKiAgIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGBcbiAgICAqICAgYGJvbmRfZG9fYWxiX3htaXRgXG4gICAgKiAgIGBybGJfYXJwX3htaXRgXG4qICAgKipXb3J0aEZ1enppbmc6KiogYHRydWVgXG4qICAgKipSZWFzb25pbmc6KiogVGhlIGNvZGUgbW9kaWZpZXMgcGFja2V0IHRyYW5zbWlzc2lvbiwgaGVhZGVyIGFjY2VzcywgYW5kIHNrYiBoYW5kbGluZyBpbiBBTEIvVExCIG1vZGVzLCBtYWtpbmcgaXQgYSB2YWx1YWJsZSBmdXp6aW5nIHRhcmdldCBhbmQgcmVhY2hhYmxlIHZpYSBzeXprYWxsZXItY3JlYXRlZCBib25kIGRldmljZXMuXG5cbk9rYXksIGV2ZXJ5dGhpbmcgbG9va3MgZ29vZC4gUmVhZHkgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMjMsIk91dHB1dFRva2VucyI6MTgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjQzLjI4MTE1NjM3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgzOTUyNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2FsYl94bWl0XCIsXG4gICAgXCJib25kX3RsYl94bWl0XCIsXG4gICAgXCJib25kX3htaXRfYWxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfZG9fYWxiX3htaXRcIixcbiAgICBcInJsYl9hcnBfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCB0cmFuc21pc3Npb24gcGF0aHMgaW4gdGhlIGJvbmRpbmcgZHJpdmVyIGZvciBiYWxhbmNlLWFsYiBhbmQgYmFsYW5jZS10bGIgbW9kZXMgKGJvbmRfYWxiLmMpLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgc2tiIGhlYWRlciB3cml0YWJpbGl0eSB1c2luZyBza2JfY293X2hlYWQgYmVmb3JlIG1vZGlmeWluZyBNQUMvQVJQIGhlYWRlcnMgYW5kIHVzZXMgc2tiX2V0aF9oZHIgc2FmZWx5LiBUaGUgYm9uZGluZyBkcml2ZXIgaXMgYSBzb2Z0d2FyZSBuZXRkZXYgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2FsYl94bWl0XCIsXG4gICAgXCJib25kX3RsYl94bWl0XCIsXG4gICAgXCJib25kX3htaXRfYWxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfZG9fYWxiX3htaXRcIixcbiAgICBcInJsYl9hcnBfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCB0cmFuc21pc3Npb24gcGF0aHMgaW4gdGhlIGJvbmRpbmcgZHJpdmVyIGZvciBiYWxhbmNlLWFsYiBhbmQgYmFsYW5jZS10bGIgbW9kZXMgKGJvbmRfYWxiLmMpLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgc2tiIGhlYWRlciB3cml0YWJpbGl0eSB1c2luZyBza2JfY293X2hlYWQgYmVmb3JlIG1vZGlmeWluZyBNQUMvQVJQIGhlYWRlcnMgYW5kIHVzZXMgc2tiX2V0aF9oZHIgc2FmZWx5LiBUaGUgYm9uZGluZyBkcml2ZXIgaXMgYSBzb2Z0d2FyZSBuZXRkZXYgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNTo0My4zNTk1NTkwMDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjczMzQzODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6MjU6NDMuMzYwMDIxNjI3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzEyNzI4NzcyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBza2IgaGVhZGVyIG11dGFiaWxpdHkgaW4gdGhlIGJvbmRpbmcgQUxCL1RMQiB0cmFuc21pdCBwYXRocyAoZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IGFkZHMgYHNrYl9jb3dfaGVhZChza2IsIDApYCBjYWxscyBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgaW4gQVJQIHBhY2tldHMgKGBybGJfYXJwX3htaXRgKSBhbmQgRXRoZXJuZXQgaGVhZGVycyAoYGJvbmRfZG9fYWxiX3htaXRgKSwgZW5zdXJpbmcgY2xvbmVkL3NoYXJlZCBza2IgaGVhZHMgYXJlIGNvcGllZCBiZWZvcmUgd3JpdGluZy5cXG4yLiBJdCByZWxvYWRzIHRoZSBwb2ludGVyIHRvIHRoZSBBUlAvRXRoZXJuZXQgaGVhZGVyIGFmdGVyIGBza2JfY293X2hlYWRgIHRvIGF2b2lkIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2VzLlxcbjMuIEl0IGNsZWFucyB1cCByZWR1bmRhbnQgYHNrYl9yZXNldF9tYWNfaGVhZGVyKClgIGNhbGxzIGluIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgYnkgdXNpbmcgYHNrYl9ldGhfaGRyKHNrYilgLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgbWFuYWdlIHBhY2tldCBidWZmZXIgbXV0YWJpbGl0eSBhbmQgcHJldmVudCBkYXRhIGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLXJlYWxsb2MgYnVncyBvbiBzaGFyZWQvY2xvbmVkIHNrYnMgKGlzc3VlcyBkZXRlY3RhYmxlIGJ5IEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMsIHBhZGRpbmdzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRhMzVjMjc5NTMyOTc2ZWIzNjI4Y2E3ZTczMzUyYmNlNjQ1OWJhNzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDIyOjI1OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG5pbmRleCA2NTRmMDUxZDAwMjM5Li40M2FjOGUyOGU0MTgyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbkBAIC02NzgsOSArNjc4LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnJsYl9hcnBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcdGlmIChhcnAtXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVBMWSkpIHtcbiBcdFx0LyogdGhlIGFycCBtdXN0IGJlIHNlbnQgb24gdGhlIHNlbGVjdGVkIHJ4IGNoYW5uZWwgKi9cbiBcdFx0dHhfc2xhdmUgPSBybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kLCBhcnApO1xuLVx0XHRpZiAodHhfc2xhdmUpXG4rXHRcdGlmICh0eF9zbGF2ZSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFldGhlcl9hZGRyX2VxdWFsXzY0Yml0cyhhcnAtXHUwMDNlbWFjX3NyYyxcbitcdFx0XHRcdFx0ICAgICB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpKSB7XG4rXHRcdFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcbitcdFx0XHRcdHJldHVybiBOVUxMO1xuK1x0XHRcdGFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0XHRcdGJvbmRfaHdfYWRkcl9jb3B5KGFycC1cdTAwM2VtYWNfc3JjLCB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsXG4gXHRcdFx0XHRcdCAgdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuKTtcbitcdFx0fVxuIFx0XHRuZXRkZXZfZGJnKGJvbmQtXHUwMDNlZGV2LCBcIihzbGF2ZSAlcyk6IFNlcnZlciBzZW50IEFSUCBSZXBseSBwYWNrZXRcXG5cIixcbiBcdFx0XHQgICB0eF9zbGF2ZSA/IHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VuYW1lIDogXCJOVUxMXCIpO1xuIFx0fSBlbHNlIGlmIChhcnAtXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSkge1xuQEAgLTEzNDAsNyArMTM0Niw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUpXG4ge1xuIFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcbi1cdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xuIFxuIFx0aWYgKCF0eF9zbGF2ZSkge1xuIFx0XHQvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovXG5AQCAtMTM1MSw3ICsxMzU2LDkgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXG4gXHRpZiAodHhfc2xhdmUgXHUwMDI2XHUwMDI2IGJvbmRfc2xhdmVfY2FuX3R4KHR4X3NsYXZlKSkge1xuIFx0XHRpZiAodHhfc2xhdmUgIT0gcmN1X2FjY2Vzc19wb2ludGVyKGJvbmQtXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XG4tXHRcdFx0ZXRoZXJfYWRkcl9jb3B5KGV0aF9kYXRhLVx1MDAzZWhfc291cmNlLFxuK1x0XHRcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXG4rXHRcdFx0XHRyZXR1cm4gYm9uZF90eF9kcm9wKGJvbmQtXHUwMDNlZGV2LCBza2IpO1xuK1x0XHRcdGV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLVx1MDAzZWhfc291cmNlLFxuIFx0XHRcdFx0XHR0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFx0XHR9XG4gXG5AQCAtMTM3NSw4ICsxMzgyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xuIFx0dTMyIGhhc2hfaW5kZXg7XG4gXG4tXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuLVx0ZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XG4rXHRldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7XG4gXG4gXHQvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqL1xuIFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cdTAwM2VoX2Rlc3QpKSB7XG5AQCAtMTQyOCw4ICsxNDM0LDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcdHUzMiBoYXNoX2luZGV4ID0gMDtcbiBcdGludCBoYXNoX3NpemUgPSAwO1xuIFxuLVx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbi1cdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xuK1x0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xuIFxuIFx0c3dpdGNoIChudG9ocyhza2ItXHUwMDNlcHJvdG9jb2wpKSB7XG4gXHRjYXNlIEVUSF9QX0lQOiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNTo0My4zNjAwMjI0NjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMxODM5NzQ3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gSnVzdGlmaWNhdGlvbiBmb3IgYm9uZF9hbGIuYyBQYXRjaCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYCB3YXJyYW50cyBpdHMgb3duIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgcmVxdWVzdCDigJMgZXNzZW50aWFsbHkgYSBjb2RlIHJldmlldyBmb3IgbWVtb3J5IHNhZmV0eSBpbXBsaWNhdGlvbnMuIEknbGwgbmVlZCB0byBhbmFseXplIHRoZSBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGl0IGludHJvZHVjZXMgYW55IHBvdGVudGlhbGx5IEtNU0FOLXNwZWNpZmljIGlzc3VlcyB0aGF0IEtBU0FOIG1pZ2h0IG1pc3MuXG5cbkZpcnN0LCB0aGUgcmlzayBpcyBtaW5pbWFsOyBpdCdzIGp1c3QgUUEgb24gYSBkZXZlbG9wZXIgcGF0Y2guIFRoZSBhY3Rpb24gaXMgY2xlYXI6IHJldmlldyB0aGUgY29kZS4gSSdsbCBuZWVkIHRvIGFjdHVhbGx5ICpzZWUqIHRoZSBjb2RlLCBzbyBJJ2xsIHByb2JhYmx5IHB1bGwgdXAgdGhlIGZpbGUgZGlyZWN0bHksIG9yIHVzZSBhIHRvb2wgbGlrZSBgZ3JlcHBlcmAgdG8gZXhhbWluZSBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IHNjcmVhbXMgXCJLTVNBTiBjYW5kaWRhdGVcIiDigJMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyB0aGF0IGFyZSBoaWdobHkgdGltaW5nLWRlcGVuZGVudCwgb3IgYW55dGhpbmcgdGhhdCBLTVNBTiBpcyBrbm93biB0byBleGNlbCBhdCBmaW5kaW5nLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2g7IEknbSBoZXJlIHRvIGVuc3VyZSB3ZSBjYXRjaCB0aG9zZSBzdWJ0bGUgbWVtb3J5IGVycm9ycyB0aGF0IEtBU0FOIG1pZ2h0IG92ZXJsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODc1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6MjU6NTYuNTQ0MDAxNjk5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjcwOlxcdFxcdGlmIChkZXYpIHtcXG4gNjcxOlxcdFxcdFxcdGlmIChuZXRpZl9pc19hbnlfYnJpZGdlX21hc3RlcihkZXYpKSB7XFxuIDY3MjpcXHRcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuIDY3MzpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjc0OlxcdFxcdFxcdH1cXG4gNjc1OlxcdFxcdFxcdGRldl9wdXQoZGV2KTtcXG4gNjc2OlxcdFxcdH1cXG4gNjc3OlxcdFxcbiA2Nzg6XFx0XFx0aWYgKGFycC1cXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVBMWSkpIHtcXG4gNjc5OlxcdFxcdFxcdC8qIHRoZSBhcnAgbXVzdCBiZSBzZW50IG9uIHRoZSBzZWxlY3RlZCByeCBjaGFubmVsICovXFxuIDY4MDpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XFxuIDY4MTpcXHRcXHRcXHRpZiAodHhfc2xhdmUgXFx1MDAyNlxcdTAwMjZcXG4gNjgyOlxcdFxcdFxcdCAgICAhZXRoZXJfYWRkcl9lcXVhbF82NGJpdHMoYXJwLVxcdTAwM2VtYWNfc3JjLFxcbiA2ODM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcikpIHtcXG4gNjg0OlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXFxuIDY4NTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjg2OlxcdFxcdFxcdFxcdGFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiA2ODc6XFx0XFx0XFx0XFx0Ym9uZF9od19hZGRyX2NvcHkoYXJwLVxcdTAwM2VtYWNfc3JjLCB0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcixcXG4gNjg4OlxcdFxcdFxcdFxcdFxcdFxcdCAgdHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbiA2ODk6XFx0XFx0XFx0fVxcbiA2OTA6XFx0XFx0XFx0bmV0ZGV2X2RiZyhib25kLVxcdTAwM2VkZXYsIFxcXCIoc2xhdmUgJXMpOiBTZXJ2ZXIgc2VudCBBUlAgUmVwbHkgcGFja2V0XFxcXG5cXFwiLFxcbiA2OTE6XFx0XFx0XFx0XFx0ICAgdHhfc2xhdmUgPyB0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lIDogXFxcIk5VTExcXFwiKTtcXG4gNjkyOlxcdFxcdH0gZWxzZSBpZiAoYXJwLVxcdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUVVFU1QpKSB7XFxuIDY5MzpcXHRcXHRcXHQvKiBDcmVhdGUgYW4gZW50cnkgaW4gdGhlIHJ4X2hhc2h0YmwgZm9yIHRoaXMgY2xpZW50IGFzIGFcXG4gNjk0OlxcdFxcdFxcdCAqIHBsYWNlIGhvbGRlci5cXG4gNjk1OlxcdFxcdFxcdCAqIFdoZW4gdGhlIGFycCByZXBseSBpcyByZWNlaXZlZCB0aGUgZW50cnkgd2lsbCBiZSB1cGRhdGVkXFxuIDY5NjpcXHRcXHRcXHQgKiB3aXRoIHRoZSBjb3JyZWN0IHVuaWNhc3QgYWRkcmVzcyBvZiB0aGUgY2xpZW50LlxcbiA2OTc6XFx0XFx0XFx0ICovXFxuIDY5ODpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XFxuIDY5OTpcXHRcXG4gNzAwOlxcdFxcdFxcdC8qIFRoZSBBUlAgcmVwbHkgcGFja2V0cyBtdXN0IGJlIGRlbGF5ZWQgc28gdGhhdFxcbiA3MDE6XFx0XFx0XFx0ICogdGhleSBjYW4gY2FuY2VsIG91dCB0aGUgaW5mbHVlbmNlIG9mIHRoZSBBUlAgcmVxdWVzdC5cXG4gNzAyOlxcdFxcdFxcdCAqL1xcbiA3MDM6XFx0XFx0XFx0Ym9uZC1cXHUwMDNlYWxiX2luZm8ucmxiX3VwZGF0ZV9kZWxheV9jb3VudGVyID0gUkxCX1VQREFURV9ERUxBWTtcXG4gNzA0OlxcdFxcbiA3MDU6XFx0XFx0XFx0LyogYXJwIHJlcXVlc3RzIGFyZSBicm9hZGNhc3QgYW5kIGFyZSBzZW50IG9uIHRoZSBwcmltYXJ5XFxuIDcwNjpcXHRcXHRcXHQgKiB0aGUgYXJwIHJlcXVlc3Qgd2lsbCBjb2xsYXBzZSBhbGwgY2xpZW50cyBvbiB0aGUgc3VibmV0IHRvXFxuIDcwNzpcXHRcXHRcXHQgKiB0aGUgcHJpbWFyeSBzbGF2ZS4gV2UgbXVzdCByZWdpc3RlciB0aGVzZSBjbGllbnRzIHRvIGJlXFxuIDcwODpcXHRcXHRcXHQgKiB1cGRhdGVkIHdpdGggdGhlaXIgYXNzaWduZWQgbWFjLlxcbiA3MDk6XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjU2LjU0NDE1NTkzOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTM4NjE1NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0IHByb2Nlc3NlczpcblxuKipRdWljayBTY2FuIG9mIEJvbmQgVHJhbnNtaXQgRnVuY3Rpb25zKipcblxuT2theSwgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhvc2UgY29yZSBib25kIHRyYW5zbWl0IGZ1bmN0aW9uczogYGJvbmRfZG9fYWxiX3htaXRgLCBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgLCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20ga2VlcGluZyBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXkgZml0IHRvZ2V0aGVyLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIGFjdGl2ZS1iYWNrdXAgYW5kIHRyYW5zbWl0IGxvYWQgYmFsYW5jaW5nLiBJJ20gZm9jdXNpbmcgb24gdGhlIHRyYW5zbWl0IHNpZGUsIHNvIHRoaXMgaXMgd2hlcmUgdGhlIGRldGFpbHMgcmVzaWRlIGFuZCB0aGUgbG9naWMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIG9mIHRoZXNlIGJvbmQgdHJhbnNtaXQgZnVuY3Rpb25zIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgZ2FwcyBvciBvdmVybGFwcywgb3IgY29uZmxpY3RzIGluIHRoZSBmbG93IGNvbnRyb2wgb3IgaG93IHRoZSBkaWZmZXJlbnQgbW9kZXMgYXJlIGhhbmRsZWQuIEdvdHRhIGtlZXAgdGhhdCBtZW50YWwgbW9kZWwgc2hhcnAhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjU5LjA4Mjc3NTYyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMzUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzM1OlxcdHZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxcbjEzMzY6XFx0e1xcbjEzMzc6XFx0XFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFxcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XFxuMTMzODpcXHRcXG4xMzM5OlxcdFxcdHRsYl9kZWluaXRpYWxpemUoYm9uZCk7XFxuMTM0MDpcXHRcXG4xMzQxOlxcdFxcdGlmIChib25kX2luZm8tXFx1MDAzZXJsYl9lbmFibGVkKVxcbjEzNDI6XFx0XFx0XFx0cmxiX2RlaW5pdGlhbGl6ZShib25kKTtcXG4xMzQzOlxcdH1cXG4xMzQ0OlxcdFxcbjEzNDU6XFx0c3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuMTM0NjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcXG4xMzQ3OlxcdHtcXG4xMzQ4OlxcdFxcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xcbjEzNDk6XFx0XFxuMTM1MDpcXHRcXHRpZiAoIXR4X3NsYXZlKSB7XFxuMTM1MTpcXHRcXHRcXHQvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovXFxuMTM1MjpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJjdV9kZXJlZmVyZW5jZShib25kLVxcdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSk7XFxuMTM1MzpcXHRcXHRcXHRpZiAoYm9uZC1cXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKVxcbjEzNTQ6XFx0XFx0XFx0XFx0Ym9uZF9pbmZvLVxcdTAwM2V1bmJhbGFuY2VkX2xvYWQgKz0gc2tiLVxcdTAwM2VsZW47XFxuMTM1NTpcXHRcXHR9XFxuMTM1NjpcXHRcXG4xMzU3OlxcdFxcdGlmICh0eF9zbGF2ZSBcXHUwMDI2XFx1MDAyNiBib25kX3NsYXZlX2Nhbl90eCh0eF9zbGF2ZSkpIHtcXG4xMzU4OlxcdFxcdFxcdGlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XFxuMTM1OTpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxcbjEzNjA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGJvbmRfdHhfZHJvcChib25kLVxcdTAwM2VkZXYsIHNrYik7XFxuMTM2MTpcXHRcXHRcXHRcXHRldGhlcl9hZGRyX2NvcHkoc2tiX2V0aF9oZHIoc2tiKS1cXHUwMDNlaF9zb3VyY2UsXFxuMTM2MjpcXHRcXHRcXHRcXHRcXHRcXHR0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuMTM2MzpcXHRcXHRcXHR9XFxuMTM2NDpcXHRcXG4xMzY1OlxcdFxcdFxcdHJldHVybiBib25kX2Rldl9xdWV1ZV94bWl0KGJvbmQsIHNrYiwgdHhfc2xhdmUtXFx1MDAzZWRldik7XFxuMTM2NjpcXHRcXHR9XFxuMTM2NzpcXHRcXG4xMzY4OlxcdFxcdGlmICh0eF9zbGF2ZSBcXHUwMDI2XFx1MDAyNiBib25kLVxcdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcXG4xMzY5OlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Ym9uZC1cXHUwMDNlbW9kZV9sb2NrKTtcXG4xMzcwOlxcdFxcdFxcdF9fdGxiX2NsZWFyX3NsYXZlKGJvbmQsIHR4X3NsYXZlLCAwKTtcXG4xMzcxOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZib25kLVxcdTAwM2Vtb2RlX2xvY2spO1xcbjEzNzI6XFx0XFx0fVxcbjEzNzM6XFx0XFxuMTM3NDpcXHRcXHQvKiBubyBzdWl0YWJsZSBpbnRlcmZhY2UsIGZyYW1lIG5vdCBzZW50ICovXFxuMTM3NTpcXHRcXHRyZXR1cm4gYm9uZF90eF9kcm9wKGJvbmQtXFx1MDAzZWRldiwgc2tiKTtcXG4xMzc2OlxcdH1cXG4xMzc3OlxcdFxcbjEzNzg6XFx0c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4xMzc5OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuMTM4MDpcXHR7XFxuMTM4MTpcXHRcXHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlID0gTlVMTDtcXG4xMzgyOlxcdFxcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xcbjEzODM6XFx0XFx0dTMyIGhhc2hfaW5kZXg7XFxuMTM4NDpcXHRcXG4xMzg1OlxcdFxcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcXG4xMzg2OlxcdFxcbjEzODc6XFx0XFx0LyogRG8gbm90IFRYIGJhbGFuY2UgYW55IG11bHRpY2FzdCBvciBicm9hZGNhc3QgKi9cXG4xMzg4OlxcdFxcdGlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtXFx1MDAzZWhfZGVzdCkpIHtcXG4xMzg5OlxcdFxcdFxcdHN3aXRjaCAoc2tiLVxcdTAwM2Vwcm90b2NvbCkge1xcbjEzOTA6XFx0XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4xMzkxOlxcdFxcdFxcdFxcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYikpXFxuMTM5MjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xMzkzOlxcdFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbjEzOTQ6XFx0XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxuMTM5NTpcXHRcXHRcXHRcXHRoYXNoX2luZGV4ID0gYm9uZF94bWl0X2hhc2goYm9uZCwgc2tiKTtcXG4xMzk2OlxcdFxcdFxcdFxcdGlmIChib25kLVxcdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcXG4xMzk3OlxcdFxcdFxcdFxcdFxcdHR4X3NsYXZlID0gdGxiX2Nob29zZV9jaGFubmVsKGJvbmQsXFxuMTM5ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBoYXNoX2luZGV4IFxcdTAwMjYgMHhGRixcXG4xMzk5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlbGVuKTtcXG4xNDAwOlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMTQwMTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYm9uZF91cF9zbGF2ZSAqc2xhdmVzO1xcbjE0MDI6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGNvdW50O1xcbjE0MDM6XFx0XFxuMTQwNDpcXHRcXHRcXHRcXHRcXHRzbGF2ZXMgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cXHUwMDNldXNhYmxlX3NsYXZlcyk7XFxuMTQwNTpcXHRcXHRcXHRcXHRcXHRjb3VudCA9IHNsYXZlcyA/IFJFQURfT05DRShzbGF2ZXMtXFx1MDAzZWNvdW50KSA6IDA7XFxuMTQwNjpcXHRcXHRcXHRcXHRcXHRpZiAobGlrZWx5KGNvdW50KSlcXG4xNDA3OlxcdFxcdFxcdFxcdFxcdFxcdHR4X3NsYXZlID0gc2xhdmVzLVxcdTAwM2VhcnJbaGFzaF9pbmRleCAlXFxuMTQwODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY291bnRdO1xcbjE0MDk6XFx0XFx0XFx0XFx0fVxcbjE0MTA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTQxMTpcXHRcXHRcXHR9XFxuMTQxMjpcXHRcXHR9XFxuMTQxMzpcXHRcXHRyZXR1cm4gdHhfc2xhdmU7XFxuMTQxNDpcXHR9XFxuMTQxNTpcXHRcXG4xNDE2OlxcdG5ldGRldl90eF90IGJvbmRfdGxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbjE0MTc6XFx0e1xcbjE0MTg6XFx0XFx0c3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihib25kX2Rldik7XFxuMTQxOTpcXHRcXHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlO1xcbjE0MjA6XFx0XFxuMTQyMTpcXHRcXHR0eF9zbGF2ZSA9IGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KGJvbmQsIHNrYik7XFxuMTQyMjpcXHRcXHRyZXR1cm4gYm9uZF9kb19hbGJfeG1pdChza2IsIGJvbmQsIHR4X3NsYXZlKTtcXG4xNDIzOlxcdH1cXG4xNDI0OlxcdFxcbjE0MjU6XFx0c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4xNDI2OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuMTQyNzpcXHR7XFxuMTQyODpcXHRcXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcXG4xNDI5OlxcdFxcdHN0YXRpYyBjb25zdCBfX2JlMzIgaXBfYmNhc3QgPSBodG9ubCgweGZmZmZmZmZmKTtcXG4xNDMwOlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xcbjE0MzE6XFx0XFx0Y29uc3QgdTggKmhhc2hfc3RhcnQgPSBOVUxMO1xcbjE0MzI6XFx0XFx0Ym9vbCBkb190eF9iYWxhbmNlID0gdHJ1ZTtcXG4xNDMzOlxcdFxcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xcbjE0MzQ6XFx0XFx0dTMyIGhhc2hfaW5kZXggPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNTo1OS4wODI5Mjg4OTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTYzMjY0ODEwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBFbnN1cmluZyBXcml0YWJsZSBTS0IgSGVhZGVycyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBkZWFsaW5nIHdpdGggcGFja2V0IHRyYW5zbWlzc2lvbiBpbiBhIGJvbmRpbmcgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYXJvdW5kIEFjdGl2ZS1CYWNrdXAgb3IgQWN0aXZlLUxvYWQtQmFsYW5jaW5nIG1vZGVzLCBhbmQgaXMgYWltaW5nIHRvIGVuc3VyZSB0aGUgcGFja2V0cyBhcmUgY29ycmVjdGx5IGZvcm1hdHRlZCBiZWZvcmUgYmVpbmcgc2VudCBvdXQuIFRoZSBrZXkgc2VlbXMgdG8gYmUgbWFuYWdpbmcgdGhlIFNLQiAoU29ja2V0IEJ1ZmZlcikgaGVhZGVycyBmb3Igd3JpdGUgb3BlcmF0aW9ucy4gSSBzZWUgaXQgaW4gdGhyZWUga2V5IGFyZWFzOlxuXG4xLiAgKipgcmxiX2FycF94bWl0YCoqOiBUaGUgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gY29ycmVjdCBBUlAgcmVwbGllcy4gSWYgdGhlIHNvdXJjZSBNQUMgYWRkcmVzcyAoYGFycC1cdTAwM2VtYWNfc3JjYCkgaW4gYW4gQVJQIHJlcGx5IGRvZXNuJ3QgbWF0Y2ggdGhlIGludGVyZmFjZSdzIE1BQyBhZGRyZXNzIChgdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyYCksIHRoZSBjb2RlIG5vdyBwcm9hY3RpdmVseSBlbnN1cmVzIHRoZSBTS0IgaGVhZGVyIGlzIHdyaXRhYmxlIHVzaW5nIGBza2JfY293X2hlYWQoc2tiLCAwKWAuIFRoaXMgaXMgY3J1Y2lhbCB0byBhdm9pZCBtb2RpZnlpbmcgc2hhcmVkIG1lbW9yeS4gSWYgYHNrYl9jb3dfaGVhZGAgaXMgc3VjY2Vzc2Z1bCAoaXQgcmV0dXJucyB6ZXJvKSwgdGhlIEFSUCBwb2ludGVyIGlzIHJlbG9hZGVkIHRvIHBvaW50IHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uLiBJdCB0aGVuIGNvcGllcyB0aGUgY29ycmVjdCBNQUMgYWRkcmVzcy4gVGhpcyBpcyBhIHNvbGlkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBhcHByb2FjaCB0byBtYWtlIHN1cmUgdGhlIHBhY2tldCBpcyBub3QgY29ycnVwdGVkIGFuZCB0aGUgQVJQIHJlcGx5IGdvZXMgb3V0IHdpdGggdGhlIGNvcnJlY3Qgc291cmNlIE1BQy5cblxuMi4gICoqYGJvbmRfZG9fYWxiX3htaXRgKio6IFNpbWlsYXIgdG8gdGhlIEFSUCBjYXNlLCB0aGUgY29kZSBub3cgY2hlY2tzIGZvciB3cml0YWJpbGl0eSAqYmVmb3JlKiBjb3B5aW5nIHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgKGBoX3NvdXJjZWApIGludG8gdGhlIEV0aGVybmV0IGhlYWRlci4gYHNrYl9jb3dfaGVhZChza2IsIDApYCBpcyB1c2VkIHRvIGVuc3VyZSB0aGUgaGVhZGVyIGlzIHdyaXRlYWJsZSwgYW5kIGlmIGl0IGZhaWxzLCB0aGUgcGFja2V0IGlzIGRyb3BwZWQgd2l0aCBgYm9uZF90eF9kcm9wYC4gVGhlIHVzZSBvZiBgc2tiX2V0aF9oZHIoc2tiKWAgdG8gYWNjZXNzIHRoZSBFdGhlcm5ldCBoZWFkZXIgaXMgYWxzbyBub3RlZC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBTS0IgbWF5IGJlIHJlYWxsb2NhdGVkLCBzbyB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwuXG5cbjMuICAqKmBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAqKjogVGhpcyBzZWN0aW9uIGlzIHNpbXBsZXIuIEl0IGhhcyByZW1vdmVkIGBza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOyBldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtgIGFuZCBub3cgc2ltcGx5IHJlbGllcyBvbiBgZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO2AuIFRoaXMgY2hhbmdlIGltcGxpZXMgdGhhdCB0aGUgTUFDIGhlYWRlciBpcyBlaXRoZXIgYWxyZWFkeSBzZXQgKHdoaWNoIGlzIGxpa2VseSwgc2luY2UgaXQncyB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cmFuc21pc3Npb24pIG9yIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbGxpbmcgdGhpcyBhbHJlYWR5IGtub3dzIHdoZXJlIHRoZSBldGhlcm5ldCBoZWFkZXIgd2lsbCBiZS4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgdGhhdCB0aGUgZGV2ZWxvcGVyIGludGVuZHMgYHNrYl9ldGhfaGRyYCB0byBiZSB1c2VkIGZvciBjb25zaXN0ZW5jeSBzaW5jZSB0aGUgcHJldmlvdXMgc2VjdGlvbnMgb2YgY29kZSB3ZXJlIG1vZGlmaWVkLiBUaGlzIGFsc28gaW1wbGllcyB0aGF0IHRoZSBTS0IgaXMgZ3VhcmFudGVlZCB0byBoYXZlIHRoZSBldGhlcm5ldCBoZWFkZXIgb3IgdGhhdCBgc2tiX2V0aF9oZHJgIGhhbmRsZXMgdGhlIGluaXRpYWwgc2V0dXAgKHRoaXMgaXMgd29ydGggbG9va2luZyBpbnRvKS4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYHNrYl9ldGhfaGRyYCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTA2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6MjY6MDQuNzE1NTgwMjQxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgwMzk1NTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbmxpbmUgc3RydWN0IGV0aGhkciBcXFxcKnNrYl9ldGhfaGRyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWZfZXRoZXIuaD0yNT1zdGF0aWMgaW5saW5lIHN0cnVjdCBldGhoZHIgKmV0aF9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfZXRoZXIuaC0zMi0gKi9cXG5pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmg6MzM6c3RhdGljIGlubGluZSBzdHJ1Y3QgZXRoaGRyICpza2JfZXRoX2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvaWZfZXRoZXIuaC0zNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI2OjA2Ljg5NTk4NTQyM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDYyMzgwMDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGlmX2V0aGVyLmg6IFVuZGVyc3RhbmRpbmcgRXRoZXJuZXQncyBGb3VuZGF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSwgb3IgbWF5YmUgZHJpbGwgZG93biBpbnRvIGEgc3BlY2lmaWMgYXNwZWN0IG9mIEV0aGVybmV0IGZyYW1lIHN0cnVjdHVyZSwgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHB1bGxpbmcgdXAgYGluY2x1ZGUvbGludXgvaWZfZXRoZXIuaGAuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEknbGwgZm9jdXMgb24gbGluZXMgMjAtNDAsIHdoaWNoIHVzdWFsbHkgZGVmaW5lcyB0aGUgY29yZSBFdGhlcm5ldCBoZWFkZXIgc3RydWN0dXJlLiBJJ20gaG9waW5nIHRvIGdldCBhIHF1aWNrIHJlZnJlc2hlciBvbiB0aGUga2V5IGZpZWxkcy4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGBzdHJ1Y3QgZXRoaGRyYCwgcHJvYmFibHkgd2l0aCB0aGUgZGVzdGluYXRpb24gYW5kIHNvdXJjZSBNQUMgYWRkcmVzc2VzLCB0aGUgRXRoZXJUeXBlIGZpZWxkLCBhbmQgcG90ZW50aWFsbHkgc29tZSBwYWRkaW5nIG9yIHJlc2VydmVkIGFyZWFzIGlmIGl0J3MgYW4gb2xkZXIgZGVmaW5pdGlvbi4gSSdtIGFsc28gbG9va2luZyBmb3IgYW55IGNvbW1lbnRzIHRoYXQgbWlnaHQgZ2l2ZSBoaW50cyBhYm91dCBpdHMgdXNlIG9yIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zLiBUaGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIGRlZmluZXMgaW4gdGhlcmUgdG9vIOKAkyBwZXJoYXBzIGZvciBjb21tb24gRXRoZXJUeXBlIHZhbHVlcy4gSXQncyB0aW1lIHRvIHF1aWNrbHkgYW5hbHl6ZSBhbmQgc2VlIGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGRlZmluaXRpb25zIG9mIHRob3NlIHNwZWNpZmljIHN0cnVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0ODgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNjowOC45NTgzNjgyNloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvaWZfZXRoZXIuaFxcdTAwM2VcXG4gIDIxOlxcdFxcbiAgMjI6XFx0LyogWFg6WFg6WFg6WFg6WFg6WFggKi9cXG4gIDIzOlxcdCNkZWZpbmUgTUFDX0FERFJfU1RSX0xFTiAoMyAqIEVUSF9BTEVOIC0gMSlcXG4gIDI0OlxcdFxcbiAgMjU6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgZXRoaGRyICpldGhfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuICAyNjpcXHR7XFxuICAyNzpcXHRcXHRyZXR1cm4gKHN0cnVjdCBldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpO1xcbiAgMjg6XFx0fVxcbiAgMjk6XFx0XFxuICAzMDpcXHQvKiBQcmVmZXIgdGhpcyB2ZXJzaW9uIGluIFRYIHBhdGgsIGluc3RlYWQgb2ZcXG4gIDMxOlxcdCAqIHNrYl9yZXNldF9tYWNfaGVhZGVyKCkgKyBldGhfaGRyKClcXG4gIDMyOlxcdCAqL1xcbiAgMzM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgZXRoaGRyICpza2JfZXRoX2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAgMzQ6XFx0e1xcbiAgMzU6XFx0XFx0cmV0dXJuIChzdHJ1Y3QgZXRoaGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbiAgMzY6XFx0fVxcbiAgMzc6XFx0XFxuICAzODpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBldGhoZHIgKmlubmVyX2V0aF9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDM5OlxcdHtcXG4gIDQwOlxcdFxcdHJldHVybiAoc3RydWN0IGV0aGhkciAqKXNrYl9pbm5lcl9tYWNfaGVhZGVyKHNrYik7XFxuICA0MTpcXHR9XFxuICA0MjpcXHRcXG4gIDQzOlxcdGludCBldGhfaGVhZGVyX3BhcnNlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuICA0NDpcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGNoYXIgKmhhZGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6MjY6MDguOTU4NDMyMTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY3NDQwNzc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggZm9yIE5ldHdvcmsgVHJhbnNtaXQgUGF0aCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkndmUganVzdCByZXZpZXdlZCB0aGlzIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgbG9va3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgbmV0d29yayB0cmFuc21pdCBwYXRoIGZvciBib25kaW5nIOKAkyBBTEIvVExCLCB0byBiZSBwcmVjaXNlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBoYW5kbGluZyBTS0IgKHNvY2tldCBidWZmZXIpIENvcHktb24tV3JpdGUgZm9yIHNoYXJlZCBvciBjbG9uZWQgcGFja2V0cyAqYmVmb3JlKiBtb2RpZnlpbmcgdGhlIE1BQyBhZGRyZXNzZXMgaW4gdGhlIGhlYWRlci4gVGhhdCdzIGdvb2QsIHByZXZlbnRzIHRob3NlIG5hc3R5IHNoYXJlZCBidWZmZXIgbW9kaWZpY2F0aW9uIGlzc3VlcyBvciBwb2ludGVyIGludmFsaWRhdGlvbnMgYWZ0ZXIgaGVhZGVyIHJlYWxsb2NhdGlvbnMuIEl0IGFsc28gbW92ZXMgZnJvbSB0aGUgYHNrYl9yZXNldF9tYWNfaGVhZGVyKCkgKyBldGhfaGRyKClgIGNvbWJpbmF0aW9uIHRvIGp1c3QgdXNpbmcgYHNrYl9ldGhfaGRyKClgLCBhcyBpcyBwcmVmZXJhYmxlIGluIHRoaXMgVFggY29udGV4dC5cblxuTm93LCBteSBwcmltYXJ5IGNvbmNlcm4gd2hlbiByZXZpZXdpbmcgcGF0Y2hlcyBsaWtlIHRoaXMsIGFuZCBJJ20gc3VyZSBpdCdzIHRoZSBzYW1lIGZvciBhbnlvbmUgaW4gdGhlIHNlY3VyaXR5IGZpZWxkLCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgcnVuIGRvd24gdGhlIGNoZWNrbGlzdDpcblxuMS4gICoqS2VybmVsIHRvIFVzZXIgU3BhY2UgRGF0YToqKiBObywgdGhlcmUncyBub3RoaW5nIGhlcmUgdGhhdCBsb29rcyBsaWtlIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBwYXNzZWQgdG8gdXNlciBzcGFjZSB2aWEgdGhpbmdzIGxpa2UgYGNvcHlfdG9fdXNlcmAgb3IgbmV0bGluayBhdHRyaWJ1dGVzLiBUaGlzIGlzIGVudGlyZWx5IGludGVybmFsIHdpdGhpbiB0aGUga2VybmVsJ3MgbmV0d29yayBzdGFjay5cbjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljOioqIE5vLiBUaGlzIHBhdGNoIGRvZXNuJ3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiAgKipEYXRhIFN0cnVjdHVyZSBJbml0aWFsaXphdGlvbjoqKiBOb3RoaW5nIGNvbXBsZXggaXMgYmVpbmcgaW5pdGlhbGl6ZWQgaGVyZSB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBUaGUgZm9jdXMgaXMgb24gKnByZXZlbnRpbmcqIG1vZGlmaWNhdGlvbiBvZiBzaGFyZWQgYnVmZmVycyB0aHJvdWdoIENPVy5cbjQuICAqKkJvdW5kcy9MZW5ndGggQ2hlY2tzOioqIE5vLCBub3RoaW5nIGhlcmUgc3VnZ2VzdHMgdGhhdCB0aGlzIGlzIGludHJvZHVjaW5nIGFueSB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBib3VuZHMsIGxlbmd0aHMsIG9yIHBvdGVudGlhbGx5IGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBleGlzdGluZyBidWZmZXJzLiBUaGUgdXNlIG9mIGBza2JfY293X2hlYWRgIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBoYW5kbGUgdGhpcyBpc3N1ZS5cblxuU28sICpubyosIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCdzIHJlYWxseSBqdXN0IG1ha2luZyBzdXJlIHRoZSBwYWNrZXQgaGVhZGVycyBhcmUgc2FmZWx5IHVuc2hhcmVkIHdpdGggYHNrYl9jb3dfaGVhZGAgYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8sIGFuZCBtYWtpbmcgc3VyZSBhbGwgcG9pbnRlcnMgYXJlIGNvcnJlY3RseSByZWxvYWRlZCBhZnRlciBwb3RlbnRpYWwgcmVhbGxvY2F0aW9ucy4gQW5kIHRoYXQgS0FTQU4gc2hvdWxkIGhhbmRsZSBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gLyBPT0IgLyBVQUYgZXJyb3JzIHJlbGF0ZWQgdG8gdGhlc2UgcG90ZW50aWFsIHJlYWxsb2NhdGlvbnMuXG5cbkNvbnNlcXVlbnRseSwgYE5lZWRzS01TQU5gIHNob3VsZCBkZWZpbml0ZWx5IGJlIGZhbHNlIGhlcmUuIEtNU0FOIGlzIGZvciBjYXRjaGluZyAqdW5pbml0aWFsaXplZCogbWVtb3J5IHJlYWRzLCBhbmQgd2UndmUgZXN0YWJsaXNoZWQgdGhhdCB0aGUgcGF0Y2ggaXRzZWxmIGRvZXNuJ3QgaW50cm9kdWNlIGFueS4gS0FTQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBkZWFscyB3aXRoIGEgYnJvYWRlciBzZXQgb2YgbWVtb3J5IGVycm9ycywgaW5jbHVkaW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24sIGFsbCBvZiB3aGljaCBjb3VsZCB0aGVvcmV0aWNhbGx5IGFyaXNlIGZyb20gaW5jb3JyZWN0IGhhbmRsaW5nIG9mIGBza2JgIHJlYWxsb2NhdGlvbnMgb3IgcG9pbnRlciBpbnZhbGlkYXRpb25zLiBLQVNBTidzIGJyb2FkZXIgc2NvcGUgbWFrZXMgaXQgbW9yZSBhcHByb3ByaWF0ZSBmb3IgdGhpcyBzcGVjaWZpYyBzY2VuYXJpbywgYXMgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgb3IgZXZlbiByZWxldmFudCwgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE1OSwiT3V0cHV0VG9rZW5zIjoyODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNjoxNC42MzI4NDE5OTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBza2IgaGVhZGVyIG11dGFiaWxpdHkgaW4gdGhlIGJvbmRpbmcgQUxCL1RMQiB0cmFuc21pdCBwYXRocyAoZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IGFkZHMgYHNrYl9jb3dfaGVhZChza2IsIDApYCBjYWxscyBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgaW4gQVJQIHBhY2tldHMgKGBybGJfYXJwX3htaXRgKSBhbmQgRXRoZXJuZXQgaGVhZGVycyAoYGJvbmRfZG9fYWxiX3htaXRgKSwgZW5zdXJpbmcgY2xvbmVkL3NoYXJlZCBza2IgaGVhZHMgYXJlIGNvcGllZCBiZWZvcmUgd3JpdGluZy5cXG4yLiBJdCByZWxvYWRzIHRoZSBwb2ludGVyIHRvIHRoZSBBUlAvRXRoZXJuZXQgaGVhZGVyIGFmdGVyIGBza2JfY293X2hlYWRgIHRvIGF2b2lkIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2VzLlxcbjMuIEl0IGNsZWFucyB1cCByZWR1bmRhbnQgYHNrYl9yZXNldF9tYWNfaGVhZGVyKClgIGNhbGxzIGluIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgYnkgdXNpbmcgYHNrYl9ldGhfaGRyKHNrYilgLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgbWFuYWdlIHBhY2tldCBidWZmZXIgbXV0YWJpbGl0eSBhbmQgcHJldmVudCBkYXRhIGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLXJlYWxsb2MgYnVncyBvbiBzaGFyZWQvY2xvbmVkIHNrYnMgKGlzc3VlcyBkZXRlY3RhYmxlIGJ5IEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMsIHBhZGRpbmdzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBza2IgaGVhZGVyIG11dGFiaWxpdHkgaW4gdGhlIGJvbmRpbmcgQUxCL1RMQiB0cmFuc21pdCBwYXRocyAoZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IGFkZHMgYHNrYl9jb3dfaGVhZChza2IsIDApYCBjYWxscyBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgaW4gQVJQIHBhY2tldHMgKGBybGJfYXJwX3htaXRgKSBhbmQgRXRoZXJuZXQgaGVhZGVycyAoYGJvbmRfZG9fYWxiX3htaXRgKSwgZW5zdXJpbmcgY2xvbmVkL3NoYXJlZCBza2IgaGVhZHMgYXJlIGNvcGllZCBiZWZvcmUgd3JpdGluZy5cXG4yLiBJdCByZWxvYWRzIHRoZSBwb2ludGVyIHRvIHRoZSBBUlAvRXRoZXJuZXQgaGVhZGVyIGFmdGVyIGBza2JfY293X2hlYWRgIHRvIGF2b2lkIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2VzLlxcbjMuIEl0IGNsZWFucyB1cCByZWR1bmRhbnQgYHNrYl9yZXNldF9tYWNfaGVhZGVyKClgIGNhbGxzIGluIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgYnkgdXNpbmcgYHNrYl9ldGhfaGRyKHNrYilgLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgbWFuYWdlIHBhY2tldCBidWZmZXIgbXV0YWJpbGl0eSBhbmQgcHJldmVudCBkYXRhIGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLXJlYWxsb2MgYnVncyBvbiBzaGFyZWQvY2xvbmVkIHNrYnMgKGlzc3VlcyBkZXRlY3RhYmxlIGJ5IEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMsIHBhZGRpbmdzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowql4x5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 21:54:23 +0000 UTC FinishedAt: 2026-09-04 22:26:16 +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": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "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": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET" ], "series_id": "a97ddf6b-7083-4486-9b49-9ba9033607aa" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bond_alb_xmit", "bond_tlb_xmit", "bond_xmit_alb_slave_get", "bond_xmit_tlb_slave_get", "bond_do_alb_xmit", "rlb_arp_xmit" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfYWxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF90bGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfYWxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfdGxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX2RvX2FsYl94bWl0JiMzNDssCiAgICAmIzM0O3JsYl9hcnBfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBza2IgaGVhZGVyIG11dGFiaWxpdHkgaW4gdGhlIGJvbmRpbmcgQUxCL1RMQiB0cmFuc21pdCBwYXRocyAoZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgYWRkcyBgc2tiX2Nvd19oZWFkKHNrYiwgMClgIGNhbGxzIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHNvdXJjZSBNQUMgYWRkcmVzcyBpbiBBUlAgcGFja2V0cyAoYHJsYl9hcnBfeG1pdGApIGFuZCBFdGhlcm5ldCBoZWFkZXJzIChgYm9uZF9kb19hbGJfeG1pdGApLCBlbnN1cmluZyBjbG9uZWQvc2hhcmVkIHNrYiBoZWFkcyBhcmUgY29waWVkIGJlZm9yZSB3cml0aW5nLlxuMi4gSXQgcmVsb2FkcyB0aGUgcG9pbnRlciB0byB0aGUgQVJQL0V0aGVybmV0IGhlYWRlciBhZnRlciBgc2tiX2Nvd19oZWFkYCB0byBhdm9pZCBzdGFsZSBwb2ludGVyIGRlcmVmZXJlbmNlcy5cbjMuIEl0IGNsZWFucyB1cCByZWR1bmRhbnQgYHNrYl9yZXNldF9tYWNfaGVhZGVyKClgIGNhbGxzIGluIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgYnkgdXNpbmcgYHNrYl9ldGhfaGRyKHNrYilgLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIG1hbmFnZSBwYWNrZXQgYnVmZmVyIG11dGFiaWxpdHkgYW5kIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1yZWFsbG9jIGJ1Z3Mgb24gc2hhcmVkL2Nsb25lZCBza2JzIChpc3N1ZXMgZGV0ZWN0YWJsZSBieSBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBwYWRkaW5ncywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHRyYW5zbWlzc2lvbiBwYXRocyBpbiB0aGUgYm9uZGluZyBkcml2ZXIgZm9yIGJhbGFuY2UtYWxiIGFuZCBiYWxhbmNlLXRsYiBtb2RlcyAoYm9uZF9hbGIuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBza2IgaGVhZGVyIHdyaXRhYmlsaXR5IHVzaW5nIHNrYl9jb3dfaGVhZCBiZWZvcmUgbW9kaWZ5aW5nIE1BQy9BUlAgaGVhZGVycyBhbmQgdXNlcyBza2JfZXRoX2hkciBzYWZlbHkuIFRoZSBib25kaW5nIGRyaXZlciBpcyBhIHNvZnR3YXJlIG5ldGRldiBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYTM1YzI3OTUzMjk3NmViMzYyOGNhN2U3MzM1MmJjZTY0NTliYTc4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAyMjoyNToxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbmluZGV4IDY1NGYwNTFkMDAyMzkuLjQzYWM4ZTI4ZTQxODIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuQEAgLTY3OCw5ICYjNDM7Njc4LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnJsYl9hcnBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcdGlmIChhcnAtXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVBMWSkpIHtcbiBcdFx0LyogdGhlIGFycCBtdXN0IGJlIHNlbnQgb24gdGhlIHNlbGVjdGVkIHJ4IGNoYW5uZWwgKi9cbiBcdFx0dHhfc2xhdmUgPSBybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kLCBhcnApO1xuLVx0XHRpZiAodHhfc2xhdmUpXG4mIzQzO1x0XHRpZiAodHhfc2xhdmUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGFycC1cdTAwM2VtYWNfc3JjLFxuJiM0MztcdFx0XHRcdFx0ICAgICB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpKSB7XG4mIzQzO1x0XHRcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHRcdGFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0XHRcdGJvbmRfaHdfYWRkcl9jb3B5KGFycC1cdTAwM2VtYWNfc3JjLCB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsXG4gXHRcdFx0XHRcdCAgdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuKTtcbiYjNDM7XHRcdH1cbiBcdFx0bmV0ZGV2X2RiZyhib25kLVx1MDAzZWRldiwgXCYjMzQ7KHNsYXZlICVzKTogU2VydmVyIHNlbnQgQVJQIFJlcGx5IHBhY2tldFxcblwmIzM0OyxcbiBcdFx0XHQgICB0eF9zbGF2ZSA/IHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VuYW1lIDogXCYjMzQ7TlVMTFwmIzM0Oyk7XG4gXHR9IGVsc2UgaWYgKGFycC1cdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUVVFU1QpKSB7XG5AQCAtMTM0MCw3ICYjNDM7MTM0Niw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUpXG4ge1xuIFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcbi1cdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xuIFxuIFx0aWYgKCF0eF9zbGF2ZSkge1xuIFx0XHQvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovXG5AQCAtMTM1MSw3ICYjNDM7MTM1Niw5IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxuIFxuIFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNiBib25kX3NsYXZlX2Nhbl90eCh0eF9zbGF2ZSkpIHtcbiBcdFx0aWYgKHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKSkge1xuLVx0XHRcdGV0aGVyX2FkZHJfY29weShldGhfZGF0YS1cdTAwM2VoX3NvdXJjZSxcbiYjNDM7XHRcdFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gYm9uZF90eF9kcm9wKGJvbmQtXHUwMDNlZGV2LCBza2IpO1xuJiM0MztcdFx0XHRldGhlcl9hZGRyX2NvcHkoc2tiX2V0aF9oZHIoc2tiKS1cdTAwM2VoX3NvdXJjZSxcbiBcdFx0XHRcdFx0dHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbiBcdFx0fVxuIFxuQEAgLTEzNzUsOCAmIzQzOzEzODIsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XG4gXHR1MzIgaGFzaF9pbmRleDtcbiBcbi1cdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4tXHRldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtcbiYjNDM7XHRldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7XG4gXG4gXHQvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqL1xuIFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cdTAwM2VoX2Rlc3QpKSB7XG5AQCAtMTQyOCw4ICYjNDM7MTQzNCw3IEBAIHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXHR1MzIgaGFzaF9pbmRleCA9IDA7XG4gXHRpbnQgaGFzaF9zaXplID0gMDtcbiBcbi1cdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4tXHRldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtcbiYjNDM7XHRldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7XG4gXG4gXHRzd2l0Y2ggKG50b2hzKHNrYi1cdTAwM2Vwcm90b2NvbCkpIHtcbiBcdGNhc2UgRVRIX1BfSVA6IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCT05ESU5HJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtib25kX2FsYl94bWl0JiMzNDssCiAgICAmIzM0O2JvbmRfdGxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF94bWl0X2FsYl9zbGF2ZV9nZXQmIzM0OywKICAgICYjMzQ7Ym9uZF94bWl0X3RsYl9zbGF2ZV9nZXQmIzM0OywKICAgICYjMzQ7Ym9uZF9kb19hbGJfeG1pdCYjMzQ7LAogICAgJiMzNDtybGJfYXJwX3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFja2V0IHRyYW5zbWlzc2lvbiBwYXRocyBpbiB0aGUgYm9uZGluZyBkcml2ZXIgZm9yIGJhbGFuY2UtYWxiIGFuZCBiYWxhbmNlLXRsYiBtb2RlcyAoYm9uZF9hbGIuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBza2IgaGVhZGVyIHdyaXRhYmlsaXR5IHVzaW5nIHNrYl9jb3dfaGVhZCBiZWZvcmUgbW9kaWZ5aW5nIE1BQy9BUlAgaGVhZGVycyBhbmQgdXNlcyBza2JfZXRoX2hkciBzYWZlbHkuIFRoZSBib25kaW5nIGRyaXZlciBpcyBhIHNvZnR3YXJlIG5ldGRldiBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYTM1YzI3OTUzMjk3NmViMzYyOGNhN2U3MzM1MmJjZTY0NTliYTc4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAyMjoyNToxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwppbmRleCA2NTRmMDUxZDAwMjM5Li40M2FjOGUyOGU0MTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCkBAIC02NzgsOSAmIzQzOzY3OCwxNSBAQCBzdGF0aWMgc3RydWN0IHNsYXZlICpybGJfYXJwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQpCiAJaWYgKGFycC0mZ3Q7b3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVBMWSkpIHsKIAkJLyogdGhlIGFycCBtdXN0IGJlIHNlbnQgb24gdGhlIHNlbGVjdGVkIHJ4IGNoYW5uZWwgKi8KIAkJdHhfc2xhdmUgPSBybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kLCBhcnApOwotCQlpZiAodHhfc2xhdmUpCiYjNDM7CQlpZiAodHhfc2xhdmUgJmFtcDsmYW1wOwomIzQzOwkJICAgICFldGhlcl9hZGRyX2VxdWFsXzY0Yml0cyhhcnAtJmd0O21hY19zcmMsCiYjNDM7CQkJCQkgICAgIHR4X3NsYXZlLSZndDtkZXYtJmd0O2Rldl9hZGRyKSkgewomIzQzOwkJCWlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpCiYjNDM7CQkJCXJldHVybiBOVUxMOwomIzQzOwkJCWFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpOwogCQkJYm9uZF9od19hZGRyX2NvcHkoYXJwLSZndDttYWNfc3JjLCB0eF9zbGF2ZS0mZ3Q7ZGV2LSZndDtkZXZfYWRkciwKIAkJCQkJICB0eF9zbGF2ZS0mZ3Q7ZGV2LSZndDthZGRyX2xlbik7CiYjNDM7CQl9CiAJCW5ldGRldl9kYmcoYm9uZC0mZ3Q7ZGV2LCAmIzM0OyhzbGF2ZSAlcyk6IFNlcnZlciBzZW50IEFSUCBSZXBseSBwYWNrZXRcbiYjMzQ7LAogCQkJICAgdHhfc2xhdmUgPyB0eF9zbGF2ZS0mZ3Q7ZGV2LSZndDtuYW1lIDogJiMzNDtOVUxMJiMzNDspOwogCX0gZWxzZSBpZiAoYXJwLSZndDtvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUVVFU1QpKSB7CkBAIC0xMzQwLDcgJiM0MzsxMzQ2LDYgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsCiAJCQkJICAgIHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUpCiB7CiAJc3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9ICZhbXA7KEJPTkRfQUxCX0lORk8oYm9uZCkpOwotCXN0cnVjdCBldGhoZHIgKmV0aF9kYXRhID0gZXRoX2hkcihza2IpOwogCiAJaWYgKCF0eF9zbGF2ZSkgewogCQkvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovCkBAIC0xMzUxLDcgJiM0MzsxMzU2LDkgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsCiAKIAlpZiAodHhfc2xhdmUgJmFtcDsmYW1wOyBib25kX3NsYXZlX2Nhbl90eCh0eF9zbGF2ZSkpIHsKIAkJaWYgKHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLSZndDtjdXJyX2FjdGl2ZV9zbGF2ZSkpIHsKLQkJCWV0aGVyX2FkZHJfY29weShldGhfZGF0YS0mZ3Q7aF9zb3VyY2UsCiYjNDM7CQkJaWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSkKJiM0MzsJCQkJcmV0dXJuIGJvbmRfdHhfZHJvcChib25kLSZndDtkZXYsIHNrYik7CiYjNDM7CQkJZXRoZXJfYWRkcl9jb3B5KHNrYl9ldGhfaGRyKHNrYiktJmd0O2hfc291cmNlLAogCQkJCQl0eF9zbGF2ZS0mZ3Q7ZGV2LSZndDtkZXZfYWRkcik7CiAJCX0KIApAQCAtMTM3NSw4ICYjNDM7MTM4Miw3IEBAIHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsCiAJc3RydWN0IGV0aGhkciAqZXRoX2RhdGE7CiAJdTMyIGhhc2hfaW5kZXg7CiAKLQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCWV0aF9kYXRhID0gZXRoX2hkcihza2IpOwomIzQzOwlldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7CiAKIAkvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqLwogCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtJmd0O2hfZGVzdCkpIHsKQEAgLTE0MjgsOCAmIzQzOzE0MzQsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLAogCXUzMiBoYXNoX2luZGV4ID0gMDsKIAlpbnQgaGFzaF9zaXplID0gMDsKIAotCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0JZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7CiYjNDM7CWV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTsKIAogCXN3aXRjaCAobnRvaHMoc2tiLSZndDtwcm90b2NvbCkpIHsKIAljYXNlIEVUSF9QX0lQOiB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCb25kaW5nIERyaXZlciBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHRoZSBmaWxlIGltcGFjdGVkIGlzIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBBY3RpdmUtQmFja3VwIExvYWQgQmFsYW5jaW5nIG1vZHVsZSByZXNpZGVzLCBzbyBpdCBwaXF1ZXMgbXkgaW50ZXJlc3QuIE5vdywgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBhcmUgYHJsYl9hcnBfeG1pdGAsIGBib25kX2RvX2FsYl94bWl0YCwgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCwgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAuIEtub3dpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYWxsb3cgbWUgdG8gdHJhY2sgdGhlIGNoYW5nZXMgaW4gdGhlaXIgY29udGV4dC4KCk9mIGNvdXJzZSwgdGhlIGJvbmRpbmcgZHJpdmVyIGl0c2VsZiwgYSBzb2Z0d2FyZSBuZXRkZXYgZHJpdmVyLCBpcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwgbmV0d29yayBzdGFjaywgYW5kIGl0JiMzOTtzIGxvY2F0ZWQgaW4gdGhlIGBkcml2ZXJzL25ldC9ib25kaW5nL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIGdvb2Q7IEkgY2FuIHF1aWNrbHkgYWNjZXNzIGl0LiBCZWluZyBhYmxlIHRvIGNvbmZpZ3VyZSBhbmQgdGVzdCBpdCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIHVzaW5nIHN5emthbGxlciBpcyBjcnVjaWFsIOKAkyBJIGNhbiBpbW1lZGlhdGVseSB0aGluayBvZiBob3cgdGhpcyBhZmZlY3RzIG15IGF1dG9tYXRlZCB0ZXN0aW5nIHByb2NlZHVyZXMuIEFuZCBvZiBjb3Vyc2UsIHRoZSBuZXRsaW5rL2lwcm91dGUyIGludGVyZmFjZSAoZS5nLiwgYGlwIGxpbmsgYWRkIGJvbmQwIHR5cGUgYm9uZCBtb2RlIGJhbGFuY2UtYWxiYCAvIGBiYWxhbmNlLXRsYmApIGlzIGhvdyBJIHdvdWxkIGludGVyYWN0IHdpdGggaXQsIHdoaWNoIGlzIGVzc2VudGlhbCB0byBiZWFyIGluIG1pbmQuCgpCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBjb25mbGljdCB3aXRoIGFueSBvdGhlciBmZWF0dXJlcyBJIGRlcGVuZCBvbi4gVGhlbiwgSSYjMzk7bGwgbmVlZCB0byB1c2Ugb3VyIGVzdGFibGlzaGVkIHRvb2xzIHRvIGRvIGEgcHJvcGVyIGNvZGUgaW5zcGVjdGlvbi4gTGV0JiMzOTtzIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JPTkRJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUtNS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQk9ORElORykgJiM0Mzs9IGJvbmRpbmcub1xuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZS03LVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTI2Nj12b2lkIGJvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgc3RydWN0IHNsYXZlICpuZXdfYWN0aXZlKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTMzMi1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MTMzMzpcdFx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0JPTkRJTkdfRkFJTE9WRVIsIGJvbmQtXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTMzNC1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTE4ODg9aW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMDk0LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyMDk1Olx0c2xhdmVfZGV2LVx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX0JPTkRJTkc7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTIwOTYtXHQvKiBpbml0aWFsaXplIHNsYXZlIHN0YXRzICovXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yMzc1LVx0aWYgKCFuZXRpZl9pc19ib25kX21hc3RlcihzbGF2ZV9kZXYpKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyMzc2Olx0XHRzbGF2ZV9kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5JRkZfQk9ORElORztcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjM3Ny1cdGRldl9jbG9zZShzbGF2ZV9kZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MjQyNT1zdGF0aWMgaW50IF9fYm9uZF9yZWxlYXNlX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0yNTk0LVx0aWYgKCFuZXRpZl9pc19ib25kX21hc3RlcihzbGF2ZV9kZXYpKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzoyNTk1Olx0XHRzbGF2ZV9kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5JRkZfQk9ORElORztcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjU5Ni1cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTQwNjg9c3RhdGljIGludCBib25kX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00MDc1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo0MDc2Olx0aWYgKCEoZXZlbnRfZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IElGRl9CT05ESU5HKSlcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDA3Ny1cdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTk5Mj12b2lkIGJvbmRfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjAxNC1cdGJvbmRfZGV2LVx1MDAzZWZsYWdzIHw9IElGRl9NQVNURVI7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYwMTU6XHRib25kX2Rldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9CT05ESU5HIHwgSUZGX1VOSUNBU1RfRkxUIHwgSUZGX05PX1FVRVVFO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDE2LVx0Ym9uZF9kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH4oSUZGX1hNSVRfRFNUX1JFTEVBU0UgfCBJRkZfVFhfU0tCX1NIQVJJTkcpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMDYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBCb25kaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciBuZXR3b3JrIGJvbmRpbmcuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgdGhlIGBkcml2ZXJzL25ldC9ib25kaW5nL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGdvLXRvIHBsYWNlIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzbyBJJiMzOTtsbCBiZSBhYmxlIHRvIHNlZSB0aGUgcmVsZXZhbnQgYENPTkZJR19gIG9wdGlvbnMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlLCBhbmQgbWF5YmUgZXZlbiBzb21lIHVzZWZ1bCBoZWxwIHRleHQgcmlnaHQgb2ZmIHRoZSBiYXQuIFRoaXMgaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIHNvbGlkIG92ZXJ2aWV3IGJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZS4gVGltZSB0byBuYXZpZ2F0ZSB0aGUgZmlsZSBzeXN0ZW0gYW5kIHN0YXJ0IHBva2luZyBhcm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJPTkRJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXG5kcml2ZXJzL25ldC9LY29uZmlnLTQwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MTpjb25maWcgQk9ORElOR1xuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O0JvbmRpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjY3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcHJvY2Vzc2luZyB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBCT05ESU5HIEtjb25maWcgRW50cnkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYm9uZGluZyBkcml2ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIG92ZXIgdG8gdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlIGFuZCB6ZXJvIGluIG9uIHRoZSBgQk9ORElOR2Agc2VjdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM5LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgb3ZlcnZpZXcgb2YgdGhlIGNvbmZpZ3VyYWJsZSBmZWF0dXJlcyByZWxhdGVkIHRvIGxpbmsgYWdncmVnYXRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBhdmFpbGFibGUgYm9uZGluZyBtb2RlcywgYW55IGhhcmR3YXJlIGRlcGVuZGVuY2llcywgYW5kIHRoZSB0eXBpY2FsIGRlZmF1bHQgc2V0dGluZ3MuIEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBhZGp1c3QgdGhlaXIgYm9uZGluZyBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDM5Olx0aWYgTkVUX0NPUkVcbiAgNDA6XHRcbiAgNDE6XHRjb25maWcgQk9ORElOR1xuICA0MjpcdFx0dHJpc3RhdGUgXCYjMzQ7Qm9uZGluZyBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDQ0Olx0XHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cbiAgNDU6XHRcdGhlbHBcbiAgNDY6XHRcdCAgU2F5ICYjMzk7WSYjMzk7IG9yICYjMzk7TSYjMzk7IGlmIHlvdSB3aXNoIHRvIGJlIGFibGUgdG8gJiMzOTtib25kJiMzOTsgbXVsdGlwbGUgRXRoZXJuZXRcbiAgNDc6XHRcdCAgQ2hhbm5lbHMgdG9nZXRoZXIuIFRoaXMgaXMgY2FsbGVkICYjMzk7RXRoZXJjaGFubmVsJiMzOTsgYnkgQ2lzY28sXG4gIDQ4Olx0XHQgICYjMzk7VHJ1bmtpbmcmIzM5OyBieSBTdW4sIDgwMi4zYWQgYnkgdGhlIElFRUUsIGFuZCAmIzM5O0JvbmRpbmcmIzM5OyBpbiBMaW51eC5cbiAgNDk6XHRcbiAgNTA6XHRcdCAgVGhlIGRyaXZlciBzdXBwb3J0cyBtdWx0aXBsZSBib25kaW5nIG1vZGVzIHRvIGFsbG93IGZvciBib3RoIGhpZ2hcbiAgNTE6XHRcdCAgcGVyZm9ybWFuY2UgYW5kIGhpZ2ggYXZhaWxhYmlsaXR5IG9wZXJhdGlvbi5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgUmVmZXIgdG8gXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy5yc3RcdTAwM2UgZm9yIG1vcmVcbiAgNTQ6XHRcdCAgaW5mb3JtYXRpb24uXG4gIDU1Olx0XG4gIDU2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgNTc6XHRcdCAgd2lsbCBiZSBjYWxsZWQgYm9uZGluZy5cbiAgNTg6XHRcbiAgNTk6XHRjb25maWcgRFVNTVlcbiAgNjA6XHRcdHRyaXN0YXRlIFwmIzM0O0R1bW15IG5ldCBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuICA2MTpcdFx0aGVscFxuICA2MjpcdFx0ICBUaGlzIGlzIGVzc2VudGlhbGx5IGEgYml0LWJ1Y2tldCBkZXZpY2UgKGkuZS4gdHJhZmZpYyB5b3Ugc2VuZCB0b1xuICA2MzpcdFx0ICB0aGlzIGRldmljZSBpcyBjb25zaWduZWQgaW50byBvYmxpdmlvbikgd2l0aCBhIGNvbmZpZ3VyYWJsZSBJUFxuICA2NDpcdFx0ICBhZGRyZXNzLiBJdCBpcyBtb3N0IGNvbW1vbmx5IHVzZWQgaW4gb3JkZXIgdG8gbWFrZSB5b3VyIGN1cnJlbnRseVxuICA2NTpcdFx0ICBpbmFjdGl2ZSBTTElQIGFkZHJlc3Mgc2VlbSBsaWtlIGEgcmVhbCBhZGRyZXNzIGZvciBsb2NhbCBwcm9ncmFtcy5cbiAgNjY6XHRcdCAgSWYgeW91IHVzZSBTTElQIG9yIFBQUCwgeW91IG1pZ2h0IHdhbnQgdG8gc2F5IFkgaGVyZS4gSXQgd29uJiMzOTt0XG4gIDY3Olx0XHQgIGVubGFyZ2UgeW91ciBrZXJuZWwuIFdoYXQgYSBkZWFsLiBSZWFkIGFib3V0IGl0IGluIHRoZSBOZXR3b3JrXG4gIDY4Olx0XHQgIEFkbWluaXN0cmF0b3ImIzM5O3MgR3VpZGUsIGF2YWlsYWJsZSBmcm9tXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkyNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgaW4gYGJvbmRfYWxiLmNgLiBMZXQmIzM5O3MgZGlnIGluOgoKKipEaXZpbmcgaW50byBgYm9uZF9hbGIuY2AgZm9yIHNvbWUgdGFyZ2V0ZWQgaW5zcGVjdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgemVybyBpbiBvbiBgYm9uZF9hbGIuY2AgYW5kIHRha2UgYSBsb29rIGF0IGEgZmV3IHNwZWNpZmljIHNwb3RzLiBNeSBndXQgZmVlbGluZyBpcyB0ZWxsaW5nIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZyBpbnRlcmVzdGluZyBoYXBwZW5pbmcgb3IgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYXJvdW5kIGxpbmVzIDY3OCwgMTM0MCwgMTM3NSwgYW5kIDE0MjguIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRoYXQgYXJlYSwgc28gSSYjMzk7bGwgYmUgbG9va2luZyB0byBzZWUgd2hhdCBraW5kIG9mIG9wZXJhdGlvbnMgYXJlIGJlaW5nIGRvbmUgdGhlcmUsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byB0aGUgaW50ZXJhY3Rpb25zIG9mIG1lbW9yeSBvciBzeXN0ZW0gY2FsbHMuIFByb2JhYmx5IHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBib25kaW5nIHByb2Nlc3MuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBrZWVuIHRvIHNlZSBob3cgdGhlIGNvZGUgaGFuZGxlcyBlcnJvciBjb25kaXRpb25zIG9yIGVkZ2UgY2FzZXMgYXJvdW5kIHRob3NlIGFyZWFzLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgaW4gdXNlIG9uIHRob3NlIGxpbmVzIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGludGVudGlvbiBvZiB0aGUgY29kZSBpcy4gVWx0aW1hdGVseSwgSSYjMzk7bSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHJhY2UgY29uZGl0aW9ucywgb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBiZSBvcHRpbWl6ZWQgb3IsIHdvcnNlLCBpbnRyb2R1Y2UgYnVncy4gVGhlc2UgbGluZXMgYXJlIGxpa2VseSBjcml0aWNhbCB0byB0aGUgc3RhYmlsaXR5IG9mIHRoZSBib25kaW5nIGZ1bmN0aW9uLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgcnVubmluZyBzbW9vdGhseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY3MDpcdFx0aWYgKGRldikge1xuIDY3MTpcdFx0XHRpZiAobmV0aWZfaXNfYW55X2JyaWRnZV9tYXN0ZXIoZGV2KSkge1xuIDY3MjpcdFx0XHRcdGRldl9wdXQoZGV2KTtcbiA2NzM6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiA2NzQ6XHRcdFx0fVxuIDY3NTpcdFx0XHRkZXZfcHV0KGRldik7XG4gNjc2Olx0XHR9XG4gNjc3Olx0XG4gNjc4Olx0XHRpZiAoYXJwLVx1MDAzZW9wX2NvZGUgPT0gaHRvbnMoQVJQT1BfUkVQTFkpKSB7XG4gNjc5Olx0XHRcdC8qIHRoZSBhcnAgbXVzdCBiZSBzZW50IG9uIHRoZSBzZWxlY3RlZCByeCBjaGFubmVsICovXG4gNjgwOlx0XHRcdHR4X3NsYXZlID0gcmxiX2Nob29zZV9jaGFubmVsKHNrYiwgYm9uZCwgYXJwKTtcbiA2ODE6XHRcdFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNlxuIDY4MjpcdFx0XHQgICAgIWV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGFycC1cdTAwM2VtYWNfc3JjLFxuIDY4MzpcdFx0XHRcdFx0XHQgICAgIHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcikpIHtcbiA2ODQ6XHRcdFx0XHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxuIDY4NTpcdFx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNjg2Olx0XHRcdFx0YXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gNjg3Olx0XHRcdFx0Ym9uZF9od19hZGRyX2NvcHkoYXJwLVx1MDAzZW1hY19zcmMsIHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcixcbiA2ODg6XHRcdFx0XHRcdFx0ICB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4pO1xuIDY4OTpcdFx0XHR9XG4gNjkwOlx0XHRcdG5ldGRldl9kYmcoYm9uZC1cdTAwM2VkZXYsIFwmIzM0OyhzbGF2ZSAlcyk6IFNlcnZlciBzZW50IEFSUCBSZXBseSBwYWNrZXRcXG5cJiMzNDssXG4gNjkxOlx0XHRcdFx0ICAgdHhfc2xhdmUgPyB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlbmFtZSA6IFwmIzM0O05VTExcJiMzNDspO1xuIDY5MjpcdFx0fSBlbHNlIGlmIChhcnAtXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSkge1xuIDY5MzpcdFx0XHQvKiBDcmVhdGUgYW4gZW50cnkgaW4gdGhlIHJ4X2hhc2h0YmwgZm9yIHRoaXMgY2xpZW50IGFzIGFcbiA2OTQ6XHRcdFx0ICogcGxhY2UgaG9sZGVyLlxuIDY5NTpcdFx0XHQgKiBXaGVuIHRoZSBhcnAgcmVwbHkgaXMgcmVjZWl2ZWQgdGhlIGVudHJ5IHdpbGwgYmUgdXBkYXRlZFxuIDY5NjpcdFx0XHQgKiB3aXRoIHRoZSBjb3JyZWN0IHVuaWNhc3QgYWRkcmVzcyBvZiB0aGUgY2xpZW50LlxuIDY5NzpcdFx0XHQgKi9cbiA2OTg6XHRcdFx0dHhfc2xhdmUgPSBybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kLCBhcnApO1xuIDY5OTpcdFxuIDcwMDpcdFx0XHQvKiBUaGUgQVJQIHJlcGx5IHBhY2tldHMgbXVzdCBiZSBkZWxheWVkIHNvIHRoYXRcbiA3MDE6XHRcdFx0ICogdGhleSBjYW4gY2FuY2VsIG91dCB0aGUgaW5mbHVlbmNlIG9mIHRoZSBBUlAgcmVxdWVzdC5cbiA3MDI6XHRcdFx0ICovXG4gNzAzOlx0XHRcdGJvbmQtXHUwMDNlYWxiX2luZm8ucmxiX3VwZGF0ZV9kZWxheV9jb3VudGVyID0gUkxCX1VQREFURV9ERUxBWTtcbiA3MDQ6XHRcbiA3MDU6XHRcdFx0LyogYXJwIHJlcXVlc3RzIGFyZSBicm9hZGNhc3QgYW5kIGFyZSBzZW50IG9uIHRoZSBwcmltYXJ5XG4gNzA2Olx0XHRcdCAqIHRoZSBhcnAgcmVxdWVzdCB3aWxsIGNvbGxhcHNlIGFsbCBjbGllbnRzIG9uIHRoZSBzdWJuZXQgdG9cbiA3MDc6XHRcdFx0ICogdGhlIHByaW1hcnkgc2xhdmUuIFdlIG11c3QgcmVnaXN0ZXIgdGhlc2UgY2xpZW50cyB0byBiZVxuIDcwODpcdFx0XHQgKiB1cGRhdGVkIHdpdGggdGhlaXIgYXNzaWduZWQgbWFjLlxuIDcwOTpcdFx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gYGJvbmRfYWxiLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayBhbmQgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBib25kX2FsYi5jYCBmaWxlLiBJJiMzOTt2ZSBiZWVuIG1lYW5pbmcgdG8gcmV2aXNpdCB0aGlzIHNlY3Rpb24uIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGxvZ2ljIGFyb3VuZCBsaW5lcyAxMzQwLTE0NTAuIEkgdmFndWVseSByZWNhbGwgdGhlcmUgd2FzIHNvbWV0aGluZyB0aGF0IEkgd2FudGVkIHRvIGNoZWNrOyBwZXJoYXBzIGEgc3VidGxlIGVkZ2UgY2FzZSBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkgdGhhdCB3YXJyYW50cyBhIHNlY29uZCBnbGFuY2UuIEl0IGNvdWxkIGJlIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBzcGVjaWZpYyBib25kaW5nIGNvbmZpZ3VyYXRpb25zLCBvciBtYXliZSBqdXN0IGEgY2hhbmNlIHRvIGNvbmZpcm0gdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIGFyZSBzdGlsbCBvcHRpbWFsIGdpdmVuIGhvdyB3ZSB1c2UgdGhlbSBub3cuIEl0JiMzOTtzIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHN0aWxsIHNoaXAtc2hhcGUgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM0MDpcdFxuMTM0MTpcdFx0aWYgKGJvbmRfaW5mby1cdTAwM2VybGJfZW5hYmxlZClcbjEzNDI6XHRcdFx0cmxiX2RlaW5pdGlhbGl6ZShib25kKTtcbjEzNDM6XHR9XG4xMzQ0Olx0XG4xMzQ1Olx0c3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4xMzQ2Olx0XHRcdFx0XHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcbjEzNDc6XHR7XG4xMzQ4Olx0XHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuMTM0OTpcdFxuMTM1MDpcdFx0aWYgKCF0eF9zbGF2ZSkge1xuMTM1MTpcdFx0XHQvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovXG4xMzUyOlx0XHRcdHR4X3NsYXZlID0gcmN1X2RlcmVmZXJlbmNlKGJvbmQtXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpO1xuMTM1MzpcdFx0XHRpZiAoYm9uZC1cdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpXG4xMzU0Olx0XHRcdFx0Ym9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbjEzNTU6XHRcdH1cbjEzNTY6XHRcbjEzNTc6XHRcdGlmICh0eF9zbGF2ZSBcdTAwMjZcdTAwMjYgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7XG4xMzU4Olx0XHRcdGlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbjEzNTk6XHRcdFx0XHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxuMTM2MDpcdFx0XHRcdFx0cmV0dXJuIGJvbmRfdHhfZHJvcChib25kLVx1MDAzZWRldiwgc2tiKTtcbjEzNjE6XHRcdFx0XHRldGhlcl9hZGRyX2NvcHkoc2tiX2V0aF9oZHIoc2tiKS1cdTAwM2VoX3NvdXJjZSxcbjEzNjI6XHRcdFx0XHRcdFx0dHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbjEzNjM6XHRcdFx0fVxuMTM2NDpcdFxuMTM2NTpcdFx0XHRyZXR1cm4gYm9uZF9kZXZfcXVldWVfeG1pdChib25kLCBza2IsIHR4X3NsYXZlLVx1MDAzZWRldik7XG4xMzY2Olx0XHR9XG4xMzY3Olx0XG4xMzY4Olx0XHRpZiAodHhfc2xhdmUgXHUwMDI2XHUwMDI2IGJvbmQtXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKSB7XG4xMzY5Olx0XHRcdHNwaW5fbG9jayhcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4xMzcwOlx0XHRcdF9fdGxiX2NsZWFyX3NsYXZlKGJvbmQsIHR4X3NsYXZlLCAwKTtcbjEzNzE6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2Ym9uZC1cdTAwM2Vtb2RlX2xvY2spO1xuMTM3MjpcdFx0fVxuMTM3MzpcdFxuMTM3NDpcdFx0Lyogbm8gc3VpdGFibGUgaW50ZXJmYWNlLCBmcmFtZSBub3Qgc2VudCAqL1xuMTM3NTpcdFx0cmV0dXJuIGJvbmRfdHhfZHJvcChib25kLVx1MDAzZWRldiwgc2tiKTtcbjEzNzY6XHR9XG4xMzc3Olx0XG4xMzc4Olx0c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbjEzNzk6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4xMzgwOlx0e1xuMTM4MTpcdFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XG4xMzgyOlx0XHRzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YTtcbjEzODM6XHRcdHUzMiBoYXNoX2luZGV4O1xuMTM4NDpcdFxuMTM4NTpcdFx0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xuMTM4NjpcdFxuMTM4NzpcdFx0LyogRG8gbm90IFRYIGJhbGFuY2UgYW55IG11bHRpY2FzdCBvciBicm9hZGNhc3QgKi9cbjEzODg6XHRcdGlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtXHUwMDNlaF9kZXN0KSkge1xuMTM4OTpcdFx0XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuMTM5MDpcdFx0XHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuMTM5MTpcdFx0XHRcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYikpXG4xMzkyOlx0XHRcdFx0XHRicmVhaztcbjEzOTM6XHRcdFx0XHRmYWxsdGhyb3VnaDtcbjEzOTQ6XHRcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4xMzk1Olx0XHRcdFx0aGFzaF9pbmRleCA9IGJvbmRfeG1pdF9oYXNoKGJvbmQsIHNrYik7XG4xMzk2Olx0XHRcdFx0aWYgKGJvbmQtXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKSB7XG4xMzk3Olx0XHRcdFx0XHR0eF9zbGF2ZSA9IHRsYl9jaG9vc2VfY2hhbm5lbChib25kLFxuMTM5ODpcdFx0XHRcdFx0XHRcdFx0ICAgICAgaGFzaF9pbmRleCBcdTAwMjYgMHhGRixcbjEzOTk6XHRcdFx0XHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4pO1xuMTQwMDpcdFx0XHRcdH0gZWxzZSB7XG4xNDAxOlx0XHRcdFx0XHRzdHJ1Y3QgYm9uZF91cF9zbGF2ZSAqc2xhdmVzO1xuMTQwMjpcdFx0XHRcdFx0dW5zaWduZWQgaW50IGNvdW50O1xuMTQwMzpcdFxuMTQwNDpcdFx0XHRcdFx0c2xhdmVzID0gcmN1X2RlcmVmZXJlbmNlKGJvbmQtXHUwMDNldXNhYmxlX3NsYXZlcyk7XG4xNDA1Olx0XHRcdFx0XHRjb3VudCA9IHNsYXZlcyA/IFJFQURfT05DRShzbGF2ZXMtXHUwMDNlY291bnQpIDogMDtcbjE0MDY6XHRcdFx0XHRcdGlmIChsaWtlbHkoY291bnQpKVxuMTQwNzpcdFx0XHRcdFx0XHR0eF9zbGF2ZSA9IHNsYXZlcy1cdTAwM2VhcnJbaGFzaF9pbmRleCAlXG4xNDA4Olx0XHRcdFx0XHRcdFx0XHQgICAgICAgY291bnRdO1xuMTQwOTpcdFx0XHRcdH1cbjE0MTA6XHRcdFx0XHRicmVhaztcbjE0MTE6XHRcdFx0fVxuMTQxMjpcdFx0fVxuMTQxMzpcdFx0cmV0dXJuIHR4X3NsYXZlO1xuMTQxNDpcdH1cbjE0MTU6XHRcbjE0MTY6XHRuZXRkZXZfdHhfdCBib25kX3RsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbjE0MTc6XHR7XG4xNDE4Olx0XHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTtcbjE0MTk6XHRcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmU7XG4xNDIwOlx0XG4xNDIxOlx0XHR0eF9zbGF2ZSA9IGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KGJvbmQsIHNrYik7XG4xNDIyOlx0XHRyZXR1cm4gYm9uZF9kb19hbGJfeG1pdChza2IsIGJvbmQsIHR4X3NsYXZlKTtcbjE0MjM6XHR9XG4xNDI0Olx0XG4xNDI1Olx0c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbjE0MjY6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4xNDI3Olx0e1xuMTQyODpcdFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcbjE0Mjk6XHRcdHN0YXRpYyBjb25zdCBfX2JlMzIgaXBfYmNhc3QgPSBodG9ubCgweGZmZmZmZmZmKTtcbjE0MzA6XHRcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xuMTQzMTpcdFx0Y29uc3QgdTggKmhhc2hfc3RhcnQgPSBOVUxMO1xuMTQzMjpcdFx0Ym9vbCBkb190eF9iYWxhbmNlID0gdHJ1ZTtcbjE0MzM6XHRcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xuMTQzNDpcdFx0dTMyIGhhc2hfaW5kZXggPSAwO1xuMTQzNTpcdFx0aW50IGhhc2hfc2l6ZSA9IDA7XG4xNDM2Olx0XG4xNDM3Olx0XHRldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7XG4xNDM4Olx0XG4xNDM5Olx0XHRzd2l0Y2ggKG50b2hzKHNrYi1cdTAwM2Vwcm90b2NvbCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc3MwoJCQkJCQkJb3V0cHV0OiA1NgoJCQkJCQkJdGhvdWdodHM6IDQ5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgUGFja2V0IEhlYWRlciBNb2RpZmljYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHBhdGNoIHRoYXQmIzM5O3MgY3J1Y2lhbCBmb3IgYXZvaWRpbmcgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yayBwYWNrZXQgaGVhZGVycywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGFyZSBnb29kIGNoYW5nZXMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHByZXZlbnRpbmcgbW9kaWZpY2F0aW9ucyB0byBzaGFyZWQgb3IgY2xvbmVkIGBza2JgIGhlYWRlcnMgaW4tcGxhY2UsIHdoaWNoIGlzIGEgY29tbW9uIGNhdXNlIG9mIGhhcmQtdG8tZGVidWcgaXNzdWVzLiBUaGUgdXNlIG9mIGBza2JfY293X2hlYWQoc2tiLCAwKWAgaXMgZXhhY3RseSB0aGUgcmlnaHQgYXBwcm9hY2ggdG8gZW5zdXJlIGNvcHktb24td3JpdGUgc2VtYW50aWNzIGJlZm9yZSBtYWtpbmcgY2hhbmdlcy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgdGVjaG5pcXVlIGluIHRoaXMgY29udGV4dC4KCkxvb2tpbmcgYXQgdGhlIHNwZWNpZmljIGV4YW1wbGVzIHByb3ZpZGVkLCBpdCYjMzk7cyBjbGVhciB3aGF0JiMzOTtzIGJlaW5nIGFkZHJlc3NlZDoKCjEuICBJbiBgcmxiX2FycF94bWl0YCwgd2UgaGF2ZSB0aGUgYHNrYl9jb3dfaGVhZGAgY2hlY2sgYmVmb3JlIG1vZGlmeWluZyB0aGUgQVJQIHNvdXJjZSBNQUMgYWRkcmVzcy4gVGhlIGdvYWwgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIHNvdXJjZSBNQUMgYWRkcmVzcyBpc24mIzM5O3Qgb3ZlcndyaXR0ZW4gb24gc2hhcmVkIGJ1ZmZlcnMsIGFuZCB0aGVyZWZvcmUgdGhhdCB0aGUgZGF0YSBoYXMgYSB1bmlxdWUgYmFja2luZy4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIGxpa2VseSB2dWxuZXJhYmxlIHRvIG1vZGlmeWluZyBzaGFyZWQgZGF0YSBpZiB0aGUgc291cmNlIE1BQyBvbiB0aGUgcGFja2V0IGRpZG4mIzM5O3QgbWF0Y2ggdGhlIHNsYXZlJiMzOTtzIGFkZHJlc3MsIGxlYWRpbmcgdG8gYSByYWNlIGNvbmRpdGlvbiBvciBpbmNvcnJlY3QgYmVoYXZpb3Igb24gbXVsdGlwbGUgdGhyZWFkcy4KCjIuICBJbiBgYm9uZF9kb19hbGJfeG1pdGAsIGEgc2ltaWxhciBhcHByb2FjaCBpcyB0YWtlbiwgYnV0IHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgaXMgbW9kaWZpZWQgbW9yZSBnZW5lcmljYWxseS4gSXQmIzM5O3MgZ3JlYXQgdG8gc2VlIGBza2JfY293X2hlYWRgIGVtcGxveWVkIGJlZm9yZSBjb3B5aW5nIHRoZSBzbGF2ZSYjMzk7cyBNQUMgYWRkcmVzcyBpbnRvIHRoZSBwYWNrZXQuIFRoZSBjb2RlIHRoZW4gdXNlcyBgc2tiX2V0aF9oZHIoc2tiKWAgdG8gYWNjZXNzIHRoZSBFdGhlcm5ldCBoZWFkZXIsIHdoaWNoIGlzIGFsc28gY29ycmVjdCBhbmQgbXVjaCBzYWZlci4KCjMuICBJbiBib3RoIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBza2JfZXRoX2hkcihza2IpYCBkaXJlY3RseS4gVGhpcyBpcyBhIHN1YnRsZSBidXQgaW1wb3J0YW50IGNoYW5nZSwgZml4aW5nIGluc3RhbmNlcyB3aGVyZSBgZXRoX2hkcihza2IpYCB3YXMgcHJldmlvdXNseSB1c2VkLiBUaGUgcmVhc29uIHdoeSB0aGlzIGlzIGFuIGlzc3VlIGlzIHRoYXQgYGV0aF9oZHJgIGhhcyBiZWVuIGtub3duIHRvIGJlIHByb2JsZW1hdGljLCBhbmQgaXMgbm93IGdlbmVyYWxseSBkZXByZWNhdGVkLgoKTm93LCBteSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gcmV2aWV3IHRoZSBjYWxsZXJzIG9mIHRoZXNlIGZ1bmN0aW9ucyB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoZSBmaXggYW5kIGVuc3VyZSBubyBvdGhlciBpbnN0YW5jZXMgb2YgdnVsbmVyYWJsZSBjb2RlIHJlbWFpbiB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyLiBUaGUgZnVuY3Rpb25zIG9mIGludGVyZXN0IGFyZSBgcmxiX2FycF94bWl0YCwgYGJvbmRfZG9fYWxiX3htaXRgLCBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgLCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLCBgYm9uZF9hbGJfeG1pdGAsIGFuZCBgYm9uZF90bGJfeG1pdGAuIEEgdGhvcm91Z2ggYW5hbHlzaXMgb2YgdGhlc2UgY2FsbGVycyB3aWxsIGJlIGVzc2VudGlhbC4gVGhpcyBwYXRjaCBhcHBlYXJzIHRvIGFkZHJlc3MgcmVhbCBjb25jdXJyZW5jeSBpc3N1ZXMgdGhhdCBjYW4gbGVhZCB0byBzdWJ0bGUgYnVncywgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIG15IHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JsYl9hcnBfeG1pdHxib25kX2RvX2FsYl94bWl0fGJvbmRfYWxiX3htaXR8Ym9uZF90bGJfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTIyNz1zdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMzItXHQvKiBXZSBkb24mIzM5O3QgbmVlZCB0byBkaXNhYmxlIHNvZnRpcnEgaGVyZSwgYmVjYXVzZVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjIzMzpcdCAqIHRsYl9jaG9vc2VfY2hhbm5lbCgpIGlzIG9ubHkgY2FsbGVkIGJ5IGJvbmRfYWxiX3htaXQoKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzNC1cdCAqIHdoaWNoIGFscmVhZHkgaGFzIHNvZnRpcnEgZGlzYWJsZWQuXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTU1Mz1zdGF0aWMgc3RydWN0IHNsYXZlICpybGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtNjUyLSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjY1MzpzdGF0aWMgc3RydWN0IHNsYXZlICpybGJfYXJwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtNjU0LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTMzNT12b2lkIGJvbmRfYWxiX2RlaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTM0NC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxMzQ1OnN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzNDYtXHRcdFx0XHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTM3OD1zdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNDE1LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE0MTY6bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQxNy17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MjEtXHR0eF9zbGF2ZSA9IGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KGJvbmQsIHNrYik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQyMjpcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MjMtfVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNDI1PXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0OTgtXHRcdGlmIChib25kX2luZm8tXHUwMDNlcmxiX2VuYWJsZWQpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQ5OTpcdFx0XHR0eF9zbGF2ZSA9IHJsYl9hcnBfeG1pdChza2IsIGJvbmQpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MDAtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTI4LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1Mjk6bmV0ZGV2X3R4X3QgYm9uZF9hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUzMC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MzQtXHR0eF9zbGF2ZSA9IGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KGJvbmQsIHNrYik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTUzNTpcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MzYtfVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTU1MD1zdGF0aWMgbmV0ZGV2X3R4X3QgX19ib25kX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1NzYtXHRjYXNlIEJPTkRfTU9ERV9BTEI6XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU1Nzc6XHRcdHJldHVybiBib25kX2FsYl94bWl0KHNrYiwgZGV2KTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTU3OC1cdGNhc2UgQk9ORF9NT0RFX1RMQjpcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTU3OTpcdFx0cmV0dXJuIGJvbmRfdGxiX3htaXQoc2tiLCBkZXYpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTgwLVx0ZGVmYXVsdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMjMKCQkJCQkJCW91dHB1dDogMTgyCgkJCQkJCQl0aG91Z2h0czogNzUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEJvbmRpbmcgQUxCL1RMQiBNb2RlIFJlYWNoYWJpbGl0eSBhbmQgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O20gZm9jdXNpbmcgb24gcmVhY2hhYmlsaXR5IHdpdGhpbiB0aGUgbmV0d29ya2luZy9ib25kaW5nIGRyaXZlciAoYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2ApLiBUaGUgYm9uZGluZyBkZXZpY2UgaXRzZWxmIGlzIGEgdmlydHVhbCBzb2Z0d2FyZSBjb25zdHJ1Y3QgY3JlYXRlZCB1c2luZyBuZXRsaW5rIChzcGVjaWZpY2FsbHkgYFJUTV9ORVdMSU5LYCksIGFuZCBpdCBwbGF5cyBuaWNlbHkgd2l0aCBvdGhlciB2aXJ0dWFsIGludGVyZmFjZXMgbGlrZSBkdW1teSBvciB2ZXRoIGRldmljZXMgb2Z0ZW4gc2VlbiBpbiBRRU1VIG9yIHN5emthbGxlciBlbnZpcm9ubWVudHMuIFRoaXMgaXMgaW1wb3J0YW50LgoKTm93LCBsb29raW5nIGF0IHBhY2tldCB0cmFuc21pc3Npb24gaW4gVExCIG9yIEFMQiBtb2RlIChgQk9ORF9NT0RFX1RMQmAgb3IgYEJPTkRfTU9ERV9BTEJgKSwgSSYjMzk7dmUgdHJhY2VkIHRoZSBleGVjdXRpb24gcGF0aDogYGJvbmRfYWxiX3htaXRgIG9yIGBib25kX3RsYl94bWl0YCBkaXJlY3RseSBpbnZva2UgYGJvbmRfZG9fYWxiX3htaXRgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAsIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAsIGFuZCBgcmxiX2FycF94bWl0YC4gQ3J1Y2lhbGx5LCB0aGlzIG1lYW5zIHRob3NlIGZ1bmN0aW9ucyBhcmUgKmRpcmVjdGx5KiBpbnZvbHZlZCBpbiBwYWNrZXQgdHJhbnNtaXNzaW9uIG9uIHRoZSBib25kIGRldmljZS4KCkJhc2VkIG9uIHRoaXMsIGl0JiMzOTtzIGNsZWFyOiBSZWFjaGFiaWxpdHkgaXMgKllFUyohIFN5emthbGxlciBpcyBjYXBhYmxlIG9mIGNyZWF0aW5nIGJvbmQgZGV2aWNlcyBhbmQgc2VuZGluZyBwYWNrZXRzIHRocm91Z2ggdGhlbS4gRXhjZWxsZW50LiBUaGlzIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1enppbmcuCgpOb3csIHRoZSBqdWljeSBwYXJ0OiBXb3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LCAqWUVTKiEgVGhlIGNvZGUgbW9kaWZpZXMgdGhlIHBhY2tldCB0cmFuc21pc3Npb24gcGF0aC4gU3BlY2lmaWNhbGx5LCBJIHNlZSBtYW5pcHVsYXRpb25zIGluIGhlYWRlciBhY2Nlc3MgYW5kIHNrYiBjbG9uaW5nL2NvdyBoZWFkIHJlLWFsbG9jYXRpb24gaGFuZGxpbmcgYXJlIHByZXNlbnQgaW4gdGhpcyBjb2RlIHBhdGguIFRoaXMgYXJlYSByZXByZXNlbnRzIGEgZ29vZCBzdXJmYWNlIGZvciB1bmNvdmVyaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgpMZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzLiBUaGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIGludGVyZXN0ZWQgaW4gYXJlOgoKKiAgIGBybGJfYXJwX3htaXRgIChzdGF0aWMsIGluIGBib25kX2FsYi5jYCkKKiAgIGBib25kX2RvX2FsYl94bWl0YCAoc3RhdGljLCBpbiBgYm9uZF9hbGIuY2ApCiogICBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgIChub24tc3RhdGljLCBpbiBgYm9uZF9hbGIuY2ApCiogICBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgIChub24tc3RhdGljLCBpbiBgYm9uZF9hbGIuY2ApCiogICBgYm9uZF9hbGJfeG1pdGAgKGVudHJ5IHBvaW50LCBub24tc3RhdGljLCBpbiBgYm9uZF9hbGIuY2ApCiogICBgYm9uZF90bGJfeG1pdGAgKGVudHJ5IHBvaW50LCBub24tc3RhdGljLCBpbiBgYm9uZF9hbGIuY2ApCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGVzZSBzeW1ib2xzIGFyZSAqbm90KiB1YmlxdWl0b3VzLiBUaGV5JiMzOTtyZSBhbGwgdmVyeSBzcGVjaWZpYyB0byB0aGUgYm9uZGluZyBBTEIvVExCIG1vZGUgdHJhbnNtaXNzaW9uIHBhdGhzLCBtYWtpbmcgdGhlbSBleGNlbGxlbnQgY2FuZGlkYXRlcy4KClJlZ2FyZGluZyBjb25maWdzLCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgQk9ORElOR2AgYW5kIGBJTkVUYCBhcmUgdGhlIGVzc2VudGlhbCBmbGFncy4gYElORVRgIGlzIGEgZGVwZW5kZW5jeSBvZiBgQk9ORElOR2AsIGFuZCBgQk9ORElOR2AgYWxzbyBkZXBlbmRzIG9uIGBUTFMgfHwgVExTX0RFVklDRT1uYCBhcyBkZWZpbmVkIGluIGBkcml2ZXJzL25ldC9LY29uZmlnYCwgYnV0IGZvciBzaW1wbGljaXR5LCBgQk9ORElOR2Agd2lsbCBzdWZmaWNlLgoKVGhlcmVmb3JlLCBteSBmaW5hbCBhbmFseXNpcywgZm9sbG93aW5nIHRoZSBwcmVzY3JpYmVkIGZvcm1hdCwgaXM6CgoqICAgKipFbmFibGVDb25maWdzOioqIGBbJiMzNDtCT05ESU5HJiMzNDssICYjMzQ7SU5FVCYjMzQ7XWAgKG9yIHNpbXBsaWZpZWQsIGBbJiMzNDtCT05ESU5HJiMzNDtdYCkKKiAgICoqRm9jdXNTeW1ib2xzOioqCiAgICAqICAgYGJvbmRfYWxiX3htaXRgCiAgICAqICAgYGJvbmRfdGxiX3htaXRgCiAgICAqICAgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YAogICAgKiAgIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAKICAgICogICBgYm9uZF9kb19hbGJfeG1pdGAKICAgICogICBgcmxiX2FycF94bWl0YAoqICAgKipXb3J0aEZ1enppbmc6KiogYHRydWVgCiogICAqKlJlYXNvbmluZzoqKiBUaGUgY29kZSBtb2RpZmllcyBwYWNrZXQgdHJhbnNtaXNzaW9uLCBoZWFkZXIgYWNjZXNzLCBhbmQgc2tiIGhhbmRsaW5nIGluIEFMQi9UTEIgbW9kZXMsIG1ha2luZyBpdCBhIHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0IGFuZCByZWFjaGFibGUgdmlhIHN5emthbGxlci1jcmVhdGVkIGJvbmQgZGV2aWNlcy4KCk9rYXksIGV2ZXJ5dGhpbmcgbG9va3MgZ29vZC4gUmVhZHkgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JvbmRfYWxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF90bGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfYWxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfdGxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX2RvX2FsYl94bWl0JiMzNDssCiAgICAmIzM0O3JsYl9hcnBfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWNrZXQgdHJhbnNtaXNzaW9uIHBhdGhzIGluIHRoZSBib25kaW5nIGRyaXZlciBmb3IgYmFsYW5jZS1hbGIgYW5kIGJhbGFuY2UtdGxiIG1vZGVzIChib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHNrYiBoZWFkZXIgd3JpdGFiaWxpdHkgdXNpbmcgc2tiX2Nvd19oZWFkIGJlZm9yZSBtb2RpZnlpbmcgTUFDL0FSUCBoZWFkZXJzIGFuZCB1c2VzIHNrYl9ldGhfaGRyIHNhZmVseS4gVGhlIGJvbmRpbmcgZHJpdmVyIGlzIGEgc29mdHdhcmUgbmV0ZGV2IGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk9ORElORyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Ym9uZF9hbGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3RsYl94bWl0JiMzNDssCiAgICAmIzM0O2JvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0JiMzNDssCiAgICAmIzM0O2JvbmRfeG1pdF90bGJfc2xhdmVfZ2V0JiMzNDssCiAgICAmIzM0O2JvbmRfZG9fYWxiX3htaXQmIzM0OywKICAgICYjMzQ7cmxiX2FycF94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCB0cmFuc21pc3Npb24gcGF0aHMgaW4gdGhlIGJvbmRpbmcgZHJpdmVyIGZvciBiYWxhbmNlLWFsYiBhbmQgYmFsYW5jZS10bGIgbW9kZXMgKGJvbmRfYWxiLmMpLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgc2tiIGhlYWRlciB3cml0YWJpbGl0eSB1c2luZyBza2JfY293X2hlYWQgYmVmb3JlIG1vZGlmeWluZyBNQUMvQVJQIGhlYWRlcnMgYW5kIHVzZXMgc2tiX2V0aF9oZHIgc2FmZWx5LiBUaGUgYm9uZGluZyBkcml2ZXIgaXMgYSBzb2Z0d2FyZSBuZXRkZXYgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNrYiBoZWFkZXIgbXV0YWJpbGl0eSBpbiB0aGUgYm9uZGluZyBBTEIvVExCIHRyYW5zbWl0IHBhdGhzIChkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMpLiBTcGVjaWZpY2FsbHk6XG4xLiBJdCBhZGRzIGBza2JfY293X2hlYWQoc2tiLCAwKWAgY2FsbHMgYmVmb3JlIG1vZGlmeWluZyB0aGUgc291cmNlIE1BQyBhZGRyZXNzIGluIEFSUCBwYWNrZXRzIChgcmxiX2FycF94bWl0YCkgYW5kIEV0aGVybmV0IGhlYWRlcnMgKGBib25kX2RvX2FsYl94bWl0YCksIGVuc3VyaW5nIGNsb25lZC9zaGFyZWQgc2tiIGhlYWRzIGFyZSBjb3BpZWQgYmVmb3JlIHdyaXRpbmcuXG4yLiBJdCByZWxvYWRzIHRoZSBwb2ludGVyIHRvIHRoZSBBUlAvRXRoZXJuZXQgaGVhZGVyIGFmdGVyIGBza2JfY293X2hlYWRgIHRvIGF2b2lkIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2VzLlxuMy4gSXQgY2xlYW5zIHVwIHJlZHVuZGFudCBgc2tiX3Jlc2V0X21hY19oZWFkZXIoKWAgY2FsbHMgaW4gYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCBieSB1c2luZyBgc2tiX2V0aF9oZHIoc2tiKWAuXG5cblRoZXNlIG1vZGlmaWNhdGlvbnMgbWFuYWdlIHBhY2tldCBidWZmZXIgbXV0YWJpbGl0eSBhbmQgcHJldmVudCBkYXRhIGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLXJlYWxsb2MgYnVncyBvbiBzaGFyZWQvY2xvbmVkIHNrYnMgKGlzc3VlcyBkZXRlY3RhYmxlIGJ5IEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMsIHBhZGRpbmdzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGEzNWMyNzk1MzI5NzZlYjM2MjhjYTdlNzMzNTJiY2U2NDU5YmE3OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMjI6MjU6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKaW5kZXggNjU0ZjA1MWQwMDIzOS4uNDNhYzhlMjhlNDE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwpAQCAtNjc4LDkgJiM0Mzs2NzgsMTUgQEAgc3RhdGljIHN0cnVjdCBzbGF2ZSAqcmxiX2FycF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKQogCWlmIChhcnAtJmd0O29wX2NvZGUgPT0gaHRvbnMoQVJQT1BfUkVQTFkpKSB7CiAJCS8qIHRoZSBhcnAgbXVzdCBiZSBzZW50IG9uIHRoZSBzZWxlY3RlZCByeCBjaGFubmVsICovCiAJCXR4X3NsYXZlID0gcmxiX2Nob29zZV9jaGFubmVsKHNrYiwgYm9uZCwgYXJwKTsKLQkJaWYgKHR4X3NsYXZlKQomIzQzOwkJaWYgKHR4X3NsYXZlICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhZXRoZXJfYWRkcl9lcXVhbF82NGJpdHMoYXJwLSZndDttYWNfc3JjLAomIzQzOwkJCQkJICAgICB0eF9zbGF2ZS0mZ3Q7ZGV2LSZndDtkZXZfYWRkcikpIHsKJiM0MzsJCQlpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKQomIzQzOwkJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCQlhcnAgPSAoc3RydWN0IGFycF9wa3QgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKIAkJCWJvbmRfaHdfYWRkcl9jb3B5KGFycC0mZ3Q7bWFjX3NyYywgdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIsCiAJCQkJCSAgdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7YWRkcl9sZW4pOwomIzQzOwkJfQogCQluZXRkZXZfZGJnKGJvbmQtJmd0O2RldiwgJiMzNDsoc2xhdmUgJXMpOiBTZXJ2ZXIgc2VudCBBUlAgUmVwbHkgcGFja2V0XG4mIzM0OywKIAkJCSAgIHR4X3NsYXZlID8gdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7bmFtZSA6ICYjMzQ7TlVMTCYjMzQ7KTsKIAl9IGVsc2UgaWYgKGFycC0mZ3Q7b3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSkgewpAQCAtMTM0MCw3ICYjNDM7MTM0Niw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLAogCQkJCSAgICBzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlKQogewogCXN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSAmYW1wOyhCT05EX0FMQl9JTkZPKGJvbmQpKTsKLQlzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTsKIAogCWlmICghdHhfc2xhdmUpIHsKIAkJLyogdW5iYWxhbmNlZCBvciB1bmFzc2lnbmVkLCBzZW5kIHRocm91Z2ggcHJpbWFyeSAqLwpAQCAtMTM1MSw3ICYjNDM7MTM1Niw5IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLAogCiAJaWYgKHR4X3NsYXZlICZhbXA7JmFtcDsgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7CiAJCWlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC0mZ3Q7Y3Vycl9hY3RpdmVfc2xhdmUpKSB7Ci0JCQlldGhlcl9hZGRyX2NvcHkoZXRoX2RhdGEtJmd0O2hfc291cmNlLAomIzQzOwkJCWlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpCiYjNDM7CQkJCXJldHVybiBib25kX3R4X2Ryb3AoYm9uZC0mZ3Q7ZGV2LCBza2IpOwomIzQzOwkJCWV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLSZndDtoX3NvdXJjZSwKIAkJCQkJdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIpOwogCQl9CiAKQEAgLTEzNzUsOCAmIzQzOzEzODIsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLAogCXN0cnVjdCBldGhoZHIgKmV0aF9kYXRhOwogCXUzMiBoYXNoX2luZGV4OwogCi0Jc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQlldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTsKJiM0MzsJZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpOwogCiAJLyogRG8gbm90IFRYIGJhbGFuY2UgYW55IG11bHRpY2FzdCBvciBicm9hZGNhc3QgKi8KIAlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aF9kYXRhLSZndDtoX2Rlc3QpKSB7CkBAIC0xNDI4LDggJiM0MzsxNDM0LDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKIAl1MzIgaGFzaF9pbmRleCA9IDA7CiAJaW50IGhhc2hfc2l6ZSA9IDA7CiAKLQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCWV0aF9kYXRhID0gZXRoX2hkcihza2IpOwomIzQzOwlldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7CiAKIAlzd2l0Y2ggKG50b2hzKHNrYi0mZ3Q7cHJvdG9jb2wpKSB7CiAJY2FzZSBFVEhfUF9JUDogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBKdXN0aWZpY2F0aW9uIGZvciBib25kX2FsYi5jIFBhdGNoKioKCk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYCB3YXJyYW50cyBpdHMgb3duIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgcmVxdWVzdCDigJMgZXNzZW50aWFsbHkgYSBjb2RlIHJldmlldyBmb3IgbWVtb3J5IHNhZmV0eSBpbXBsaWNhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gYW5hbHl6ZSB0aGUgcGF0Y2ggYW5kIGRldGVybWluZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSBwb3RlbnRpYWxseSBLTVNBTi1zcGVjaWZpYyBpc3N1ZXMgdGhhdCBLQVNBTiBtaWdodCBtaXNzLgoKRmlyc3QsIHRoZSByaXNrIGlzIG1pbmltYWw7IGl0JiMzOTtzIGp1c3QgUUEgb24gYSBkZXZlbG9wZXIgcGF0Y2guIFRoZSBhY3Rpb24gaXMgY2xlYXI6IHJldmlldyB0aGUgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBhY3R1YWxseSAqc2VlKiB0aGUgY29kZSwgc28gSSYjMzk7bGwgcHJvYmFibHkgcHVsbCB1cCB0aGUgZmlsZSBkaXJlY3RseSwgb3IgdXNlIGEgdG9vbCBsaWtlIGBncmVwcGVyYCB0byBleGFtaW5lIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IHNjcmVhbXMgJiMzNDtLTVNBTiBjYW5kaWRhdGUmIzM0OyDigJMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyB0aGF0IGFyZSBoaWdobHkgdGltaW5nLWRlcGVuZGVudCwgb3IgYW55dGhpbmcgdGhhdCBLTVNBTiBpcyBrbm93biB0byBleGNlbCBhdCBmaW5kaW5nLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2g7IEkmIzM5O20gaGVyZSB0byBlbnN1cmUgd2UgY2F0Y2ggdGhvc2Ugc3VidGxlIG1lbW9yeSBlcnJvcnMgdGhhdCBLQVNBTiBtaWdodCBvdmVybG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY3MDpcdFx0aWYgKGRldikge1xuIDY3MTpcdFx0XHRpZiAobmV0aWZfaXNfYW55X2JyaWRnZV9tYXN0ZXIoZGV2KSkge1xuIDY3MjpcdFx0XHRcdGRldl9wdXQoZGV2KTtcbiA2NzM6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiA2NzQ6XHRcdFx0fVxuIDY3NTpcdFx0XHRkZXZfcHV0KGRldik7XG4gNjc2Olx0XHR9XG4gNjc3Olx0XG4gNjc4Olx0XHRpZiAoYXJwLVx1MDAzZW9wX2NvZGUgPT0gaHRvbnMoQVJQT1BfUkVQTFkpKSB7XG4gNjc5Olx0XHRcdC8qIHRoZSBhcnAgbXVzdCBiZSBzZW50IG9uIHRoZSBzZWxlY3RlZCByeCBjaGFubmVsICovXG4gNjgwOlx0XHRcdHR4X3NsYXZlID0gcmxiX2Nob29zZV9jaGFubmVsKHNrYiwgYm9uZCwgYXJwKTtcbiA2ODE6XHRcdFx0aWYgKHR4X3NsYXZlIFx1MDAyNlx1MDAyNlxuIDY4MjpcdFx0XHQgICAgIWV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGFycC1cdTAwM2VtYWNfc3JjLFxuIDY4MzpcdFx0XHRcdFx0XHQgICAgIHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcikpIHtcbiA2ODQ6XHRcdFx0XHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxuIDY4NTpcdFx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNjg2Olx0XHRcdFx0YXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gNjg3Olx0XHRcdFx0Ym9uZF9od19hZGRyX2NvcHkoYXJwLVx1MDAzZW1hY19zcmMsIHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcixcbiA2ODg6XHRcdFx0XHRcdFx0ICB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4pO1xuIDY4OTpcdFx0XHR9XG4gNjkwOlx0XHRcdG5ldGRldl9kYmcoYm9uZC1cdTAwM2VkZXYsIFwmIzM0OyhzbGF2ZSAlcyk6IFNlcnZlciBzZW50IEFSUCBSZXBseSBwYWNrZXRcXG5cJiMzNDssXG4gNjkxOlx0XHRcdFx0ICAgdHhfc2xhdmUgPyB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlbmFtZSA6IFwmIzM0O05VTExcJiMzNDspO1xuIDY5MjpcdFx0fSBlbHNlIGlmIChhcnAtXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSkge1xuIDY5MzpcdFx0XHQvKiBDcmVhdGUgYW4gZW50cnkgaW4gdGhlIHJ4X2hhc2h0YmwgZm9yIHRoaXMgY2xpZW50IGFzIGFcbiA2OTQ6XHRcdFx0ICogcGxhY2UgaG9sZGVyLlxuIDY5NTpcdFx0XHQgKiBXaGVuIHRoZSBhcnAgcmVwbHkgaXMgcmVjZWl2ZWQgdGhlIGVudHJ5IHdpbGwgYmUgdXBkYXRlZFxuIDY5NjpcdFx0XHQgKiB3aXRoIHRoZSBjb3JyZWN0IHVuaWNhc3QgYWRkcmVzcyBvZiB0aGUgY2xpZW50LlxuIDY5NzpcdFx0XHQgKi9cbiA2OTg6XHRcdFx0dHhfc2xhdmUgPSBybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kLCBhcnApO1xuIDY5OTpcdFxuIDcwMDpcdFx0XHQvKiBUaGUgQVJQIHJlcGx5IHBhY2tldHMgbXVzdCBiZSBkZWxheWVkIHNvIHRoYXRcbiA3MDE6XHRcdFx0ICogdGhleSBjYW4gY2FuY2VsIG91dCB0aGUgaW5mbHVlbmNlIG9mIHRoZSBBUlAgcmVxdWVzdC5cbiA3MDI6XHRcdFx0ICovXG4gNzAzOlx0XHRcdGJvbmQtXHUwMDNlYWxiX2luZm8ucmxiX3VwZGF0ZV9kZWxheV9jb3VudGVyID0gUkxCX1VQREFURV9ERUxBWTtcbiA3MDQ6XHRcbiA3MDU6XHRcdFx0LyogYXJwIHJlcXVlc3RzIGFyZSBicm9hZGNhc3QgYW5kIGFyZSBzZW50IG9uIHRoZSBwcmltYXJ5XG4gNzA2Olx0XHRcdCAqIHRoZSBhcnAgcmVxdWVzdCB3aWxsIGNvbGxhcHNlIGFsbCBjbGllbnRzIG9uIHRoZSBzdWJuZXQgdG9cbiA3MDc6XHRcdFx0ICogdGhlIHByaW1hcnkgc2xhdmUuIFdlIG11c3QgcmVnaXN0ZXIgdGhlc2UgY2xpZW50cyB0byBiZVxuIDcwODpcdFx0XHQgKiB1cGRhdGVkIHdpdGggdGhlaXIgYXNzaWduZWQgbWFjLlxuIDcwOTpcdFx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA2MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodCBwcm9jZXNzZXM6CgoqKlF1aWNrIFNjYW4gb2YgQm9uZCBUcmFuc21pdCBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRob3NlIGNvcmUgYm9uZCB0cmFuc21pdCBmdW5jdGlvbnM6IGBib25kX2RvX2FsYl94bWl0YCwgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCwgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAuIEkgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7bSBrZWVwaW5nIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhleSBmaXQgdG9nZXRoZXIsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gYWN0aXZlLWJhY2t1cCBhbmQgdHJhbnNtaXQgbG9hZCBiYWxhbmNpbmcuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHRyYW5zbWl0IHNpZGUsIHNvIHRoaXMgaXMgd2hlcmUgdGhlIGRldGFpbHMgcmVzaWRlIGFuZCB0aGUgbG9naWMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIG9mIHRoZXNlIGJvbmQgdHJhbnNtaXQgZnVuY3Rpb25zIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgZ2FwcyBvciBvdmVybGFwcywgb3IgY29uZmxpY3RzIGluIHRoZSBmbG93IGNvbnRyb2wgb3IgaG93IHRoZSBkaWZmZXJlbnQgbW9kZXMgYXJlIGhhbmRsZWQuIEdvdHRhIGtlZXAgdGhhdCBtZW50YWwgbW9kZWwgc2hhcnAhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMzNTpcdHZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxuMTMzNjpcdHtcbjEzMzc6XHRcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XG4xMzM4Olx0XG4xMzM5Olx0XHR0bGJfZGVpbml0aWFsaXplKGJvbmQpO1xuMTM0MDpcdFxuMTM0MTpcdFx0aWYgKGJvbmRfaW5mby1cdTAwM2VybGJfZW5hYmxlZClcbjEzNDI6XHRcdFx0cmxiX2RlaW5pdGlhbGl6ZShib25kKTtcbjEzNDM6XHR9XG4xMzQ0Olx0XG4xMzQ1Olx0c3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4xMzQ2Olx0XHRcdFx0XHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcbjEzNDc6XHR7XG4xMzQ4Olx0XHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuMTM0OTpcdFxuMTM1MDpcdFx0aWYgKCF0eF9zbGF2ZSkge1xuMTM1MTpcdFx0XHQvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovXG4xMzUyOlx0XHRcdHR4X3NsYXZlID0gcmN1X2RlcmVmZXJlbmNlKGJvbmQtXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpO1xuMTM1MzpcdFx0XHRpZiAoYm9uZC1cdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpXG4xMzU0Olx0XHRcdFx0Ym9uZF9pbmZvLVx1MDAzZXVuYmFsYW5jZWRfbG9hZCAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbjEzNTU6XHRcdH1cbjEzNTY6XHRcbjEzNTc6XHRcdGlmICh0eF9zbGF2ZSBcdTAwMjZcdTAwMjYgYm9uZF9zbGF2ZV9jYW5fdHgodHhfc2xhdmUpKSB7XG4xMzU4Olx0XHRcdGlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcbjEzNTk6XHRcdFx0XHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxuMTM2MDpcdFx0XHRcdFx0cmV0dXJuIGJvbmRfdHhfZHJvcChib25kLVx1MDAzZWRldiwgc2tiKTtcbjEzNjE6XHRcdFx0XHRldGhlcl9hZGRyX2NvcHkoc2tiX2V0aF9oZHIoc2tiKS1cdTAwM2VoX3NvdXJjZSxcbjEzNjI6XHRcdFx0XHRcdFx0dHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbjEzNjM6XHRcdFx0fVxuMTM2NDpcdFxuMTM2NTpcdFx0XHRyZXR1cm4gYm9uZF9kZXZfcXVldWVfeG1pdChib25kLCBza2IsIHR4X3NsYXZlLVx1MDAzZWRldik7XG4xMzY2Olx0XHR9XG4xMzY3Olx0XG4xMzY4Olx0XHRpZiAodHhfc2xhdmUgXHUwMDI2XHUwMDI2IGJvbmQtXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKSB7XG4xMzY5Olx0XHRcdHNwaW5fbG9jayhcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4xMzcwOlx0XHRcdF9fdGxiX2NsZWFyX3NsYXZlKGJvbmQsIHR4X3NsYXZlLCAwKTtcbjEzNzE6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2Ym9uZC1cdTAwM2Vtb2RlX2xvY2spO1xuMTM3MjpcdFx0fVxuMTM3MzpcdFxuMTM3NDpcdFx0Lyogbm8gc3VpdGFibGUgaW50ZXJmYWNlLCBmcmFtZSBub3Qgc2VudCAqL1xuMTM3NTpcdFx0cmV0dXJuIGJvbmRfdHhfZHJvcChib25kLVx1MDAzZWRldiwgc2tiKTtcbjEzNzY6XHR9XG4xMzc3Olx0XG4xMzc4Olx0c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbjEzNzk6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4xMzgwOlx0e1xuMTM4MTpcdFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XG4xMzgyOlx0XHRzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YTtcbjEzODM6XHRcdHUzMiBoYXNoX2luZGV4O1xuMTM4NDpcdFxuMTM4NTpcdFx0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xuMTM4NjpcdFxuMTM4NzpcdFx0LyogRG8gbm90IFRYIGJhbGFuY2UgYW55IG11bHRpY2FzdCBvciBicm9hZGNhc3QgKi9cbjEzODg6XHRcdGlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtXHUwMDNlaF9kZXN0KSkge1xuMTM4OTpcdFx0XHRzd2l0Y2ggKHNrYi1cdTAwM2Vwcm90b2NvbCkge1xuMTM5MDpcdFx0XHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuMTM5MTpcdFx0XHRcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYikpXG4xMzkyOlx0XHRcdFx0XHRicmVhaztcbjEzOTM6XHRcdFx0XHRmYWxsdGhyb3VnaDtcbjEzOTQ6XHRcdFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4xMzk1Olx0XHRcdFx0aGFzaF9pbmRleCA9IGJvbmRfeG1pdF9oYXNoKGJvbmQsIHNrYik7XG4xMzk2Olx0XHRcdFx0aWYgKGJvbmQtXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKSB7XG4xMzk3Olx0XHRcdFx0XHR0eF9zbGF2ZSA9IHRsYl9jaG9vc2VfY2hhbm5lbChib25kLFxuMTM5ODpcdFx0XHRcdFx0XHRcdFx0ICAgICAgaGFzaF9pbmRleCBcdTAwMjYgMHhGRixcbjEzOTk6XHRcdFx0XHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4pO1xuMTQwMDpcdFx0XHRcdH0gZWxzZSB7XG4xNDAxOlx0XHRcdFx0XHRzdHJ1Y3QgYm9uZF91cF9zbGF2ZSAqc2xhdmVzO1xuMTQwMjpcdFx0XHRcdFx0dW5zaWduZWQgaW50IGNvdW50O1xuMTQwMzpcdFxuMTQwNDpcdFx0XHRcdFx0c2xhdmVzID0gcmN1X2RlcmVmZXJlbmNlKGJvbmQtXHUwMDNldXNhYmxlX3NsYXZlcyk7XG4xNDA1Olx0XHRcdFx0XHRjb3VudCA9IHNsYXZlcyA/IFJFQURfT05DRShzbGF2ZXMtXHUwMDNlY291bnQpIDogMDtcbjE0MDY6XHRcdFx0XHRcdGlmIChsaWtlbHkoY291bnQpKVxuMTQwNzpcdFx0XHRcdFx0XHR0eF9zbGF2ZSA9IHNsYXZlcy1cdTAwM2VhcnJbaGFzaF9pbmRleCAlXG4xNDA4Olx0XHRcdFx0XHRcdFx0XHQgICAgICAgY291bnRdO1xuMTQwOTpcdFx0XHRcdH1cbjE0MTA6XHRcdFx0XHRicmVhaztcbjE0MTE6XHRcdFx0fVxuMTQxMjpcdFx0fVxuMTQxMzpcdFx0cmV0dXJuIHR4X3NsYXZlO1xuMTQxNDpcdH1cbjE0MTU6XHRcbjE0MTY6XHRuZXRkZXZfdHhfdCBib25kX3RsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbjE0MTc6XHR7XG4xNDE4Olx0XHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTtcbjE0MTk6XHRcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmU7XG4xNDIwOlx0XG4xNDIxOlx0XHR0eF9zbGF2ZSA9IGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KGJvbmQsIHNrYik7XG4xNDIyOlx0XHRyZXR1cm4gYm9uZF9kb19hbGJfeG1pdChza2IsIGJvbmQsIHR4X3NsYXZlKTtcbjE0MjM6XHR9XG4xNDI0Olx0XG4xNDI1Olx0c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbjE0MjY6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4xNDI3Olx0e1xuMTQyODpcdFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcbjE0Mjk6XHRcdHN0YXRpYyBjb25zdCBfX2JlMzIgaXBfYmNhc3QgPSBodG9ubCgweGZmZmZmZmZmKTtcbjE0MzA6XHRcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xuMTQzMTpcdFx0Y29uc3QgdTggKmhhc2hfc3RhcnQgPSBOVUxMO1xuMTQzMjpcdFx0Ym9vbCBkb190eF9iYWxhbmNlID0gdHJ1ZTtcbjE0MzM6XHRcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xuMTQzNDpcdFx0dTMyIGhhc2hfaW5kZXggPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTA2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogODQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IEVuc3VyaW5nIFdyaXRhYmxlIFNLQiBIZWFkZXJzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIGEgYm9uZGluZyBkcml2ZXIsIHNwZWNpZmljYWxseSBhcm91bmQgQWN0aXZlLUJhY2t1cCBvciBBY3RpdmUtTG9hZC1CYWxhbmNpbmcgbW9kZXMsIGFuZCBpcyBhaW1pbmcgdG8gZW5zdXJlIHRoZSBwYWNrZXRzIGFyZSBjb3JyZWN0bHkgZm9ybWF0dGVkIGJlZm9yZSBiZWluZyBzZW50IG91dC4gVGhlIGtleSBzZWVtcyB0byBiZSBtYW5hZ2luZyB0aGUgU0tCIChTb2NrZXQgQnVmZmVyKSBoZWFkZXJzIGZvciB3cml0ZSBvcGVyYXRpb25zLiBJIHNlZSBpdCBpbiB0aHJlZSBrZXkgYXJlYXM6CgoxLiAgKipgcmxiX2FycF94bWl0YCoqOiBUaGUgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gY29ycmVjdCBBUlAgcmVwbGllcy4gSWYgdGhlIHNvdXJjZSBNQUMgYWRkcmVzcyAoYGFycC0mZ3Q7bWFjX3NyY2ApIGluIGFuIEFSUCByZXBseSBkb2VzbiYjMzk7dCBtYXRjaCB0aGUgaW50ZXJmYWNlJiMzOTtzIE1BQyBhZGRyZXNzIChgdHhfc2xhdmUtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHJgKSwgdGhlIGNvZGUgbm93IHByb2FjdGl2ZWx5IGVuc3VyZXMgdGhlIFNLQiBoZWFkZXIgaXMgd3JpdGFibGUgdXNpbmcgYHNrYl9jb3dfaGVhZChza2IsIDApYC4gVGhpcyBpcyBjcnVjaWFsIHRvIGF2b2lkIG1vZGlmeWluZyBzaGFyZWQgbWVtb3J5LiBJZiBgc2tiX2Nvd19oZWFkYCBpcyBzdWNjZXNzZnVsIChpdCByZXR1cm5zIHplcm8pLCB0aGUgQVJQIHBvaW50ZXIgaXMgcmVsb2FkZWQgdG8gcG9pbnQgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24uIEl0IHRoZW4gY29waWVzIHRoZSBjb3JyZWN0IE1BQyBhZGRyZXNzLiBUaGlzIGlzIGEgc29saWQgZGVmZW5zaXZlIHByb2dyYW1taW5nIGFwcHJvYWNoIHRvIG1ha2Ugc3VyZSB0aGUgcGFja2V0IGlzIG5vdCBjb3JydXB0ZWQgYW5kIHRoZSBBUlAgcmVwbHkgZ29lcyBvdXQgd2l0aCB0aGUgY29ycmVjdCBzb3VyY2UgTUFDLgoKMi4gICoqYGJvbmRfZG9fYWxiX3htaXRgKio6IFNpbWlsYXIgdG8gdGhlIEFSUCBjYXNlLCB0aGUgY29kZSBub3cgY2hlY2tzIGZvciB3cml0YWJpbGl0eSAqYmVmb3JlKiBjb3B5aW5nIHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgKGBoX3NvdXJjZWApIGludG8gdGhlIEV0aGVybmV0IGhlYWRlci4gYHNrYl9jb3dfaGVhZChza2IsIDApYCBpcyB1c2VkIHRvIGVuc3VyZSB0aGUgaGVhZGVyIGlzIHdyaXRlYWJsZSwgYW5kIGlmIGl0IGZhaWxzLCB0aGUgcGFja2V0IGlzIGRyb3BwZWQgd2l0aCBgYm9uZF90eF9kcm9wYC4gVGhlIHVzZSBvZiBgc2tiX2V0aF9oZHIoc2tiKWAgdG8gYWNjZXNzIHRoZSBFdGhlcm5ldCBoZWFkZXIgaXMgYWxzbyBub3RlZC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBTS0IgbWF5IGJlIHJlYWxsb2NhdGVkLCBzbyB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwuCgozLiAgKipgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgIGFuZCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgKio6IFRoaXMgc2VjdGlvbiBpcyBzaW1wbGVyLiBJdCBoYXMgcmVtb3ZlZCBgc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsgZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7YCBhbmQgbm93IHNpbXBseSByZWxpZXMgb24gYGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtgLiBUaGlzIGNoYW5nZSBpbXBsaWVzIHRoYXQgdGhlIE1BQyBoZWFkZXIgaXMgZWl0aGVyIGFscmVhZHkgc2V0ICh3aGljaCBpcyBsaWtlbHksIHNpbmNlIGl0JiMzOTtzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRyYW5zbWlzc2lvbikgb3IgdGhhdCB0aGUgZnVuY3Rpb24gY2FsbGluZyB0aGlzIGFscmVhZHkga25vd3Mgd2hlcmUgdGhlIGV0aGVybmV0IGhlYWRlciB3aWxsIGJlLiBNeSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyB0aGF0IHRoZSBkZXZlbG9wZXIgaW50ZW5kcyBgc2tiX2V0aF9oZHJgIHRvIGJlIHVzZWQgZm9yIGNvbnNpc3RlbmN5IHNpbmNlIHRoZSBwcmV2aW91cyBzZWN0aW9ucyBvZiBjb2RlIHdlcmUgbW9kaWZpZWQuIFRoaXMgYWxzbyBpbXBsaWVzIHRoYXQgdGhlIFNLQiBpcyBndWFyYW50ZWVkIHRvIGhhdmUgdGhlIGV0aGVybmV0IGhlYWRlciBvciB0aGF0IGBza2JfZXRoX2hkcmAgaGFuZGxlcyB0aGUgaW5pdGlhbCBzZXR1cCAodGhpcyBpcyB3b3J0aCBsb29raW5nIGludG8pLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYHNrYl9ldGhfaGRyYCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIHN0cnVjdCBldGhoZHIgXFwqc2tiX2V0aF9oZHImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pZl9ldGhlci5oPTI1PXN0YXRpYyBpbmxpbmUgc3RydWN0IGV0aGhkciAqZXRoX2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvaWZfZXRoZXIuaC0zMi0gKi9cbmluY2x1ZGUvbGludXgvaWZfZXRoZXIuaDozMzpzdGF0aWMgaW5saW5lIHN0cnVjdCBldGhoZHIgKnNrYl9ldGhfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgtMzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDg4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBpZl9ldGhlci5oOiBVbmRlcnN0YW5kaW5nIEV0aGVybmV0JiMzOTtzIEZvdW5kYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSwgb3IgbWF5YmUgZHJpbGwgZG93biBpbnRvIGEgc3BlY2lmaWMgYXNwZWN0IG9mIEV0aGVybmV0IGZyYW1lIHN0cnVjdHVyZSwgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBwdWxsaW5nIHVwIGBpbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmhgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgZm9jdXMgb24gbGluZXMgMjAtNDAsIHdoaWNoIHVzdWFsbHkgZGVmaW5lcyB0aGUgY29yZSBFdGhlcm5ldCBoZWFkZXIgc3RydWN0dXJlLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBxdWljayByZWZyZXNoZXIgb24gdGhlIGtleSBmaWVsZHMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgYHN0cnVjdCBldGhoZHJgLCBwcm9iYWJseSB3aXRoIHRoZSBkZXN0aW5hdGlvbiBhbmQgc291cmNlIE1BQyBhZGRyZXNzZXMsIHRoZSBFdGhlclR5cGUgZmllbGQsIGFuZCBwb3RlbnRpYWxseSBzb21lIHBhZGRpbmcgb3IgcmVzZXJ2ZWQgYXJlYXMgaWYgaXQmIzM5O3MgYW4gb2xkZXIgZGVmaW5pdGlvbi4gSSYjMzk7bSBhbHNvIGxvb2tpbmcgZm9yIGFueSBjb21tZW50cyB0aGF0IG1pZ2h0IGdpdmUgaGludHMgYWJvdXQgaXRzIHVzZSBvciBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGFsaWdubWVudCBjb25zaWRlcmF0aW9ucy4gVGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcmVzdGluZyBkZWZpbmVzIGluIHRoZXJlIHRvbyDigJMgcGVyaGFwcyBmb3IgY29tbW9uIEV0aGVyVHlwZSB2YWx1ZXMuIEl0JiMzOTtzIHRpbWUgdG8gcXVpY2tseSBhbmFseXplIGFuZCBzZWUgaWYgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgZGVmaW5pdGlvbnMgb2YgdGhvc2Ugc3BlY2lmaWMgc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIwOlx0I2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9pZl9ldGhlci5oXHUwMDNlXG4gIDIxOlx0XG4gIDIyOlx0LyogWFg6WFg6WFg6WFg6WFg6WFggKi9cbiAgMjM6XHQjZGVmaW5lIE1BQ19BRERSX1NUUl9MRU4gKDMgKiBFVEhfQUxFTiAtIDEpXG4gIDI0Olx0XG4gIDI1Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgZXRoaGRyICpldGhfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4gIDI2Olx0e1xuICAyNzpcdFx0cmV0dXJuIChzdHJ1Y3QgZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTtcbiAgMjg6XHR9XG4gIDI5Olx0XG4gIDMwOlx0LyogUHJlZmVyIHRoaXMgdmVyc2lvbiBpbiBUWCBwYXRoLCBpbnN0ZWFkIG9mXG4gIDMxOlx0ICogc2tiX3Jlc2V0X21hY19oZWFkZXIoKSAmIzQzOyBldGhfaGRyKClcbiAgMzI6XHQgKi9cbiAgMzM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBldGhoZHIgKnNrYl9ldGhfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4gIDM0Olx0e1xuICAzNTpcdFx0cmV0dXJuIChzdHJ1Y3QgZXRoaGRyICopc2tiLVx1MDAzZWRhdGE7XG4gIDM2Olx0fVxuICAzNzpcdFxuICAzODpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGV0aGhkciAqaW5uZXJfZXRoX2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuICAzOTpcdHtcbiAgNDA6XHRcdHJldHVybiAoc3RydWN0IGV0aGhkciAqKXNrYl9pbm5lcl9tYWNfaGVhZGVyKHNrYik7XG4gIDQxOlx0fVxuICA0MjpcdFxuICA0MzpcdGludCBldGhfaGVhZGVyX3BhcnNlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gIDQ0Olx0XHRcdCAgICAgdW5zaWduZWQgY2hhciAqaGFkZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTU5CgkJCQkJCQlvdXRwdXQ6IDI4OAoJCQkJCQkJdGhvdWdodHM6IDQ5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggZm9yIE5ldHdvcmsgVHJhbnNtaXQgUGF0aCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IHJldmlld2VkIHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBuZXR3b3JrIHRyYW5zbWl0IHBhdGggZm9yIGJvbmRpbmcg4oCTIEFMQi9UTEIsIHRvIGJlIHByZWNpc2UuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGhhbmRsaW5nIFNLQiAoc29ja2V0IGJ1ZmZlcikgQ29weS1vbi1Xcml0ZSBmb3Igc2hhcmVkIG9yIGNsb25lZCBwYWNrZXRzICpiZWZvcmUqIG1vZGlmeWluZyB0aGUgTUFDIGFkZHJlc3NlcyBpbiB0aGUgaGVhZGVyLiBUaGF0JiMzOTtzIGdvb2QsIHByZXZlbnRzIHRob3NlIG5hc3R5IHNoYXJlZCBidWZmZXIgbW9kaWZpY2F0aW9uIGlzc3VlcyBvciBwb2ludGVyIGludmFsaWRhdGlvbnMgYWZ0ZXIgaGVhZGVyIHJlYWxsb2NhdGlvbnMuIEl0IGFsc28gbW92ZXMgZnJvbSB0aGUgYHNrYl9yZXNldF9tYWNfaGVhZGVyKCkgJiM0MzsgZXRoX2hkcigpYCBjb21iaW5hdGlvbiB0byBqdXN0IHVzaW5nIGBza2JfZXRoX2hkcigpYCwgYXMgaXMgcHJlZmVyYWJsZSBpbiB0aGlzIFRYIGNvbnRleHQuCgpOb3csIG15IHByaW1hcnkgY29uY2VybiB3aGVuIHJldmlld2luZyBwYXRjaGVzIGxpa2UgdGhpcywgYW5kIEkmIzM5O20gc3VyZSBpdCYjMzk7cyB0aGUgc2FtZSBmb3IgYW55b25lIGluIHRoZSBzZWN1cml0eSBmaWVsZCwgaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBydW4gZG93biB0aGUgY2hlY2tsaXN0OgoKMS4gICoqS2VybmVsIHRvIFVzZXIgU3BhY2UgRGF0YToqKiBObywgdGhlcmUmIzM5O3Mgbm90aGluZyBoZXJlIHRoYXQgbG9va3MgbGlrZSBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgcGFzc2VkIHRvIHVzZXIgc3BhY2UgdmlhIHRoaW5ncyBsaWtlIGBjb3B5X3RvX3VzZXJgIG9yIG5ldGxpbmsgYXR0cmlidXRlcy4gVGhpcyBpcyBlbnRpcmVseSBpbnRlcm5hbCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIHN0YWNrLgoyLiAgKipDb25kaXRpb25hbCBMb2dpYzoqKiBOby4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gaW50cm9kdWNlIGFueSBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcy4KMy4gICoqRGF0YSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb246KiogTm90aGluZyBjb21wbGV4IGlzIGJlaW5nIGluaXRpYWxpemVkIGhlcmUgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gVGhlIGZvY3VzIGlzIG9uICpwcmV2ZW50aW5nKiBtb2RpZmljYXRpb24gb2Ygc2hhcmVkIGJ1ZmZlcnMgdGhyb3VnaCBDT1cuCjQuICAqKkJvdW5kcy9MZW5ndGggQ2hlY2tzOioqIE5vLCBub3RoaW5nIGhlcmUgc3VnZ2VzdHMgdGhhdCB0aGlzIGlzIGludHJvZHVjaW5nIGFueSB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBib3VuZHMsIGxlbmd0aHMsIG9yIHBvdGVudGlhbGx5IGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBleGlzdGluZyBidWZmZXJzLiBUaGUgdXNlIG9mIGBza2JfY293X2hlYWRgIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBoYW5kbGUgdGhpcyBpc3N1ZS4KClNvLCAqbm8qLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEl0JiMzOTtzIHJlYWxseSBqdXN0IG1ha2luZyBzdXJlIHRoZSBwYWNrZXQgaGVhZGVycyBhcmUgc2FmZWx5IHVuc2hhcmVkIHdpdGggYHNrYl9jb3dfaGVhZGAgYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8sIGFuZCBtYWtpbmcgc3VyZSBhbGwgcG9pbnRlcnMgYXJlIGNvcnJlY3RseSByZWxvYWRlZCBhZnRlciBwb3RlbnRpYWwgcmVhbGxvY2F0aW9ucy4gQW5kIHRoYXQgS0FTQU4gc2hvdWxkIGhhbmRsZSBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gLyBPT0IgLyBVQUYgZXJyb3JzIHJlbGF0ZWQgdG8gdGhlc2UgcG90ZW50aWFsIHJlYWxsb2NhdGlvbnMuCgpDb25zZXF1ZW50bHksIGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBmYWxzZSBoZXJlLiBLTVNBTiBpcyBmb3IgY2F0Y2hpbmcgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSByZWFkcywgYW5kIHdlJiMzOTt2ZSBlc3RhYmxpc2hlZCB0aGF0IHRoZSBwYXRjaCBpdHNlbGYgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueS4gS0FTQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBkZWFscyB3aXRoIGEgYnJvYWRlciBzZXQgb2YgbWVtb3J5IGVycm9ycywgaW5jbHVkaW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24sIGFsbCBvZiB3aGljaCBjb3VsZCB0aGVvcmV0aWNhbGx5IGFyaXNlIGZyb20gaW5jb3JyZWN0IGhhbmRsaW5nIG9mIGBza2JgIHJlYWxsb2NhdGlvbnMgb3IgcG9pbnRlciBpbnZhbGlkYXRpb25zLiBLQVNBTiYjMzk7cyBicm9hZGVyIHNjb3BlIG1ha2VzIGl0IG1vcmUgYXBwcm9wcmlhdGUgZm9yIHRoaXMgc3BlY2lmaWMgc2NlbmFyaW8sIGFzIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIG9yIGV2ZW4gcmVsZXZhbnQsIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBza2IgaGVhZGVyIG11dGFiaWxpdHkgaW4gdGhlIGJvbmRpbmcgQUxCL1RMQiB0cmFuc21pdCBwYXRocyAoZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgYWRkcyBgc2tiX2Nvd19oZWFkKHNrYiwgMClgIGNhbGxzIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHNvdXJjZSBNQUMgYWRkcmVzcyBpbiBBUlAgcGFja2V0cyAoYHJsYl9hcnBfeG1pdGApIGFuZCBFdGhlcm5ldCBoZWFkZXJzIChgYm9uZF9kb19hbGJfeG1pdGApLCBlbnN1cmluZyBjbG9uZWQvc2hhcmVkIHNrYiBoZWFkcyBhcmUgY29waWVkIGJlZm9yZSB3cml0aW5nLlxuMi4gSXQgcmVsb2FkcyB0aGUgcG9pbnRlciB0byB0aGUgQVJQL0V0aGVybmV0IGhlYWRlciBhZnRlciBgc2tiX2Nvd19oZWFkYCB0byBhdm9pZCBzdGFsZSBwb2ludGVyIGRlcmVmZXJlbmNlcy5cbjMuIEl0IGNsZWFucyB1cCByZWR1bmRhbnQgYHNrYl9yZXNldF9tYWNfaGVhZGVyKClgIGNhbGxzIGluIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgYnkgdXNpbmcgYHNrYl9ldGhfaGRyKHNrYilgLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIG1hbmFnZSBwYWNrZXQgYnVmZmVyIG11dGFiaWxpdHkgYW5kIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1yZWFsbG9jIGJ1Z3Mgb24gc2hhcmVkL2Nsb25lZCBza2JzIChpc3N1ZXMgZGV0ZWN0YWJsZSBieSBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBwYWRkaW5ncywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBza2IgaGVhZGVyIG11dGFiaWxpdHkgaW4gdGhlIGJvbmRpbmcgQUxCL1RMQiB0cmFuc21pdCBwYXRocyAoZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgYWRkcyBgc2tiX2Nvd19oZWFkKHNrYiwgMClgIGNhbGxzIGJlZm9yZSBtb2RpZnlpbmcgdGhlIHNvdXJjZSBNQUMgYWRkcmVzcyBpbiBBUlAgcGFja2V0cyAoYHJsYl9hcnBfeG1pdGApIGFuZCBFdGhlcm5ldCBoZWFkZXJzIChgYm9uZF9kb19hbGJfeG1pdGApLCBlbnN1cmluZyBjbG9uZWQvc2hhcmVkIHNrYiBoZWFkcyBhcmUgY29waWVkIGJlZm9yZSB3cml0aW5nLlxuMi4gSXQgcmVsb2FkcyB0aGUgcG9pbnRlciB0byB0aGUgQVJQL0V0aGVybmV0IGhlYWRlciBhZnRlciBgc2tiX2Nvd19oZWFkYCB0byBhdm9pZCBzdGFsZSBwb2ludGVyIGRlcmVmZXJlbmNlcy5cbjMuIEl0IGNsZWFucyB1cCByZWR1bmRhbnQgYHNrYl9yZXNldF9tYWNfaGVhZGVyKClgIGNhbGxzIGluIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgYnkgdXNpbmcgYHNrYl9ldGhfaGRyKHNrYilgLlxuXG5UaGVzZSBtb2RpZmljYXRpb25zIG1hbmFnZSBwYWNrZXQgYnVmZmVyIG11dGFiaWxpdHkgYW5kIHByZXZlbnQgZGF0YSBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1yZWFsbG9jIGJ1Z3Mgb24gc2hhcmVkL2Nsb25lZCBza2JzIChpc3N1ZXMgZGV0ZWN0YWJsZSBieSBLQVNBTikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBwYWRkaW5ncywgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6MjU6MTIuNzkyMDM5NzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTg0MDg3MjkwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCT05ESU5HXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm9uZF9hbGJfeG1pdFwiLFxuICAgIFwiYm9uZF90bGJfeG1pdFwiLFxuICAgIFwiYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0XCIsXG4gICAgXCJib25kX2RvX2FsYl94bWl0XCIsXG4gICAgXCJybGJfYXJwX3htaXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBza2IgaGVhZGVyIG11dGFiaWxpdHkgaW4gdGhlIGJvbmRpbmcgQUxCL1RMQiB0cmFuc21pdCBwYXRocyAoZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IGFkZHMgYHNrYl9jb3dfaGVhZChza2IsIDApYCBjYWxscyBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgaW4gQVJQIHBhY2tldHMgKGBybGJfYXJwX3htaXRgKSBhbmQgRXRoZXJuZXQgaGVhZGVycyAoYGJvbmRfZG9fYWxiX3htaXRgKSwgZW5zdXJpbmcgY2xvbmVkL3NoYXJlZCBza2IgaGVhZHMgYXJlIGNvcGllZCBiZWZvcmUgd3JpdGluZy5cXG4yLiBJdCByZWxvYWRzIHRoZSBwb2ludGVyIHRvIHRoZSBBUlAvRXRoZXJuZXQgaGVhZGVyIGFmdGVyIGBza2JfY293X2hlYWRgIHRvIGF2b2lkIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2VzLlxcbjMuIEl0IGNsZWFucyB1cCByZWR1bmRhbnQgYHNrYl9yZXNldF9tYWNfaGVhZGVyKClgIGNhbGxzIGluIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgYnkgdXNpbmcgYHNrYl9ldGhfaGRyKHNrYilgLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgbWFuYWdlIHBhY2tldCBidWZmZXIgbXV0YWJpbGl0eSBhbmQgcHJldmVudCBkYXRhIGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLXJlYWxsb2MgYnVncyBvbiBzaGFyZWQvY2xvbmVkIHNrYnMgKGlzc3VlcyBkZXRlY3RhYmxlIGJ5IEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMsIHBhZGRpbmdzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCB0cmFuc21pc3Npb24gcGF0aHMgaW4gdGhlIGJvbmRpbmcgZHJpdmVyIGZvciBiYWxhbmNlLWFsYiBhbmQgYmFsYW5jZS10bGIgbW9kZXMgKGJvbmRfYWxiLmMpLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgc2tiIGhlYWRlciB3cml0YWJpbGl0eSB1c2luZyBza2JfY293X2hlYWQgYmVmb3JlIG1vZGlmeWluZyBNQUMvQVJQIGhlYWRlcnMgYW5kIHVzZXMgc2tiX2V0aF9oZHIgc2FmZWx5LiBUaGUgYm9uZGluZyBkcml2ZXIgaXMgYSBzb2Z0d2FyZSBuZXRkZXYgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNToxMi43OTIwNDUwNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMzNjQ0NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGEzNWMyNzk1MzI5NzZlYjM2MjhjYTdlNzMzNTJiY2U2NDU5YmE3OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDIyOjI1OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xcbmluZGV4IDY1NGYwNTFkMDAyMzkuLjQzYWM4ZTI4ZTQxODIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXFxuQEAgLTY3OCw5ICs2NzgsMTUgQEAgc3RhdGljIHN0cnVjdCBzbGF2ZSAqcmxiX2FycF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kKVxcbiBcXHRpZiAoYXJwLVxcdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUExZKSkge1xcbiBcXHRcXHQvKiB0aGUgYXJwIG11c3QgYmUgc2VudCBvbiB0aGUgc2VsZWN0ZWQgcnggY2hhbm5lbCAqL1xcbiBcXHRcXHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XFxuLVxcdFxcdGlmICh0eF9zbGF2ZSlcXG4rXFx0XFx0aWYgKHR4X3NsYXZlIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhZXRoZXJfYWRkcl9lcXVhbF82NGJpdHMoYXJwLVxcdTAwM2VtYWNfc3JjLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHR4X3NsYXZlLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyKSkge1xcbitcXHRcXHRcXHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0XFx0YXJwID0gKHN0cnVjdCBhcnBfcGt0ICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIFxcdFxcdFxcdGJvbmRfaHdfYWRkcl9jb3B5KGFycC1cXHUwMDNlbWFjX3NyYywgdHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgdHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbitcXHRcXHR9XFxuIFxcdFxcdG5ldGRldl9kYmcoYm9uZC1cXHUwMDNlZGV2LCBcXFwiKHNsYXZlICVzKTogU2VydmVyIHNlbnQgQVJQIFJlcGx5IHBhY2tldFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgdHhfc2xhdmUgPyB0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lIDogXFxcIk5VTExcXFwiKTtcXG4gXFx0fSBlbHNlIGlmIChhcnAtXFx1MDAzZW9wX2NvZGUgPT0gaHRvbnMoQVJQT1BfUkVRVUVTVCkpIHtcXG5AQCAtMTM0MCw3ICsxMzQ2LDYgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlKVxcbiB7XFxuIFxcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xcbi1cXHRzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtcXG4gXFxuIFxcdGlmICghdHhfc2xhdmUpIHtcXG4gXFx0XFx0LyogdW5iYWxhbmNlZCBvciB1bmFzc2lnbmVkLCBzZW5kIHRocm91Z2ggcHJpbWFyeSAqL1xcbkBAIC0xMzUxLDcgKzEzNTYsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4gXFxuIFxcdGlmICh0eF9zbGF2ZSBcXHUwMDI2XFx1MDAyNiBib25kX3NsYXZlX2Nhbl90eCh0eF9zbGF2ZSkpIHtcXG4gXFx0XFx0aWYgKHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVxcdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcXG4tXFx0XFx0XFx0ZXRoZXJfYWRkcl9jb3B5KGV0aF9kYXRhLVxcdTAwM2VoX3NvdXJjZSxcXG4rXFx0XFx0XFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGJvbmRfdHhfZHJvcChib25kLVxcdTAwM2VkZXYsIHNrYik7XFxuK1xcdFxcdFxcdGV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLVxcdTAwM2VoX3NvdXJjZSxcXG4gXFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xMzc1LDggKzEzODIsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbiBcXHRzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YTtcXG4gXFx0dTMyIGhhc2hfaW5kZXg7XFxuIFxcbi1cXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbi1cXHRldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtcXG4rXFx0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xcbiBcXG4gXFx0LyogRG8gbm90IFRYIGJhbGFuY2UgYW55IG11bHRpY2FzdCBvciBicm9hZGNhc3QgKi9cXG4gXFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cXHUwMDNlaF9kZXN0KSkge1xcbkBAIC0xNDI4LDggKzE0MzQsNyBAQCBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbiBcXHR1MzIgaGFzaF9pbmRleCA9IDA7XFxuIFxcdGludCBoYXNoX3NpemUgPSAwO1xcbiBcXG4tXFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4tXFx0ZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XFxuK1xcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcXG4gXFxuIFxcdHN3aXRjaCAobnRvaHMoc2tiLVxcdTAwM2Vwcm90b2NvbCkpIHtcXG4gXFx0Y2FzZSBFVEhfUF9JUDoge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNToxMy4zMjYyOTc5ODlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMwMDMzMjU2Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2FsYl94bWl0XCIsXG4gICAgXCJib25kX3RsYl94bWl0XCIsXG4gICAgXCJib25kX3htaXRfYWxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfZG9fYWxiX3htaXRcIixcbiAgICBcInJsYl9hcnBfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCB0cmFuc21pc3Npb24gcGF0aHMgaW4gdGhlIGJvbmRpbmcgZHJpdmVyIGZvciBiYWxhbmNlLWFsYiBhbmQgYmFsYW5jZS10bGIgbW9kZXMgKGJvbmRfYWxiLmMpLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgc2tiIGhlYWRlciB3cml0YWJpbGl0eSB1c2luZyBza2JfY293X2hlYWQgYmVmb3JlIG1vZGlmeWluZyBNQUMvQVJQIGhlYWRlcnMgYW5kIHVzZXMgc2tiX2V0aF9oZHIgc2FmZWx5LiBUaGUgYm9uZGluZyBkcml2ZXIgaXMgYSBzb2Z0d2FyZSBuZXRkZXYgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRhMzVjMjc5NTMyOTc2ZWIzNjI4Y2E3ZTczMzUyYmNlNjQ1OWJhNzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDIyOjI1OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG5pbmRleCA2NTRmMDUxZDAwMjM5Li40M2FjOGUyOGU0MTgyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbkBAIC02NzgsOSArNjc4LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnJsYl9hcnBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcdGlmIChhcnAtXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVBMWSkpIHtcbiBcdFx0LyogdGhlIGFycCBtdXN0IGJlIHNlbnQgb24gdGhlIHNlbGVjdGVkIHJ4IGNoYW5uZWwgKi9cbiBcdFx0dHhfc2xhdmUgPSBybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kLCBhcnApO1xuLVx0XHRpZiAodHhfc2xhdmUpXG4rXHRcdGlmICh0eF9zbGF2ZSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFldGhlcl9hZGRyX2VxdWFsXzY0Yml0cyhhcnAtXHUwMDNlbWFjX3NyYyxcbitcdFx0XHRcdFx0ICAgICB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpKSB7XG4rXHRcdFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcbitcdFx0XHRcdHJldHVybiBOVUxMO1xuK1x0XHRcdGFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0XHRcdGJvbmRfaHdfYWRkcl9jb3B5KGFycC1cdTAwM2VtYWNfc3JjLCB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsXG4gXHRcdFx0XHRcdCAgdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuKTtcbitcdFx0fVxuIFx0XHRuZXRkZXZfZGJnKGJvbmQtXHUwMDNlZGV2LCBcIihzbGF2ZSAlcyk6IFNlcnZlciBzZW50IEFSUCBSZXBseSBwYWNrZXRcXG5cIixcbiBcdFx0XHQgICB0eF9zbGF2ZSA/IHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VuYW1lIDogXCJOVUxMXCIpO1xuIFx0fSBlbHNlIGlmIChhcnAtXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSkge1xuQEAgLTEzNDAsNyArMTM0Niw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUpXG4ge1xuIFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcbi1cdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xuIFxuIFx0aWYgKCF0eF9zbGF2ZSkge1xuIFx0XHQvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovXG5AQCAtMTM1MSw3ICsxMzU2LDkgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXG4gXHRpZiAodHhfc2xhdmUgXHUwMDI2XHUwMDI2IGJvbmRfc2xhdmVfY2FuX3R4KHR4X3NsYXZlKSkge1xuIFx0XHRpZiAodHhfc2xhdmUgIT0gcmN1X2FjY2Vzc19wb2ludGVyKGJvbmQtXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XG4tXHRcdFx0ZXRoZXJfYWRkcl9jb3B5KGV0aF9kYXRhLVx1MDAzZWhfc291cmNlLFxuK1x0XHRcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXG4rXHRcdFx0XHRyZXR1cm4gYm9uZF90eF9kcm9wKGJvbmQtXHUwMDNlZGV2LCBza2IpO1xuK1x0XHRcdGV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLVx1MDAzZWhfc291cmNlLFxuIFx0XHRcdFx0XHR0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFx0XHR9XG4gXG5AQCAtMTM3NSw4ICsxMzgyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xuIFx0dTMyIGhhc2hfaW5kZXg7XG4gXG4tXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuLVx0ZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XG4rXHRldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7XG4gXG4gXHQvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqL1xuIFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cdTAwM2VoX2Rlc3QpKSB7XG5AQCAtMTQyOCw4ICsxNDM0LDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcdHUzMiBoYXNoX2luZGV4ID0gMDtcbiBcdGludCBoYXNoX3NpemUgPSAwO1xuIFxuLVx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbi1cdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xuK1x0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xuIFxuIFx0c3dpdGNoIChudG9ocyhza2ItXHUwMDNlcHJvdG9jb2wpKSB7XG4gXHRjYXNlIEVUSF9QX0lQOiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNToxMy4zMjYyOTk1MDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzY0OTY3NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQm9uZGluZyBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhlIGZpbGUgaW1wYWN0ZWQgaXMgYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2AuIFRoYXQncyB3aGVyZSB0aGUgQWN0aXZlLUJhY2t1cCBMb2FkIEJhbGFuY2luZyBtb2R1bGUgcmVzaWRlcywgc28gaXQgcGlxdWVzIG15IGludGVyZXN0LiBOb3csIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgYXJlIGBybGJfYXJwX3htaXRgLCBgYm9uZF9kb19hbGJfeG1pdGAsIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAsIGFuZCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLiBLbm93aW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGFsbG93IG1lIHRvIHRyYWNrIHRoZSBjaGFuZ2VzIGluIHRoZWlyIGNvbnRleHQuXG5cbk9mIGNvdXJzZSwgdGhlIGJvbmRpbmcgZHJpdmVyIGl0c2VsZiwgYSBzb2Z0d2FyZSBuZXRkZXYgZHJpdmVyLCBpcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwgbmV0d29yayBzdGFjaywgYW5kIGl0J3MgbG9jYXRlZCBpbiB0aGUgYGRyaXZlcnMvbmV0L2JvbmRpbmcvYCBkaXJlY3RvcnkuIFRoYXQncyBnb29kOyBJIGNhbiBxdWlja2x5IGFjY2VzcyBpdC4gQmVpbmcgYWJsZSB0byBjb25maWd1cmUgYW5kIHRlc3QgaXQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciB1c2luZyBzeXprYWxsZXIgaXMgY3J1Y2lhbCDigJMgSSBjYW4gaW1tZWRpYXRlbHkgdGhpbmsgb2YgaG93IHRoaXMgYWZmZWN0cyBteSBhdXRvbWF0ZWQgdGVzdGluZyBwcm9jZWR1cmVzLiBBbmQgb2YgY291cnNlLCB0aGUgbmV0bGluay9pcHJvdXRlMiBpbnRlcmZhY2UgKGUuZy4sIGBpcCBsaW5rIGFkZCBib25kMCB0eXBlIGJvbmQgbW9kZSBiYWxhbmNlLWFsYmAgLyBgYmFsYW5jZS10bGJgKSBpcyBob3cgSSB3b3VsZCBpbnRlcmFjdCB3aXRoIGl0LCB3aGljaCBpcyBlc3NlbnRpYWwgdG8gYmVhciBpbiBtaW5kLlxuXG5CZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGNvbmZsaWN0IHdpdGggYW55IG90aGVyIGZlYXR1cmVzIEkgZGVwZW5kIG9uLiBUaGVuLCBJJ2xsIG5lZWQgdG8gdXNlIG91ciBlc3RhYmxpc2hlZCB0b29scyB0byBkbyBhIHByb3BlciBjb2RlIGluc3BlY3Rpb24uIExldCdzIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjYzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6MjU6MTkuMDkxMjY5MjI2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzOTkyMDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJPTkRJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlLTUtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19CT05ESU5HKSArPSBib25kaW5nLm9cXG5kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlLTctXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTEyNjY9dm9pZCBib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqbmV3X2FjdGl2ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTMzMi1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjEzMzM6XFx0XFx0XFx0Y2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9CT05ESU5HX0ZBSUxPVkVSLCBib25kLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMTMzNC1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MTg4OD1pbnQgYm9uZF9lbnNsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjA5NC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjIwOTU6XFx0c2xhdmVfZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9CT05ESU5HO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjA5Ni1cXHQvKiBpbml0aWFsaXplIHNsYXZlIHN0YXRzICovXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTIzNzUtXFx0aWYgKCFuZXRpZl9pc19ib25kX21hc3RlcihzbGF2ZV9kZXYpKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MjM3NjpcXHRcXHRzbGF2ZV9kZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNj0gfklGRl9CT05ESU5HO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjM3Ny1cXHRkZXZfY2xvc2Uoc2xhdmVfZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9MjQyNT1zdGF0aWMgaW50IF9fYm9uZF9yZWxlYXNlX29uZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTI1OTQtXFx0aWYgKCFuZXRpZl9pc19ib25kX21hc3RlcihzbGF2ZV9kZXYpKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MjU5NTpcXHRcXHRzbGF2ZV9kZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNj0gfklGRl9CT05ESU5HO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMjU5Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDA2OD1zdGF0aWMgaW50IGJvbmRfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDA3NS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjQwNzY6XFx0aWYgKCEoZXZlbnRfZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX0JPTkRJTkcpKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDA3Ny1cXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU5OTI9dm9pZCBib25kX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNjAxNC1cXHRib25kX2Rldi1cXHUwMDNlZmxhZ3MgfD0gSUZGX01BU1RFUjtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjYwMTU6XFx0Ym9uZF9kZXYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX0JPTkRJTkcgfCBJRkZfVU5JQ0FTVF9GTFQgfCBJRkZfTk9fUVVFVUU7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy02MDE2LVxcdGJvbmRfZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjY9IH4oSUZGX1hNSVRfRFNUX1JFTEVBU0UgfCBJRkZfVFhfU0tCX1NIQVJJTkcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNToxOS4xNTUyNjY1MDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzc4MDI1NjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBCb25kaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIG5ldHdvcmsgYm9uZGluZy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgYGRyaXZlcnMvbmV0L2JvbmRpbmcvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBnby10byBwbGFjZSBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gSSdsbCBiZSBhYmxlIHRvIHNlZSB0aGUgcmVsZXZhbnQgYENPTkZJR19gIG9wdGlvbnMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlLCBhbmQgbWF5YmUgZXZlbiBzb21lIHVzZWZ1bCBoZWxwIHRleHQgcmlnaHQgb2ZmIHRoZSBiYXQuIFRoaXMgaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIHNvbGlkIG92ZXJ2aWV3IGJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZS4gVGltZSB0byBuYXZpZ2F0ZSB0aGUgZmlsZSBzeXN0ZW0gYW5kIHN0YXJ0IHBva2luZyBhcm91bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMDYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNToyMC45MzMyOTQ4MjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MDg1NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCT05ESU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9Mzk9aWYgTkVUX0NPUkVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDE6Y29uZmlnIEJPTkRJTkdcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNToyMS4wNzczODUyMjVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjUxNzA1NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSBwcm9jZXNzaW5nIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgQk9ORElORyBLY29uZmlnIEVudHJ5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBib25kaW5nIGRyaXZlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBnb2luZyB0byBuYXZpZ2F0ZSBvdmVyIHRvIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aGUgYEJPTkRJTkdgIHNlY3Rpb24sIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzOS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIHRoZSBjb25maWd1cmFibGUgZmVhdHVyZXMgcmVsYXRlZCB0byBsaW5rIGFnZ3JlZ2F0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBhdmFpbGFibGUgYm9uZGluZyBtb2RlcywgYW55IGhhcmR3YXJlIGRlcGVuZGVuY2llcywgYW5kIHRoZSB0eXBpY2FsIGRlZmF1bHQgc2V0dGluZ3MuIEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBhZGp1c3QgdGhlaXIgYm9uZGluZyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI2NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjIzLjMyOTA5MzM4NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzksXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzk6XFx0aWYgTkVUX0NPUkVcXG4gIDQwOlxcdFxcbiAgNDE6XFx0Y29uZmlnIEJPTkRJTkdcXG4gIDQyOlxcdFxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcbiAgNDM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cXG4gIDQ1OlxcdFxcdGhlbHBcXG4gIDQ2OlxcdFxcdCAgU2F5ICdZJyBvciAnTScgaWYgeW91IHdpc2ggdG8gYmUgYWJsZSB0byAnYm9uZCcgbXVsdGlwbGUgRXRoZXJuZXRcXG4gIDQ3OlxcdFxcdCAgQ2hhbm5lbHMgdG9nZXRoZXIuIFRoaXMgaXMgY2FsbGVkICdFdGhlcmNoYW5uZWwnIGJ5IENpc2NvLFxcbiAgNDg6XFx0XFx0ICAnVHJ1bmtpbmcnIGJ5IFN1biwgODAyLjNhZCBieSB0aGUgSUVFRSwgYW5kICdCb25kaW5nJyBpbiBMaW51eC5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBUaGUgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGJvbmRpbmcgbW9kZXMgdG8gYWxsb3cgZm9yIGJvdGggaGlnaFxcbiAgNTE6XFx0XFx0ICBwZXJmb3JtYW5jZSBhbmQgaGlnaCBhdmFpbGFiaWxpdHkgb3BlcmF0aW9uLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIFJlZmVyIHRvIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnJzdFxcdTAwM2UgZm9yIG1vcmVcXG4gIDU0OlxcdFxcdCAgaW5mb3JtYXRpb24uXFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgNTc6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBib25kaW5nLlxcbiAgNTg6XFx0XFxuICA1OTpcXHRjb25maWcgRFVNTVlcXG4gIDYwOlxcdFxcdHRyaXN0YXRlIFxcXCJEdW1teSBuZXQgZHJpdmVyIHN1cHBvcnRcXFwiXFxuICA2MTpcXHRcXHRoZWxwXFxuICA2MjpcXHRcXHQgIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBiaXQtYnVja2V0IGRldmljZSAoaS5lLiB0cmFmZmljIHlvdSBzZW5kIHRvXFxuICA2MzpcXHRcXHQgIHRoaXMgZGV2aWNlIGlzIGNvbnNpZ25lZCBpbnRvIG9ibGl2aW9uKSB3aXRoIGEgY29uZmlndXJhYmxlIElQXFxuICA2NDpcXHRcXHQgIGFkZHJlc3MuIEl0IGlzIG1vc3QgY29tbW9ubHkgdXNlZCBpbiBvcmRlciB0byBtYWtlIHlvdXIgY3VycmVudGx5XFxuICA2NTpcXHRcXHQgIGluYWN0aXZlIFNMSVAgYWRkcmVzcyBzZWVtIGxpa2UgYSByZWFsIGFkZHJlc3MgZm9yIGxvY2FsIHByb2dyYW1zLlxcbiAgNjY6XFx0XFx0ICBJZiB5b3UgdXNlIFNMSVAgb3IgUFBQLCB5b3UgbWlnaHQgd2FudCB0byBzYXkgWSBoZXJlLiBJdCB3b24ndFxcbiAgNjc6XFx0XFx0ICBlbmxhcmdlIHlvdXIga2VybmVsLiBXaGF0IGEgZGVhbC4gUmVhZCBhYm91dCBpdCBpbiB0aGUgTmV0d29ya1xcbiAgNjg6XFx0XFx0ICBBZG1pbmlzdHJhdG9yJ3MgR3VpZGUsIGF2YWlsYWJsZSBmcm9tXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjIzLjMyOTE2OTI4NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxODE1NDA3MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGluIGBib25kX2FsYi5jYC4gTGV0J3MgZGlnIGluOlxuXG4qKkRpdmluZyBpbnRvIGBib25kX2FsYi5jYCBmb3Igc29tZSB0YXJnZXRlZCBpbnNwZWN0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nLCBsZXQncyB6ZXJvIGluIG9uIGBib25kX2FsYi5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgYSBmZXcgc3BlY2lmaWMgc3BvdHMuIE15IGd1dCBmZWVsaW5nIGlzIHRlbGxpbmcgbWUgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIGludGVyZXN0aW5nIGhhcHBlbmluZyBvciBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBhcm91bmQgbGluZXMgNjc4LCAxMzQwLCAxMzc1LCBhbmQgMTQyOC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQncyBnb2luZyBvbiBpbiB0aGF0IGFyZWEsIHNvIEknbGwgYmUgbG9va2luZyB0byBzZWUgd2hhdCBraW5kIG9mIG9wZXJhdGlvbnMgYXJlIGJlaW5nIGRvbmUgdGhlcmUsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byB0aGUgaW50ZXJhY3Rpb25zIG9mIG1lbW9yeSBvciBzeXN0ZW0gY2FsbHMuIFByb2JhYmx5IHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBib25kaW5nIHByb2Nlc3MuIEknbGwgYmUgcGFydGljdWxhcmx5IGtlZW4gdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGVycm9yIGNvbmRpdGlvbnMgb3IgZWRnZSBjYXNlcyBhcm91bmQgdGhvc2UgYXJlYXMuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgdmFyaWFibGVzIG9yIGZ1bmN0aW9ucyBpbiB1c2Ugb24gdGhvc2UgbGluZXMgYW5kIHdoYXQgdGhlIG92ZXJhbGwgaW50ZW50aW9uIG9mIHRoZSBjb2RlIGlzLiBVbHRpbWF0ZWx5LCBJJ20gbG9va2luZyBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgYmUgb3B0aW1pemVkIG9yLCB3b3JzZSwgaW50cm9kdWNlIGJ1Z3MuIFRoZXNlIGxpbmVzIGFyZSBsaWtlbHkgY3JpdGljYWwgdG8gdGhlIHN0YWJpbGl0eSBvZiB0aGUgYm9uZGluZyBmdW5jdGlvbiwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgcnVubmluZyBzbW9vdGhseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkyNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6MjU6MjcuNTEwNzEyOTE2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjcwOlxcdFxcdGlmIChkZXYpIHtcXG4gNjcxOlxcdFxcdFxcdGlmIChuZXRpZl9pc19hbnlfYnJpZGdlX21hc3RlcihkZXYpKSB7XFxuIDY3MjpcXHRcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuIDY3MzpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjc0OlxcdFxcdFxcdH1cXG4gNjc1OlxcdFxcdFxcdGRldl9wdXQoZGV2KTtcXG4gNjc2OlxcdFxcdH1cXG4gNjc3OlxcdFxcbiA2Nzg6XFx0XFx0aWYgKGFycC1cXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVBMWSkpIHtcXG4gNjc5OlxcdFxcdFxcdC8qIHRoZSBhcnAgbXVzdCBiZSBzZW50IG9uIHRoZSBzZWxlY3RlZCByeCBjaGFubmVsICovXFxuIDY4MDpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XFxuIDY4MTpcXHRcXHRcXHRpZiAodHhfc2xhdmUgXFx1MDAyNlxcdTAwMjZcXG4gNjgyOlxcdFxcdFxcdCAgICAhZXRoZXJfYWRkcl9lcXVhbF82NGJpdHMoYXJwLVxcdTAwM2VtYWNfc3JjLFxcbiA2ODM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcikpIHtcXG4gNjg0OlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXFxuIDY4NTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjg2OlxcdFxcdFxcdFxcdGFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiA2ODc6XFx0XFx0XFx0XFx0Ym9uZF9od19hZGRyX2NvcHkoYXJwLVxcdTAwM2VtYWNfc3JjLCB0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcixcXG4gNjg4OlxcdFxcdFxcdFxcdFxcdFxcdCAgdHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbiA2ODk6XFx0XFx0XFx0fVxcbiA2OTA6XFx0XFx0XFx0bmV0ZGV2X2RiZyhib25kLVxcdTAwM2VkZXYsIFxcXCIoc2xhdmUgJXMpOiBTZXJ2ZXIgc2VudCBBUlAgUmVwbHkgcGFja2V0XFxcXG5cXFwiLFxcbiA2OTE6XFx0XFx0XFx0XFx0ICAgdHhfc2xhdmUgPyB0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lIDogXFxcIk5VTExcXFwiKTtcXG4gNjkyOlxcdFxcdH0gZWxzZSBpZiAoYXJwLVxcdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUVVFU1QpKSB7XFxuIDY5MzpcXHRcXHRcXHQvKiBDcmVhdGUgYW4gZW50cnkgaW4gdGhlIHJ4X2hhc2h0YmwgZm9yIHRoaXMgY2xpZW50IGFzIGFcXG4gNjk0OlxcdFxcdFxcdCAqIHBsYWNlIGhvbGRlci5cXG4gNjk1OlxcdFxcdFxcdCAqIFdoZW4gdGhlIGFycCByZXBseSBpcyByZWNlaXZlZCB0aGUgZW50cnkgd2lsbCBiZSB1cGRhdGVkXFxuIDY5NjpcXHRcXHRcXHQgKiB3aXRoIHRoZSBjb3JyZWN0IHVuaWNhc3QgYWRkcmVzcyBvZiB0aGUgY2xpZW50LlxcbiA2OTc6XFx0XFx0XFx0ICovXFxuIDY5ODpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XFxuIDY5OTpcXHRcXG4gNzAwOlxcdFxcdFxcdC8qIFRoZSBBUlAgcmVwbHkgcGFja2V0cyBtdXN0IGJlIGRlbGF5ZWQgc28gdGhhdFxcbiA3MDE6XFx0XFx0XFx0ICogdGhleSBjYW4gY2FuY2VsIG91dCB0aGUgaW5mbHVlbmNlIG9mIHRoZSBBUlAgcmVxdWVzdC5cXG4gNzAyOlxcdFxcdFxcdCAqL1xcbiA3MDM6XFx0XFx0XFx0Ym9uZC1cXHUwMDNlYWxiX2luZm8ucmxiX3VwZGF0ZV9kZWxheV9jb3VudGVyID0gUkxCX1VQREFURV9ERUxBWTtcXG4gNzA0OlxcdFxcbiA3MDU6XFx0XFx0XFx0LyogYXJwIHJlcXVlc3RzIGFyZSBicm9hZGNhc3QgYW5kIGFyZSBzZW50IG9uIHRoZSBwcmltYXJ5XFxuIDcwNjpcXHRcXHRcXHQgKiB0aGUgYXJwIHJlcXVlc3Qgd2lsbCBjb2xsYXBzZSBhbGwgY2xpZW50cyBvbiB0aGUgc3VibmV0IHRvXFxuIDcwNzpcXHRcXHRcXHQgKiB0aGUgcHJpbWFyeSBzbGF2ZS4gV2UgbXVzdCByZWdpc3RlciB0aGVzZSBjbGllbnRzIHRvIGJlXFxuIDcwODpcXHRcXHRcXHQgKiB1cGRhdGVkIHdpdGggdGhlaXIgYXNzaWduZWQgbWFjLlxcbiA3MDk6XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjI3LjUxMDgzODgxNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDc2NzQ4OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIGBib25kX2FsYi5jYCoqXG5cbkFscmlnaHQsIGxldCdzIGNpcmNsZSBiYWNrIGFuZCB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgYGJvbmRfYWxiLmNgIGZpbGUuIEkndmUgYmVlbiBtZWFuaW5nIHRvIHJldmlzaXQgdGhpcyBzZWN0aW9uLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBsb2dpYyBhcm91bmQgbGluZXMgMTM0MC0xNDUwLiBJIHZhZ3VlbHkgcmVjYWxsIHRoZXJlIHdhcyBzb21ldGhpbmcgdGhhdCBJIHdhbnRlZCB0byBjaGVjazsgcGVyaGFwcyBhIHN1YnRsZSBlZGdlIGNhc2Ugb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5IHRoYXQgd2FycmFudHMgYSBzZWNvbmQgZ2xhbmNlLiBJdCBjb3VsZCBiZSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2Ygc3BlY2lmaWMgYm9uZGluZyBjb25maWd1cmF0aW9ucywgb3IgbWF5YmUganVzdCBhIGNoYW5jZSB0byBjb25maXJtIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBhcmUgc3RpbGwgb3B0aW1hbCBnaXZlbiBob3cgd2UgdXNlIHRoZW0gbm93LiBJdCdzIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHN0aWxsIHNoaXAtc2hhcGUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NjAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjI5Ljk4NzU5MDg1NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNDAsXG4gIFwiTGluZUNvdW50XCI6IDExMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzQwOlxcdFxcbjEzNDE6XFx0XFx0aWYgKGJvbmRfaW5mby1cXHUwMDNlcmxiX2VuYWJsZWQpXFxuMTM0MjpcXHRcXHRcXHRybGJfZGVpbml0aWFsaXplKGJvbmQpO1xcbjEzNDM6XFx0fVxcbjEzNDQ6XFx0XFxuMTM0NTpcXHRzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4xMzQ2OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlKVxcbjEzNDc6XFx0e1xcbjEzNDg6XFx0XFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFxcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XFxuMTM0OTpcXHRcXG4xMzUwOlxcdFxcdGlmICghdHhfc2xhdmUpIHtcXG4xMzUxOlxcdFxcdFxcdC8qIHVuYmFsYW5jZWQgb3IgdW5hc3NpZ25lZCwgc2VuZCB0aHJvdWdoIHByaW1hcnkgKi9cXG4xMzUyOlxcdFxcdFxcdHR4X3NsYXZlID0gcmN1X2RlcmVmZXJlbmNlKGJvbmQtXFx1MDAzZWN1cnJfYWN0aXZlX3NsYXZlKTtcXG4xMzUzOlxcdFxcdFxcdGlmIChib25kLVxcdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpXFxuMTM1NDpcXHRcXHRcXHRcXHRib25kX2luZm8tXFx1MDAzZXVuYmFsYW5jZWRfbG9hZCArPSBza2ItXFx1MDAzZWxlbjtcXG4xMzU1OlxcdFxcdH1cXG4xMzU2OlxcdFxcbjEzNTc6XFx0XFx0aWYgKHR4X3NsYXZlIFxcdTAwMjZcXHUwMDI2IGJvbmRfc2xhdmVfY2FuX3R4KHR4X3NsYXZlKSkge1xcbjEzNTg6XFx0XFx0XFx0aWYgKHR4X3NsYXZlICE9IHJjdV9hY2Nlc3NfcG9pbnRlcihib25kLVxcdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSkpIHtcXG4xMzU5OlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXFxuMTM2MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gYm9uZF90eF9kcm9wKGJvbmQtXFx1MDAzZWRldiwgc2tiKTtcXG4xMzYxOlxcdFxcdFxcdFxcdGV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLVxcdTAwM2VoX3NvdXJjZSxcXG4xMzYyOlxcdFxcdFxcdFxcdFxcdFxcdHR4X3NsYXZlLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4xMzYzOlxcdFxcdFxcdH1cXG4xMzY0OlxcdFxcbjEzNjU6XFx0XFx0XFx0cmV0dXJuIGJvbmRfZGV2X3F1ZXVlX3htaXQoYm9uZCwgc2tiLCB0eF9zbGF2ZS1cXHUwMDNlZGV2KTtcXG4xMzY2OlxcdFxcdH1cXG4xMzY3OlxcdFxcbjEzNjg6XFx0XFx0aWYgKHR4X3NsYXZlIFxcdTAwMjZcXHUwMDI2IGJvbmQtXFx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xcbjEzNjk6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZib25kLVxcdTAwM2Vtb2RlX2xvY2spO1xcbjEzNzA6XFx0XFx0XFx0X190bGJfY2xlYXJfc2xhdmUoYm9uZCwgdHhfc2xhdmUsIDApO1xcbjEzNzE6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmJvbmQtXFx1MDAzZW1vZGVfbG9jayk7XFxuMTM3MjpcXHRcXHR9XFxuMTM3MzpcXHRcXG4xMzc0OlxcdFxcdC8qIG5vIHN1aXRhYmxlIGludGVyZmFjZSwgZnJhbWUgbm90IHNlbnQgKi9cXG4xMzc1OlxcdFxcdHJldHVybiBib25kX3R4X2Ryb3AoYm9uZC1cXHUwMDNlZGV2LCBza2IpO1xcbjEzNzY6XFx0fVxcbjEzNzc6XFx0XFxuMTM3ODpcXHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbjEzNzk6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMzgwOlxcdHtcXG4xMzgxOlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xcbjEzODI6XFx0XFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XFxuMTM4MzpcXHRcXHR1MzIgaGFzaF9pbmRleDtcXG4xMzg0OlxcdFxcbjEzODU6XFx0XFx0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xcbjEzODY6XFx0XFxuMTM4NzpcXHRcXHQvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqL1xcbjEzODg6XFx0XFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cXHUwMDNlaF9kZXN0KSkge1xcbjEzODk6XFx0XFx0XFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuMTM5MDpcXHRcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbjEzOTE6XFx0XFx0XFx0XFx0aWYgKGFsYl9kZXRlcm1pbmVfbmQoc2tiKSlcXG4xMzkyOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjEzOTM6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuMTM5NDpcXHRcXHRcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4xMzk1OlxcdFxcdFxcdFxcdGhhc2hfaW5kZXggPSBib25kX3htaXRfaGFzaChib25kLCBza2IpO1xcbjEzOTY6XFx0XFx0XFx0XFx0aWYgKGJvbmQtXFx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xcbjEzOTc6XFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUgPSB0bGJfY2hvb3NlX2NoYW5uZWwoYm9uZCxcXG4xMzk4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGhhc2hfaW5kZXggXFx1MDAyNiAweEZGLFxcbjEzOTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4pO1xcbjE0MDA6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xNDAxOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBib25kX3VwX3NsYXZlICpzbGF2ZXM7XFxuMTQwMjpcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuMTQwMzpcXHRcXG4xNDA0OlxcdFxcdFxcdFxcdFxcdHNsYXZlcyA9IHJjdV9kZXJlZmVyZW5jZShib25kLVxcdTAwM2V1c2FibGVfc2xhdmVzKTtcXG4xNDA1OlxcdFxcdFxcdFxcdFxcdGNvdW50ID0gc2xhdmVzID8gUkVBRF9PTkNFKHNsYXZlcy1cXHUwMDNlY291bnQpIDogMDtcXG4xNDA2OlxcdFxcdFxcdFxcdFxcdGlmIChsaWtlbHkoY291bnQpKVxcbjE0MDc6XFx0XFx0XFx0XFx0XFx0XFx0dHhfc2xhdmUgPSBzbGF2ZXMtXFx1MDAzZWFycltoYXNoX2luZGV4ICVcXG4xNDA4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjb3VudF07XFxuMTQwOTpcXHRcXHRcXHRcXHR9XFxuMTQxMDpcXHRcXHRcXHRcXHRicmVhaztcXG4xNDExOlxcdFxcdFxcdH1cXG4xNDEyOlxcdFxcdH1cXG4xNDEzOlxcdFxcdHJldHVybiB0eF9zbGF2ZTtcXG4xNDE0OlxcdH1cXG4xNDE1OlxcdFxcbjE0MTY6XFx0bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuMTQxNzpcXHR7XFxuMTQxODpcXHRcXHRzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTtcXG4xNDE5OlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmU7XFxuMTQyMDpcXHRcXG4xNDIxOlxcdFxcdHR4X3NsYXZlID0gYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcXG4xNDIyOlxcdFxcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xcbjE0MjM6XFx0fVxcbjE0MjQ6XFx0XFxuMTQyNTpcXHRzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbjE0MjY6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xNDI3OlxcdHtcXG4xNDI4OlxcdFxcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xcbjE0Mjk6XFx0XFx0c3RhdGljIGNvbnN0IF9fYmUzMiBpcF9iY2FzdCA9IGh0b25sKDB4ZmZmZmZmZmYpO1xcbjE0MzA6XFx0XFx0c3RydWN0IHNsYXZlICp0eF9zbGF2ZSA9IE5VTEw7XFxuMTQzMTpcXHRcXHRjb25zdCB1OCAqaGFzaF9zdGFydCA9IE5VTEw7XFxuMTQzMjpcXHRcXHRib29sIGRvX3R4X2JhbGFuY2UgPSB0cnVlO1xcbjE0MzM6XFx0XFx0c3RydWN0IGV0aGhkciAqZXRoX2RhdGE7XFxuMTQzNDpcXHRcXHR1MzIgaGFzaF9pbmRleCA9IDA7XFxuMTQzNTpcXHRcXHRpbnQgaGFzaF9zaXplID0gMDtcXG4xNDM2OlxcdFxcbjE0Mzc6XFx0XFx0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xcbjE0Mzg6XFx0XFxuMTQzOTpcXHRcXHRzd2l0Y2ggKG50b2hzKHNrYi1cXHUwMDNlcHJvdG9jb2wpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjI5Ljk4Nzc0NzM5NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzgxODI3NTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBQYWNrZXQgSGVhZGVyIE1vZGlmaWNhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIGEgcGF0Y2ggdGhhdCdzIGNydWNpYWwgZm9yIGF2b2lkaW5nIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIHdoZW4gZGVhbGluZyB3aXRoIG5ldHdvcmsgcGFja2V0IGhlYWRlcnMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBhcmUgZ29vZCBjaGFuZ2VzLiBXZSdyZSB0YWxraW5nIGFib3V0IHByZXZlbnRpbmcgbW9kaWZpY2F0aW9ucyB0byBzaGFyZWQgb3IgY2xvbmVkIGBza2JgIGhlYWRlcnMgaW4tcGxhY2UsIHdoaWNoIGlzIGEgY29tbW9uIGNhdXNlIG9mIGhhcmQtdG8tZGVidWcgaXNzdWVzLiBUaGUgdXNlIG9mIGBza2JfY293X2hlYWQoc2tiLCAwKWAgaXMgZXhhY3RseSB0aGUgcmlnaHQgYXBwcm9hY2ggdG8gZW5zdXJlIGNvcHktb24td3JpdGUgc2VtYW50aWNzIGJlZm9yZSBtYWtpbmcgY2hhbmdlcy4gSXQncyBhIGZ1bmRhbWVudGFsIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyB0ZWNobmlxdWUgaW4gdGhpcyBjb250ZXh0LlxuXG5Mb29raW5nIGF0IHRoZSBzcGVjaWZpYyBleGFtcGxlcyBwcm92aWRlZCwgaXQncyBjbGVhciB3aGF0J3MgYmVpbmcgYWRkcmVzc2VkOlxuXG4xLiAgSW4gYHJsYl9hcnBfeG1pdGAsIHdlIGhhdmUgdGhlIGBza2JfY293X2hlYWRgIGNoZWNrIGJlZm9yZSBtb2RpZnlpbmcgdGhlIEFSUCBzb3VyY2UgTUFDIGFkZHJlc3MuIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgaXNuJ3Qgb3ZlcndyaXR0ZW4gb24gc2hhcmVkIGJ1ZmZlcnMsIGFuZCB0aGVyZWZvcmUgdGhhdCB0aGUgZGF0YSBoYXMgYSB1bmlxdWUgYmFja2luZy4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIGxpa2VseSB2dWxuZXJhYmxlIHRvIG1vZGlmeWluZyBzaGFyZWQgZGF0YSBpZiB0aGUgc291cmNlIE1BQyBvbiB0aGUgcGFja2V0IGRpZG4ndCBtYXRjaCB0aGUgc2xhdmUncyBhZGRyZXNzLCBsZWFkaW5nIHRvIGEgcmFjZSBjb25kaXRpb24gb3IgaW5jb3JyZWN0IGJlaGF2aW9yIG9uIG11bHRpcGxlIHRocmVhZHMuXG5cbjIuICBJbiBgYm9uZF9kb19hbGJfeG1pdGAsIGEgc2ltaWxhciBhcHByb2FjaCBpcyB0YWtlbiwgYnV0IHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgaXMgbW9kaWZpZWQgbW9yZSBnZW5lcmljYWxseS4gSXQncyBncmVhdCB0byBzZWUgYHNrYl9jb3dfaGVhZGAgZW1wbG95ZWQgYmVmb3JlIGNvcHlpbmcgdGhlIHNsYXZlJ3MgTUFDIGFkZHJlc3MgaW50byB0aGUgcGFja2V0LiBUaGUgY29kZSB0aGVuIHVzZXMgYHNrYl9ldGhfaGRyKHNrYilgIHRvIGFjY2VzcyB0aGUgRXRoZXJuZXQgaGVhZGVyLCB3aGljaCBpcyBhbHNvIGNvcnJlY3QgYW5kIG11Y2ggc2FmZXIuXG5cbjMuICBJbiBib3RoIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBza2JfZXRoX2hkcihza2IpYCBkaXJlY3RseS4gVGhpcyBpcyBhIHN1YnRsZSBidXQgaW1wb3J0YW50IGNoYW5nZSwgZml4aW5nIGluc3RhbmNlcyB3aGVyZSBgZXRoX2hkcihza2IpYCB3YXMgcHJldmlvdXNseSB1c2VkLiBUaGUgcmVhc29uIHdoeSB0aGlzIGlzIGFuIGlzc3VlIGlzIHRoYXQgYGV0aF9oZHJgIGhhcyBiZWVuIGtub3duIHRvIGJlIHByb2JsZW1hdGljLCBhbmQgaXMgbm93IGdlbmVyYWxseSBkZXByZWNhdGVkLlxuXG5Ob3csIG15IG5leHQgc3RlcCB3b3VsZCBiZSB0byByZXZpZXcgdGhlIGNhbGxlcnMgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIGFzc2VzcyB0aGUgc2NvcGUgb2YgdGhlIGZpeCBhbmQgZW5zdXJlIG5vIG90aGVyIGluc3RhbmNlcyBvZiB2dWxuZXJhYmxlIGNvZGUgcmVtYWluIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIFRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgYXJlIGBybGJfYXJwX3htaXRgLCBgYm9uZF9kb19hbGJfeG1pdGAsIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAsIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAsIGBib25kX2FsYl94bWl0YCwgYW5kIGBib25kX3RsYl94bWl0YC4gQSB0aG9yb3VnaCBhbmFseXNpcyBvZiB0aGVzZSBjYWxsZXJzIHdpbGwgYmUgZXNzZW50aWFsLiBUaGlzIHBhdGNoIGFwcGVhcnMgdG8gYWRkcmVzcyByZWFsIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGF0IGNhbiBsZWFkIHRvIHN1YnRsZSBidWdzLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggbXkgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc3MywiT3V0cHV0VG9rZW5zIjo1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjM1LjM2OTU3NzY3OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3ODU0MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmxiX2FycF94bWl0fGJvbmRfZG9fYWxiX3htaXR8Ym9uZF9hbGJfeG1pdHxib25kX3RsYl94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTIyNz1zdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzMi1cXHQvKiBXZSBkb24ndCBuZWVkIHRvIGRpc2FibGUgc29mdGlycSBoZXJlLCBiZWNhdXNlXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjIzMzpcXHQgKiB0bGJfY2hvb3NlX2NoYW5uZWwoKSBpcyBvbmx5IGNhbGxlZCBieSBib25kX2FsYl94bWl0KClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjM0LVxcdCAqIHdoaWNoIGFscmVhZHkgaGFzIHNvZnRpcnEgZGlzYWJsZWQuXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9NTUzPXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnJsYl9jaG9vc2VfY2hhbm5lbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTY1Mi0gKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6NjUzOnN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnJsYl9hcnBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtNjU0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMzM1PXZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzNDQtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjEzNDU6c3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzNDYtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTM3OD1zdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MTUtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE0MTY6bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MTcte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MjEtXFx0dHhfc2xhdmUgPSBib25kX3htaXRfdGxiX3NsYXZlX2dldChib25kLCBza2IpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNDIyOlxcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNDIzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNDI1PXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQ5OC1cXHRcXHRpZiAoYm9uZF9pbmZvLVxcdTAwM2VybGJfZW5hYmxlZClcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQ5OTpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJsYl9hcnBfeG1pdChza2IsIGJvbmQpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTAwLVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MjgtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1Mjk6bmV0ZGV2X3R4X3QgYm9uZF9hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MzAte1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MzQtXFx0dHhfc2xhdmUgPSBib25kX3htaXRfYWxiX3NsYXZlX2dldChib25kLCBza2IpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNTM1OlxcdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTM2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTU1MD1zdGF0aWMgbmV0ZGV2X3R4X3QgX19ib25kX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTU3Ni1cXHRjYXNlIEJPTkRfTU9ERV9BTEI6XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NTc3OlxcdFxcdHJldHVybiBib25kX2FsYl94bWl0KHNrYiwgZGV2KTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1NzgtXFx0Y2FzZSBCT05EX01PREVfVExCOlxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTU3OTpcXHRcXHRyZXR1cm4gYm9uZF90bGJfeG1pdChza2IsIGRldik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTgwLVxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjM1LjQxNzM2NzM2N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3ODYzNzgxNzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEJvbmRpbmcgQUxCL1RMQiBNb2RlIFJlYWNoYWJpbGl0eSBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gZm9jdXNpbmcgb24gcmVhY2hhYmlsaXR5IHdpdGhpbiB0aGUgbmV0d29ya2luZy9ib25kaW5nIGRyaXZlciAoYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY2ApLiBUaGUgYm9uZGluZyBkZXZpY2UgaXRzZWxmIGlzIGEgdmlydHVhbCBzb2Z0d2FyZSBjb25zdHJ1Y3QgY3JlYXRlZCB1c2luZyBuZXRsaW5rIChzcGVjaWZpY2FsbHkgYFJUTV9ORVdMSU5LYCksIGFuZCBpdCBwbGF5cyBuaWNlbHkgd2l0aCBvdGhlciB2aXJ0dWFsIGludGVyZmFjZXMgbGlrZSBkdW1teSBvciB2ZXRoIGRldmljZXMgb2Z0ZW4gc2VlbiBpbiBRRU1VIG9yIHN5emthbGxlciBlbnZpcm9ubWVudHMuIFRoaXMgaXMgaW1wb3J0YW50LlxuXG5Ob3csIGxvb2tpbmcgYXQgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiBUTEIgb3IgQUxCIG1vZGUgKGBCT05EX01PREVfVExCYCBvciBgQk9ORF9NT0RFX0FMQmApLCBJJ3ZlIHRyYWNlZCB0aGUgZXhlY3V0aW9uIHBhdGg6IGBib25kX2FsYl94bWl0YCBvciBgYm9uZF90bGJfeG1pdGAgZGlyZWN0bHkgaW52b2tlIGBib25kX2RvX2FsYl94bWl0YCwgd2hpY2ggaW4gdHVybiBjYWxscyBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgLCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLCBhbmQgYHJsYl9hcnBfeG1pdGAuIENydWNpYWxseSwgdGhpcyBtZWFucyB0aG9zZSBmdW5jdGlvbnMgYXJlICpkaXJlY3RseSogaW52b2x2ZWQgaW4gcGFja2V0IHRyYW5zbWlzc2lvbiBvbiB0aGUgYm9uZCBkZXZpY2UuXG5cbkJhc2VkIG9uIHRoaXMsIGl0J3MgY2xlYXI6IFJlYWNoYWJpbGl0eSBpcyAqWUVTKiEgU3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgY3JlYXRpbmcgYm9uZCBkZXZpY2VzIGFuZCBzZW5kaW5nIHBhY2tldHMgdGhyb3VnaCB0aGVtLiBFeGNlbGxlbnQuIFRoaXMgaXMgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZy5cblxuTm93LCB0aGUganVpY3kgcGFydDogV29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgKllFUyohIFRoZSBjb2RlIG1vZGlmaWVzIHRoZSBwYWNrZXQgdHJhbnNtaXNzaW9uIHBhdGguIFNwZWNpZmljYWxseSwgSSBzZWUgbWFuaXB1bGF0aW9ucyBpbiBoZWFkZXIgYWNjZXNzIGFuZCBza2IgY2xvbmluZy9jb3cgaGVhZCByZS1hbGxvY2F0aW9uIGhhbmRsaW5nIGFyZSBwcmVzZW50IGluIHRoaXMgY29kZSBwYXRoLiBUaGlzIGFyZWEgcmVwcmVzZW50cyBhIGdvb2Qgc3VyZmFjZSBmb3IgdW5jb3ZlcmluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5MZXQncyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMuIFRoZSBrZXkgZnVuY3Rpb25zIEknbSBpbnRlcmVzdGVkIGluIGFyZTpcblxuKiAgIGBybGJfYXJwX3htaXRgIChzdGF0aWMsIGluIGBib25kX2FsYi5jYClcbiogICBgYm9uZF9kb19hbGJfeG1pdGAgKHN0YXRpYywgaW4gYGJvbmRfYWxiLmNgKVxuKiAgIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgKG5vbi1zdGF0aWMsIGluIGBib25kX2FsYi5jYClcbiogICBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgIChub24tc3RhdGljLCBpbiBgYm9uZF9hbGIuY2ApXG4qICAgYGJvbmRfYWxiX3htaXRgIChlbnRyeSBwb2ludCwgbm9uLXN0YXRpYywgaW4gYGJvbmRfYWxiLmNgKVxuKiAgIGBib25kX3RsYl94bWl0YCAoZW50cnkgcG9pbnQsIG5vbi1zdGF0aWMsIGluIGBib25kX2FsYi5jYClcblxuSSd2ZSBjb25maXJtZWQgdGhhdCB0aGVzZSBzeW1ib2xzIGFyZSAqbm90KiB1YmlxdWl0b3VzLiBUaGV5J3JlIGFsbCB2ZXJ5IHNwZWNpZmljIHRvIHRoZSBib25kaW5nIEFMQi9UTEIgbW9kZSB0cmFuc21pc3Npb24gcGF0aHMsIG1ha2luZyB0aGVtIGV4Y2VsbGVudCBjYW5kaWRhdGVzLlxuXG5SZWdhcmRpbmcgY29uZmlncywgSSd2ZSBjb25maXJtZWQgdGhhdCBgQk9ORElOR2AgYW5kIGBJTkVUYCBhcmUgdGhlIGVzc2VudGlhbCBmbGFncy4gYElORVRgIGlzIGEgZGVwZW5kZW5jeSBvZiBgQk9ORElOR2AsIGFuZCBgQk9ORElOR2AgYWxzbyBkZXBlbmRzIG9uIGBUTFMgfHwgVExTX0RFVklDRT1uYCBhcyBkZWZpbmVkIGluIGBkcml2ZXJzL25ldC9LY29uZmlnYCwgYnV0IGZvciBzaW1wbGljaXR5LCBgQk9ORElOR2Agd2lsbCBzdWZmaWNlLlxuXG5UaGVyZWZvcmUsIG15IGZpbmFsIGFuYWx5c2lzLCBmb2xsb3dpbmcgdGhlIHByZXNjcmliZWQgZm9ybWF0LCBpczpcblxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgW1wiQk9ORElOR1wiLCBcIklORVRcIl1gIChvciBzaW1wbGlmaWVkLCBgW1wiQk9ORElOR1wiXWApXG4qICAgKipGb2N1c1N5bWJvbHM6KipcbiAgICAqICAgYGJvbmRfYWxiX3htaXRgXG4gICAgKiAgIGBib25kX3RsYl94bWl0YFxuICAgICogICBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgXG4gICAgKiAgIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGBcbiAgICAqICAgYGJvbmRfZG9fYWxiX3htaXRgXG4gICAgKiAgIGBybGJfYXJwX3htaXRgXG4qICAgKipXb3J0aEZ1enppbmc6KiogYHRydWVgXG4qICAgKipSZWFzb25pbmc6KiogVGhlIGNvZGUgbW9kaWZpZXMgcGFja2V0IHRyYW5zbWlzc2lvbiwgaGVhZGVyIGFjY2VzcywgYW5kIHNrYiBoYW5kbGluZyBpbiBBTEIvVExCIG1vZGVzLCBtYWtpbmcgaXQgYSB2YWx1YWJsZSBmdXp6aW5nIHRhcmdldCBhbmQgcmVhY2hhYmxlIHZpYSBzeXprYWxsZXItY3JlYXRlZCBib25kIGRldmljZXMuXG5cbk9rYXksIGV2ZXJ5dGhpbmcgbG9va3MgZ29vZC4gUmVhZHkgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMjMsIk91dHB1dFRva2VucyI6MTgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjQzLjI4MTE1NjM3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgzOTUyNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2FsYl94bWl0XCIsXG4gICAgXCJib25kX3RsYl94bWl0XCIsXG4gICAgXCJib25kX3htaXRfYWxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfZG9fYWxiX3htaXRcIixcbiAgICBcInJsYl9hcnBfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCB0cmFuc21pc3Npb24gcGF0aHMgaW4gdGhlIGJvbmRpbmcgZHJpdmVyIGZvciBiYWxhbmNlLWFsYiBhbmQgYmFsYW5jZS10bGIgbW9kZXMgKGJvbmRfYWxiLmMpLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgc2tiIGhlYWRlciB3cml0YWJpbGl0eSB1c2luZyBza2JfY293X2hlYWQgYmVmb3JlIG1vZGlmeWluZyBNQUMvQVJQIGhlYWRlcnMgYW5kIHVzZXMgc2tiX2V0aF9oZHIgc2FmZWx5LiBUaGUgYm9uZGluZyBkcml2ZXIgaXMgYSBzb2Z0d2FyZSBuZXRkZXYgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJib25kX2FsYl94bWl0XCIsXG4gICAgXCJib25kX3RsYl94bWl0XCIsXG4gICAgXCJib25kX3htaXRfYWxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfZG9fYWxiX3htaXRcIixcbiAgICBcInJsYl9hcnBfeG1pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhY2tldCB0cmFuc21pc3Npb24gcGF0aHMgaW4gdGhlIGJvbmRpbmcgZHJpdmVyIGZvciBiYWxhbmNlLWFsYiBhbmQgYmFsYW5jZS10bGIgbW9kZXMgKGJvbmRfYWxiLmMpLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgc2tiIGhlYWRlciB3cml0YWJpbGl0eSB1c2luZyBza2JfY293X2hlYWQgYmVmb3JlIG1vZGlmeWluZyBNQUMvQVJQIGhlYWRlcnMgYW5kIHVzZXMgc2tiX2V0aF9oZHIgc2FmZWx5LiBUaGUgYm9uZGluZyBkcml2ZXIgaXMgYSBzb2Z0d2FyZSBuZXRkZXYgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNTo0My4zNTk1NTkwMDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjczMzQzODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6MjU6NDMuMzYwMDIxNjI3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzEyNzI4NzcyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBza2IgaGVhZGVyIG11dGFiaWxpdHkgaW4gdGhlIGJvbmRpbmcgQUxCL1RMQiB0cmFuc21pdCBwYXRocyAoZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IGFkZHMgYHNrYl9jb3dfaGVhZChza2IsIDApYCBjYWxscyBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgaW4gQVJQIHBhY2tldHMgKGBybGJfYXJwX3htaXRgKSBhbmQgRXRoZXJuZXQgaGVhZGVycyAoYGJvbmRfZG9fYWxiX3htaXRgKSwgZW5zdXJpbmcgY2xvbmVkL3NoYXJlZCBza2IgaGVhZHMgYXJlIGNvcGllZCBiZWZvcmUgd3JpdGluZy5cXG4yLiBJdCByZWxvYWRzIHRoZSBwb2ludGVyIHRvIHRoZSBBUlAvRXRoZXJuZXQgaGVhZGVyIGFmdGVyIGBza2JfY293X2hlYWRgIHRvIGF2b2lkIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2VzLlxcbjMuIEl0IGNsZWFucyB1cCByZWR1bmRhbnQgYHNrYl9yZXNldF9tYWNfaGVhZGVyKClgIGNhbGxzIGluIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgYnkgdXNpbmcgYHNrYl9ldGhfaGRyKHNrYilgLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgbWFuYWdlIHBhY2tldCBidWZmZXIgbXV0YWJpbGl0eSBhbmQgcHJldmVudCBkYXRhIGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLXJlYWxsb2MgYnVncyBvbiBzaGFyZWQvY2xvbmVkIHNrYnMgKGlzc3VlcyBkZXRlY3RhYmxlIGJ5IEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMsIHBhZGRpbmdzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRhMzVjMjc5NTMyOTc2ZWIzNjI4Y2E3ZTczMzUyYmNlNjQ1OWJhNzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDIyOjI1OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG5pbmRleCA2NTRmMDUxZDAwMjM5Li40M2FjOGUyOGU0MTgyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXG4rKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbkBAIC02NzgsOSArNjc4LDE1IEBAIHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnJsYl9hcnBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcdGlmIChhcnAtXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVBMWSkpIHtcbiBcdFx0LyogdGhlIGFycCBtdXN0IGJlIHNlbnQgb24gdGhlIHNlbGVjdGVkIHJ4IGNoYW5uZWwgKi9cbiBcdFx0dHhfc2xhdmUgPSBybGJfY2hvb3NlX2NoYW5uZWwoc2tiLCBib25kLCBhcnApO1xuLVx0XHRpZiAodHhfc2xhdmUpXG4rXHRcdGlmICh0eF9zbGF2ZSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFldGhlcl9hZGRyX2VxdWFsXzY0Yml0cyhhcnAtXHUwMDNlbWFjX3NyYyxcbitcdFx0XHRcdFx0ICAgICB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpKSB7XG4rXHRcdFx0aWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIDApKSlcbitcdFx0XHRcdHJldHVybiBOVUxMO1xuK1x0XHRcdGFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xuIFx0XHRcdGJvbmRfaHdfYWRkcl9jb3B5KGFycC1cdTAwM2VtYWNfc3JjLCB0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsXG4gXHRcdFx0XHRcdCAgdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuKTtcbitcdFx0fVxuIFx0XHRuZXRkZXZfZGJnKGJvbmQtXHUwMDNlZGV2LCBcIihzbGF2ZSAlcyk6IFNlcnZlciBzZW50IEFSUCBSZXBseSBwYWNrZXRcXG5cIixcbiBcdFx0XHQgICB0eF9zbGF2ZSA/IHR4X3NsYXZlLVx1MDAzZWRldi1cdTAwM2VuYW1lIDogXCJOVUxMXCIpO1xuIFx0fSBlbHNlIGlmIChhcnAtXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVFVRVNUKSkge1xuQEAgLTEzNDAsNyArMTM0Niw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUpXG4ge1xuIFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcbi1cdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xuIFxuIFx0aWYgKCF0eF9zbGF2ZSkge1xuIFx0XHQvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovXG5AQCAtMTM1MSw3ICsxMzU2LDkgQEAgc3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4gXG4gXHRpZiAodHhfc2xhdmUgXHUwMDI2XHUwMDI2IGJvbmRfc2xhdmVfY2FuX3R4KHR4X3NsYXZlKSkge1xuIFx0XHRpZiAodHhfc2xhdmUgIT0gcmN1X2FjY2Vzc19wb2ludGVyKGJvbmQtXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XG4tXHRcdFx0ZXRoZXJfYWRkcl9jb3B5KGV0aF9kYXRhLVx1MDAzZWhfc291cmNlLFxuK1x0XHRcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXG4rXHRcdFx0XHRyZXR1cm4gYm9uZF90eF9kcm9wKGJvbmQtXHUwMDNlZGV2LCBza2IpO1xuK1x0XHRcdGV0aGVyX2FkZHJfY29weShza2JfZXRoX2hkcihza2IpLVx1MDAzZWhfc291cmNlLFxuIFx0XHRcdFx0XHR0eF9zbGF2ZS1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFx0XHR9XG4gXG5AQCAtMTM3NSw4ICsxMzgyLDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xuIFx0dTMyIGhhc2hfaW5kZXg7XG4gXG4tXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuLVx0ZXRoX2RhdGEgPSBldGhfaGRyKHNrYik7XG4rXHRldGhfZGF0YSA9IHNrYl9ldGhfaGRyKHNrYik7XG4gXG4gXHQvKiBEbyBub3QgVFggYmFsYW5jZSBhbnkgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAqL1xuIFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhfZGF0YS1cdTAwM2VoX2Rlc3QpKSB7XG5AQCAtMTQyOCw4ICsxNDM0LDcgQEAgc3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbiBcdHUzMiBoYXNoX2luZGV4ID0gMDtcbiBcdGludCBoYXNoX3NpemUgPSAwO1xuIFxuLVx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbi1cdGV0aF9kYXRhID0gZXRoX2hkcihza2IpO1xuK1x0ZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO1xuIFxuIFx0c3dpdGNoIChudG9ocyhza2ItXHUwMDNlcHJvdG9jb2wpKSB7XG4gXHRjYXNlIEVUSF9QX0lQOiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNTo0My4zNjAwMjI0NjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTMxODM5NzQ3OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gSnVzdGlmaWNhdGlvbiBmb3IgYm9uZF9hbGIuYyBQYXRjaCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYCB3YXJyYW50cyBpdHMgb3duIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgcmVxdWVzdCDigJMgZXNzZW50aWFsbHkgYSBjb2RlIHJldmlldyBmb3IgbWVtb3J5IHNhZmV0eSBpbXBsaWNhdGlvbnMuIEknbGwgbmVlZCB0byBhbmFseXplIHRoZSBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGl0IGludHJvZHVjZXMgYW55IHBvdGVudGlhbGx5IEtNU0FOLXNwZWNpZmljIGlzc3VlcyB0aGF0IEtBU0FOIG1pZ2h0IG1pc3MuXG5cbkZpcnN0LCB0aGUgcmlzayBpcyBtaW5pbWFsOyBpdCdzIGp1c3QgUUEgb24gYSBkZXZlbG9wZXIgcGF0Y2guIFRoZSBhY3Rpb24gaXMgY2xlYXI6IHJldmlldyB0aGUgY29kZS4gSSdsbCBuZWVkIHRvIGFjdHVhbGx5ICpzZWUqIHRoZSBjb2RlLCBzbyBJJ2xsIHByb2JhYmx5IHB1bGwgdXAgdGhlIGZpbGUgZGlyZWN0bHksIG9yIHVzZSBhIHRvb2wgbGlrZSBgZ3JlcHBlcmAgdG8gZXhhbWluZSBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IHNjcmVhbXMgXCJLTVNBTiBjYW5kaWRhdGVcIiDigJMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyB0aGF0IGFyZSBoaWdobHkgdGltaW5nLWRlcGVuZGVudCwgb3IgYW55dGhpbmcgdGhhdCBLTVNBTiBpcyBrbm93biB0byBleGNlbCBhdCBmaW5kaW5nLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2g7IEknbSBoZXJlIHRvIGVuc3VyZSB3ZSBjYXRjaCB0aG9zZSBzdWJ0bGUgbWVtb3J5IGVycm9ycyB0aGF0IEtBU0FOIG1pZ2h0IG92ZXJsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODc1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6MjU6NTYuNTQ0MDAxNjk5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjcwOlxcdFxcdGlmIChkZXYpIHtcXG4gNjcxOlxcdFxcdFxcdGlmIChuZXRpZl9pc19hbnlfYnJpZGdlX21hc3RlcihkZXYpKSB7XFxuIDY3MjpcXHRcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuIDY3MzpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjc0OlxcdFxcdFxcdH1cXG4gNjc1OlxcdFxcdFxcdGRldl9wdXQoZGV2KTtcXG4gNjc2OlxcdFxcdH1cXG4gNjc3OlxcdFxcbiA2Nzg6XFx0XFx0aWYgKGFycC1cXHUwMDNlb3BfY29kZSA9PSBodG9ucyhBUlBPUF9SRVBMWSkpIHtcXG4gNjc5OlxcdFxcdFxcdC8qIHRoZSBhcnAgbXVzdCBiZSBzZW50IG9uIHRoZSBzZWxlY3RlZCByeCBjaGFubmVsICovXFxuIDY4MDpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XFxuIDY4MTpcXHRcXHRcXHRpZiAodHhfc2xhdmUgXFx1MDAyNlxcdTAwMjZcXG4gNjgyOlxcdFxcdFxcdCAgICAhZXRoZXJfYWRkcl9lcXVhbF82NGJpdHMoYXJwLVxcdTAwM2VtYWNfc3JjLFxcbiA2ODM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcikpIHtcXG4gNjg0OlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShza2JfY293X2hlYWQoc2tiLCAwKSkpXFxuIDY4NTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjg2OlxcdFxcdFxcdFxcdGFycCA9IChzdHJ1Y3QgYXJwX3BrdCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiA2ODc6XFx0XFx0XFx0XFx0Ym9uZF9od19hZGRyX2NvcHkoYXJwLVxcdTAwM2VtYWNfc3JjLCB0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcixcXG4gNjg4OlxcdFxcdFxcdFxcdFxcdFxcdCAgdHhfc2xhdmUtXFx1MDAzZWRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbiA2ODk6XFx0XFx0XFx0fVxcbiA2OTA6XFx0XFx0XFx0bmV0ZGV2X2RiZyhib25kLVxcdTAwM2VkZXYsIFxcXCIoc2xhdmUgJXMpOiBTZXJ2ZXIgc2VudCBBUlAgUmVwbHkgcGFja2V0XFxcXG5cXFwiLFxcbiA2OTE6XFx0XFx0XFx0XFx0ICAgdHhfc2xhdmUgPyB0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lIDogXFxcIk5VTExcXFwiKTtcXG4gNjkyOlxcdFxcdH0gZWxzZSBpZiAoYXJwLVxcdTAwM2VvcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUVVFU1QpKSB7XFxuIDY5MzpcXHRcXHRcXHQvKiBDcmVhdGUgYW4gZW50cnkgaW4gdGhlIHJ4X2hhc2h0YmwgZm9yIHRoaXMgY2xpZW50IGFzIGFcXG4gNjk0OlxcdFxcdFxcdCAqIHBsYWNlIGhvbGRlci5cXG4gNjk1OlxcdFxcdFxcdCAqIFdoZW4gdGhlIGFycCByZXBseSBpcyByZWNlaXZlZCB0aGUgZW50cnkgd2lsbCBiZSB1cGRhdGVkXFxuIDY5NjpcXHRcXHRcXHQgKiB3aXRoIHRoZSBjb3JyZWN0IHVuaWNhc3QgYWRkcmVzcyBvZiB0aGUgY2xpZW50LlxcbiA2OTc6XFx0XFx0XFx0ICovXFxuIDY5ODpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJsYl9jaG9vc2VfY2hhbm5lbChza2IsIGJvbmQsIGFycCk7XFxuIDY5OTpcXHRcXG4gNzAwOlxcdFxcdFxcdC8qIFRoZSBBUlAgcmVwbHkgcGFja2V0cyBtdXN0IGJlIGRlbGF5ZWQgc28gdGhhdFxcbiA3MDE6XFx0XFx0XFx0ICogdGhleSBjYW4gY2FuY2VsIG91dCB0aGUgaW5mbHVlbmNlIG9mIHRoZSBBUlAgcmVxdWVzdC5cXG4gNzAyOlxcdFxcdFxcdCAqL1xcbiA3MDM6XFx0XFx0XFx0Ym9uZC1cXHUwMDNlYWxiX2luZm8ucmxiX3VwZGF0ZV9kZWxheV9jb3VudGVyID0gUkxCX1VQREFURV9ERUxBWTtcXG4gNzA0OlxcdFxcbiA3MDU6XFx0XFx0XFx0LyogYXJwIHJlcXVlc3RzIGFyZSBicm9hZGNhc3QgYW5kIGFyZSBzZW50IG9uIHRoZSBwcmltYXJ5XFxuIDcwNjpcXHRcXHRcXHQgKiB0aGUgYXJwIHJlcXVlc3Qgd2lsbCBjb2xsYXBzZSBhbGwgY2xpZW50cyBvbiB0aGUgc3VibmV0IHRvXFxuIDcwNzpcXHRcXHRcXHQgKiB0aGUgcHJpbWFyeSBzbGF2ZS4gV2UgbXVzdCByZWdpc3RlciB0aGVzZSBjbGllbnRzIHRvIGJlXFxuIDcwODpcXHRcXHRcXHQgKiB1cGRhdGVkIHdpdGggdGhlaXIgYXNzaWduZWQgbWFjLlxcbiA3MDk6XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjU2LjU0NDE1NTkzOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTM4NjE1NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0IHByb2Nlc3NlczpcblxuKipRdWljayBTY2FuIG9mIEJvbmQgVHJhbnNtaXQgRnVuY3Rpb25zKipcblxuT2theSwgbGV0J3MgcXVpY2tseSByZXZpZXcgdGhvc2UgY29yZSBib25kIHRyYW5zbWl0IGZ1bmN0aW9uczogYGJvbmRfZG9fYWxiX3htaXRgLCBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgLCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20ga2VlcGluZyBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXkgZml0IHRvZ2V0aGVyLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIGFjdGl2ZS1iYWNrdXAgYW5kIHRyYW5zbWl0IGxvYWQgYmFsYW5jaW5nLiBJJ20gZm9jdXNpbmcgb24gdGhlIHRyYW5zbWl0IHNpZGUsIHNvIHRoaXMgaXMgd2hlcmUgdGhlIGRldGFpbHMgcmVzaWRlIGFuZCB0aGUgbG9naWMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIG9mIHRoZXNlIGJvbmQgdHJhbnNtaXQgZnVuY3Rpb25zIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgZ2FwcyBvciBvdmVybGFwcywgb3IgY29uZmxpY3RzIGluIHRoZSBmbG93IGNvbnRyb2wgb3IgaG93IHRoZSBkaWZmZXJlbnQgbW9kZXMgYXJlIGhhbmRsZWQuIEdvdHRhIGtlZXAgdGhhdCBtZW50YWwgbW9kZWwgc2hhcnAhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI1OjU5LjA4Mjc3NTYyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMzUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzM1OlxcdHZvaWQgYm9uZF9hbGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxcbjEzMzY6XFx0e1xcbjEzMzc6XFx0XFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFxcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XFxuMTMzODpcXHRcXG4xMzM5OlxcdFxcdHRsYl9kZWluaXRpYWxpemUoYm9uZCk7XFxuMTM0MDpcXHRcXG4xMzQxOlxcdFxcdGlmIChib25kX2luZm8tXFx1MDAzZXJsYl9lbmFibGVkKVxcbjEzNDI6XFx0XFx0XFx0cmxiX2RlaW5pdGlhbGl6ZShib25kKTtcXG4xMzQzOlxcdH1cXG4xMzQ0OlxcdFxcbjEzNDU6XFx0c3RhdGljIG5ldGRldl90eF90IGJvbmRfZG9fYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuMTM0NjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNsYXZlICp0eF9zbGF2ZSlcXG4xMzQ3OlxcdHtcXG4xMzQ4OlxcdFxcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xcbjEzNDk6XFx0XFxuMTM1MDpcXHRcXHRpZiAoIXR4X3NsYXZlKSB7XFxuMTM1MTpcXHRcXHRcXHQvKiB1bmJhbGFuY2VkIG9yIHVuYXNzaWduZWQsIHNlbmQgdGhyb3VnaCBwcmltYXJ5ICovXFxuMTM1MjpcXHRcXHRcXHR0eF9zbGF2ZSA9IHJjdV9kZXJlZmVyZW5jZShib25kLVxcdTAwM2VjdXJyX2FjdGl2ZV9zbGF2ZSk7XFxuMTM1MzpcXHRcXHRcXHRpZiAoYm9uZC1cXHUwMDNlcGFyYW1zLnRsYl9keW5hbWljX2xiKVxcbjEzNTQ6XFx0XFx0XFx0XFx0Ym9uZF9pbmZvLVxcdTAwM2V1bmJhbGFuY2VkX2xvYWQgKz0gc2tiLVxcdTAwM2VsZW47XFxuMTM1NTpcXHRcXHR9XFxuMTM1NjpcXHRcXG4xMzU3OlxcdFxcdGlmICh0eF9zbGF2ZSBcXHUwMDI2XFx1MDAyNiBib25kX3NsYXZlX2Nhbl90eCh0eF9zbGF2ZSkpIHtcXG4xMzU4OlxcdFxcdFxcdGlmICh0eF9zbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC1cXHUwMDNlY3Vycl9hY3RpdmVfc2xhdmUpKSB7XFxuMTM1OTpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoc2tiX2Nvd19oZWFkKHNrYiwgMCkpKVxcbjEzNjA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGJvbmRfdHhfZHJvcChib25kLVxcdTAwM2VkZXYsIHNrYik7XFxuMTM2MTpcXHRcXHRcXHRcXHRldGhlcl9hZGRyX2NvcHkoc2tiX2V0aF9oZHIoc2tiKS1cXHUwMDNlaF9zb3VyY2UsXFxuMTM2MjpcXHRcXHRcXHRcXHRcXHRcXHR0eF9zbGF2ZS1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuMTM2MzpcXHRcXHRcXHR9XFxuMTM2NDpcXHRcXG4xMzY1OlxcdFxcdFxcdHJldHVybiBib25kX2Rldl9xdWV1ZV94bWl0KGJvbmQsIHNrYiwgdHhfc2xhdmUtXFx1MDAzZWRldik7XFxuMTM2NjpcXHRcXHR9XFxuMTM2NzpcXHRcXG4xMzY4OlxcdFxcdGlmICh0eF9zbGF2ZSBcXHUwMDI2XFx1MDAyNiBib25kLVxcdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcXG4xMzY5OlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Ym9uZC1cXHUwMDNlbW9kZV9sb2NrKTtcXG4xMzcwOlxcdFxcdFxcdF9fdGxiX2NsZWFyX3NsYXZlKGJvbmQsIHR4X3NsYXZlLCAwKTtcXG4xMzcxOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZib25kLVxcdTAwM2Vtb2RlX2xvY2spO1xcbjEzNzI6XFx0XFx0fVxcbjEzNzM6XFx0XFxuMTM3NDpcXHRcXHQvKiBubyBzdWl0YWJsZSBpbnRlcmZhY2UsIGZyYW1lIG5vdCBzZW50ICovXFxuMTM3NTpcXHRcXHRyZXR1cm4gYm9uZF90eF9kcm9wKGJvbmQtXFx1MDAzZWRldiwgc2tiKTtcXG4xMzc2OlxcdH1cXG4xMzc3OlxcdFxcbjEzNzg6XFx0c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4xMzc5OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuMTM4MDpcXHR7XFxuMTM4MTpcXHRcXHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlID0gTlVMTDtcXG4xMzgyOlxcdFxcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xcbjEzODM6XFx0XFx0dTMyIGhhc2hfaW5kZXg7XFxuMTM4NDpcXHRcXG4xMzg1OlxcdFxcdGV0aF9kYXRhID0gc2tiX2V0aF9oZHIoc2tiKTtcXG4xMzg2OlxcdFxcbjEzODc6XFx0XFx0LyogRG8gbm90IFRYIGJhbGFuY2UgYW55IG11bHRpY2FzdCBvciBicm9hZGNhc3QgKi9cXG4xMzg4OlxcdFxcdGlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2RhdGEtXFx1MDAzZWhfZGVzdCkpIHtcXG4xMzg5OlxcdFxcdFxcdHN3aXRjaCAoc2tiLVxcdTAwM2Vwcm90b2NvbCkge1xcbjEzOTA6XFx0XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4xMzkxOlxcdFxcdFxcdFxcdGlmIChhbGJfZGV0ZXJtaW5lX25kKHNrYikpXFxuMTM5MjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xMzkzOlxcdFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbjEzOTQ6XFx0XFx0XFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxuMTM5NTpcXHRcXHRcXHRcXHRoYXNoX2luZGV4ID0gYm9uZF94bWl0X2hhc2goYm9uZCwgc2tiKTtcXG4xMzk2OlxcdFxcdFxcdFxcdGlmIChib25kLVxcdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcXG4xMzk3OlxcdFxcdFxcdFxcdFxcdHR4X3NsYXZlID0gdGxiX2Nob29zZV9jaGFubmVsKGJvbmQsXFxuMTM5ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBoYXNoX2luZGV4IFxcdTAwMjYgMHhGRixcXG4xMzk5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlbGVuKTtcXG4xNDAwOlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMTQwMTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYm9uZF91cF9zbGF2ZSAqc2xhdmVzO1xcbjE0MDI6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGNvdW50O1xcbjE0MDM6XFx0XFxuMTQwNDpcXHRcXHRcXHRcXHRcXHRzbGF2ZXMgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cXHUwMDNldXNhYmxlX3NsYXZlcyk7XFxuMTQwNTpcXHRcXHRcXHRcXHRcXHRjb3VudCA9IHNsYXZlcyA/IFJFQURfT05DRShzbGF2ZXMtXFx1MDAzZWNvdW50KSA6IDA7XFxuMTQwNjpcXHRcXHRcXHRcXHRcXHRpZiAobGlrZWx5KGNvdW50KSlcXG4xNDA3OlxcdFxcdFxcdFxcdFxcdFxcdHR4X3NsYXZlID0gc2xhdmVzLVxcdTAwM2VhcnJbaGFzaF9pbmRleCAlXFxuMTQwODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY291bnRdO1xcbjE0MDk6XFx0XFx0XFx0XFx0fVxcbjE0MTA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTQxMTpcXHRcXHRcXHR9XFxuMTQxMjpcXHRcXHR9XFxuMTQxMzpcXHRcXHRyZXR1cm4gdHhfc2xhdmU7XFxuMTQxNDpcXHR9XFxuMTQxNTpcXHRcXG4xNDE2OlxcdG5ldGRldl90eF90IGJvbmRfdGxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbjE0MTc6XFx0e1xcbjE0MTg6XFx0XFx0c3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihib25kX2Rldik7XFxuMTQxOTpcXHRcXHRzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlO1xcbjE0MjA6XFx0XFxuMTQyMTpcXHRcXHR0eF9zbGF2ZSA9IGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KGJvbmQsIHNrYik7XFxuMTQyMjpcXHRcXHRyZXR1cm4gYm9uZF9kb19hbGJfeG1pdChza2IsIGJvbmQsIHR4X3NsYXZlKTtcXG4xNDIzOlxcdH1cXG4xNDI0OlxcdFxcbjE0MjU6XFx0c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4xNDI2OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuMTQyNzpcXHR7XFxuMTQyODpcXHRcXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcXG4xNDI5OlxcdFxcdHN0YXRpYyBjb25zdCBfX2JlMzIgaXBfYmNhc3QgPSBodG9ubCgweGZmZmZmZmZmKTtcXG4xNDMwOlxcdFxcdHN0cnVjdCBzbGF2ZSAqdHhfc2xhdmUgPSBOVUxMO1xcbjE0MzE6XFx0XFx0Y29uc3QgdTggKmhhc2hfc3RhcnQgPSBOVUxMO1xcbjE0MzI6XFx0XFx0Ym9vbCBkb190eF9iYWxhbmNlID0gdHJ1ZTtcXG4xNDMzOlxcdFxcdHN0cnVjdCBldGhoZHIgKmV0aF9kYXRhO1xcbjE0MzQ6XFx0XFx0dTMyIGhhc2hfaW5kZXggPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNTo1OS4wODI5Mjg4OTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTYzMjY0ODEwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBFbnN1cmluZyBXcml0YWJsZSBTS0IgSGVhZGVycyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyBkZWFsaW5nIHdpdGggcGFja2V0IHRyYW5zbWlzc2lvbiBpbiBhIGJvbmRpbmcgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYXJvdW5kIEFjdGl2ZS1CYWNrdXAgb3IgQWN0aXZlLUxvYWQtQmFsYW5jaW5nIG1vZGVzLCBhbmQgaXMgYWltaW5nIHRvIGVuc3VyZSB0aGUgcGFja2V0cyBhcmUgY29ycmVjdGx5IGZvcm1hdHRlZCBiZWZvcmUgYmVpbmcgc2VudCBvdXQuIFRoZSBrZXkgc2VlbXMgdG8gYmUgbWFuYWdpbmcgdGhlIFNLQiAoU29ja2V0IEJ1ZmZlcikgaGVhZGVycyBmb3Igd3JpdGUgb3BlcmF0aW9ucy4gSSBzZWUgaXQgaW4gdGhyZWUga2V5IGFyZWFzOlxuXG4xLiAgKipgcmxiX2FycF94bWl0YCoqOiBUaGUgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gY29ycmVjdCBBUlAgcmVwbGllcy4gSWYgdGhlIHNvdXJjZSBNQUMgYWRkcmVzcyAoYGFycC1cdTAwM2VtYWNfc3JjYCkgaW4gYW4gQVJQIHJlcGx5IGRvZXNuJ3QgbWF0Y2ggdGhlIGludGVyZmFjZSdzIE1BQyBhZGRyZXNzIChgdHhfc2xhdmUtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyYCksIHRoZSBjb2RlIG5vdyBwcm9hY3RpdmVseSBlbnN1cmVzIHRoZSBTS0IgaGVhZGVyIGlzIHdyaXRhYmxlIHVzaW5nIGBza2JfY293X2hlYWQoc2tiLCAwKWAuIFRoaXMgaXMgY3J1Y2lhbCB0byBhdm9pZCBtb2RpZnlpbmcgc2hhcmVkIG1lbW9yeS4gSWYgYHNrYl9jb3dfaGVhZGAgaXMgc3VjY2Vzc2Z1bCAoaXQgcmV0dXJucyB6ZXJvKSwgdGhlIEFSUCBwb2ludGVyIGlzIHJlbG9hZGVkIHRvIHBvaW50IHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uLiBJdCB0aGVuIGNvcGllcyB0aGUgY29ycmVjdCBNQUMgYWRkcmVzcy4gVGhpcyBpcyBhIHNvbGlkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBhcHByb2FjaCB0byBtYWtlIHN1cmUgdGhlIHBhY2tldCBpcyBub3QgY29ycnVwdGVkIGFuZCB0aGUgQVJQIHJlcGx5IGdvZXMgb3V0IHdpdGggdGhlIGNvcnJlY3Qgc291cmNlIE1BQy5cblxuMi4gICoqYGJvbmRfZG9fYWxiX3htaXRgKio6IFNpbWlsYXIgdG8gdGhlIEFSUCBjYXNlLCB0aGUgY29kZSBub3cgY2hlY2tzIGZvciB3cml0YWJpbGl0eSAqYmVmb3JlKiBjb3B5aW5nIHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgKGBoX3NvdXJjZWApIGludG8gdGhlIEV0aGVybmV0IGhlYWRlci4gYHNrYl9jb3dfaGVhZChza2IsIDApYCBpcyB1c2VkIHRvIGVuc3VyZSB0aGUgaGVhZGVyIGlzIHdyaXRlYWJsZSwgYW5kIGlmIGl0IGZhaWxzLCB0aGUgcGFja2V0IGlzIGRyb3BwZWQgd2l0aCBgYm9uZF90eF9kcm9wYC4gVGhlIHVzZSBvZiBgc2tiX2V0aF9oZHIoc2tiKWAgdG8gYWNjZXNzIHRoZSBFdGhlcm5ldCBoZWFkZXIgaXMgYWxzbyBub3RlZC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBTS0IgbWF5IGJlIHJlYWxsb2NhdGVkLCBzbyB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwuXG5cbjMuICAqKmBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAqKjogVGhpcyBzZWN0aW9uIGlzIHNpbXBsZXIuIEl0IGhhcyByZW1vdmVkIGBza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOyBldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTtgIGFuZCBub3cgc2ltcGx5IHJlbGllcyBvbiBgZXRoX2RhdGEgPSBza2JfZXRoX2hkcihza2IpO2AuIFRoaXMgY2hhbmdlIGltcGxpZXMgdGhhdCB0aGUgTUFDIGhlYWRlciBpcyBlaXRoZXIgYWxyZWFkeSBzZXQgKHdoaWNoIGlzIGxpa2VseSwgc2luY2UgaXQncyB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cmFuc21pc3Npb24pIG9yIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbGxpbmcgdGhpcyBhbHJlYWR5IGtub3dzIHdoZXJlIHRoZSBldGhlcm5ldCBoZWFkZXIgd2lsbCBiZS4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgdGhhdCB0aGUgZGV2ZWxvcGVyIGludGVuZHMgYHNrYl9ldGhfaGRyYCB0byBiZSB1c2VkIGZvciBjb25zaXN0ZW5jeSBzaW5jZSB0aGUgcHJldmlvdXMgc2VjdGlvbnMgb2YgY29kZSB3ZXJlIG1vZGlmaWVkLiBUaGlzIGFsc28gaW1wbGllcyB0aGF0IHRoZSBTS0IgaXMgZ3VhcmFudGVlZCB0byBoYXZlIHRoZSBldGhlcm5ldCBoZWFkZXIgb3IgdGhhdCBgc2tiX2V0aF9oZHJgIGhhbmRsZXMgdGhlIGluaXRpYWwgc2V0dXAgKHRoaXMgaXMgd29ydGggbG9va2luZyBpbnRvKS4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYHNrYl9ldGhfaGRyYCB0byBiZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTA2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6MjY6MDQuNzE1NTgwMjQxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgwMzk1NTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbmxpbmUgc3RydWN0IGV0aGhkciBcXFxcKnNrYl9ldGhfaGRyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaWZfZXRoZXIuaD0yNT1zdGF0aWMgaW5saW5lIHN0cnVjdCBldGhoZHIgKmV0aF9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbGludXgvaWZfZXRoZXIuaC0zMi0gKi9cXG5pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmg6MzM6c3RhdGljIGlubGluZSBzdHJ1Y3QgZXRoaGRyICpza2JfZXRoX2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbGludXgvaWZfZXRoZXIuaC0zNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjI2OjA2Ljg5NTk4NTQyM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDYyMzgwMDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGlmX2V0aGVyLmg6IFVuZGVyc3RhbmRpbmcgRXRoZXJuZXQncyBGb3VuZGF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSwgb3IgbWF5YmUgZHJpbGwgZG93biBpbnRvIGEgc3BlY2lmaWMgYXNwZWN0IG9mIEV0aGVybmV0IGZyYW1lIHN0cnVjdHVyZSwgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHB1bGxpbmcgdXAgYGluY2x1ZGUvbGludXgvaWZfZXRoZXIuaGAuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEknbGwgZm9jdXMgb24gbGluZXMgMjAtNDAsIHdoaWNoIHVzdWFsbHkgZGVmaW5lcyB0aGUgY29yZSBFdGhlcm5ldCBoZWFkZXIgc3RydWN0dXJlLiBJJ20gaG9waW5nIHRvIGdldCBhIHF1aWNrIHJlZnJlc2hlciBvbiB0aGUga2V5IGZpZWxkcy4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGBzdHJ1Y3QgZXRoaGRyYCwgcHJvYmFibHkgd2l0aCB0aGUgZGVzdGluYXRpb24gYW5kIHNvdXJjZSBNQUMgYWRkcmVzc2VzLCB0aGUgRXRoZXJUeXBlIGZpZWxkLCBhbmQgcG90ZW50aWFsbHkgc29tZSBwYWRkaW5nIG9yIHJlc2VydmVkIGFyZWFzIGlmIGl0J3MgYW4gb2xkZXIgZGVmaW5pdGlvbi4gSSdtIGFsc28gbG9va2luZyBmb3IgYW55IGNvbW1lbnRzIHRoYXQgbWlnaHQgZ2l2ZSBoaW50cyBhYm91dCBpdHMgdXNlIG9yIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zLiBUaGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIGRlZmluZXMgaW4gdGhlcmUgdG9vIOKAkyBwZXJoYXBzIGZvciBjb21tb24gRXRoZXJUeXBlIHZhbHVlcy4gSXQncyB0aW1lIHRvIHF1aWNrbHkgYW5hbHl6ZSBhbmQgc2VlIGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGRlZmluaXRpb25zIG9mIHRob3NlIHNwZWNpZmljIHN0cnVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0ODgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNjowOC45NTgzNjgyNloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvaWZfZXRoZXIuaFxcdTAwM2VcXG4gIDIxOlxcdFxcbiAgMjI6XFx0LyogWFg6WFg6WFg6WFg6WFg6WFggKi9cXG4gIDIzOlxcdCNkZWZpbmUgTUFDX0FERFJfU1RSX0xFTiAoMyAqIEVUSF9BTEVOIC0gMSlcXG4gIDI0OlxcdFxcbiAgMjU6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgZXRoaGRyICpldGhfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuICAyNjpcXHR7XFxuICAyNzpcXHRcXHRyZXR1cm4gKHN0cnVjdCBldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpO1xcbiAgMjg6XFx0fVxcbiAgMjk6XFx0XFxuICAzMDpcXHQvKiBQcmVmZXIgdGhpcyB2ZXJzaW9uIGluIFRYIHBhdGgsIGluc3RlYWQgb2ZcXG4gIDMxOlxcdCAqIHNrYl9yZXNldF9tYWNfaGVhZGVyKCkgKyBldGhfaGRyKClcXG4gIDMyOlxcdCAqL1xcbiAgMzM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgZXRoaGRyICpza2JfZXRoX2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAgMzQ6XFx0e1xcbiAgMzU6XFx0XFx0cmV0dXJuIChzdHJ1Y3QgZXRoaGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbiAgMzY6XFx0fVxcbiAgMzc6XFx0XFxuICAzODpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBldGhoZHIgKmlubmVyX2V0aF9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gIDM5OlxcdHtcXG4gIDQwOlxcdFxcdHJldHVybiAoc3RydWN0IGV0aGhkciAqKXNrYl9pbm5lcl9tYWNfaGVhZGVyKHNrYik7XFxuICA0MTpcXHR9XFxuICA0MjpcXHRcXG4gIDQzOlxcdGludCBldGhfaGVhZGVyX3BhcnNlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuICA0NDpcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGNoYXIgKmhhZGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6MjY6MDguOTU4NDMyMTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY3NDQwNzc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggZm9yIE5ldHdvcmsgVHJhbnNtaXQgUGF0aCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkndmUganVzdCByZXZpZXdlZCB0aGlzIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgbG9va3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgbmV0d29yayB0cmFuc21pdCBwYXRoIGZvciBib25kaW5nIOKAkyBBTEIvVExCLCB0byBiZSBwcmVjaXNlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBoYW5kbGluZyBTS0IgKHNvY2tldCBidWZmZXIpIENvcHktb24tV3JpdGUgZm9yIHNoYXJlZCBvciBjbG9uZWQgcGFja2V0cyAqYmVmb3JlKiBtb2RpZnlpbmcgdGhlIE1BQyBhZGRyZXNzZXMgaW4gdGhlIGhlYWRlci4gVGhhdCdzIGdvb2QsIHByZXZlbnRzIHRob3NlIG5hc3R5IHNoYXJlZCBidWZmZXIgbW9kaWZpY2F0aW9uIGlzc3VlcyBvciBwb2ludGVyIGludmFsaWRhdGlvbnMgYWZ0ZXIgaGVhZGVyIHJlYWxsb2NhdGlvbnMuIEl0IGFsc28gbW92ZXMgZnJvbSB0aGUgYHNrYl9yZXNldF9tYWNfaGVhZGVyKCkgKyBldGhfaGRyKClgIGNvbWJpbmF0aW9uIHRvIGp1c3QgdXNpbmcgYHNrYl9ldGhfaGRyKClgLCBhcyBpcyBwcmVmZXJhYmxlIGluIHRoaXMgVFggY29udGV4dC5cblxuTm93LCBteSBwcmltYXJ5IGNvbmNlcm4gd2hlbiByZXZpZXdpbmcgcGF0Y2hlcyBsaWtlIHRoaXMsIGFuZCBJJ20gc3VyZSBpdCdzIHRoZSBzYW1lIGZvciBhbnlvbmUgaW4gdGhlIHNlY3VyaXR5IGZpZWxkLCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgcnVuIGRvd24gdGhlIGNoZWNrbGlzdDpcblxuMS4gICoqS2VybmVsIHRvIFVzZXIgU3BhY2UgRGF0YToqKiBObywgdGhlcmUncyBub3RoaW5nIGhlcmUgdGhhdCBsb29rcyBsaWtlIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBwYXNzZWQgdG8gdXNlciBzcGFjZSB2aWEgdGhpbmdzIGxpa2UgYGNvcHlfdG9fdXNlcmAgb3IgbmV0bGluayBhdHRyaWJ1dGVzLiBUaGlzIGlzIGVudGlyZWx5IGludGVybmFsIHdpdGhpbiB0aGUga2VybmVsJ3MgbmV0d29yayBzdGFjay5cbjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljOioqIE5vLiBUaGlzIHBhdGNoIGRvZXNuJ3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiAgKipEYXRhIFN0cnVjdHVyZSBJbml0aWFsaXphdGlvbjoqKiBOb3RoaW5nIGNvbXBsZXggaXMgYmVpbmcgaW5pdGlhbGl6ZWQgaGVyZSB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBUaGUgZm9jdXMgaXMgb24gKnByZXZlbnRpbmcqIG1vZGlmaWNhdGlvbiBvZiBzaGFyZWQgYnVmZmVycyB0aHJvdWdoIENPVy5cbjQuICAqKkJvdW5kcy9MZW5ndGggQ2hlY2tzOioqIE5vLCBub3RoaW5nIGhlcmUgc3VnZ2VzdHMgdGhhdCB0aGlzIGlzIGludHJvZHVjaW5nIGFueSB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBib3VuZHMsIGxlbmd0aHMsIG9yIHBvdGVudGlhbGx5IGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBleGlzdGluZyBidWZmZXJzLiBUaGUgdXNlIG9mIGBza2JfY293X2hlYWRgIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBoYW5kbGUgdGhpcyBpc3N1ZS5cblxuU28sICpubyosIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCdzIHJlYWxseSBqdXN0IG1ha2luZyBzdXJlIHRoZSBwYWNrZXQgaGVhZGVycyBhcmUgc2FmZWx5IHVuc2hhcmVkIHdpdGggYHNrYl9jb3dfaGVhZGAgYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8sIGFuZCBtYWtpbmcgc3VyZSBhbGwgcG9pbnRlcnMgYXJlIGNvcnJlY3RseSByZWxvYWRlZCBhZnRlciBwb3RlbnRpYWwgcmVhbGxvY2F0aW9ucy4gQW5kIHRoYXQgS0FTQU4gc2hvdWxkIGhhbmRsZSBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gLyBPT0IgLyBVQUYgZXJyb3JzIHJlbGF0ZWQgdG8gdGhlc2UgcG90ZW50aWFsIHJlYWxsb2NhdGlvbnMuXG5cbkNvbnNlcXVlbnRseSwgYE5lZWRzS01TQU5gIHNob3VsZCBkZWZpbml0ZWx5IGJlIGZhbHNlIGhlcmUuIEtNU0FOIGlzIGZvciBjYXRjaGluZyAqdW5pbml0aWFsaXplZCogbWVtb3J5IHJlYWRzLCBhbmQgd2UndmUgZXN0YWJsaXNoZWQgdGhhdCB0aGUgcGF0Y2ggaXRzZWxmIGRvZXNuJ3QgaW50cm9kdWNlIGFueS4gS0FTQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBkZWFscyB3aXRoIGEgYnJvYWRlciBzZXQgb2YgbWVtb3J5IGVycm9ycywgaW5jbHVkaW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24sIGFsbCBvZiB3aGljaCBjb3VsZCB0aGVvcmV0aWNhbGx5IGFyaXNlIGZyb20gaW5jb3JyZWN0IGhhbmRsaW5nIG9mIGBza2JgIHJlYWxsb2NhdGlvbnMgb3IgcG9pbnRlciBpbnZhbGlkYXRpb25zLiBLQVNBTidzIGJyb2FkZXIgc2NvcGUgbWFrZXMgaXQgbW9yZSBhcHByb3ByaWF0ZSBmb3IgdGhpcyBzcGVjaWZpYyBzY2VuYXJpbywgYXMgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgb3IgZXZlbiByZWxldmFudCwgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE1OSwiT3V0cHV0VG9rZW5zIjoyODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjoyNjoxNC42MzI4NDE5OTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBza2IgaGVhZGVyIG11dGFiaWxpdHkgaW4gdGhlIGJvbmRpbmcgQUxCL1RMQiB0cmFuc21pdCBwYXRocyAoZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IGFkZHMgYHNrYl9jb3dfaGVhZChza2IsIDApYCBjYWxscyBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgaW4gQVJQIHBhY2tldHMgKGBybGJfYXJwX3htaXRgKSBhbmQgRXRoZXJuZXQgaGVhZGVycyAoYGJvbmRfZG9fYWxiX3htaXRgKSwgZW5zdXJpbmcgY2xvbmVkL3NoYXJlZCBza2IgaGVhZHMgYXJlIGNvcGllZCBiZWZvcmUgd3JpdGluZy5cXG4yLiBJdCByZWxvYWRzIHRoZSBwb2ludGVyIHRvIHRoZSBBUlAvRXRoZXJuZXQgaGVhZGVyIGFmdGVyIGBza2JfY293X2hlYWRgIHRvIGF2b2lkIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2VzLlxcbjMuIEl0IGNsZWFucyB1cCByZWR1bmRhbnQgYHNrYl9yZXNldF9tYWNfaGVhZGVyKClgIGNhbGxzIGluIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgYnkgdXNpbmcgYHNrYl9ldGhfaGRyKHNrYilgLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgbWFuYWdlIHBhY2tldCBidWZmZXIgbXV0YWJpbGl0eSBhbmQgcHJldmVudCBkYXRhIGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLXJlYWxsb2MgYnVncyBvbiBzaGFyZWQvY2xvbmVkIHNrYnMgKGlzc3VlcyBkZXRlY3RhYmxlIGJ5IEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMsIHBhZGRpbmdzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBza2IgaGVhZGVyIG11dGFiaWxpdHkgaW4gdGhlIGJvbmRpbmcgQUxCL1RMQiB0cmFuc21pdCBwYXRocyAoZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jKS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IGFkZHMgYHNrYl9jb3dfaGVhZChza2IsIDApYCBjYWxscyBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgaW4gQVJQIHBhY2tldHMgKGBybGJfYXJwX3htaXRgKSBhbmQgRXRoZXJuZXQgaGVhZGVycyAoYGJvbmRfZG9fYWxiX3htaXRgKSwgZW5zdXJpbmcgY2xvbmVkL3NoYXJlZCBza2IgaGVhZHMgYXJlIGNvcGllZCBiZWZvcmUgd3JpdGluZy5cXG4yLiBJdCByZWxvYWRzIHRoZSBwb2ludGVyIHRvIHRoZSBBUlAvRXRoZXJuZXQgaGVhZGVyIGFmdGVyIGBza2JfY293X2hlYWRgIHRvIGF2b2lkIHN0YWxlIHBvaW50ZXIgZGVyZWZlcmVuY2VzLlxcbjMuIEl0IGNsZWFucyB1cCByZWR1bmRhbnQgYHNrYl9yZXNldF9tYWNfaGVhZGVyKClgIGNhbGxzIGluIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgYnkgdXNpbmcgYHNrYl9ldGhfaGRyKHNrYilgLlxcblxcblRoZXNlIG1vZGlmaWNhdGlvbnMgbWFuYWdlIHBhY2tldCBidWZmZXIgbXV0YWJpbGl0eSBhbmQgcHJldmVudCBkYXRhIGNvcnJ1cHRpb24gb3IgdXNlLWFmdGVyLXJlYWxsb2MgYnVncyBvbiBzaGFyZWQvY2xvbmVkIHNrYnMgKGlzc3VlcyBkZXRlY3RhYmxlIGJ5IEtBU0FOKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZXMsIHBhZGRpbmdzLCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowql4x5[1] Phase: Succeeded StartedAt: 2026-09-04 22:26:25 +0000 UTC FinishedAt: 2026-09-04 22:26:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 22:26:25 +0000 UTC FinishedAt: 2026-09-04 22:26:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2] Phase: Succeeded StartedAt: 2026-09-04 22:26:25 +0000 UTC FinishedAt: 2026-09-05 02:06:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 22:26:25 +0000 UTC FinishedAt: 2026-09-05 02:06:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 22:26:25 +0000 UTC FinishedAt: 2026-09-04 22:26:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 22:26:25 +0000 UTC FinishedAt: 2026-09-04 22:26:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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-workflowql4x5/series-workflowql4x5-convert-artifact-2642415099/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 22:26:36 +0000 UTC FinishedAt: 2026-09-04 22:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 22:26:36 +0000 UTC FinishedAt: 2026-09-04 22:42:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8180da15-87d2-4a88-9eac-032aecd970d8,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-workflowql4x5/series-workflowql4x5-convert-artifact-2642415099/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": "c7d741df-a060-419b-bff0-7c23f387045e", "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-workflowql4x5/series-workflowql4x5-build-action-2978135353/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 22:26:36 +0000 UTC FinishedAt: 2026-09-04 22:42:25 +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:*8180da15-87d2-4a88-9eac-032aecd970d8,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-workflowql4x5/series-workflowql4x5-convert-artifact-2642415099/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": "c7d741df-a060-419b-bff0-7c23f387045e", "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-workflowql4x5/series-workflowql4x5-build-action-2978135353/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 22:42:35 +0000 UTC FinishedAt: 2026-09-04 22:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 22:42:35 +0000 UTC FinishedAt: 2026-09-04 22:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 22:42:35 +0000 UTC FinishedAt: 2026-09-04 22:42:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 22:42:35 +0000 UTC FinishedAt: 2026-09-04 22:42:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-workflowql4x5/series-workflowql4x5-convert-artifact-2280340562/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 22:42:45 +0000 UTC FinishedAt: 2026-09-04 22:44:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 22:42:45 +0000 UTC FinishedAt: 2026-09-04 22:44:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c7d741df-a060-419b-bff0-7c23f387045e,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-workflowql4x5/series-workflowql4x5-build-action-2978135353/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-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 22:44:40 +0000 UTC FinishedAt: 2026-09-04 22:44:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 22:44:40 +0000 UTC FinishedAt: 2026-09-04 22:44:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 22:44:40 +0000 UTC FinishedAt: 2026-09-04 23:00:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 22:44:40 +0000 UTC FinishedAt: 2026-09-04 23:00:54 +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:*8180da15-87d2-4a88-9eac-032aecd970d8,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-workflowql4x5/series-workflowql4x5-convert-artifact-2280340562/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": "67557e25-6c45-4980-955b-dc6f0a10fdff", "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-workflowql4x5/series-workflowql4x5-build-action-3427384038/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 22:44:40 +0000 UTC FinishedAt: 2026-09-04 23:00:44 +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:*8180da15-87d2-4a88-9eac-032aecd970d8,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-workflowql4x5/series-workflowql4x5-convert-artifact-2280340562/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": "67557e25-6c45-4980-955b-dc6f0a10fdff", "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-workflowql4x5/series-workflowql4x5-build-action-3427384038/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 23:00:54 +0000 UTC FinishedAt: 2026-09-04 23:00:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 23:00:54 +0000 UTC FinishedAt: 2026-09-04 23:00:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 23:00:54 +0000 UTC FinishedAt: 2026-09-04 23:02:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 23:00:54 +0000 UTC FinishedAt: 2026-09-04 23:02:40 +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:*67557e25-6c45-4980-955b-dc6f0a10fdff,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-workflowql4x5/series-workflowql4x5-build-action-3427384038/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-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 23:02:50 +0000 UTC FinishedAt: 2026-09-05 02:06:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 23:02:50 +0000 UTC FinishedAt: 2026-09-05 02:06:45 +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","bond_do_alb_xmit","rlb_arp_xmit"],"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:*c7d741df-a060-419b-bff0-7c23f387045e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*67557e25-6c45-4980-955b-dc6f0a10fdff,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-workflowql4x5/series-workflowql4x5-build-action-2978135353/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-workflowql4x5/series-workflowql4x5-build-action-3427384038/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 23:02:50 +0000 UTC FinishedAt: 2026-09-04 23:03:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 23:02:50 +0000 UTC FinishedAt: 2026-09-04 23:02: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","bond_do_alb_xmit","rlb_arp_xmit"],"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-workflowql4x5/series-workflowql4x5-convert-artifact-2587920039/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 23:02:50 +0000 UTC FinishedAt: 2026-09-04 23:02:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 23:02:50 +0000 UTC FinishedAt: 2026-09-04 23:02:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 23:02:50 +0000 UTC FinishedAt: 2026-09-04 23:02:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 23:03:00 +0000 UTC FinishedAt: 2026-09-05 02:06:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowql4x5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","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","bond_do_alb_xmit","rlb_arp_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a97ddf6b-7083-4486-9b49-9ba9033607aa","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-04 23:03:00 +0000 UTC FinishedAt: 2026-09-05 02:06:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c7d741df-a060-419b-bff0-7c23f387045e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*67557e25-6c45-4980-955b-dc6f0a10fdff,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-workflowql4x5/series-workflowql4x5-build-action-2978135353/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-workflowql4x5/series-workflowql4x5-build-action-3427384038/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-workflowql4x5/series-workflowql4x5-convert-artifact-2587920039/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,}