Name: series-workflowspdw5 Phase: Succeeded StartedAt: 2026-09-04 12:08:29 +0000 UTC FinishedAt: 2026-09-04 15:51:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[0] Phase: Succeeded StartedAt: 2026-09-04 12:08:29 +0000 UTC FinishedAt: 2026-09-04 12:10:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 12:08:29 +0000 UTC FinishedAt: 2026-09-04 12:10:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS" ], "series_id": "95061a53-d9bf-47ae-b159-c79951d9f9b0" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "configfs_symlink" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGFuZCByZWZlcmVuY2UgbGlmZWN5Y2xlIGlzc3VlIGluIGNvbmZpZ2ZzX3N5bWxpbmsoKS4gU3BlY2lmaWNhbGx5LCBpdCBwaW5zIHRoZSBjb250YWluaW5nIGNvbmZpZ19pdGVtIGFuZCBjb25maWdmc19mcmFnbWVudCB3aGlsZSB0ZW1wb3JhcmlseSBkcm9wcGluZyBkaXJlY3RvcnkgaW5vZGUgbG9ja3MgdG8gcmVzb2x2ZSB0aGUgc3ltbGluayB0YXJnZXQsIHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgaW52YWxpZCBvcGVyYXRpb25zIG9uIHVubGlua2VkL2RlYWQgZGVmYXVsdCBncm91cHMuXG5cbi0gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgKGUuZy4gTE9DS0RFUCwgcmVmY291bnQgY2hlY2tpbmcpIGFyZSBmdWxseSBlcXVpcHBlZCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBVQUYsIGRvdWJsZS1wdXQsIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaC5cbi0gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgYmVjYXVzZSB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBoYW5kbGluZywgc3RydWN0dXJlIHBhZGRpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGUuZy4gYGNvbnRhaW5pbmdfaXRlbWAsIGBpc19kZWFkYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzX3N5bWxpbmsgdG8gcGluIHRoZSBjb250YWluaW5nIGl0ZW0gb2YgZGVmYXVsdCBncm91cHMgYW5kIGFkZHMgbGl2ZWxpbmVzcyBjaGVja3MgYWZ0ZXIgcmUtYWNxdWlyaW5nIHRoZSBkaXJlY3RvcnkgaW5vZGUgbG9jayB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3ltbGluayBzeXNjYWxscyBvbiBjb25maWdmcyBtb3VudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6MDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZGE3Nzc1NmNlYTc0NGMxOTQ0ZWExMzM0NTAwYjBjYzE3MjY5NzAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxMjowOTo0MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9zeW1saW5rLmMgYi9mcy9jb25maWdmcy9zeW1saW5rLmNcbmluZGV4IDMxZWIyOGIyNzMwOTEuLjc1MDgzMjUxYmUyMmQgMTAwNjQ0XG4tLS0gYS9mcy9jb25maWdmcy9zeW1saW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuQEAgLTEzMSwxNSAmIzQzOzEzMSwzMyBAQCBzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZW50cnkgKmNvbnRhaW5pbmdfZGVudHJ5ID0gZGVudHJ5O1xuJiM0MztcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoIUlTX1JPT1QoY29udGFpbmluZ19kZW50cnkpKSB7XG4mIzQzO1x0XHRzZCA9IGNvbnRhaW5pbmdfZGVudHJ5LVx1MDAzZWRfZnNkYXRhO1xuJiM0MztcdFx0aWYgKCFzZCB8fCAhKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjb250YWluaW5nX2RlbnRyeSA9IGNvbnRhaW5pbmdfZGVudHJ5LVx1MDAzZWRfcGFyZW50O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoSVNfUk9PVChjb250YWluaW5nX2RlbnRyeSkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGNvbnRhaW5pbmdfZGVudHJ5KTtcbiYjNDM7fVxuIFxuIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXG4ge1xuIFx0aW50IHJldDtcbiBcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xuJiM0MztcdHN0cnVjdCBjb25maWdmc19mcmFnbWVudCAqZnJhZztcbiBcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbnRhaW5pbmdfaXRlbSA9IE5VTEw7XG4gXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcbiYjNDM7XHRib29sIGlzX2RlYWQ7XG4gXG4gXHRzZCA9IGRlbnRyeS1cdTAwM2VkX3BhcmVudC1cdTAwM2VkX2ZzZGF0YTtcbiBcdC8qXG5AQCAtMTQ5LDYgJiM0MzsxNjcsMTAgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKCFjb25maWdmc19kaXJlbnRfaXNfcmVhZHkoc2QpKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiYjNDM7XHRmcmFnID0gZ2V0X2ZyYWdtZW50KHNkLVx1MDAzZXNfZnJhZyk7XG4mIzQzO1x0aWYgKCFmcmFnKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuIFx0cGFyZW50X2l0ZW0gPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbiBcdHR5cGUgPSBwYXJlbnRfaXRlbS1cdTAwM2VjaV90eXBlO1xuIFxuQEAgLTE1Nyw2ICYjNDM7MTc5LDE4IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdCAgICAhdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2VhbGxvd19saW5rKVxuIFx0XHRnb3RvIG91dF9wdXQ7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQaW4gdGhlIGNvbnRhaW5pbmcgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW5cbiYjNDM7XHQgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc2QtXHUwMDNlc190eXBlIFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpIHtcbiYjNDM7XHRcdGNvbnRhaW5pbmdfaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbiYjNDM7XHRcdGlmICghY29udGFpbmluZ19pdGVtKSB7XG4mIzQzO1x0XHRcdHJldCA9IC1FTk9FTlQ7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxuIFx0ICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWRcbkBAIC0xODcsNiAmIzQzOzIyMSwxNiBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF9wdXQ7XG4gXG4mIzQzO1x0ZG93bl9yZWFkKFx1MDAyNmZyYWctXHUwMDNlZnJhZ19zZW0pO1xuJiM0MztcdGlzX2RlYWQgPSBmcmFnLVx1MDAzZWZyYWdfZGVhZDtcbiYjNDM7XHR1cF9yZWFkKFx1MDAyNmZyYWctXHUwMDNlZnJhZ19zZW0pO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfZGVhZCB8fCBJU19ERUFERElSKGRpcikgfHxcbiYjNDM7XHQgICAgZF91bmhhc2hlZChkZW50cnktXHUwMDNlZF9wYXJlbnQpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PRU5UO1xuJiM0MztcdFx0Z290byBvdXRfcHV0O1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfaW5vZGUgfHwgZF91bmhhc2hlZChkZW50cnkpKVxuIFx0XHRyZXQgPSAtRUVYSVNUO1xuIFx0ZWxzZVxuQEAgLTIwMywxMCAmIzQzOzI0NywxMSBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHRcdFx0ICAgICB0YXJnZXRfaXRlbSk7XG4gXHR9XG4gXG4tXHRjb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pO1xuLVxuIG91dF9wdXQ6XG4mIzQzO1x0Y29uZmlnX2l0ZW1fcHV0KHRhcmdldF9pdGVtKTtcbiBcdGNvbmZpZ19pdGVtX3B1dChwYXJlbnRfaXRlbSk7XG4mIzQzO1x0Y29uZmlnX2l0ZW1fcHV0KGNvbnRhaW5pbmdfaXRlbSk7XG4mIzQzO1x0cHV0X2ZyYWdtZW50KGZyYWcpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb25maWdmc19zeW1saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzX3N5bWxpbmsgdG8gcGluIHRoZSBjb250YWluaW5nIGl0ZW0gb2YgZGVmYXVsdCBncm91cHMgYW5kIGFkZHMgbGl2ZWxpbmVzcyBjaGVja3MgYWZ0ZXIgcmUtYWNxdWlyaW5nIHRoZSBkaXJlY3RvcnkgaW5vZGUgbG9jayB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3ltbGluayBzeXNjYWxscyBvbiBjb25maWdmcyBtb3VudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZGE3Nzc1NmNlYTc0NGMxOTQ0ZWExMzM0NTAwYjBjYzE3MjY5NzAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxMjowOTo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYwppbmRleCAzMWViMjhiMjczMDkxLi43NTA4MzI1MWJlMjJkIDEwMDY0NAotLS0gYS9mcy9jb25maWdmcy9zeW1saW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvY29uZmlnZnMvc3ltbGluay5jCkBAIC0xMzEsMTUgJiM0MzsxMzEsMzMgQEAgc3RhdGljIGludCBnZXRfdGFyZ2V0KGNvbnN0IGNoYXIgKnN5bW5hbWUsIHN0cnVjdCBjb25maWdfaXRlbSAqKnRhcmdldCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KQomIzQzO3sKJiM0MzsJc3RydWN0IGRlbnRyeSAqY29udGFpbmluZ19kZW50cnkgPSBkZW50cnk7CiYjNDM7CXN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkOwomIzQzOwomIzQzOwl3aGlsZSAoIUlTX1JPT1QoY29udGFpbmluZ19kZW50cnkpKSB7CiYjNDM7CQlzZCA9IGNvbnRhaW5pbmdfZGVudHJ5LSZndDtkX2ZzZGF0YTsKJiM0MzsJCWlmICghc2QgfHwgIShzZC0mZ3Q7c190eXBlICZhbXA7IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljb250YWluaW5nX2RlbnRyeSA9IGNvbnRhaW5pbmdfZGVudHJ5LSZndDtkX3BhcmVudDsKJiM0MzsJfQomIzQzOwlpZiAoSVNfUk9PVChjb250YWluaW5nX2RlbnRyeSkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJcmV0dXJuIGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShjb250YWluaW5nX2RlbnRyeSk7CiYjNDM7fQogCiBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKQogewogCWludCByZXQ7CiAJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7CiYjNDM7CXN0cnVjdCBjb25maWdmc19mcmFnbWVudCAqZnJhZzsKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtOwogCXN0cnVjdCBjb25maWdfaXRlbSAqdGFyZ2V0X2l0ZW0gPSBOVUxMOwomIzQzOwlzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbnRhaW5pbmdfaXRlbSA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7CiYjNDM7CWJvb2wgaXNfZGVhZDsKIAogCXNkID0gZGVudHJ5LSZndDtkX3BhcmVudC0mZ3Q7ZF9mc2RhdGE7CiAJLyoKQEAgLTE0OSw2ICYjNDM7MTY3LDEwIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlpZiAoIWNvbmZpZ2ZzX2RpcmVudF9pc19yZWFkeShzZCkpCiAJCXJldHVybiAtRU5PRU5UOwogCiYjNDM7CWZyYWcgPSBnZXRfZnJhZ21lbnQoc2QtJmd0O3NfZnJhZyk7CiYjNDM7CWlmICghZnJhZykKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwogCXBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS0mZ3Q7ZF9wYXJlbnQpOwogCXR5cGUgPSBwYXJlbnRfaXRlbS0mZ3Q7Y2lfdHlwZTsKIApAQCAtMTU3LDYgJiM0MzsxNzksMTggQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCSAgICAhdHlwZS0mZ3Q7Y3RfaXRlbV9vcHMtJmd0O2FsbG93X2xpbmspCiAJCWdvdG8gb3V0X3B1dDsKIAomIzQzOwkvKgomIzQzOwkgKiBQaW4gdGhlIGNvbnRhaW5pbmcgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW4KJiM0MzsJICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suCiYjNDM7CSAqLwomIzQzOwlpZiAoc2QtJmd0O3NfdHlwZSAmYW1wOyBDT05GSUdGU19VU0VUX0RFRkFVTFQpIHsKJiM0MzsJCWNvbnRhaW5pbmdfaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oZGVudHJ5LSZndDtkX3BhcmVudCk7CiYjNDM7CQlpZiAoIWNvbnRhaW5pbmdfaXRlbSkgewomIzQzOwkJCXJldCA9IC1FTk9FTlQ7CiYjNDM7CQkJZ290byBvdXRfcHV0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2YKIAkgKiBsaW5rKDIpIGFuZCBzeW1saW5rKDIpIC0gdGhleSB3YW50ZWQgdGhlIHRhcmdldCByZXNvbHZlZApAQCAtMTg3LDYgJiM0MzsyMjEsMTYgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3B1dDsKIAomIzQzOwlkb3duX3JlYWQoJmFtcDtmcmFnLSZndDtmcmFnX3NlbSk7CiYjNDM7CWlzX2RlYWQgPSBmcmFnLSZndDtmcmFnX2RlYWQ7CiYjNDM7CXVwX3JlYWQoJmFtcDtmcmFnLSZndDtmcmFnX3NlbSk7CiYjNDM7CiYjNDM7CWlmIChpc19kZWFkIHx8IElTX0RFQURESVIoZGlyKSB8fAomIzQzOwkgICAgZF91bmhhc2hlZChkZW50cnktJmd0O2RfcGFyZW50KSkgewomIzQzOwkJcmV0ID0gLUVOT0VOVDsKJiM0MzsJCWdvdG8gb3V0X3B1dDsKJiM0MzsJfQomIzQzOwogCWlmIChkZW50cnktJmd0O2RfaW5vZGUgfHwgZF91bmhhc2hlZChkZW50cnkpKQogCQlyZXQgPSAtRUVYSVNUOwogCWVsc2UKQEAgLTIwMywxMCAmIzQzOzI0NywxMSBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCQkJCQkgICAgIHRhcmdldF9pdGVtKTsKIAl9CiAKLQljb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pOwotCiBvdXRfcHV0OgomIzQzOwljb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pOwogCWNvbmZpZ19pdGVtX3B1dChwYXJlbnRfaXRlbSk7CiYjNDM7CWNvbmZpZ19pdGVtX3B1dChjb250YWluaW5nX2l0ZW0pOwomIzQzOwlwdXRfZnJhZ21lbnQoZnJhZyk7CiAJcmV0dXJuIHJldDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODA2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBJIGFuYWx5emUgdGhpcyBwYXRjaDoKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgZXZlbiBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJJiMzOTttIGxvb2tpbmcgYXQgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AuIFRoYXQmIzM5O3MgYSBmaWxlIEkmIzM5O20gZmFtaWxpYXIgd2l0aCwgYW5kIGl0JiMzOTtzIG1vZGlmeWluZyBhIGZldyBrZXkgZnVuY3Rpb25zOiBgY29uZmlnZnNfc3ltbGlua2AgYW5kIGFkZGluZyBhIG5ldyBzdGF0aWMgZnVuY3Rpb24sIGBjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGFueXRoaW5nIGRlYWxpbmcgd2l0aCBzeW1saW5rcyB3aXRoaW4gYSBmaWxlc3lzdGVtIGNvbnRleHQgaXMgKmFsd2F5cyogd29ydGggYSBjbG9zZXIgbG9vayBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIFRoZXJlJiMzOTtzIGFsbW9zdCBhbHdheXMgc3VidGxlIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiBwYXRoIHJlc29sdXRpb24gYW5kIGFjY2VzcyBjb250cm9sLgoKTm93LCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1enppbmcgc3RyYXRlZ3ksIEkgbmVlZCB0byBrbm93IHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgS2NvbmZpZ2AgZm9yIGBjb25maWdmc2Agb3B0aW9ucyBhbmQgYW55IGRlcGVuZGVuY2llcy4gRmFpbGluZyB0aGF0LCBhIHF1aWNrIGBncmVwcGVyYCBzZXNzaW9uIHNob3VsZCByZXZlYWwgd2hhdCYjMzk7cyBlbmFibGVkIGFuZCBkaXNhYmxlZC4gT25jZSBJIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24sIEkgY2FuIG5hcnJvdyBkb3duIG15IGZvY3VzLiBUaGVuLCB0aGUgcmVhbCBmdW4gYmVnaW5zOiBkZXRlcm1pbmluZyB3aGF0IGZvY3VzIHN5bWJvbHMgYXJlIG1vc3QgbGlrZWx5IHRvIHRyaWdnZXIgaW50ZXJlc3RpbmcgY29kZSBwYXRocyBpbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBJJiMzOTtsbCBiZSB0aGlua2luZyBhYm91dCBob3cgYGNvbmZpZ2ZzX3N5bWxpbmtgIGludGVyYWN0cyB3aXRoIGBjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtYCwgY29uc2lkZXJpbmcgcG9zc2libGUgaW5wdXQgdmVjdG9ycyBhbmQgYm91bmRhcnkgY29uZGl0aW9ucy4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jb25maWdmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9jb25maWdmcy9LY29uZmlnOjI6Y29uZmlnIENPTkZJR0ZTX0ZTXG5mcy9jb25maWdmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UtZHJpdmVuIGNvbmZpZ3VyYXRpb24gZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2NvbmZpZ2ZzL01ha2VmaWxlLTUtXG5mcy9jb25maWdmcy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19DT05GSUdGU19GUylcdCYjNDM7PSBjb25maWdmcy5vXG5mcy9jb25maWdmcy9NYWtlZmlsZS03LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZnMvY29uZmlnZnMvc3ltbGluay5jYCDigJMgVGltZSB0byBSZS1leGFtaW5lIHRoZSBTeW1ib2xzKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzIGlzc3VlLCBsZXQmIzM5O3MgZXN0YWJsaXNoIGEgY2xlYXIgcGljdHVyZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byBgZnMvY29uZmlnZnMvc3ltbGluay5jYCBhbmQgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHN5bWJvbHMgYXJlIG5vdyBwcmVzZW50IGFuZCBob3cgdGhleSBhcmUgdXRpbGl6ZWQsIGVzcGVjaWFsbHkgdGhvc2Ugc3Vycm91bmRpbmcgYW55IHJlY2VudCBtb2RpZmljYXRpb25zLiBJJiMzOTttIHRoaW5raW5nIGEgcXVpY2sgc2NhbiBvZiB0aGUgc3ltYm9sIGRlZmluaXRpb25zIGFuZCB0aGUgY2FsbCBzaXRlcyB3aXRoaW4gdGhhdCBmaWxlIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gdG8gYW5hbHl6ZSB0aGUgcG90ZW50aWFsIHJhbWlmaWNhdGlvbnMgb2YgdGhlIGNoYW5nZXMsIGlkZW50aWZ5IGRlcGVuZGVuY2llcywgYW5kIHBpbnBvaW50IHRoZSBsaWtlbHkgYXJlYXMgd2hlcmUgdGhlIGlzc3VlIGlzIGVtZXJnaW5nLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEyNTpcdFx0XHRyZXR1cm4gcmV0O1xuIDEyNjpcdFx0aWYgKHBhdGguZGVudHJ5LVx1MDAzZWRfc2IgIT0gc2IpXG4gMTI3Olx0XHRcdHJldHVybiAtRVBFUk07XG4gMTI4Olx0XHQqdGFyZ2V0ID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHBhdGguZGVudHJ5KTtcbiAxMjk6XHRcdGlmICghKnRhcmdldClcbiAxMzA6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gMTMxOlx0XHRyZXR1cm4gMDtcbiAxMzI6XHR9XG4gMTMzOlx0XG4gMTM0Olx0c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gMTM1Olx0e1xuIDEzNjpcdFx0c3RydWN0IGRlbnRyeSAqY29udGFpbmluZ19kZW50cnkgPSBkZW50cnk7XG4gMTM3Olx0XHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiAxMzg6XHRcbiAxMzk6XHRcdHdoaWxlICghSVNfUk9PVChjb250YWluaW5nX2RlbnRyeSkpIHtcbiAxNDA6XHRcdFx0c2QgPSBjb250YWluaW5nX2RlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbiAxNDE6XHRcdFx0aWYgKCFzZCB8fCAhKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcbiAxNDI6XHRcdFx0XHRicmVhaztcbiAxNDM6XHRcdFx0Y29udGFpbmluZ19kZW50cnkgPSBjb250YWluaW5nX2RlbnRyeS1cdTAwM2VkX3BhcmVudDtcbiAxNDQ6XHRcdH1cbiAxNDU6XHRcdGlmIChJU19ST09UKGNvbnRhaW5pbmdfZGVudHJ5KSlcbiAxNDY6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMTQ3Olx0XHRyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGNvbnRhaW5pbmdfZGVudHJ5KTtcbiAxNDg6XHR9XG4gMTQ5Olx0XG4gMTUwOlx0aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIDE1MTpcdFx0XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqc3ltbmFtZSlcbiAxNTI6XHR7XG4gMTUzOlx0XHRpbnQgcmV0O1xuIDE1NDpcdFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4gMTU1Olx0XHRzdHJ1Y3QgY29uZmlnZnNfZnJhZ21lbnQgKmZyYWc7XG4gMTU2Olx0XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xuIDE1NzpcdFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7XG4gMTU4Olx0XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbnRhaW5pbmdfaXRlbSA9IE5VTEw7XG4gMTU5Olx0XHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcbiAxNjA6XHRcdGJvb2wgaXNfZGVhZDtcbiAxNjE6XHRcbiAxNjI6XHRcdHNkID0gZGVudHJ5LVx1MDAzZWRfcGFyZW50LVx1MDAzZWRfZnNkYXRhO1xuIDE2MzpcdFx0LypcbiAxNjQ6XHRcdCAqIEZha2UgaW52aXNpYmlsaXR5IGlmIGRpciBiZWxvbmdzIHRvIGEgZ3JvdXAvZGVmYXVsdCBncm91cHMgaGllcmFyY2h5XG4gMTY1Olx0XHQgKiBiZWluZyBhdHRhY2hlZFxuIDE2NjpcdFx0ICovXG4gMTY3Olx0XHRpZiAoIWNvbmZpZ2ZzX2RpcmVudF9pc19yZWFkeShzZCkpXG4gMTY4Olx0XHRcdHJldHVybiAtRU5PRU5UO1xuIDE2OTpcdFxuIDE3MDpcdFx0ZnJhZyA9IGdldF9mcmFnbWVudChzZC1cdTAwM2VzX2ZyYWcpO1xuIDE3MTpcdFx0aWYgKCFmcmFnKVxuIDE3MjpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiAxNzM6XHRcbiAxNzQ6XHRcdHBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4gMTc1Olx0XHR0eXBlID0gcGFyZW50X2l0ZW0tXHUwMDNlY2lfdHlwZTtcbiAxNzY6XHRcbiAxNzc6XHRcdHJldCA9IC1FUEVSTTtcbiAxNzg6XHRcdGlmICghdHlwZSB8fCAhdHlwZS1cdTAwM2VjdF9pdGVtX29wcyB8fFxuIDE3OTpcdFx0ICAgICF0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmspXG4gMTgwOlx0XHRcdGdvdG8gb3V0X3B1dDtcbiAxODE6XHRcbiAxODI6XHRcdC8qXG4gMTgzOlx0XHQgKiBQaW4gdGhlIGNvbnRhaW5pbmcgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW5cbiAxODQ6XHRcdCAqIGVtYmVkZGVkIGRlZmF1bHQgZ3JvdXApIGlzIG5vdCBmcmVlZCB3aGlsZSB3ZSBkcm9wIHRoZSBsb2NrLlxuIDE4NTpcdFx0ICovXG4gMTg2Olx0XHRpZiAoc2QtXHUwMDNlc190eXBlIFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpIHtcbiAxODc6XHRcdFx0Y29udGFpbmluZ19pdGVtID0gY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbShkZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuIDE4ODpcdFx0XHRpZiAoIWNvbnRhaW5pbmdfaXRlbSkge1xuIDE4OTpcdFx0XHRcdHJldCA9IC1FTk9FTlQ7XG4gMTkwOlx0XHRcdFx0Z290byBvdXRfcHV0O1xuIDE5MTpcdFx0XHR9XG4gMTkyOlx0XHR9XG4gMTkzOlx0XG4gMTk0Olx0XHQvKlxuIDE5NTpcdFx0ICogVGhpcyBpcyByZWFsbHkgc2ljay4gIFdoYXQgdGhleSB3YW50ZWQgd2FzIGEgaHlicmlkIG9mXG4gMTk2Olx0XHQgKiBsaW5rKDIpIGFuZCBzeW1saW5rKDIpIC0gdGhleSB3YW50ZWQgdGhlIHRhcmdldCByZXNvbHZlZFxuIDE5NzpcdFx0ICogYXQgc3lzY2FsbCB0aW1lIChhcyBsaW5rKDIpIHdvdWxkJiMzOTt2ZSBkb25lKSwgYmUgYSBkaXJlY3RvcnlcbiAxOTg6XHRcdCAqICh3aGljaCBsaW5rKDIpIHdvdWxkJiMzOTt2ZSByZWZ1c2VkIHRvIGRvKSAqQU5EKiBiZSBhIGRlZXBcbiAxOTk6XHRcdCAqIGZ1Y2tpbmcgbWFnaWMsIG1ha2luZyB0aGUgdGFyZ2V0IGJ1c3kgZnJvbSBybWRpciBQT1YuXG4gMjAwOlx0XHQgKiBzeW1saW5rKDIpIGlzIG5vdGhpbmcgb2YgdGhhdCBzb3J0LCBhbmQgdGhlIGxvY2tpbmcgaXRcbiAyMDE6XHRcdCAqIGdldHMgbWF0Y2hlcyB0aGUgbm9ybWFsIHN5bWxpbmsoMikgc2VtYW50aWNzLiAgV2l0aG91dFxuIDIwMjpcdFx0ICogYXR0ZW1wdHMgdG8gcmVzb2x2ZSB0aGUgdGFyZ2V0ICh3aGljaCBtaWdodCB2ZXJ5IHdlbGxcbiAyMDM6XHRcdCAqIG5vdCBldmVuIGV4aXN0IHlldCkgZG9uZSBwcmlvciB0byBsb2NraW5nIHRoZSBwYXJlbnRcbiAyMDQ6XHRcdCAqIGRpcmVjdG9yeS4gIFRoaXMgcGVydmVyc2lvbiwgT1RPSCwgbmVlZHMgdG8gcmVzb2x2ZVxuIDIwNTpcdFx0ICogdGhlIHRhcmdldCwgd2hpY2ggd291bGQgbGVhZCB0byBvYnZpb3VzIGRlYWRsb2NrcyBpZlxuIDIwNjpcdFx0ICogYXR0ZW1wdGVkIHdpdGggYW55IGRpcmVjdG9yaWVzIGxvY2tlZC5cbiAyMDc6XHRcdCAqXG4gMjA4Olx0XHQgKiBVbmZvcnR1bmF0ZWx5LCB0aGF0IGdhcmJhZ2UgaXMgdXNlcmxhbmQgQUJJIGFuZCB3ZSBzaG91bGQmIzM5O3ZlXG4gMjA5Olx0XHQgKiBzYWlkIFwmIzM0O25vXCYjMzQ7IGJhY2sgaW4gMjAwNS4gIFRvbyBsYXRlIG5vdywgc28gd2UgZ2V0IHRvXG4gMjEwOlx0XHQgKiBwbGF5IHZlcnkgdWdseSBnYW1lcyB3aXRoIGxvY2tpbmcuXG4gMjExOlx0XHQgKlxuIDIxMjpcdFx0ICogVHJ5ICpBTllUSElORyogb2YgdGhhdCBzb3J0IGluIG5ldyBjb2RlLCBhbmQgeW91IHdpbGxcbiAyMTM6XHRcdCAqIHJlYWxseSByZWdyZXQgaXQuICBKdXN0IGFzayB5b3Vyc2VsZiAtIHdoYXQgY291bGQgYSBCT0ZIXG4gMjE0Olx0XHQgKiBkbyB0byBtZSBhbmQgZG8gSSB3YW50IHRvIGZpbmQgaXQgb3V0IGZpcnN0LWhhbmQ/XG4gMjE1Olx0XHQgKlxuIDIxNjpcdFx0ICogIEFWLCBhIHRob3JvdWdobHkgYW5ub3llZCBiYXN0YXJkLlxuIDIxNzpcdFx0ICovXG4gMjE4Olx0XHRpbm9kZV91bmxvY2soZGlyKTtcbiAyMTk6XHRcdHJldCA9IGdldF90YXJnZXQoc3ltbmFtZSwgXHUwMDI2dGFyZ2V0X2l0ZW0sIGRlbnRyeS1cdTAwM2VkX3NiKTtcbiAyMjA6XHRcdGlub2RlX2xvY2soZGlyKTtcbiAyMjE6XHRcdGlmIChyZXQpXG4gMjIyOlx0XHRcdGdvdG8gb3V0X3B1dDtcbiAyMjM6XHRcbiAyMjQ6XHRcdGRvd25fcmVhZChcdTAwMjZmcmFnLVx1MDAzZWZyYWdfc2VtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTUzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgY29uZmlnZnMgU3ltbGluayBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYGNvbmZpZ2ZzX3N5bWxpbmtgLCBhbiBpbm9kZSBvcGVyYXRpb24gc3BlY2lmaWMgdG8gY29uZmlnZnMuIFRoZSBxdWVzdGlvbiBpczogaXMgY29uZmlnZnMgc29tZXRoaW5nIHRoYXQmIzM5O3MgZXZlbiBhY2Nlc3NpYmxlIGluIGEgc3RhbmRhcmQgUUVNVS9zeXprYWxsZXIgc2V0dXA/IEZvcnR1bmF0ZWx5LCB0aGUgYW5zd2VyIGlzIHllczsgc3l6a2FsbGVyIGFjdGl2ZWx5IGZ1enplcyBjb25maWdmcy4gSXQmIzM5O3MgbWVzc2luZyBhcm91bmQgd2l0aCBta2Rpciwgcm1kaXIsIHN5bWxpbmtzLCBhdHRyaWJ1dGUgd3JpdGVzIOKAkyB0aGUgd2hvbGUgc2hlYmFuZyDigJMgd2l0aGluIGNvbmZpZ2ZzIG1vdW50ZWQgaW5zdGFuY2VzLCBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGNvbnNvbGUsIGFuZCB0YXJnZXQgY29yZXMuIFRoZXkgYXJlIGFsc28ganVzdCBtb3VudGluZyBjb25maWdmcyBhbmQgY3JlYXRpbmcgaXRlbXMuCgpOb3csIHNwZWNpZmljYWxseSwgdGhlc2UgY2hhbmdlcyBpbiBgZnMvY29uZmlnZnMvc3ltbGluay5jYCBtb2RpZnkgYGNvbmZpZ2ZzX3N5bWxpbmtgLiBUaGUgY3J1eCBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBwaW5uaW5nIHRoZSBjb250YWluaW5nIGl0ZW0gd2hlbiBgc2QtJmd0O3NfdHlwZSAmYW1wOyBDT05GSUdGU19VU0VUX0RFRkFVTFRgIGlzIHRydWUuIFRoZW4gdGhlcmUmIzM5O3MgdGhlIGFkZGl0aW9uIG9mIGNoZWNrcyBmb3IgYGZyYWctJmd0O2ZyYWdfZGVhZGAsIGBJU19ERUFERElSKGRpcilgLCBhbmQgYGRfdW5oYXNoZWQoZGVudHJ5LSZndDtkX3BhcmVudClgIGFmdGVyIHJlLWFjcXVpcmluZyB0aGUgaW5vZGUgbG9jay4gVGhpcyBpcyBpbXBvcnRhbnQ7IGl0IHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgcmFjZSBjb25kaXRpb25zIHdpdGhpbiBgY29uZmlnZnNfc3ltbGlua2AsIHNwZWNpZmljYWxseSB0aG9zZSBhcmlzaW5nIHdoZW4gc3ltbGlua3MgYXJlIGNyZWF0ZWQgaW4gZGVmYXVsdCBncm91cHMgb3IgY29uY3VycmVudGx5IHdpdGggZGlyZWN0b3J5IHJlbW92YWwvdW5saW5raW5nLiBJdCYjMzk7cyBhYm91dCBlbnN1cmluZyBkYXRhIGNvbnNpc3RlbmN5IGluIHRob3NlIGVkZ2UgY2FzZXMuCgpUbyB1bmRlcnN0YW5kIHRoZSBzY29wZSwgbGV0JiMzOTtzIGNoZWNrIHRoZSBuYXR1cmUgb2YgYGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW1gLiBJdCBsb29rcyBsaWtlIGl0IGlzIGBzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlgLCBhbmQgdGhlIGBjb25maWdmc19zeW1saW5rYCBpcyBub3Qgc3RhdGljLCB3aGljaCBtZWFucyBpdCBjYW4gYmUgY2FsbGVkIGZyb20gb3V0c2lkZSBvZiB0aGlzIGZpbGUuCgpJIHNob3VsZCBwcm9iYWJseSBhbHNvIHRha2UgYSBxdWljayBsb29rIGF0IGBmcy9jb25maWdmcy9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBDT05GSUdGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlLWRyaXZlbiBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW1cJiMzNDtcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgY29uZmlnZnMgaXMgYSBSQU0tYmFzZWQgZmlsZXN5c3RlbSB0aGF0IHByb3ZpZGVzIHRoZSBjb252ZXJzZVxuICAgNjpcdFx0ICBvZiBzeXNmcyYjMzk7cyBmdW5jdGlvbmFsaXR5LiBXaGVyZSBzeXNmcyBpcyBhIGZpbGVzeXN0ZW0tYmFzZWRcbiAgIDc6XHRcdCAgdmlldyBvZiBrZXJuZWwgb2JqZWN0cywgY29uZmlnZnMgaXMgYSBmaWxlc3lzdGVtLWJhc2VkIG1hbmFnZXJcbiAgIDg6XHRcdCAgb2Yga2VybmVsIG9iamVjdHMsIG9yIGNvbmZpZ19pdGVtcy5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgQm90aCBzeXNmcyBhbmQgY29uZmlnZnMgY2FuIGFuZCBzaG91bGQgZXhpc3QgdG9nZXRoZXIgb24gdGhlXG4gIDExOlx0XHQgIHNhbWUgc3lzdGVtLiBPbmUgaXMgbm90IGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBvdGhlci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDU0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIENvbmZpZ0ZTIFN5bWxpbmsgQ3JlYXRpb24qKgoKT2theSwgc28gYENPTkZJR0ZTX0ZTYCBpcyBuaWNlIGJlY2F1c2UgaXQmIzM5O3Mgc3RhbmRhbG9uZSwgbm8gZGVwZW5kZW5jaWVzIHRvIHdvcnJ5IGFib3V0IOKAkyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgaXMgYGNvbmZpZ2ZzX3N5bWxpbmtgIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmc/IEFic29sdXRlbHkhIEl0IGhhbmRsZXMgc3ltbGluayBjcmVhdGlvbiwgYW5kIHRoYXQgdG91Y2hlcyBjb3JlIGZpbGVzeXN0ZW0gY29kZSB3aXRoaW4gQ29uZmlnRlMuIFNwZWNpZmljYWxseSwgaXQgaW52b2x2ZXMgbG9ja2luZywgcGlubmluZywgYW5kIGxpdmVsaW5lc3MgY2hlY2tzIGR1cmluZyB0aGUgc3ltbGluayBjcmVhdGlvbiBwcm9jZXNzLiBBbmQsIGltcG9ydGFudGx5LCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgYHN5bWxpbmtgIHN5c2NhbGwsIGFzIGxvbmcgYXMgYSBDb25maWdGUyBtb3VudCBpcyBwcmVzZW50LiBUaGF0JiMzOTtzIGEgc29saWQgYXR0YWNrIHZlY3Rvci4KCkxldCYjMzk7cyBuYWlsIGRvd24gb3VyIGZvY3VzLiBPdXIgcHJpbWFyeSBzeW1ib2wgaXMgYGNvbmZpZ2ZzX3N5bWxpbmtgLiBOb3csIGFib3V0IHRoYXQgaGVscGVyIGZ1bmN0aW9uLCBgY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbWAg4oCTIGlzIGl0IHN0YXRpYz8gWXVwLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlgLCBhbmQgbGl2ZXMgcmlnaHQgdGhlcmUgaW4gYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AuIElubGluaW5nIG1pZ2h0IGhhcHBlbiwgb3IgaXQgbWlnaHQgaGF2ZSBhIHNlcGFyYXRlIHN5bWJvbCBpZiB0aGUgY29tcGlsZXIgZGVjaWRlcyBub3QgdG8gaW5saW5lIGl0LCBidXQgYGNvbmZpZ2ZzX3N5bWxpbmtgIGl0c2VsZiBpcyBkZWZpbml0ZWx5IGEgbm9uLXN0YXRpYyBzeW1ib2wsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LiBNaWdodCBiZSBnb29kIHRvIGp1c3QgaGF2ZSBhIGxvb2sgYXQgdGhlIG90aGVyIHN5bWJvbHMgaW4gYHN5bWxpbmsuY2Agd2hpbGUgd2UmIzM5O3JlIGF0IGl0LCBqdXN0IHRvIHNlZSB3aGF0IGVsc2UgaXMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aMC05X10uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jb25maWdmcy9zeW1saW5rLmMtMTktLyogUHJvdGVjdHMgYXR0YWNobWVudHMgb2YgbmV3IHN5bWxpbmtzICovXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MjA6REVGSU5FX01VVEVYKGNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xuZnMvY29uZmlnZnMvc3ltbGluay5jLTIxLVxuZnMvY29uZmlnZnMvc3ltbGluay5jOjIyOnN0YXRpYyBpbnQgaXRlbV9kZXB0aChzdHJ1Y3QgY29uZmlnX2l0ZW0gKiBpdGVtKVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTIzLXtcbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMjktXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MzA6c3RhdGljIGludCBpdGVtX3BhdGhfbGVuZ3RoKHN0cnVjdCBjb25maWdfaXRlbSAqIGl0ZW0pXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMzEte1xuLS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy00MC1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzo0MTpzdGF0aWMgdm9pZCBmaWxsX2l0ZW1fcGF0aChzdHJ1Y3QgY29uZmlnX2l0ZW0gKiBpdGVtLCBjaGFyICogYnVmZmVyLCBpbnQgbGVuZ3RoKVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTQyLXtcbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmMtNTUtXG5mcy9jb25maWdmcy9zeW1saW5rLmM6NTY6c3RhdGljIGludCBjb25maWdmc19nZXRfdGFyZ2V0X3BhdGgoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTU3LVx0XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldCwgY2hhciAqcGF0aClcbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmMtNzYtXG5mcy9jb25maWdmcy9zeW1saW5rLmM6Nzc6c3RhdGljIGludCBjcmVhdGVfbGluayhzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtLFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTc4LVx0XHQgICAgICAgc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xMTYtXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MTE3OnN0YXRpYyBpbnQgZ2V0X3RhcmdldChjb25zdCBjaGFyICpzeW1uYW1lLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKip0YXJnZXQsXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTE4LVx0XHQgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xMzMtXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MTM0OnN0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTEzNS17XG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTE0OS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoxNTA6aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTE1MS1cdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTI1Ny1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoyNTg6aW50IGNvbmZpZ2ZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTI1OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNjUKCQkJCQkJCW91dHB1dDogMTAzCgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2Ugbm90ZXMsIHN1bW1hcml6ZWQgYXMgYSB0aG91Z2h0IHByb2Nlc3M6CgoqKlJldmlld2luZyB0aGUgQW5hbHlzaXMgb2YgYGNvbmZpZ2ZzX3N5bWxpbmtgKioKClJpZ2h0LCBzbyB0aGUgbWFpbiBmdW5jdGlvbiBvZiBpbnRlcmVzdCBpcyBgY29uZmlnZnNfc3ltbGlua2AuIExldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkgc2VlIHRoZSByZXBvcnQgaGFzIGZsYWdnZWQgaXQgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHdoaWNoIHNvdW5kcyByaWdodCBiYXNlZCBvbiBteSBrbm93bGVkZ2Ugb2YgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS4gVGhlIHJlYXNvbmluZyBwcm92aWRlZCBpcyBzdWNjaW5jdDogdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgY29uZmlnZnNfc3ltbGlua2Agd2l0aGluIGBmcy9jb25maWdmcy9zeW1saW5rLmNgIGJ5IGltcGxlbWVudGluZyByZWZlcmVuY2UgcGlubmluZyBmb3IgY29udGFpbmluZyBkZWZhdWx0IGdyb3VwcyBhbmQgYWRkaW5nIGxpdmVsaW5lc3MgY2hlY2tzIGFmdGVyIHJlLWFjcXVpcmluZyBsb2Nrcy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYXJlYSBmb3IgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMsIGVzcGVjaWFsbHkgZHVyaW5nIHN5bWxpbmsgY3JlYXRpb24gaW4gdGhlIGNvbmZpZ2ZzLiBHb29kLCBzZWVtcyBsaWtlIGEgc29saWQgZXhwbGFuYXRpb24uIEl0IGV4cGxpY2l0bHkgbWVudGlvbnMgdGhlIHVzZXItc3BhY2UgcmVhY2hhYmlsaXR5IG9mIHRoaXMgZnVuY3Rpb24gdmlhIHN5bWxpbmsgb3BlcmF0aW9ucywgd2hpY2ggaXMgY3J1Y2lhbC4KClRoZSBgRm9jdXNTeW1ib2xzYCBlbnRyeSBjb25maXJtcyBgY29uZmlnZnNfc3ltbGlua2AgaXMgaW5kZWVkIHRoZSB0YXJnZXQuIEFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIHNwZWNpZmljYWxseSBgQ09ORklHRlNfRlNgLCBjb25maXJtcyB0aGF0IGNvbmZpZ2ZzIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgcGF0Y2ggdG8gZXZlbiBiZSByZWxldmFudC4gRXhjZWxsZW50LCBpdCYjMzk7cyBhbGwgaW4gbGluZSB3aXRoIHdoYXQgSSYjMzk7ZCBleHBlY3QuIE5vdyBJIGp1c3QgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIExvb2tzIGxpa2UgYSBzb2xpZCBwaWVjZSBvZiB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb25maWdmc19zeW1saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzX3N5bWxpbmsgdG8gcGluIHRoZSBjb250YWluaW5nIGl0ZW0gb2YgZGVmYXVsdCBncm91cHMgYW5kIGFkZHMgbGl2ZWxpbmVzcyBjaGVja3MgYWZ0ZXIgcmUtYWNxdWlyaW5nIHRoZSBkaXJlY3RvcnkgaW5vZGUgbG9jayB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3ltbGluayBzeXNjYWxscyBvbiBjb25maWdmcyBtb3VudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb25maWdmc19zeW1saW5rIHRvIHBpbiB0aGUgY29udGFpbmluZyBpdGVtIG9mIGRlZmF1bHQgZ3JvdXBzIGFuZCBhZGRzIGxpdmVsaW5lc3MgY2hlY2tzIGFmdGVyIHJlLWFjcXVpcmluZyB0aGUgZGlyZWN0b3J5IGlub2RlIGxvY2sgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5bWxpbmsgc3lzY2FsbHMgb24gY29uZmlnZnMgbW91bnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgYW5kIHJlZmVyZW5jZSBsaWZlY3ljbGUgaXNzdWUgaW4gY29uZmlnZnNfc3ltbGluaygpLiBTcGVjaWZpY2FsbHksIGl0IHBpbnMgdGhlIGNvbnRhaW5pbmcgY29uZmlnX2l0ZW0gYW5kIGNvbmZpZ2ZzX2ZyYWdtZW50IHdoaWxlIHRlbXBvcmFyaWx5IGRyb3BwaW5nIGRpcmVjdG9yeSBpbm9kZSBsb2NrcyB0byByZXNvbHZlIHRoZSBzeW1saW5rIHRhcmdldCwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBvciBpbnZhbGlkIG9wZXJhdGlvbnMgb24gdW5saW5rZWQvZGVhZCBkZWZhdWx0IGdyb3Vwcy5cblxuLSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyAoZS5nLiBMT0NLREVQLCByZWZjb3VudCBjaGVja2luZykgYXJlIGZ1bGx5IGVxdWlwcGVkIHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIFVBRiwgZG91YmxlLXB1dCwgb3IgbG9ja2luZyBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHBhdGNoLlxuLSBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBiZWNhdXNlIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBzdHJ1Y3R1cmUgcGFkZGluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlcyAoZS5nLiBgY29udGFpbmluZ19pdGVtYCwgYGlzX2RlYWRgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRkYTc3NzU2Y2VhNzQ0YzE5NDRlYTEzMzQ1MDBiMGNjMTcyNjk3MDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDEyOjA5OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvc3ltbGluay5jIGIvZnMvY29uZmlnZnMvc3ltbGluay5jCmluZGV4IDMxZWIyOGIyNzMwOTEuLjc1MDgzMjUxYmUyMmQgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jb25maWdmcy9zeW1saW5rLmMKQEAgLTEzMSwxNSAmIzQzOzEzMSwzMyBAQCBzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGVudHJ5ICpjb250YWluaW5nX2RlbnRyeSA9IGRlbnRyeTsKJiM0MzsJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7CiYjNDM7CiYjNDM7CXdoaWxlICghSVNfUk9PVChjb250YWluaW5nX2RlbnRyeSkpIHsKJiM0MzsJCXNkID0gY29udGFpbmluZ19kZW50cnktJmd0O2RfZnNkYXRhOwomIzQzOwkJaWYgKCFzZCB8fCAhKHNkLSZndDtzX3R5cGUgJmFtcDsgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSkKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNvbnRhaW5pbmdfZGVudHJ5ID0gY29udGFpbmluZ19kZW50cnktJmd0O2RfcGFyZW50OwomIzQzOwl9CiYjNDM7CWlmIChJU19ST09UKGNvbnRhaW5pbmdfZGVudHJ5KSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGNvbnRhaW5pbmdfZGVudHJ5KTsKJiM0Mzt9CiAKIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDsKJiM0MzsJc3RydWN0IGNvbmZpZ2ZzX2ZyYWdtZW50ICpmcmFnOwogCXN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07CiAJc3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7CiYjNDM7CXN0cnVjdCBjb25maWdfaXRlbSAqY29udGFpbmluZ19pdGVtID0gTlVMTDsKIAljb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTsKJiM0MzsJYm9vbCBpc19kZWFkOwogCiAJc2QgPSBkZW50cnktJmd0O2RfcGFyZW50LSZndDtkX2ZzZGF0YTsKIAkvKgpAQCAtMTQ5LDYgJiM0MzsxNjcsMTAgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHNkKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKJiM0MzsJZnJhZyA9IGdldF9mcmFnbWVudChzZC0mZ3Q7c19mcmFnKTsKJiM0MzsJaWYgKCFmcmFnKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiAJcGFyZW50X2l0ZW0gPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oZGVudHJ5LSZndDtkX3BhcmVudCk7CiAJdHlwZSA9IHBhcmVudF9pdGVtLSZndDtjaV90eXBlOwogCkBAIC0xNTcsNiAmIzQzOzE3OSwxOCBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJICAgICF0eXBlLSZndDtjdF9pdGVtX29wcy0mZ3Q7YWxsb3dfbGluaykKIAkJZ290byBvdXRfcHV0OwogCiYjNDM7CS8qCiYjNDM7CSAqIFBpbiB0aGUgY29udGFpbmluZyBvYmplY3Qgc28gdGhhdCB0aGUgcGFyZW50X2l0ZW0gKHdoaWNoIG1heSBiZSBhbgomIzQzOwkgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay4KJiM0MzsJICovCiYjNDM7CWlmIChzZC0mZ3Q7c190eXBlICZhbXA7IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkgewomIzQzOwkJY29udGFpbmluZ19pdGVtID0gY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbShkZW50cnktJmd0O2RfcGFyZW50KTsKJiM0MzsJCWlmICghY29udGFpbmluZ19pdGVtKSB7CiYjNDM7CQkJcmV0ID0gLUVOT0VOVDsKJiM0MzsJCQlnb3RvIG91dF9wdXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAkvKgogCSAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZgogCSAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkCkBAIC0xODcsNiAmIzQzOzIyMSwxNiBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJaWYgKHJldCkKIAkJZ290byBvdXRfcHV0OwogCiYjNDM7CWRvd25fcmVhZCgmYW1wO2ZyYWctJmd0O2ZyYWdfc2VtKTsKJiM0MzsJaXNfZGVhZCA9IGZyYWctJmd0O2ZyYWdfZGVhZDsKJiM0MzsJdXBfcmVhZCgmYW1wO2ZyYWctJmd0O2ZyYWdfc2VtKTsKJiM0MzsKJiM0MzsJaWYgKGlzX2RlYWQgfHwgSVNfREVBRERJUihkaXIpIHx8CiYjNDM7CSAgICBkX3VuaGFzaGVkKGRlbnRyeS0mZ3Q7ZF9wYXJlbnQpKSB7CiYjNDM7CQlyZXQgPSAtRU5PRU5UOwomIzQzOwkJZ290byBvdXRfcHV0OwomIzQzOwl9CiYjNDM7CiAJaWYgKGRlbnRyeS0mZ3Q7ZF9pbm9kZSB8fCBkX3VuaGFzaGVkKGRlbnRyeSkpCiAJCXJldCA9IC1FRVhJU1Q7CiAJZWxzZQpAQCAtMjAzLDEwICYjNDM7MjQ3LDExIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkJCSAgICAgdGFyZ2V0X2l0ZW0pOwogCX0KIAotCWNvbmZpZ19pdGVtX3B1dCh0YXJnZXRfaXRlbSk7Ci0KIG91dF9wdXQ6CiYjNDM7CWNvbmZpZ19pdGVtX3B1dCh0YXJnZXRfaXRlbSk7CiAJY29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTsKJiM0MzsJY29uZmlnX2l0ZW1fcHV0KGNvbnRhaW5pbmdfaXRlbSk7CiYjNDM7CXB1dF9mcmFnbWVudChmcmFnKTsKIAlyZXR1cm4gcmV0OwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDE4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uZmlnRlMgU3ltbGluayBQYXRjaCBmb3IgTWVtb3J5IFNhZmV0eSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggZm9yIGBmcy9jb25maWdmcy9zeW1saW5rLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBpbXBhY3Qgb24gbWVtb3J5IHNhZmV0eSwgc3BlY2lmaWNhbGx5IHdoZXRoZXIgaXQgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlcyB0aGF0IEtNU0FOIHdvdWxkIGZsYWcsIG9yIGlmIGl0JiMzOTtzIHByaW1hcmlseSBjb25jZXJuZWQgd2l0aCBhZGRyZXNzaW5nIGxpZmV0aW1lIG1hbmFnZW1lbnQsIHN5bmNocm9uaXphdGlvbiwgVUFGLCBvciBsb2NraW5nIGlzc3VlcyB0aGF0IEtBU0FOIG9yIExPQ0tERVAgbWlnaHQgY2F0Y2guCgpGcm9tIHRoZSBjb2RlIGRpZmYsIHRoZSBmb2N1cyBzZWVtcyB0byBiZSBhcm91bmQgYGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oKWAgYW5kIGBjb25maWdmc19zeW1saW5rKClgLiAgYGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oKWAgYXBwZWFycyB0byB0cmF2ZXJzZSB0aGUgZGVudHJ5IHRyZWUsIGxvb2tpbmcgZm9yIGEgY29udGFpbmluZyBpdGVtIGFuZCBncmFiYmluZyBhIHJlZmVyZW5jZSB1c2luZyBgY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKClgLiBUaGVuIGBjb25maWdmc19zeW1saW5rKClgIGlzIG9idGFpbmluZyB0aGUgZnJhZyBhbmQgcGlubmluZyB0aGUgY29udGFpbmluZyBpdGVtIHZpYSBgY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbSgpYC4gYGdldF90YXJnZXQoKWAgcmVzb2x2ZXMgdGhlIHN5bWxpbmsmIzM5O3MgdGFyZ2V0LiAgQ3J1Y2lhbGx5LCBpdCB0aGVuIGNoZWNrcyBmb3IgYGZyYWctJmd0O2ZyYWdfZGVhZGAgdW5kZXIgYSByZWFkIGxvY2sgKGBkb3duX3JlYWQoJmFtcDtmcmFnLSZndDtmcmFnX3NlbSlgKSBhbmQgYWxzbyBjaGVja3MgaWYgdGhlIHBhcmVudCBkaXJlY3RvcnkgaXMgZGVhZCAoYElTX0RFQURESVIoZGlyKWAgb3IgYGRfdW5oYXNoZWQoLi4uKWApLiBUaGUgaW1wb3J0YW50IGNhbGxzIGFyZSBgY3JlYXRlX2xpbmsoKWAsIG9yIHJlbGVhc2luZyByZXNvdXJjZXMgaW4gYG91dF9wdXQ6YC4KClRoZSBmaXggYWRkcmVzc2VzIHRoZSBzY2VuYXJpbyB3aGVyZSBkZWZhdWx0IGdyb3VwcyB3aXRoaW4gY29uZmlnZnMgYXJlIGVtYmVkZGVkIGluIHBhcmVudCBncm91cHMuIFdoZW4gcmVzb2x2aW5nIHN5bWxpbmtzIGFjcm9zcyBkaWZmZXJlbnQgZGlyZWN0b3J5IGhpZXJhcmNoaWVzLCB0aGUgb3JpZ2luYWwgbG9naWMgY291bGQgbGVhZCB0byBsb2NrcyBiZWluZyBkcm9wcGVkIHByZW1hdHVyZWx5LCBvciBkZWZhdWx0IGdyb3VwcyBiZWluZyB1bmxpbmtlZCBvciBmcmVlZCBjb25jdXJyZW50bHksIGNhdXNpbmcgVUFGcyBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHN5bWxpbmsgY3JlYXRpb24uIFRoZSBwYXRjaCBhaW1zIHRvIHByZXZlbnQgdGhpcyBieSBwaW5uaW5nIHRoZSBjb250YWluaW5nIGl0ZW0gKHVzaW5nIHJlZmNvdW50aW5nKSBhbmQgY2hlY2tpbmcgaWYgdGhlIGZyYWdtZW50IG9yIGRpcmVjdG9yeSBpcyAmIzM0O2RlYWQmIzM0OyBiZWZvcmUgY29udGludWluZy4KCk5vdywgbGV0JiMzOTtzIHplcm8gaW4gb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCYjMzk7cyBsb29rIGF0IHRoZSB2YXJpYWJsZXMgaW5zaWRlIGBjb25maWdmc19zeW1saW5rYDogYHJldGAsIGBzZGAsIGBmcmFnYCwgYHBhcmVudF9pdGVtYCwgYHRhcmdldF9pdGVtYCwgYGNvbnRhaW5pbmdfaXRlbWAsIGB0eXBlYCwgYW5kIGBpc19kZWFkYC4KCmBpc19kZWFkYCBpcyBjcml0aWNhbCwgYXMgaXQgZGVwZW5kcyBvbiB0aGUgZnJhZ21lbnQmIzM5O3Mgc3RhdGU6CgpgYGBjCmRvd25fcmVhZCgmYW1wO2ZyYWctJmd0O2ZyYWdfc2VtKTsKaXNfZGVhZCA9IGZyYWctJmd0O2ZyYWdfZGVhZDsKdXBfcmVhZCgmYW1wO2ZyYWctJmd0O2ZyYWdfc2VtKTsKYGBgCgpTZWVtcyB0aGF0IGBpc19kZWFkYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZCBpbiB0aGUgY29uZGl0aW9uYWwgY2hlY2suIGBjb250YWluaW5nX2l0ZW1gIGFuZCBgdGFyZ2V0X2l0ZW1gIGFyZSBpbml0aWFsaXplZCB0byBOVUxMLiBgZnJhZ2AgY29tZXMgZnJvbSBgZ2V0X2ZyYWdtZW50KClgLiBGcm9tIHRoZSBjb2RlIHNuaXBwZXQgYWxvbmUsIGV2ZXJ5dGhpbmcgbG9va3MgaW5pdGlhbGl6ZWQuIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBhbGxvY2F0aW9ucyAoa21hbGxvYyB3aXRob3V0IG1lbXNldC9remFsbG9jKSwgYGNvcHlfdG9fdXNlcmAgY2FsbHMsIHBhZGRpbmcgbGVha3MsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZnMvY29uZmlnZnMvc3ltbGluay5jYCBhcyB3ZWxsIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBzb21ldGhpbmcuICBBIHF1aWNrIHJlYWQtZmlsZSBvcGVyYXRpb24gc2hvdWxkIGdpdmUgbWUgZW5vdWdoIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvc3ltbGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XHRzdHJ1Y3QgcGF0aCBwYXRoIF9fZnJlZShwYXRoX3B1dCkgPSB7fTtcbiAxMjE6XHRcdGludCByZXQ7XG4gMTIyOlx0XG4gMTIzOlx0XHRyZXQgPSBrZXJuX3BhdGgoc3ltbmFtZSwgTE9PS1VQX0ZPTExPV3xMT09LVVBfRElSRUNUT1JZLCBcdTAwMjZwYXRoKTtcbiAxMjQ6XHRcdGlmIChyZXQpXG4gMTI1Olx0XHRcdHJldHVybiByZXQ7XG4gMTI2Olx0XHRpZiAocGF0aC5kZW50cnktXHUwMDNlZF9zYiAhPSBzYilcbiAxMjc6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiAxMjg6XHRcdCp0YXJnZXQgPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0ocGF0aC5kZW50cnkpO1xuIDEyOTpcdFx0aWYgKCEqdGFyZ2V0KVxuIDEzMDpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiAxMzE6XHRcdHJldHVybiAwO1xuIDEzMjpcdH1cbiAxMzM6XHRcbiAxMzQ6XHRzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiAxMzU6XHR7XG4gMTM2Olx0XHRzdHJ1Y3QgZGVudHJ5ICpjb250YWluaW5nX2RlbnRyeSA9IGRlbnRyeTtcbiAxMzc6XHRcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xuIDEzODpcdFxuIDEzOTpcdFx0d2hpbGUgKCFJU19ST09UKGNvbnRhaW5pbmdfZGVudHJ5KSkge1xuIDE0MDpcdFx0XHRzZCA9IGNvbnRhaW5pbmdfZGVudHJ5LVx1MDAzZWRfZnNkYXRhO1xuIDE0MTpcdFx0XHRpZiAoIXNkIHx8ICEoc2QtXHUwMDNlc190eXBlIFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpKVxuIDE0MjpcdFx0XHRcdGJyZWFrO1xuIDE0MzpcdFx0XHRjb250YWluaW5nX2RlbnRyeSA9IGNvbnRhaW5pbmdfZGVudHJ5LVx1MDAzZWRfcGFyZW50O1xuIDE0NDpcdFx0fVxuIDE0NTpcdFx0aWYgKElTX1JPT1QoY29udGFpbmluZ19kZW50cnkpKVxuIDE0NjpcdFx0XHRyZXR1cm4gTlVMTDtcbiAxNDc6XHRcdHJldHVybiBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oY29udGFpbmluZ19kZW50cnkpO1xuIDE0ODpcdH1cbiAxNDk6XHRcbiAxNTA6XHRpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gMTUxOlx0XHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuIDE1MjpcdHtcbiAxNTM6XHRcdGludCByZXQ7XG4gMTU0Olx0XHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiAxNTU6XHRcdHN0cnVjdCBjb25maWdmc19mcmFnbWVudCAqZnJhZztcbiAxNTY6XHRcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XG4gMTU3Olx0XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcbiAxNTg6XHRcdHN0cnVjdCBjb25maWdfaXRlbSAqY29udGFpbmluZ19pdGVtID0gTlVMTDtcbiAxNTk6XHRcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlO1xuIDE2MDpcdFx0Ym9vbCBpc19kZWFkO1xuIDE2MTpcdFxuIDE2MjpcdFx0c2QgPSBkZW50cnktXHUwMDNlZF9wYXJlbnQtXHUwMDNlZF9mc2RhdGE7XG4gMTYzOlx0XHQvKlxuIDE2NDpcdFx0ICogRmFrZSBpbnZpc2liaWxpdHkgaWYgZGlyIGJlbG9uZ3MgdG8gYSBncm91cC9kZWZhdWx0IGdyb3VwcyBoaWVyYXJjaHlcbiAxNjU6XHRcdCAqIGJlaW5nIGF0dGFjaGVkXG4gMTY2Olx0XHQgKi9cbiAxNjc6XHRcdGlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHNkKSlcbiAxNjg6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gMTY5Olx0XG4gMTcwOlx0XHRmcmFnID0gZ2V0X2ZyYWdtZW50KHNkLVx1MDAzZXNfZnJhZyk7XG4gMTcxOlx0XHRpZiAoIWZyYWcpXG4gMTcyOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuIDE3MzpcdFxuIDE3NDpcdFx0cGFyZW50X2l0ZW0gPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbiAxNzU6XHRcdHR5cGUgPSBwYXJlbnRfaXRlbS1cdTAwM2VjaV90eXBlO1xuIDE3NjpcdFxuIDE3NzpcdFx0cmV0ID0gLUVQRVJNO1xuIDE3ODpcdFx0aWYgKCF0eXBlIHx8ICF0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzIHx8XG4gMTc5Olx0XHQgICAgIXR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlYWxsb3dfbGluaylcbiAxODA6XHRcdFx0Z290byBvdXRfcHV0O1xuIDE4MTpcdFxuIDE4MjpcdFx0LypcbiAxODM6XHRcdCAqIFBpbiB0aGUgY29udGFpbmluZyBvYmplY3Qgc28gdGhhdCB0aGUgcGFyZW50X2l0ZW0gKHdoaWNoIG1heSBiZSBhblxuIDE4NDpcdFx0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXG4gMTg1Olx0XHQgKi9cbiAxODY6XHRcdGlmIChzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkge1xuIDE4NzpcdFx0XHRjb250YWluaW5nX2l0ZW0gPSBjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4gMTg4Olx0XHRcdGlmICghY29udGFpbmluZ19pdGVtKSB7XG4gMTg5Olx0XHRcdFx0cmV0ID0gLUVOT0VOVDtcbiAxOTA6XHRcdFx0XHRnb3RvIG91dF9wdXQ7XG4gMTkxOlx0XHRcdH1cbiAxOTI6XHRcdH1cbiAxOTM6XHRcbiAxOTQ6XHRcdC8qXG4gMTk1Olx0XHQgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2ZcbiAxOTY6XHRcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXG4gMTk3Olx0XHQgKiBhdCBzeXNjYWxsIHRpbWUgKGFzIGxpbmsoMikgd291bGQmIzM5O3ZlIGRvbmUpLCBiZSBhIGRpcmVjdG9yeVxuIDE5ODpcdFx0ICogKHdoaWNoIGxpbmsoMikgd291bGQmIzM5O3ZlIHJlZnVzZWQgdG8gZG8pICpBTkQqIGJlIGEgZGVlcFxuIDE5OTpcdFx0ICogZnVja2luZyBtYWdpYywgbWFraW5nIHRoZSB0YXJnZXQgYnVzeSBmcm9tIHJtZGlyIFBPVi5cbiAyMDA6XHRcdCAqIHN5bWxpbmsoMikgaXMgbm90aGluZyBvZiB0aGF0IHNvcnQsIGFuZCB0aGUgbG9ja2luZyBpdFxuIDIwMTpcdFx0ICogZ2V0cyBtYXRjaGVzIHRoZSBub3JtYWwgc3ltbGluaygyKSBzZW1hbnRpY3MuICBXaXRob3V0XG4gMjAyOlx0XHQgKiBhdHRlbXB0cyB0byByZXNvbHZlIHRoZSB0YXJnZXQgKHdoaWNoIG1pZ2h0IHZlcnkgd2VsbFxuIDIwMzpcdFx0ICogbm90IGV2ZW4gZXhpc3QgeWV0KSBkb25lIHByaW9yIHRvIGxvY2tpbmcgdGhlIHBhcmVudFxuIDIwNDpcdFx0ICogZGlyZWN0b3J5LiAgVGhpcyBwZXJ2ZXJzaW9uLCBPVE9ILCBuZWVkcyB0byByZXNvbHZlXG4gMjA1Olx0XHQgKiB0aGUgdGFyZ2V0LCB3aGljaCB3b3VsZCBsZWFkIHRvIG9idmlvdXMgZGVhZGxvY2tzIGlmXG4gMjA2Olx0XHQgKiBhdHRlbXB0ZWQgd2l0aCBhbnkgZGlyZWN0b3JpZXMgbG9ja2VkLlxuIDIwNzpcdFx0ICpcbiAyMDg6XHRcdCAqIFVuZm9ydHVuYXRlbHksIHRoYXQgZ2FyYmFnZSBpcyB1c2VybGFuZCBBQkkgYW5kIHdlIHNob3VsZCYjMzk7dmVcbiAyMDk6XHRcdCAqIHNhaWQgXCYjMzQ7bm9cJiMzNDsgYmFjayBpbiAyMDA1LiAgVG9vIGxhdGUgbm93LCBzbyB3ZSBnZXQgdG9cbiAyMTA6XHRcdCAqIHBsYXkgdmVyeSB1Z2x5IGdhbWVzIHdpdGggbG9ja2luZy5cbiAyMTE6XHRcdCAqXG4gMjEyOlx0XHQgKiBUcnkgKkFOWVRISU5HKiBvZiB0aGF0IHNvcnQgaW4gbmV3IGNvZGUsIGFuZCB5b3Ugd2lsbFxuIDIxMzpcdFx0ICogcmVhbGx5IHJlZ3JldCBpdC4gIEp1c3QgYXNrIHlvdXJzZWxmIC0gd2hhdCBjb3VsZCBhIEJPRkhcbiAyMTQ6XHRcdCAqIGRvIHRvIG1lIGFuZCBkbyBJIHdhbnQgdG8gZmluZCBpdCBvdXQgZmlyc3QtaGFuZD9cbiAyMTU6XHRcdCAqXG4gMjE2Olx0XHQgKiAgQVYsIGEgdGhvcm91Z2hseSBhbm5veWVkIGJhc3RhcmQuXG4gMjE3Olx0XHQgKi9cbiAyMTg6XHRcdGlub2RlX3VubG9jayhkaXIpO1xuIDIxOTpcdFx0cmV0ID0gZ2V0X3RhcmdldChzeW1uYW1lLCBcdTAwMjZ0YXJnZXRfaXRlbSwgZGVudHJ5LVx1MDAzZWRfc2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDIzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwbHkgZmFtaWxpYXIgd2l0aCB0aGUgTGludXgga2VybmVsIGFuZCB0aGUgY29uZmlnZnMgc3Vic3lzdGVtLgoKKipEaXZpbmcgaW50byB0aGUgYHN5bWxpbmsuY2AgRGV0YWlscyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AgYWdhaW4uIFNlZW1zIGxpa2Ugd2UmIzM5O3JlIHplcm9pbmcgaW4gb24gYSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aGUgc3ltYm9saWMgbGluayBmdW5jdGlvbmFsaXR5IHdpdGhpbiBjb25maWdmcy4gTGV0IG1lIGdyYWIgbXkgbWVudGFsIG1hcCBvZiB0aGUgY29kZS4uLiBsaW5lcyAyMjAgdG8gMjYwLiBUaGF0IHVzdWFsbHkgY292ZXJzIGEgY3J1Y2lhbCBjaHVuaywgb2Z0ZW4gZGVhbGluZyB3aXRoIGVpdGhlciB0aGUgY3JlYXRpb24sIGhhbmRsaW5nIG9yIGRlbGV0aW9uIG9mIHN5bWJvbGljIGxpbmtzIHdpdGhpbiBjb25maWdmcy4gTXkgZ3Vlc3MgaXMgaXQgZGVhbHMgd2l0aCBzZXR0aW5nIHRoZSB0YXJnZXQgb2YgdGhlIHN5bWxpbmssIG1heWJlIHdpdGggZXJyb3IgaGFuZGxpbmcgZm9yIGJhZCBwYXRocywgb3IgcGVybWlzc2lvbnMuIEl04oCZcyBhbHNvIHBvc3NpYmxlIHRoZSBjb2RlIGFkZHJlc3NlcyBhc3BlY3RzIG9mIHN5bWxpbmsgcmVzb2x1dGlvbiB3aXRoaW4gdGhlIGNvbmZpZ2ZzIGhpZXJhcmNoeS4gTmVlZCB0byBkaXZlIGluIGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvc3ltbGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMjA6XHRcdGlub2RlX2xvY2soZGlyKTtcbiAyMjE6XHRcdGlmIChyZXQpXG4gMjIyOlx0XHRcdGdvdG8gb3V0X3B1dDtcbiAyMjM6XHRcbiAyMjQ6XHRcdGRvd25fcmVhZChcdTAwMjZmcmFnLVx1MDAzZWZyYWdfc2VtKTtcbiAyMjU6XHRcdGlzX2RlYWQgPSBmcmFnLVx1MDAzZWZyYWdfZGVhZDtcbiAyMjY6XHRcdHVwX3JlYWQoXHUwMDI2ZnJhZy1cdTAwM2VmcmFnX3NlbSk7XG4gMjI3Olx0XG4gMjI4Olx0XHRpZiAoaXNfZGVhZCB8fCBJU19ERUFERElSKGRpcikgfHxcbiAyMjk6XHRcdCAgICBkX3VuaGFzaGVkKGRlbnRyeS1cdTAwM2VkX3BhcmVudCkpIHtcbiAyMzA6XHRcdFx0cmV0ID0gLUVOT0VOVDtcbiAyMzE6XHRcdFx0Z290byBvdXRfcHV0O1xuIDIzMjpcdFx0fVxuIDIzMzpcdFxuIDIzNDpcdFx0aWYgKGRlbnRyeS1cdTAwM2VkX2lub2RlIHx8IGRfdW5oYXNoZWQoZGVudHJ5KSlcbiAyMzU6XHRcdFx0cmV0ID0gLUVFWElTVDtcbiAyMzY6XHRcdGVsc2VcbiAyMzc6XHRcdFx0cmV0ID0gaW5vZGVfcGVybWlzc2lvbihcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsXG4gMjM4Olx0XHRcdFx0XHQgICAgICAgTUFZX1dSSVRFIHwgTUFZX0VYRUMpO1xuIDIzOTpcdFx0aWYgKCFyZXQpXG4gMjQwOlx0XHRcdHJldCA9IHR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlYWxsb3dfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0pO1xuIDI0MTpcdFx0aWYgKCFyZXQpIHtcbiAyNDI6XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZjb25maWdmc19zeW1saW5rX211dGV4KTtcbiAyNDM6XHRcdFx0cmV0ID0gY3JlYXRlX2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtLCBkZW50cnkpO1xuIDI0NDpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XG4gMjQ1Olx0XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlZHJvcF9saW5rKVxuIDI0NjpcdFx0XHRcdHR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlZHJvcF9saW5rKHBhcmVudF9pdGVtLFxuIDI0NzpcdFx0XHRcdFx0XHRcdCAgICAgdGFyZ2V0X2l0ZW0pO1xuIDI0ODpcdFx0fVxuIDI0OTpcdFxuIDI1MDpcdG91dF9wdXQ6XG4gMjUxOlx0XHRjb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pO1xuIDI1MjpcdFx0Y29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTtcbiAyNTM6XHRcdGNvbmZpZ19pdGVtX3B1dChjb250YWluaW5nX2l0ZW0pO1xuIDI1NDpcdFx0cHV0X2ZyYWdtZW50KGZyYWcpO1xuIDI1NTpcdFx0cmV0dXJuIHJldDtcbiAyNTY6XHR9XG4gMjU3Olx0XG4gMjU4Olx0aW50IGNvbmZpZ2ZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIDI1OTpcdHtcbiAyNjA6XHRcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkID0gZGVudHJ5LVx1MDAzZWRfZnNkYXRhLCAqdGFyZ2V0X3NkO1xuIDI2MTpcdFx0c3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbTtcbiAyNjI6XHRcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlO1xuIDI2MzpcdFx0aW50IHJldDtcbiAyNjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk1NgoJCQkJCQkJb3V0cHV0OiAxOTcKCQkJCQkJCXRob3VnaHRzOiA1NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvbmZpZ2ZzIFBhdGNoJiMzOTtzIFNhZmV0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBgY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbSgpYCB0byB0aGUgY29kZSwgYmFzaWNhbGx5IHRvIG5hdmlnYXRlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGFuZCBmaW5kIHRoZSBgY29uZmlnX2l0ZW1gIHRoYXQgY29udGFpbnMgYSBkZWZhdWx0IGdyb3VwLiBJdCYjMzk7cyBhbHNvIGdyYWJiaW5nIGEgcmVmZXJlbmNlIHRvIGBzZC0mZ3Q7c19mcmFnYCB1c2luZyBgZ2V0X2ZyYWdtZW50KClgLiBUaGUgY29kZSB0aGVuIHBpbnMgYGNvbnRhaW5pbmdfaXRlbWAgaWYgYSBzcGVjaWZpYyBmbGFnIGlzIHNldCAoYENPTkZJR0ZTX1VTRVRfREVGQVVMVGApIHRvIGF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIEFmdGVyIGdldHRpbmcgdGhlIGlub2RlIGxvY2sgYWdhaW4sIGl0IHRoZW4gY2hlY2tzIGZvciBhIGZldyAmIzM0O2RlYWQmIzM0OyBzdGF0ZXM6IGBmcmFnLSZndDtmcmFnX2RlYWRgLCBgSVNfREVBRERJUihkaXIpYCwgYW5kIGBkX3VuaGFzaGVkKGRlbnRyeS0mZ3Q7ZF9wYXJlbnQpYC4gRmluYWxseSwgaXQgcmVsZWFzZXMgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIGl0ZW1zIGl0IGdvdCwgaW5jbHVkaW5nIHRoZSBmcmFnbWVudC4KCk5vdywgSSBuZWVkIHRvIGRldGVybWluZSBpZiBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzIHJlbGV2YW50IGhlcmUuIExldCYjMzk7cyBhcHBseSB0aGUgS01TQU4gY3JpdGVyaWEuIERvZXMgaXQgaW50cm9kdWNlIG9yIG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZT8gTm8sIG5vdCB0aGF0IEkgY2FuIHNlZS4gRG9lcyBpdCB1c2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZz8gTm8sIHRoZSB2YXJpYWJsZXMgYXJlIGFsbCBpbml0aWFsaXplZCwgYW5kIHRoZSBgaXNfZGVhZGAgY2hlY2sgY29tZXMgZnJvbSBhbiBleGlzdGluZyBib29sZWFuIGZpZWxkIGluc2lkZSBgZnJhZ2AuIEFyZSB0aGVyZSBhbnkgbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24/IE5vcGUsIG5vIG5ldyBhbGxvY2F0aW9ucy4gRG9lcyBpdCBjaGFuZ2UgYW55IGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGUgYnVncyBhZGRyZXNzZWQgYXJlIGNsZWFybHkgY29uY3VycmVuY3ksIHVzZS1hZnRlci1mcmVlLCBhbmQgcmVmZXJlbmNlIGxpZmV0aW1lIGlzc3VlcyBkdXJpbmcgc3ltbGluayBjcmVhdGlvbiBpbiBjb25maWdmcy4gSSYjMzk7bSBzZWVpbmcgdGhhdCBLTVNBTiBpc24mIzM5O3QgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoZXNlIGlzc3Vlcy4gS0FTQU4gaXMgYmV0dGVyLgoKVGhlIGlzc3VlcyB0aGlzIHBhdGNoIHRhY2tsZXMgYXJlIGNsZWFybHkgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIGFuZCByZWZlcmVuY2UgbGlmZXRpbWVzIGR1cmluZyB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBzeW1saW5rcy4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHBvdGVudGlhbGx5IGRyb3BwaW5nIG9yIGZyZWVpbmcgYSBwYXJlbnQgaXRlbSB3aGlsZSB0aGUgaW5vZGUgbG9jayB3YXMgYmVpbmcgdW5sb2NrZWQgdG8gcmVzb2x2ZSB0aGUgc3ltbGluayB0YXJnZXQuIFRoaXMgcGF0Y2ggcGlucyB0aGUgcGFyZW50LCBhbmQgdGhlbiBkb2VzIG1vcmUgY2hlY2tzLiBNZW1vcnkgbGlmZWN5Y2xlIGFuZCB1c2UtYWZ0ZXItZnJlZSBwcm9ibGVtcyBhcmUgZWFzaWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgdG9vbHMgbGlrZSBMT0NLREVQLgoKS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBkZWFscyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBzdHJ1Y3R1cmUgcGFkZGluZyBsZWFrcywgYW5kIGFsdGVyZWQgZGF0YSBsZW5ndGgvY29weSBsb2dpYy4gV2UgZG9uJiMzOTt0IGhhdmUgdGhvc2UgaXNzdWVzIGhlcmUuIEFsbCB2YXJpYWJsZXMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuIEkmIzM5O20gY29uZmlkZW50IGluIHRoYXQgYXNzZXNzbWVudCwgYW5kIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBhbmQgcmVmZXJlbmNlIGxpZmVjeWNsZSBpc3N1ZSBpbiBjb25maWdmc19zeW1saW5rKCkuIFNwZWNpZmljYWxseSwgaXQgcGlucyB0aGUgY29udGFpbmluZyBjb25maWdfaXRlbSBhbmQgY29uZmlnZnNfZnJhZ21lbnQgd2hpbGUgdGVtcG9yYXJpbHkgZHJvcHBpbmcgZGlyZWN0b3J5IGlub2RlIGxvY2tzIHRvIHJlc29sdmUgdGhlIHN5bWxpbmsgdGFyZ2V0LCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIGludmFsaWQgb3BlcmF0aW9ucyBvbiB1bmxpbmtlZC9kZWFkIGRlZmF1bHQgZ3JvdXBzLlxuXG4tIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIChlLmcuIExPQ0tERVAsIHJlZmNvdW50IGNoZWNraW5nKSBhcmUgZnVsbHkgZXF1aXBwZWQgdG8gZGV0ZWN0IGFueSBwb3RlbnRpYWwgVUFGLCBkb3VibGUtcHV0LCBvciBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgcGF0Y2guXG4tIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGJlY2F1c2UgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChlLmcuIGBjb250YWluaW5nX2l0ZW1gLCBgaXNfZGVhZGApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgYW5kIHJlZmVyZW5jZSBsaWZlY3ljbGUgaXNzdWUgaW4gY29uZmlnZnNfc3ltbGluaygpLiBTcGVjaWZpY2FsbHksIGl0IHBpbnMgdGhlIGNvbnRhaW5pbmcgY29uZmlnX2l0ZW0gYW5kIGNvbmZpZ2ZzX2ZyYWdtZW50IHdoaWxlIHRlbXBvcmFyaWx5IGRyb3BwaW5nIGRpcmVjdG9yeSBpbm9kZSBsb2NrcyB0byByZXNvbHZlIHRoZSBzeW1saW5rIHRhcmdldCwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBvciBpbnZhbGlkIG9wZXJhdGlvbnMgb24gdW5saW5rZWQvZGVhZCBkZWZhdWx0IGdyb3Vwcy5cblxuLSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyAoZS5nLiBMT0NLREVQLCByZWZjb3VudCBjaGVja2luZykgYXJlIGZ1bGx5IGVxdWlwcGVkIHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIFVBRiwgZG91YmxlLXB1dCwgb3IgbG9ja2luZyBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHBhdGNoLlxuLSBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBiZWNhdXNlIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBzdHJ1Y3R1cmUgcGFkZGluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlcyAoZS5nLiBgY29udGFpbmluZ19pdGVtYCwgYGlzX2RlYWRgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6MDk6NDQuMDI0NDIyMzg0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2ODA5OTA1NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25maWdmc19zeW1saW5rXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBhbmQgcmVmZXJlbmNlIGxpZmVjeWNsZSBpc3N1ZSBpbiBjb25maWdmc19zeW1saW5rKCkuIFNwZWNpZmljYWxseSwgaXQgcGlucyB0aGUgY29udGFpbmluZyBjb25maWdfaXRlbSBhbmQgY29uZmlnZnNfZnJhZ21lbnQgd2hpbGUgdGVtcG9yYXJpbHkgZHJvcHBpbmcgZGlyZWN0b3J5IGlub2RlIGxvY2tzIHRvIHJlc29sdmUgdGhlIHN5bWxpbmsgdGFyZ2V0LCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIGludmFsaWQgb3BlcmF0aW9ucyBvbiB1bmxpbmtlZC9kZWFkIGRlZmF1bHQgZ3JvdXBzLlxcblxcbi0gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgKGUuZy4gTE9DS0RFUCwgcmVmY291bnQgY2hlY2tpbmcpIGFyZSBmdWxseSBlcXVpcHBlZCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBVQUYsIGRvdWJsZS1wdXQsIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaC5cXG4tIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGJlY2F1c2UgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChlLmcuIGBjb250YWluaW5nX2l0ZW1gLCBgaXNfZGVhZGApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzX3N5bWxpbmsgdG8gcGluIHRoZSBjb250YWluaW5nIGl0ZW0gb2YgZGVmYXVsdCBncm91cHMgYW5kIGFkZHMgbGl2ZWxpbmVzcyBjaGVja3MgYWZ0ZXIgcmUtYWNxdWlyaW5nIHRoZSBkaXJlY3RvcnkgaW5vZGUgbG9jayB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3ltbGluayBzeXNjYWxscyBvbiBjb25maWdmcyBtb3VudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjA5OjQ0LjAyNDQyODcwNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM2NzkwNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGRhNzc3NTZjZWE3NDRjMTk0NGVhMTMzNDUwMGIwY2MxNzI2OTcwMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDEyOjA5OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xcbmluZGV4IDMxZWIyOGIyNzMwOTEuLjc1MDgzMjUxYmUyMmQgMTAwNjQ0XFxuLS0tIGEvZnMvY29uZmlnZnMvc3ltbGluay5jXFxuKysrIGIvZnMvY29uZmlnZnMvc3ltbGluay5jXFxuQEAgLTEzMSwxNSArMTMxLDMzIEBAIHN0YXRpYyBpbnQgZ2V0X3RhcmdldChjb25zdCBjaGFyICpzeW1uYW1lLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKip0YXJnZXQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4re1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICpjb250YWluaW5nX2RlbnRyeSA9IGRlbnRyeTtcXG4rXFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XFxuK1xcbitcXHR3aGlsZSAoIUlTX1JPT1QoY29udGFpbmluZ19kZW50cnkpKSB7XFxuK1xcdFxcdHNkID0gY29udGFpbmluZ19kZW50cnktXFx1MDAzZWRfZnNkYXRhO1xcbitcXHRcXHRpZiAoIXNkIHx8ICEoc2QtXFx1MDAzZXNfdHlwZSBcXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjb250YWluaW5nX2RlbnRyeSA9IGNvbnRhaW5pbmdfZGVudHJ5LVxcdTAwM2VkX3BhcmVudDtcXG4rXFx0fVxcbitcXHRpZiAoSVNfUk9PVChjb250YWluaW5nX2RlbnRyeSkpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHRyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGNvbnRhaW5pbmdfZGVudHJ5KTtcXG4rfVxcbiBcXG4gaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqc3ltbmFtZSlcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcXG4rXFx0c3RydWN0IGNvbmZpZ2ZzX2ZyYWdtZW50ICpmcmFnO1xcbiBcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xcbiBcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcXG4rXFx0c3RydWN0IGNvbmZpZ19pdGVtICpjb250YWluaW5nX2l0ZW0gPSBOVUxMO1xcbiBcXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcXG4rXFx0Ym9vbCBpc19kZWFkO1xcbiBcXG4gXFx0c2QgPSBkZW50cnktXFx1MDAzZWRfcGFyZW50LVxcdTAwM2VkX2ZzZGF0YTtcXG4gXFx0LypcXG5AQCAtMTQ5LDYgKzE2NywxMCBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdGlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHNkKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcbitcXHRmcmFnID0gZ2V0X2ZyYWdtZW50KHNkLVxcdTAwM2VzX2ZyYWcpO1xcbitcXHRpZiAoIWZyYWcpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4gXFx0cGFyZW50X2l0ZW0gPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oZGVudHJ5LVxcdTAwM2VkX3BhcmVudCk7XFxuIFxcdHR5cGUgPSBwYXJlbnRfaXRlbS1cXHUwMDNlY2lfdHlwZTtcXG4gXFxuQEAgLTE1Nyw2ICsxNzksMTggQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHQgICAgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2VhbGxvd19saW5rKVxcbiBcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBQaW4gdGhlIGNvbnRhaW5pbmcgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW5cXG4rXFx0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXFxuK1xcdCAqL1xcbitcXHRpZiAoc2QtXFx1MDAzZXNfdHlwZSBcXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkge1xcbitcXHRcXHRjb250YWluaW5nX2l0ZW0gPSBjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpO1xcbitcXHRcXHRpZiAoIWNvbnRhaW5pbmdfaXRlbSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbitcXHRcXHRcXHRnb3RvIG91dF9wdXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0LypcXG4gXFx0ICogVGhpcyBpcyByZWFsbHkgc2ljay4gIFdoYXQgdGhleSB3YW50ZWQgd2FzIGEgaHlicmlkIG9mXFxuIFxcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXFxuQEAgLTE4Nyw2ICsyMjEsMTYgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIFxcbitcXHRkb3duX3JlYWQoXFx1MDAyNmZyYWctXFx1MDAzZWZyYWdfc2VtKTtcXG4rXFx0aXNfZGVhZCA9IGZyYWctXFx1MDAzZWZyYWdfZGVhZDtcXG4rXFx0dXBfcmVhZChcXHUwMDI2ZnJhZy1cXHUwMDNlZnJhZ19zZW0pO1xcbitcXG4rXFx0aWYgKGlzX2RlYWQgfHwgSVNfREVBRERJUihkaXIpIHx8XFxuK1xcdCAgICBkX3VuaGFzaGVkKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9FTlQ7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9pbm9kZSB8fCBkX3VuaGFzaGVkKGRlbnRyeSkpXFxuIFxcdFxcdHJldCA9IC1FRVhJU1Q7XFxuIFxcdGVsc2VcXG5AQCAtMjAzLDEwICsyNDcsMTEgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRhcmdldF9pdGVtKTtcXG4gXFx0fVxcbiBcXG4tXFx0Y29uZmlnX2l0ZW1fcHV0KHRhcmdldF9pdGVtKTtcXG4tXFxuIG91dF9wdXQ6XFxuK1xcdGNvbmZpZ19pdGVtX3B1dCh0YXJnZXRfaXRlbSk7XFxuIFxcdGNvbmZpZ19pdGVtX3B1dChwYXJlbnRfaXRlbSk7XFxuK1xcdGNvbmZpZ19pdGVtX3B1dChjb250YWluaW5nX2l0ZW0pO1xcbitcXHRwdXRfZnJhZ21lbnQoZnJhZyk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjA5OjQ0LjU2MTk1MzMxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzAxNTU0ODkyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25maWdmc19zeW1saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29uZmlnZnNfc3ltbGluayB0byBwaW4gdGhlIGNvbnRhaW5pbmcgaXRlbSBvZiBkZWZhdWx0IGdyb3VwcyBhbmQgYWRkcyBsaXZlbGluZXNzIGNoZWNrcyBhZnRlciByZS1hY3F1aXJpbmcgdGhlIGRpcmVjdG9yeSBpbm9kZSBsb2NrIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeW1saW5rIHN5c2NhbGxzIG9uIGNvbmZpZ2ZzIG1vdW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0ZGE3Nzc1NmNlYTc0NGMxOTQ0ZWExMzM0NTAwYjBjYzE3MjY5NzAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxMjowOTo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuaW5kZXggMzFlYjI4YjI3MzA5MS4uNzUwODMyNTFiZTIyZCAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuKysrIGIvZnMvY29uZmlnZnMvc3ltbGluay5jXG5AQCAtMTMxLDE1ICsxMzEsMzMgQEAgc3RhdGljIGludCBnZXRfdGFyZ2V0KGNvbnN0IGNoYXIgKnN5bW5hbWUsIHN0cnVjdCBjb25maWdfaXRlbSAqKnRhcmdldCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbit7XG4rXHRzdHJ1Y3QgZGVudHJ5ICpjb250YWluaW5nX2RlbnRyeSA9IGRlbnRyeTtcbitcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xuK1xuK1x0d2hpbGUgKCFJU19ST09UKGNvbnRhaW5pbmdfZGVudHJ5KSkge1xuK1x0XHRzZCA9IGNvbnRhaW5pbmdfZGVudHJ5LVx1MDAzZWRfZnNkYXRhO1xuK1x0XHRpZiAoIXNkIHx8ICEoc2QtXHUwMDNlc190eXBlIFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRjb250YWluaW5nX2RlbnRyeSA9IGNvbnRhaW5pbmdfZGVudHJ5LVx1MDAzZWRfcGFyZW50O1xuK1x0fVxuK1x0aWYgKElTX1JPT1QoY29udGFpbmluZ19kZW50cnkpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oY29udGFpbmluZ19kZW50cnkpO1xuK31cbiBcbiBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuIHtcbiBcdGludCByZXQ7XG4gXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbitcdHN0cnVjdCBjb25maWdmc19mcmFnbWVudCAqZnJhZztcbiBcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcbitcdHN0cnVjdCBjb25maWdfaXRlbSAqY29udGFpbmluZ19pdGVtID0gTlVMTDtcbiBcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlO1xuK1x0Ym9vbCBpc19kZWFkO1xuIFxuIFx0c2QgPSBkZW50cnktXHUwMDNlZF9wYXJlbnQtXHUwMDNlZF9mc2RhdGE7XG4gXHQvKlxuQEAgLTE0OSw2ICsxNjcsMTAgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKCFjb25maWdmc19kaXJlbnRfaXNfcmVhZHkoc2QpKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbitcdGZyYWcgPSBnZXRfZnJhZ21lbnQoc2QtXHUwMDNlc19mcmFnKTtcbitcdGlmICghZnJhZylcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4gXHRwYXJlbnRfaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShkZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuIFx0dHlwZSA9IHBhcmVudF9pdGVtLVx1MDAzZWNpX3R5cGU7XG4gXG5AQCAtMTU3LDYgKzE3OSwxOCBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHQgICAgIXR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlYWxsb3dfbGluaylcbiBcdFx0Z290byBvdXRfcHV0O1xuIFxuK1x0LypcbitcdCAqIFBpbiB0aGUgY29udGFpbmluZyBvYmplY3Qgc28gdGhhdCB0aGUgcGFyZW50X2l0ZW0gKHdoaWNoIG1heSBiZSBhblxuK1x0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXG4rXHQgKi9cbitcdGlmIChzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkge1xuK1x0XHRjb250YWluaW5nX2l0ZW0gPSBjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4rXHRcdGlmICghY29udGFpbmluZ19pdGVtKSB7XG4rXHRcdFx0cmV0ID0gLUVOT0VOVDtcbitcdFx0XHRnb3RvIG91dF9wdXQ7XG4rXHRcdH1cbitcdH1cbitcbiBcdC8qXG4gXHQgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2ZcbiBcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXG5AQCAtMTg3LDYgKzIyMSwxNiBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF9wdXQ7XG4gXG4rXHRkb3duX3JlYWQoXHUwMDI2ZnJhZy1cdTAwM2VmcmFnX3NlbSk7XG4rXHRpc19kZWFkID0gZnJhZy1cdTAwM2VmcmFnX2RlYWQ7XG4rXHR1cF9yZWFkKFx1MDAyNmZyYWctXHUwMDNlZnJhZ19zZW0pO1xuK1xuK1x0aWYgKGlzX2RlYWQgfHwgSVNfREVBRERJUihkaXIpIHx8XG4rXHQgICAgZF91bmhhc2hlZChkZW50cnktXHUwMDNlZF9wYXJlbnQpKSB7XG4rXHRcdHJldCA9IC1FTk9FTlQ7XG4rXHRcdGdvdG8gb3V0X3B1dDtcbitcdH1cbitcbiBcdGlmIChkZW50cnktXHUwMDNlZF9pbm9kZSB8fCBkX3VuaGFzaGVkKGRlbnRyeSkpXG4gXHRcdHJldCA9IC1FRVhJU1Q7XG4gXHRlbHNlXG5AQCAtMjAzLDEwICsyNDcsMTEgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0XHRcdCAgICAgdGFyZ2V0X2l0ZW0pO1xuIFx0fVxuIFxuLVx0Y29uZmlnX2l0ZW1fcHV0KHRhcmdldF9pdGVtKTtcbi1cbiBvdXRfcHV0OlxuK1x0Y29uZmlnX2l0ZW1fcHV0KHRhcmdldF9pdGVtKTtcbiBcdGNvbmZpZ19pdGVtX3B1dChwYXJlbnRfaXRlbSk7XG4rXHRjb25maWdfaXRlbV9wdXQoY29udGFpbmluZ19pdGVtKTtcbitcdHB1dF9mcmFnbWVudChmcmFnKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6MDk6NDQuNTYxOTU1ODA0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI2OTYyOTQ0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIEkgYW5hbHl6ZSB0aGlzIHBhdGNoOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgZXZlbiBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJJ20gbG9va2luZyBhdCBgZnMvY29uZmlnZnMvc3ltbGluay5jYC4gVGhhdCdzIGEgZmlsZSBJJ20gZmFtaWxpYXIgd2l0aCwgYW5kIGl0J3MgbW9kaWZ5aW5nIGEgZmV3IGtleSBmdW5jdGlvbnM6IGBjb25maWdmc19zeW1saW5rYCBhbmQgYWRkaW5nIGEgbmV3IHN0YXRpYyBmdW5jdGlvbiwgYGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW1gLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgYW55dGhpbmcgZGVhbGluZyB3aXRoIHN5bWxpbmtzIHdpdGhpbiBhIGZpbGVzeXN0ZW0gY29udGV4dCBpcyAqYWx3YXlzKiB3b3J0aCBhIGNsb3NlciBsb29rIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gVGhlcmUncyBhbG1vc3QgYWx3YXlzIHN1YnRsZSBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgZm9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gcGF0aCByZXNvbHV0aW9uIGFuZCBhY2Nlc3MgY29udHJvbC5cblxuTm93LCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1enppbmcgc3RyYXRlZ3ksIEkgbmVlZCB0byBrbm93IHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50LiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBLY29uZmlnYCBmb3IgYGNvbmZpZ2ZzYCBvcHRpb25zIGFuZCBhbnkgZGVwZW5kZW5jaWVzLiBGYWlsaW5nIHRoYXQsIGEgcXVpY2sgYGdyZXBwZXJgIHNlc3Npb24gc2hvdWxkIHJldmVhbCB3aGF0J3MgZW5hYmxlZCBhbmQgZGlzYWJsZWQuIE9uY2UgSSB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCBJIGNhbiBuYXJyb3cgZG93biBteSBmb2N1cy4gVGhlbiwgdGhlIHJlYWwgZnVuIGJlZ2luczogZGV0ZXJtaW5pbmcgd2hhdCBmb2N1cyBzeW1ib2xzIGFyZSBtb3N0IGxpa2VseSB0byB0cmlnZ2VyIGludGVyZXN0aW5nIGNvZGUgcGF0aHMgaW4gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSSdsbCBiZSB0aGlua2luZyBhYm91dCBob3cgYGNvbmZpZ2ZzX3N5bWxpbmtgIGludGVyYWN0cyB3aXRoIGBjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtYCwgY29uc2lkZXJpbmcgcG9zc2libGUgaW5wdXQgdmVjdG9ycyBhbmQgYm91bmRhcnkgY29uZGl0aW9ucy4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzgwNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6MDk6NTcuMjU4MjUzODU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTE1NzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR0ZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NvbmZpZ2ZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jb25maWdmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvY29uZmlnZnMvS2NvbmZpZzoyOmNvbmZpZyBDT05GSUdGU19GU1xcbmZzL2NvbmZpZ2ZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlLWRyaXZlbiBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9jb25maWdmcy9NYWtlZmlsZS01LVxcbmZzL2NvbmZpZ2ZzL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0NPTkZJR0ZTX0ZTKVxcdCs9IGNvbmZpZ2ZzLm9cXG5mcy9jb25maWdmcy9NYWtlZmlsZS03LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMjowOTo1Ny4zMDU3NzY2MTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTE1Nzg2MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgZnMvY29uZmlnZnMvc3ltbGluay5jYCDigJMgVGltZSB0byBSZS1leGFtaW5lIHRoZSBTeW1ib2xzKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgaXNzdWUsIGxldCdzIGVzdGFibGlzaCBhIGNsZWFyIHBpY3R1cmUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AgYW5kIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzeW1ib2xzIGFyZSBub3cgcHJlc2VudCBhbmQgaG93IHRoZXkgYXJlIHV0aWxpemVkLCBlc3BlY2lhbGx5IHRob3NlIHN1cnJvdW5kaW5nIGFueSByZWNlbnQgbW9kaWZpY2F0aW9ucy4gSSdtIHRoaW5raW5nIGEgcXVpY2sgc2NhbiBvZiB0aGUgc3ltYm9sIGRlZmluaXRpb25zIGFuZCB0aGUgY2FsbCBzaXRlcyB3aXRoaW4gdGhhdCBmaWxlIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gdG8gYW5hbHl6ZSB0aGUgcG90ZW50aWFsIHJhbWlmaWNhdGlvbnMgb2YgdGhlIGNoYW5nZXMsIGlkZW50aWZ5IGRlcGVuZGVuY2llcywgYW5kIHBpbnBvaW50IHRoZSBsaWtlbHkgYXJlYXMgd2hlcmUgdGhlIGlzc3VlIGlzIGVtZXJnaW5nLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjEwOjAwLjIyMTU3MDA0MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTI1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDEyNjpcXHRcXHRpZiAocGF0aC5kZW50cnktXFx1MDAzZWRfc2IgIT0gc2IpXFxuIDEyNzpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiAxMjg6XFx0XFx0KnRhcmdldCA9IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShwYXRoLmRlbnRyeSk7XFxuIDEyOTpcXHRcXHRpZiAoISp0YXJnZXQpXFxuIDEzMDpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gMTMxOlxcdFxcdHJldHVybiAwO1xcbiAxMzI6XFx0fVxcbiAxMzM6XFx0XFxuIDEzNDpcXHRzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gMTM1OlxcdHtcXG4gMTM2OlxcdFxcdHN0cnVjdCBkZW50cnkgKmNvbnRhaW5pbmdfZGVudHJ5ID0gZGVudHJ5O1xcbiAxMzc6XFx0XFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XFxuIDEzODpcXHRcXG4gMTM5OlxcdFxcdHdoaWxlICghSVNfUk9PVChjb250YWluaW5nX2RlbnRyeSkpIHtcXG4gMTQwOlxcdFxcdFxcdHNkID0gY29udGFpbmluZ19kZW50cnktXFx1MDAzZWRfZnNkYXRhO1xcbiAxNDE6XFx0XFx0XFx0aWYgKCFzZCB8fCAhKHNkLVxcdTAwM2VzX3R5cGUgXFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpKVxcbiAxNDI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE0MzpcXHRcXHRcXHRjb250YWluaW5nX2RlbnRyeSA9IGNvbnRhaW5pbmdfZGVudHJ5LVxcdTAwM2VkX3BhcmVudDtcXG4gMTQ0OlxcdFxcdH1cXG4gMTQ1OlxcdFxcdGlmIChJU19ST09UKGNvbnRhaW5pbmdfZGVudHJ5KSlcXG4gMTQ2OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAxNDc6XFx0XFx0cmV0dXJuIGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShjb250YWluaW5nX2RlbnRyeSk7XFxuIDE0ODpcXHR9XFxuIDE0OTpcXHRcXG4gMTUwOlxcdGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gMTUxOlxcdFxcdFxcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxcbiAxNTI6XFx0e1xcbiAxNTM6XFx0XFx0aW50IHJldDtcXG4gMTU0OlxcdFxcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xcbiAxNTU6XFx0XFx0c3RydWN0IGNvbmZpZ2ZzX2ZyYWdtZW50ICpmcmFnO1xcbiAxNTY6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbTtcXG4gMTU3OlxcdFxcdHN0cnVjdCBjb25maWdfaXRlbSAqdGFyZ2V0X2l0ZW0gPSBOVUxMO1xcbiAxNTg6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICpjb250YWluaW5nX2l0ZW0gPSBOVUxMO1xcbiAxNTk6XFx0XFx0Y29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7XFxuIDE2MDpcXHRcXHRib29sIGlzX2RlYWQ7XFxuIDE2MTpcXHRcXG4gMTYyOlxcdFxcdHNkID0gZGVudHJ5LVxcdTAwM2VkX3BhcmVudC1cXHUwMDNlZF9mc2RhdGE7XFxuIDE2MzpcXHRcXHQvKlxcbiAxNjQ6XFx0XFx0ICogRmFrZSBpbnZpc2liaWxpdHkgaWYgZGlyIGJlbG9uZ3MgdG8gYSBncm91cC9kZWZhdWx0IGdyb3VwcyBoaWVyYXJjaHlcXG4gMTY1OlxcdFxcdCAqIGJlaW5nIGF0dGFjaGVkXFxuIDE2NjpcXHRcXHQgKi9cXG4gMTY3OlxcdFxcdGlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHNkKSlcXG4gMTY4OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAxNjk6XFx0XFxuIDE3MDpcXHRcXHRmcmFnID0gZ2V0X2ZyYWdtZW50KHNkLVxcdTAwM2VzX2ZyYWcpO1xcbiAxNzE6XFx0XFx0aWYgKCFmcmFnKVxcbiAxNzI6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDE3MzpcXHRcXG4gMTc0OlxcdFxcdHBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpO1xcbiAxNzU6XFx0XFx0dHlwZSA9IHBhcmVudF9pdGVtLVxcdTAwM2VjaV90eXBlO1xcbiAxNzY6XFx0XFxuIDE3NzpcXHRcXHRyZXQgPSAtRVBFUk07XFxuIDE3ODpcXHRcXHRpZiAoIXR5cGUgfHwgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzIHx8XFxuIDE3OTpcXHRcXHQgICAgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2VhbGxvd19saW5rKVxcbiAxODA6XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbiAxODE6XFx0XFxuIDE4MjpcXHRcXHQvKlxcbiAxODM6XFx0XFx0ICogUGluIHRoZSBjb250YWluaW5nIG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuXFxuIDE4NDpcXHRcXHQgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay5cXG4gMTg1OlxcdFxcdCAqL1xcbiAxODY6XFx0XFx0aWYgKHNkLVxcdTAwM2VzX3R5cGUgXFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpIHtcXG4gMTg3OlxcdFxcdFxcdGNvbnRhaW5pbmdfaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oZGVudHJ5LVxcdTAwM2VkX3BhcmVudCk7XFxuIDE4ODpcXHRcXHRcXHRpZiAoIWNvbnRhaW5pbmdfaXRlbSkge1xcbiAxODk6XFx0XFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gMTkwOlxcdFxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gMTkxOlxcdFxcdFxcdH1cXG4gMTkyOlxcdFxcdH1cXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0LypcXG4gMTk1OlxcdFxcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxcbiAxOTY6XFx0XFx0ICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWRcXG4gMTk3OlxcdFxcdCAqIGF0IHN5c2NhbGwgdGltZSAoYXMgbGluaygyKSB3b3VsZCd2ZSBkb25lKSwgYmUgYSBkaXJlY3RvcnlcXG4gMTk4OlxcdFxcdCAqICh3aGljaCBsaW5rKDIpIHdvdWxkJ3ZlIHJlZnVzZWQgdG8gZG8pICpBTkQqIGJlIGEgZGVlcFxcbiAxOTk6XFx0XFx0ICogZnVja2luZyBtYWdpYywgbWFraW5nIHRoZSB0YXJnZXQgYnVzeSBmcm9tIHJtZGlyIFBPVi5cXG4gMjAwOlxcdFxcdCAqIHN5bWxpbmsoMikgaXMgbm90aGluZyBvZiB0aGF0IHNvcnQsIGFuZCB0aGUgbG9ja2luZyBpdFxcbiAyMDE6XFx0XFx0ICogZ2V0cyBtYXRjaGVzIHRoZSBub3JtYWwgc3ltbGluaygyKSBzZW1hbnRpY3MuICBXaXRob3V0XFxuIDIwMjpcXHRcXHQgKiBhdHRlbXB0cyB0byByZXNvbHZlIHRoZSB0YXJnZXQgKHdoaWNoIG1pZ2h0IHZlcnkgd2VsbFxcbiAyMDM6XFx0XFx0ICogbm90IGV2ZW4gZXhpc3QgeWV0KSBkb25lIHByaW9yIHRvIGxvY2tpbmcgdGhlIHBhcmVudFxcbiAyMDQ6XFx0XFx0ICogZGlyZWN0b3J5LiAgVGhpcyBwZXJ2ZXJzaW9uLCBPVE9ILCBuZWVkcyB0byByZXNvbHZlXFxuIDIwNTpcXHRcXHQgKiB0aGUgdGFyZ2V0LCB3aGljaCB3b3VsZCBsZWFkIHRvIG9idmlvdXMgZGVhZGxvY2tzIGlmXFxuIDIwNjpcXHRcXHQgKiBhdHRlbXB0ZWQgd2l0aCBhbnkgZGlyZWN0b3JpZXMgbG9ja2VkLlxcbiAyMDc6XFx0XFx0ICpcXG4gMjA4OlxcdFxcdCAqIFVuZm9ydHVuYXRlbHksIHRoYXQgZ2FyYmFnZSBpcyB1c2VybGFuZCBBQkkgYW5kIHdlIHNob3VsZCd2ZVxcbiAyMDk6XFx0XFx0ICogc2FpZCBcXFwibm9cXFwiIGJhY2sgaW4gMjAwNS4gIFRvbyBsYXRlIG5vdywgc28gd2UgZ2V0IHRvXFxuIDIxMDpcXHRcXHQgKiBwbGF5IHZlcnkgdWdseSBnYW1lcyB3aXRoIGxvY2tpbmcuXFxuIDIxMTpcXHRcXHQgKlxcbiAyMTI6XFx0XFx0ICogVHJ5ICpBTllUSElORyogb2YgdGhhdCBzb3J0IGluIG5ldyBjb2RlLCBhbmQgeW91IHdpbGxcXG4gMjEzOlxcdFxcdCAqIHJlYWxseSByZWdyZXQgaXQuICBKdXN0IGFzayB5b3Vyc2VsZiAtIHdoYXQgY291bGQgYSBCT0ZIXFxuIDIxNDpcXHRcXHQgKiBkbyB0byBtZSBhbmQgZG8gSSB3YW50IHRvIGZpbmQgaXQgb3V0IGZpcnN0LWhhbmQ/XFxuIDIxNTpcXHRcXHQgKlxcbiAyMTY6XFx0XFx0ICogIEFWLCBhIHRob3JvdWdobHkgYW5ub3llZCBiYXN0YXJkLlxcbiAyMTc6XFx0XFx0ICovXFxuIDIxODpcXHRcXHRpbm9kZV91bmxvY2soZGlyKTtcXG4gMjE5OlxcdFxcdHJldCA9IGdldF90YXJnZXQoc3ltbmFtZSwgXFx1MDAyNnRhcmdldF9pdGVtLCBkZW50cnktXFx1MDAzZWRfc2IpO1xcbiAyMjA6XFx0XFx0aW5vZGVfbG9jayhkaXIpO1xcbiAyMjE6XFx0XFx0aWYgKHJldClcXG4gMjIyOlxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZmcmFnLVxcdTAwM2VmcmFnX3NlbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjEwOjAwLjIyMTY2ODA1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NTYwOTAwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBjb25maWdmcyBTeW1saW5rIEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBgY29uZmlnZnNfc3ltbGlua2AsIGFuIGlub2RlIG9wZXJhdGlvbiBzcGVjaWZpYyB0byBjb25maWdmcy4gVGhlIHF1ZXN0aW9uIGlzOiBpcyBjb25maWdmcyBzb21ldGhpbmcgdGhhdCdzIGV2ZW4gYWNjZXNzaWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyIHNldHVwPyBGb3J0dW5hdGVseSwgdGhlIGFuc3dlciBpcyB5ZXM7IHN5emthbGxlciBhY3RpdmVseSBmdXp6ZXMgY29uZmlnZnMuIEl0J3MgbWVzc2luZyBhcm91bmQgd2l0aCBta2Rpciwgcm1kaXIsIHN5bWxpbmtzLCBhdHRyaWJ1dGUgd3JpdGVzIOKAkyB0aGUgd2hvbGUgc2hlYmFuZyDigJMgd2l0aGluIGNvbmZpZ2ZzIG1vdW50ZWQgaW5zdGFuY2VzLCBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGNvbnNvbGUsIGFuZCB0YXJnZXQgY29yZXMuIFRoZXkgYXJlIGFsc28ganVzdCBtb3VudGluZyBjb25maWdmcyBhbmQgY3JlYXRpbmcgaXRlbXMuXG5cbk5vdywgc3BlY2lmaWNhbGx5LCB0aGVzZSBjaGFuZ2VzIGluIGBmcy9jb25maWdmcy9zeW1saW5rLmNgIG1vZGlmeSBgY29uZmlnZnNfc3ltbGlua2AuIFRoZSBjcnV4IG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIHBpbm5pbmcgdGhlIGNvbnRhaW5pbmcgaXRlbSB3aGVuIGBzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVGAgaXMgdHJ1ZS4gVGhlbiB0aGVyZSdzIHRoZSBhZGRpdGlvbiBvZiBjaGVja3MgZm9yIGBmcmFnLVx1MDAzZWZyYWdfZGVhZGAsIGBJU19ERUFERElSKGRpcilgLCBhbmQgYGRfdW5oYXNoZWQoZGVudHJ5LVx1MDAzZWRfcGFyZW50KWAgYWZ0ZXIgcmUtYWNxdWlyaW5nIHRoZSBpbm9kZSBsb2NrLiBUaGlzIGlzIGltcG9ydGFudDsgaXQgc3VnZ2VzdHMgdGhleSdyZSBhZGRyZXNzaW5nIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gYGNvbmZpZ2ZzX3N5bWxpbmtgLCBzcGVjaWZpY2FsbHkgdGhvc2UgYXJpc2luZyB3aGVuIHN5bWxpbmtzIGFyZSBjcmVhdGVkIGluIGRlZmF1bHQgZ3JvdXBzIG9yIGNvbmN1cnJlbnRseSB3aXRoIGRpcmVjdG9yeSByZW1vdmFsL3VubGlua2luZy4gSXQncyBhYm91dCBlbnN1cmluZyBkYXRhIGNvbnNpc3RlbmN5IGluIHRob3NlIGVkZ2UgY2FzZXMuXG5cblRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLCBsZXQncyBjaGVjayB0aGUgbmF0dXJlIG9mIGBjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtYC4gSXQgbG9va3MgbGlrZSBpdCBpcyBgc3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpYCwgYW5kIHRoZSBgY29uZmlnZnNfc3ltbGlua2AgaXMgbm90IHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgY2FuIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhpcyBmaWxlLlxuXG5JIHNob3VsZCBwcm9iYWJseSBhbHNvIHRha2UgYSBxdWljayBsb29rIGF0IGBmcy9jb25maWdmcy9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTUzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6MTA6MDUuMDc3NzYwOTQ2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvY29uZmlnZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIENPTkZJR0ZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlLWRyaXZlbiBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW1cXFwiXFxuICAgNDpcXHRcXHRoZWxwXFxuICAgNTpcXHRcXHQgIGNvbmZpZ2ZzIGlzIGEgUkFNLWJhc2VkIGZpbGVzeXN0ZW0gdGhhdCBwcm92aWRlcyB0aGUgY29udmVyc2VcXG4gICA2OlxcdFxcdCAgb2Ygc3lzZnMncyBmdW5jdGlvbmFsaXR5LiBXaGVyZSBzeXNmcyBpcyBhIGZpbGVzeXN0ZW0tYmFzZWRcXG4gICA3OlxcdFxcdCAgdmlldyBvZiBrZXJuZWwgb2JqZWN0cywgY29uZmlnZnMgaXMgYSBmaWxlc3lzdGVtLWJhc2VkIG1hbmFnZXJcXG4gICA4OlxcdFxcdCAgb2Yga2VybmVsIG9iamVjdHMsIG9yIGNvbmZpZ19pdGVtcy5cXG4gICA5OlxcdFxcbiAgMTA6XFx0XFx0ICBCb3RoIHN5c2ZzIGFuZCBjb25maWdmcyBjYW4gYW5kIHNob3VsZCBleGlzdCB0b2dldGhlciBvbiB0aGVcXG4gIDExOlxcdFxcdCAgc2FtZSBzeXN0ZW0uIE9uZSBpcyBub3QgYSByZXBsYWNlbWVudCBmb3IgdGhlIG90aGVyLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMjoxMDowNS4wNzc4NDg3NTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTE0MjU0MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIENvbmZpZ0ZTIFN5bWxpbmsgQ3JlYXRpb24qKlxuXG5Pa2F5LCBzbyBgQ09ORklHRlNfRlNgIGlzIG5pY2UgYmVjYXVzZSBpdCdzIHN0YW5kYWxvbmUsIG5vIGRlcGVuZGVuY2llcyB0byB3b3JyeSBhYm91dCDigJMgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIGBjb25maWdmc19zeW1saW5rYCBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nPyBBYnNvbHV0ZWx5ISBJdCBoYW5kbGVzIHN5bWxpbmsgY3JlYXRpb24sIGFuZCB0aGF0IHRvdWNoZXMgY29yZSBmaWxlc3lzdGVtIGNvZGUgd2l0aGluIENvbmZpZ0ZTLiBTcGVjaWZpY2FsbHksIGl0IGludm9sdmVzIGxvY2tpbmcsIHBpbm5pbmcsIGFuZCBsaXZlbGluZXNzIGNoZWNrcyBkdXJpbmcgdGhlIHN5bWxpbmsgY3JlYXRpb24gcHJvY2Vzcy4gQW5kLCBpbXBvcnRhbnRseSwgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGBzeW1saW5rYCBzeXNjYWxsLCBhcyBsb25nIGFzIGEgQ29uZmlnRlMgbW91bnQgaXMgcHJlc2VudC4gVGhhdCdzIGEgc29saWQgYXR0YWNrIHZlY3Rvci5cblxuTGV0J3MgbmFpbCBkb3duIG91ciBmb2N1cy4gT3VyIHByaW1hcnkgc3ltYm9sIGlzIGBjb25maWdmc19zeW1saW5rYC4gTm93LCBhYm91dCB0aGF0IGhlbHBlciBmdW5jdGlvbiwgYGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW1gIOKAkyBpcyBpdCBzdGF0aWM/IFl1cCwgaXQncyBkZWZpbmVkIGFzIGBzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlgLCBhbmQgbGl2ZXMgcmlnaHQgdGhlcmUgaW4gYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AuIElubGluaW5nIG1pZ2h0IGhhcHBlbiwgb3IgaXQgbWlnaHQgaGF2ZSBhIHNlcGFyYXRlIHN5bWJvbCBpZiB0aGUgY29tcGlsZXIgZGVjaWRlcyBub3QgdG8gaW5saW5lIGl0LCBidXQgYGNvbmZpZ2ZzX3N5bWxpbmtgIGl0c2VsZiBpcyBkZWZpbml0ZWx5IGEgbm9uLXN0YXRpYyBzeW1ib2wsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LiBNaWdodCBiZSBnb29kIHRvIGp1c3QgaGF2ZSBhIGxvb2sgYXQgdGhlIG90aGVyIHN5bWJvbHMgaW4gYHN5bWxpbmsuY2Agd2hpbGUgd2UncmUgYXQgaXQsIGp1c3QgdG8gc2VlIHdoYXQgZWxzZSBpcyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA1NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjEwOjExLjU5MjEwNzA0NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2NTY4MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVowLTlfXS4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvY29uZmlnZnMvc3ltbGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xOS0vKiBQcm90ZWN0cyBhdHRhY2htZW50cyBvZiBuZXcgc3ltbGlua3MgKi9cXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MjA6REVGSU5FX01VVEVYKGNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yMS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MjI6c3RhdGljIGludCBpdGVtX2RlcHRoKHN0cnVjdCBjb25maWdfaXRlbSAqIGl0ZW0pXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTIzLXtcXG4tLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yOS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MzA6c3RhdGljIGludCBpdGVtX3BhdGhfbGVuZ3RoKHN0cnVjdCBjb25maWdfaXRlbSAqIGl0ZW0pXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTMxLXtcXG4tLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy00MC1cXG5mcy9jb25maWdmcy9zeW1saW5rLmM6NDE6c3RhdGljIHZvaWQgZmlsbF9pdGVtX3BhdGgoc3RydWN0IGNvbmZpZ19pdGVtICogaXRlbSwgY2hhciAqIGJ1ZmZlciwgaW50IGxlbmd0aClcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtNDIte1xcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTU1LVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzo1NjpzdGF0aWMgaW50IGNvbmZpZ2ZzX2dldF90YXJnZXRfcGF0aChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTU3LVxcdFxcdHN0cnVjdCBjb25maWdfaXRlbSAqdGFyZ2V0LCBjaGFyICpwYXRoKVxcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTc2LVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzo3NzpzdGF0aWMgaW50IGNyZWF0ZV9saW5rKHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW0sXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTc4LVxcdFxcdCAgICAgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTE2LVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoxMTc6c3RhdGljIGludCBnZXRfdGFyZ2V0KGNvbnN0IGNoYXIgKnN5bW5hbWUsIHN0cnVjdCBjb25maWdfaXRlbSAqKnRhcmdldCxcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTE4LVxcdFxcdCAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTMzLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoxMzQ6c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTEzNS17XFxuLS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTQ5LVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoxNTA6aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xNTEtXFx0XFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXFxuLS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMjU3LVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoyNTg6aW50IGNvbmZpZ2ZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yNTkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMjoxMDoxMS42Mzk3NzI3MjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk5NDQ0MjIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2Ugbm90ZXMsIHN1bW1hcml6ZWQgYXMgYSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqUmV2aWV3aW5nIHRoZSBBbmFseXNpcyBvZiBgY29uZmlnZnNfc3ltbGlua2AqKlxuXG5SaWdodCwgc28gdGhlIG1haW4gZnVuY3Rpb24gb2YgaW50ZXJlc3QgaXMgYGNvbmZpZ2ZzX3N5bWxpbmtgLiBMZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSBzZWUgdGhlIHJlcG9ydCBoYXMgZmxhZ2dlZCBpdCBhcyBgV29ydGhGdXp6aW5nOiB0cnVlYCwgd2hpY2ggc291bmRzIHJpZ2h0IGJhc2VkIG9uIG15IGtub3dsZWRnZSBvZiB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBUaGUgcmVhc29uaW5nIHByb3ZpZGVkIGlzIHN1Y2NpbmN0OiB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBjb25maWdmc19zeW1saW5rYCB3aXRoaW4gYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AgYnkgaW1wbGVtZW50aW5nIHJlZmVyZW5jZSBwaW5uaW5nIGZvciBjb250YWluaW5nIGRlZmF1bHQgZ3JvdXBzIGFuZCBhZGRpbmcgbGl2ZWxpbmVzcyBjaGVja3MgYWZ0ZXIgcmUtYWNxdWlyaW5nIGxvY2tzLiBUaGF0J3MgYSBjbGFzc2ljIGFyZWEgZm9yIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGR1cmluZyBzeW1saW5rIGNyZWF0aW9uIGluIHRoZSBjb25maWdmcy4gR29vZCwgc2VlbXMgbGlrZSBhIHNvbGlkIGV4cGxhbmF0aW9uLiBJdCBleHBsaWNpdGx5IG1lbnRpb25zIHRoZSB1c2VyLXNwYWNlIHJlYWNoYWJpbGl0eSBvZiB0aGlzIGZ1bmN0aW9uIHZpYSBzeW1saW5rIG9wZXJhdGlvbnMsIHdoaWNoIGlzIGNydWNpYWwuXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBlbnRyeSBjb25maXJtcyBgY29uZmlnZnNfc3ltbGlua2AgaXMgaW5kZWVkIHRoZSB0YXJnZXQuIEFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIHNwZWNpZmljYWxseSBgQ09ORklHRlNfRlNgLCBjb25maXJtcyB0aGF0IGNvbmZpZ2ZzIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgcGF0Y2ggdG8gZXZlbiBiZSByZWxldmFudC4gRXhjZWxsZW50LCBpdCdzIGFsbCBpbiBsaW5lIHdpdGggd2hhdCBJJ2QgZXhwZWN0LiBOb3cgSSBqdXN0IG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBMb29rcyBsaWtlIGEgc29saWQgcGllY2Ugb2Ygd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI2NSwiT3V0cHV0VG9rZW5zIjoxMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6MTA6MTQuNjM0MjE3OTY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMyMjEyNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZmlnZnNfc3ltbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzX3N5bWxpbmsgdG8gcGluIHRoZSBjb250YWluaW5nIGl0ZW0gb2YgZGVmYXVsdCBncm91cHMgYW5kIGFkZHMgbGl2ZWxpbmVzcyBjaGVja3MgYWZ0ZXIgcmUtYWNxdWlyaW5nIHRoZSBkaXJlY3RvcnkgaW5vZGUgbG9jayB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3ltbGluayBzeXNjYWxscyBvbiBjb25maWdmcyBtb3VudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25maWdmc19zeW1saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29uZmlnZnNfc3ltbGluayB0byBwaW4gdGhlIGNvbnRhaW5pbmcgaXRlbSBvZiBkZWZhdWx0IGdyb3VwcyBhbmQgYWRkcyBsaXZlbGluZXNzIGNoZWNrcyBhZnRlciByZS1hY3F1aXJpbmcgdGhlIGRpcmVjdG9yeSBpbm9kZSBsb2NrIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeW1saW5rIHN5c2NhbGxzIG9uIGNvbmZpZ2ZzIG1vdW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6MTA6MTQuNzE3NDQ4MTg5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk4Nzk0MzMzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjEwOjE0LjcxODAwOTg4OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE2OTg3Mzc3OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBhbmQgcmVmZXJlbmNlIGxpZmVjeWNsZSBpc3N1ZSBpbiBjb25maWdmc19zeW1saW5rKCkuIFNwZWNpZmljYWxseSwgaXQgcGlucyB0aGUgY29udGFpbmluZyBjb25maWdfaXRlbSBhbmQgY29uZmlnZnNfZnJhZ21lbnQgd2hpbGUgdGVtcG9yYXJpbHkgZHJvcHBpbmcgZGlyZWN0b3J5IGlub2RlIGxvY2tzIHRvIHJlc29sdmUgdGhlIHN5bWxpbmsgdGFyZ2V0LCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIGludmFsaWQgb3BlcmF0aW9ucyBvbiB1bmxpbmtlZC9kZWFkIGRlZmF1bHQgZ3JvdXBzLlxcblxcbi0gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgKGUuZy4gTE9DS0RFUCwgcmVmY291bnQgY2hlY2tpbmcpIGFyZSBmdWxseSBlcXVpcHBlZCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBVQUYsIGRvdWJsZS1wdXQsIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaC5cXG4tIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGJlY2F1c2UgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChlLmcuIGBjb250YWluaW5nX2l0ZW1gLCBgaXNfZGVhZGApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRkYTc3NzU2Y2VhNzQ0YzE5NDRlYTEzMzQ1MDBiMGNjMTcyNjk3MDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDEyOjA5OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvc3ltbGluay5jIGIvZnMvY29uZmlnZnMvc3ltbGluay5jXG5pbmRleCAzMWViMjhiMjczMDkxLi43NTA4MzI1MWJlMjJkIDEwMDY0NFxuLS0tIGEvZnMvY29uZmlnZnMvc3ltbGluay5jXG4rKysgYi9mcy9jb25maWdmcy9zeW1saW5rLmNcbkBAIC0xMzEsMTUgKzEzMSwzMyBAQCBzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuK3tcbitcdHN0cnVjdCBkZW50cnkgKmNvbnRhaW5pbmdfZGVudHJ5ID0gZGVudHJ5O1xuK1x0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4rXG4rXHR3aGlsZSAoIUlTX1JPT1QoY29udGFpbmluZ19kZW50cnkpKSB7XG4rXHRcdHNkID0gY29udGFpbmluZ19kZW50cnktXHUwMDNlZF9mc2RhdGE7XG4rXHRcdGlmICghc2QgfHwgIShzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNvbnRhaW5pbmdfZGVudHJ5ID0gY29udGFpbmluZ19kZW50cnktXHUwMDNlZF9wYXJlbnQ7XG4rXHR9XG4rXHRpZiAoSVNfUk9PVChjb250YWluaW5nX2RlbnRyeSkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0cmV0dXJuIGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShjb250YWluaW5nX2RlbnRyeSk7XG4rfVxuIFxuIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXG4ge1xuIFx0aW50IHJldDtcbiBcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xuK1x0c3RydWN0IGNvbmZpZ2ZzX2ZyYWdtZW50ICpmcmFnO1xuIFx0c3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbTtcbiBcdHN0cnVjdCBjb25maWdfaXRlbSAqdGFyZ2V0X2l0ZW0gPSBOVUxMO1xuK1x0c3RydWN0IGNvbmZpZ19pdGVtICpjb250YWluaW5nX2l0ZW0gPSBOVUxMO1xuIFx0Y29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7XG4rXHRib29sIGlzX2RlYWQ7XG4gXG4gXHRzZCA9IGRlbnRyeS1cdTAwM2VkX3BhcmVudC1cdTAwM2VkX2ZzZGF0YTtcbiBcdC8qXG5AQCAtMTQ5LDYgKzE2NywxMCBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoIWNvbmZpZ2ZzX2RpcmVudF9pc19yZWFkeShzZCkpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuK1x0ZnJhZyA9IGdldF9mcmFnbWVudChzZC1cdTAwM2VzX2ZyYWcpO1xuK1x0aWYgKCFmcmFnKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcbiBcdHBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4gXHR0eXBlID0gcGFyZW50X2l0ZW0tXHUwMDNlY2lfdHlwZTtcbiBcbkBAIC0xNTcsNiArMTc5LDE4IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdCAgICAhdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2VhbGxvd19saW5rKVxuIFx0XHRnb3RvIG91dF9wdXQ7XG4gXG4rXHQvKlxuK1x0ICogUGluIHRoZSBjb250YWluaW5nIG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuXG4rXHQgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay5cbitcdCAqL1xuK1x0aWYgKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSB7XG4rXHRcdGNvbnRhaW5pbmdfaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbitcdFx0aWYgKCFjb250YWluaW5nX2l0ZW0pIHtcbitcdFx0XHRyZXQgPSAtRU5PRU5UO1xuK1x0XHRcdGdvdG8gb3V0X3B1dDtcbitcdFx0fVxuK1x0fVxuK1xuIFx0LypcbiBcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxuIFx0ICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWRcbkBAIC0xODcsNiArMjIxLDE2IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X3B1dDtcbiBcbitcdGRvd25fcmVhZChcdTAwMjZmcmFnLVx1MDAzZWZyYWdfc2VtKTtcbitcdGlzX2RlYWQgPSBmcmFnLVx1MDAzZWZyYWdfZGVhZDtcbitcdHVwX3JlYWQoXHUwMDI2ZnJhZy1cdTAwM2VmcmFnX3NlbSk7XG4rXG4rXHRpZiAoaXNfZGVhZCB8fCBJU19ERUFERElSKGRpcikgfHxcbitcdCAgICBkX3VuaGFzaGVkKGRlbnRyeS1cdTAwM2VkX3BhcmVudCkpIHtcbitcdFx0cmV0ID0gLUVOT0VOVDtcbitcdFx0Z290byBvdXRfcHV0O1xuK1x0fVxuK1xuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX2lub2RlIHx8IGRfdW5oYXNoZWQoZGVudHJ5KSlcbiBcdFx0cmV0ID0gLUVFWElTVDtcbiBcdGVsc2VcbkBAIC0yMDMsMTAgKzI0NywxMSBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHRcdFx0ICAgICB0YXJnZXRfaXRlbSk7XG4gXHR9XG4gXG4tXHRjb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pO1xuLVxuIG91dF9wdXQ6XG4rXHRjb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pO1xuIFx0Y29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTtcbitcdGNvbmZpZ19pdGVtX3B1dChjb250YWluaW5nX2l0ZW0pO1xuK1x0cHV0X2ZyYWdtZW50KGZyYWcpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMjoxMDoxNC43MTgwMTIwNTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODcxMzUxMDkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbmZpZ0ZTIFN5bWxpbmsgUGF0Y2ggZm9yIE1lbW9yeSBTYWZldHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBmb3IgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaXRzIGltcGFjdCBvbiBtZW1vcnkgc2FmZXR5LCBzcGVjaWZpY2FsbHkgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzIHRoYXQgS01TQU4gd291bGQgZmxhZywgb3IgaWYgaXQncyBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggYWRkcmVzc2luZyBsaWZldGltZSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIFVBRiwgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBLQVNBTiBvciBMT0NLREVQIG1pZ2h0IGNhdGNoLlxuXG5Gcm9tIHRoZSBjb2RlIGRpZmYsIHRoZSBmb2N1cyBzZWVtcyB0byBiZSBhcm91bmQgYGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oKWAgYW5kIGBjb25maWdmc19zeW1saW5rKClgLiAgYGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oKWAgYXBwZWFycyB0byB0cmF2ZXJzZSB0aGUgZGVudHJ5IHRyZWUsIGxvb2tpbmcgZm9yIGEgY29udGFpbmluZyBpdGVtIGFuZCBncmFiYmluZyBhIHJlZmVyZW5jZSB1c2luZyBgY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKClgLiBUaGVuIGBjb25maWdmc19zeW1saW5rKClgIGlzIG9idGFpbmluZyB0aGUgZnJhZyBhbmQgcGlubmluZyB0aGUgY29udGFpbmluZyBpdGVtIHZpYSBgY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbSgpYC4gYGdldF90YXJnZXQoKWAgcmVzb2x2ZXMgdGhlIHN5bWxpbmsncyB0YXJnZXQuICBDcnVjaWFsbHksIGl0IHRoZW4gY2hlY2tzIGZvciBgZnJhZy1cdTAwM2VmcmFnX2RlYWRgIHVuZGVyIGEgcmVhZCBsb2NrIChgZG93bl9yZWFkKFx1MDAyNmZyYWctXHUwMDNlZnJhZ19zZW0pYCkgYW5kIGFsc28gY2hlY2tzIGlmIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGlzIGRlYWQgKGBJU19ERUFERElSKGRpcilgIG9yIGBkX3VuaGFzaGVkKC4uLilgKS4gVGhlIGltcG9ydGFudCBjYWxscyBhcmUgYGNyZWF0ZV9saW5rKClgLCBvciByZWxlYXNpbmcgcmVzb3VyY2VzIGluIGBvdXRfcHV0OmAuXG5cblRoZSBmaXggYWRkcmVzc2VzIHRoZSBzY2VuYXJpbyB3aGVyZSBkZWZhdWx0IGdyb3VwcyB3aXRoaW4gY29uZmlnZnMgYXJlIGVtYmVkZGVkIGluIHBhcmVudCBncm91cHMuIFdoZW4gcmVzb2x2aW5nIHN5bWxpbmtzIGFjcm9zcyBkaWZmZXJlbnQgZGlyZWN0b3J5IGhpZXJhcmNoaWVzLCB0aGUgb3JpZ2luYWwgbG9naWMgY291bGQgbGVhZCB0byBsb2NrcyBiZWluZyBkcm9wcGVkIHByZW1hdHVyZWx5LCBvciBkZWZhdWx0IGdyb3VwcyBiZWluZyB1bmxpbmtlZCBvciBmcmVlZCBjb25jdXJyZW50bHksIGNhdXNpbmcgVUFGcyBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHN5bWxpbmsgY3JlYXRpb24uIFRoZSBwYXRjaCBhaW1zIHRvIHByZXZlbnQgdGhpcyBieSBwaW5uaW5nIHRoZSBjb250YWluaW5nIGl0ZW0gKHVzaW5nIHJlZmNvdW50aW5nKSBhbmQgY2hlY2tpbmcgaWYgdGhlIGZyYWdtZW50IG9yIGRpcmVjdG9yeSBpcyBcImRlYWRcIiBiZWZvcmUgY29udGludWluZy5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQncyBsb29rIGF0IHRoZSB2YXJpYWJsZXMgaW5zaWRlIGBjb25maWdmc19zeW1saW5rYDogYHJldGAsIGBzZGAsIGBmcmFnYCwgYHBhcmVudF9pdGVtYCwgYHRhcmdldF9pdGVtYCwgYGNvbnRhaW5pbmdfaXRlbWAsIGB0eXBlYCwgYW5kIGBpc19kZWFkYC5cblxuYGlzX2RlYWRgIGlzIGNyaXRpY2FsLCBhcyBpdCBkZXBlbmRzIG9uIHRoZSBmcmFnbWVudCdzIHN0YXRlOlxuXG5gYGBjXG5kb3duX3JlYWQoXHUwMDI2ZnJhZy1cdTAwM2VmcmFnX3NlbSk7XG5pc19kZWFkID0gZnJhZy1cdTAwM2VmcmFnX2RlYWQ7XG51cF9yZWFkKFx1MDAyNmZyYWctXHUwMDNlZnJhZ19zZW0pO1xuYGBgXG5cblNlZW1zIHRoYXQgYGlzX2RlYWRgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkIGluIHRoZSBjb25kaXRpb25hbCBjaGVjay4gYGNvbnRhaW5pbmdfaXRlbWAgYW5kIGB0YXJnZXRfaXRlbWAgYXJlIGluaXRpYWxpemVkIHRvIE5VTEwuIGBmcmFnYCBjb21lcyBmcm9tIGBnZXRfZnJhZ21lbnQoKWAuIEZyb20gdGhlIGNvZGUgc25pcHBldCBhbG9uZSwgZXZlcnl0aGluZyBsb29rcyBpbml0aWFsaXplZC4gSSBkb24ndCBzZWUgYW55IG9idmlvdXMgYWxsb2NhdGlvbnMgKGttYWxsb2Mgd2l0aG91dCBtZW1zZXQva3phbGxvYyksIGBjb3B5X3RvX3VzZXJgIGNhbGxzLCBwYWRkaW5nIGxlYWtzLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZnMvY29uZmlnZnMvc3ltbGluay5jYCBhcyB3ZWxsIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIHNvbWV0aGluZy4gIEEgcXVpY2sgcmVhZC1maWxlIG9wZXJhdGlvbiBzaG91bGQgZ2l2ZSBtZSBlbm91Z2ggY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAxOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjEwOjIzLjQzMTUyNTkzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvY29uZmlnZnMvc3ltbGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjA6XFx0XFx0c3RydWN0IHBhdGggcGF0aCBfX2ZyZWUocGF0aF9wdXQpID0ge307XFxuIDEyMTpcXHRcXHRpbnQgcmV0O1xcbiAxMjI6XFx0XFxuIDEyMzpcXHRcXHRyZXQgPSBrZXJuX3BhdGgoc3ltbmFtZSwgTE9PS1VQX0ZPTExPV3xMT09LVVBfRElSRUNUT1JZLCBcXHUwMDI2cGF0aCk7XFxuIDEyNDpcXHRcXHRpZiAocmV0KVxcbiAxMjU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTI2OlxcdFxcdGlmIChwYXRoLmRlbnRyeS1cXHUwMDNlZF9zYiAhPSBzYilcXG4gMTI3OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDEyODpcXHRcXHQqdGFyZ2V0ID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHBhdGguZGVudHJ5KTtcXG4gMTI5OlxcdFxcdGlmICghKnRhcmdldClcXG4gMTMwOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAxMzE6XFx0XFx0cmV0dXJuIDA7XFxuIDEzMjpcXHR9XFxuIDEzMzpcXHRcXG4gMTM0OlxcdHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiAxMzU6XFx0e1xcbiAxMzY6XFx0XFx0c3RydWN0IGRlbnRyeSAqY29udGFpbmluZ19kZW50cnkgPSBkZW50cnk7XFxuIDEzNzpcXHRcXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcXG4gMTM4OlxcdFxcbiAxMzk6XFx0XFx0d2hpbGUgKCFJU19ST09UKGNvbnRhaW5pbmdfZGVudHJ5KSkge1xcbiAxNDA6XFx0XFx0XFx0c2QgPSBjb250YWluaW5nX2RlbnRyeS1cXHUwMDNlZF9mc2RhdGE7XFxuIDE0MTpcXHRcXHRcXHRpZiAoIXNkIHx8ICEoc2QtXFx1MDAzZXNfdHlwZSBcXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpXFxuIDE0MjpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTQzOlxcdFxcdFxcdGNvbnRhaW5pbmdfZGVudHJ5ID0gY29udGFpbmluZ19kZW50cnktXFx1MDAzZWRfcGFyZW50O1xcbiAxNDQ6XFx0XFx0fVxcbiAxNDU6XFx0XFx0aWYgKElTX1JPT1QoY29udGFpbmluZ19kZW50cnkpKVxcbiAxNDY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDE0NzpcXHRcXHRyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGNvbnRhaW5pbmdfZGVudHJ5KTtcXG4gMTQ4OlxcdH1cXG4gMTQ5OlxcdFxcbiAxNTA6XFx0aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiAxNTE6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXFxuIDE1MjpcXHR7XFxuIDE1MzpcXHRcXHRpbnQgcmV0O1xcbiAxNTQ6XFx0XFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XFxuIDE1NTpcXHRcXHRzdHJ1Y3QgY29uZmlnZnNfZnJhZ21lbnQgKmZyYWc7XFxuIDE1NjpcXHRcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xcbiAxNTc6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7XFxuIDE1ODpcXHRcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbnRhaW5pbmdfaXRlbSA9IE5VTEw7XFxuIDE1OTpcXHRcXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcXG4gMTYwOlxcdFxcdGJvb2wgaXNfZGVhZDtcXG4gMTYxOlxcdFxcbiAxNjI6XFx0XFx0c2QgPSBkZW50cnktXFx1MDAzZWRfcGFyZW50LVxcdTAwM2VkX2ZzZGF0YTtcXG4gMTYzOlxcdFxcdC8qXFxuIDE2NDpcXHRcXHQgKiBGYWtlIGludmlzaWJpbGl0eSBpZiBkaXIgYmVsb25ncyB0byBhIGdyb3VwL2RlZmF1bHQgZ3JvdXBzIGhpZXJhcmNoeVxcbiAxNjU6XFx0XFx0ICogYmVpbmcgYXR0YWNoZWRcXG4gMTY2OlxcdFxcdCAqL1xcbiAxNjc6XFx0XFx0aWYgKCFjb25maWdmc19kaXJlbnRfaXNfcmVhZHkoc2QpKVxcbiAxNjg6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDE2OTpcXHRcXG4gMTcwOlxcdFxcdGZyYWcgPSBnZXRfZnJhZ21lbnQoc2QtXFx1MDAzZXNfZnJhZyk7XFxuIDE3MTpcXHRcXHRpZiAoIWZyYWcpXFxuIDE3MjpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gMTczOlxcdFxcbiAxNzQ6XFx0XFx0cGFyZW50X2l0ZW0gPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oZGVudHJ5LVxcdTAwM2VkX3BhcmVudCk7XFxuIDE3NTpcXHRcXHR0eXBlID0gcGFyZW50X2l0ZW0tXFx1MDAzZWNpX3R5cGU7XFxuIDE3NjpcXHRcXG4gMTc3OlxcdFxcdHJldCA9IC1FUEVSTTtcXG4gMTc4OlxcdFxcdGlmICghdHlwZSB8fCAhdHlwZS1cXHUwMDNlY3RfaXRlbV9vcHMgfHxcXG4gMTc5OlxcdFxcdCAgICAhdHlwZS1cXHUwMDNlY3RfaXRlbV9vcHMtXFx1MDAzZWFsbG93X2xpbmspXFxuIDE4MDpcXHRcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIDE4MTpcXHRcXG4gMTgyOlxcdFxcdC8qXFxuIDE4MzpcXHRcXHQgKiBQaW4gdGhlIGNvbnRhaW5pbmcgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW5cXG4gMTg0OlxcdFxcdCAqIGVtYmVkZGVkIGRlZmF1bHQgZ3JvdXApIGlzIG5vdCBmcmVlZCB3aGlsZSB3ZSBkcm9wIHRoZSBsb2NrLlxcbiAxODU6XFx0XFx0ICovXFxuIDE4NjpcXHRcXHRpZiAoc2QtXFx1MDAzZXNfdHlwZSBcXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkge1xcbiAxODc6XFx0XFx0XFx0Y29udGFpbmluZ19pdGVtID0gY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbShkZW50cnktXFx1MDAzZWRfcGFyZW50KTtcXG4gMTg4OlxcdFxcdFxcdGlmICghY29udGFpbmluZ19pdGVtKSB7XFxuIDE4OTpcXHRcXHRcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbiAxOTA6XFx0XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbiAxOTE6XFx0XFx0XFx0fVxcbiAxOTI6XFx0XFx0fVxcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHQvKlxcbiAxOTU6XFx0XFx0ICogVGhpcyBpcyByZWFsbHkgc2ljay4gIFdoYXQgdGhleSB3YW50ZWQgd2FzIGEgaHlicmlkIG9mXFxuIDE5NjpcXHRcXHQgKiBsaW5rKDIpIGFuZCBzeW1saW5rKDIpIC0gdGhleSB3YW50ZWQgdGhlIHRhcmdldCByZXNvbHZlZFxcbiAxOTc6XFx0XFx0ICogYXQgc3lzY2FsbCB0aW1lIChhcyBsaW5rKDIpIHdvdWxkJ3ZlIGRvbmUpLCBiZSBhIGRpcmVjdG9yeVxcbiAxOTg6XFx0XFx0ICogKHdoaWNoIGxpbmsoMikgd291bGQndmUgcmVmdXNlZCB0byBkbykgKkFORCogYmUgYSBkZWVwXFxuIDE5OTpcXHRcXHQgKiBmdWNraW5nIG1hZ2ljLCBtYWtpbmcgdGhlIHRhcmdldCBidXN5IGZyb20gcm1kaXIgUE9WLlxcbiAyMDA6XFx0XFx0ICogc3ltbGluaygyKSBpcyBub3RoaW5nIG9mIHRoYXQgc29ydCwgYW5kIHRoZSBsb2NraW5nIGl0XFxuIDIwMTpcXHRcXHQgKiBnZXRzIG1hdGNoZXMgdGhlIG5vcm1hbCBzeW1saW5rKDIpIHNlbWFudGljcy4gIFdpdGhvdXRcXG4gMjAyOlxcdFxcdCAqIGF0dGVtcHRzIHRvIHJlc29sdmUgdGhlIHRhcmdldCAod2hpY2ggbWlnaHQgdmVyeSB3ZWxsXFxuIDIwMzpcXHRcXHQgKiBub3QgZXZlbiBleGlzdCB5ZXQpIGRvbmUgcHJpb3IgdG8gbG9ja2luZyB0aGUgcGFyZW50XFxuIDIwNDpcXHRcXHQgKiBkaXJlY3RvcnkuICBUaGlzIHBlcnZlcnNpb24sIE9UT0gsIG5lZWRzIHRvIHJlc29sdmVcXG4gMjA1OlxcdFxcdCAqIHRoZSB0YXJnZXQsIHdoaWNoIHdvdWxkIGxlYWQgdG8gb2J2aW91cyBkZWFkbG9ja3MgaWZcXG4gMjA2OlxcdFxcdCAqIGF0dGVtcHRlZCB3aXRoIGFueSBkaXJlY3RvcmllcyBsb2NrZWQuXFxuIDIwNzpcXHRcXHQgKlxcbiAyMDg6XFx0XFx0ICogVW5mb3J0dW5hdGVseSwgdGhhdCBnYXJiYWdlIGlzIHVzZXJsYW5kIEFCSSBhbmQgd2Ugc2hvdWxkJ3ZlXFxuIDIwOTpcXHRcXHQgKiBzYWlkIFxcXCJub1xcXCIgYmFjayBpbiAyMDA1LiAgVG9vIGxhdGUgbm93LCBzbyB3ZSBnZXQgdG9cXG4gMjEwOlxcdFxcdCAqIHBsYXkgdmVyeSB1Z2x5IGdhbWVzIHdpdGggbG9ja2luZy5cXG4gMjExOlxcdFxcdCAqXFxuIDIxMjpcXHRcXHQgKiBUcnkgKkFOWVRISU5HKiBvZiB0aGF0IHNvcnQgaW4gbmV3IGNvZGUsIGFuZCB5b3Ugd2lsbFxcbiAyMTM6XFx0XFx0ICogcmVhbGx5IHJlZ3JldCBpdC4gIEp1c3QgYXNrIHlvdXJzZWxmIC0gd2hhdCBjb3VsZCBhIEJPRkhcXG4gMjE0OlxcdFxcdCAqIGRvIHRvIG1lIGFuZCBkbyBJIHdhbnQgdG8gZmluZCBpdCBvdXQgZmlyc3QtaGFuZD9cXG4gMjE1OlxcdFxcdCAqXFxuIDIxNjpcXHRcXHQgKiAgQVYsIGEgdGhvcm91Z2hseSBhbm5veWVkIGJhc3RhcmQuXFxuIDIxNzpcXHRcXHQgKi9cXG4gMjE4OlxcdFxcdGlub2RlX3VubG9jayhkaXIpO1xcbiAyMTk6XFx0XFx0cmV0ID0gZ2V0X3RhcmdldChzeW1uYW1lLCBcXHUwMDI2dGFyZ2V0X2l0ZW0sIGRlbnRyeS1cXHUwMDNlZF9zYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjEwOjIzLjQzMTYyODY1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzI4MjgwNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IGRlZXBseSBmYW1pbGlhciB3aXRoIHRoZSBMaW51eCBrZXJuZWwgYW5kIHRoZSBjb25maWdmcyBzdWJzeXN0ZW0uXG5cbioqRGl2aW5nIGludG8gdGhlIGBzeW1saW5rLmNgIERldGFpbHMqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBgZnMvY29uZmlnZnMvc3ltbGluay5jYCBhZ2Fpbi4gU2VlbXMgbGlrZSB3ZSdyZSB6ZXJvaW5nIGluIG9uIGEgcGFydGljdWxhciBhc3BlY3Qgb2YgdGhlIHN5bWJvbGljIGxpbmsgZnVuY3Rpb25hbGl0eSB3aXRoaW4gY29uZmlnZnMuIExldCBtZSBncmFiIG15IG1lbnRhbCBtYXAgb2YgdGhlIGNvZGUuLi4gbGluZXMgMjIwIHRvIDI2MC4gVGhhdCB1c3VhbGx5IGNvdmVycyBhIGNydWNpYWwgY2h1bmssIG9mdGVuIGRlYWxpbmcgd2l0aCBlaXRoZXIgdGhlIGNyZWF0aW9uLCBoYW5kbGluZyBvciBkZWxldGlvbiBvZiBzeW1ib2xpYyBsaW5rcyB3aXRoaW4gY29uZmlnZnMuIE15IGd1ZXNzIGlzIGl0IGRlYWxzIHdpdGggc2V0dGluZyB0aGUgdGFyZ2V0IG9mIHRoZSBzeW1saW5rLCBtYXliZSB3aXRoIGVycm9yIGhhbmRsaW5nIGZvciBiYWQgcGF0aHMsIG9yIHBlcm1pc3Npb25zLiBJdOKAmXMgYWxzbyBwb3NzaWJsZSB0aGUgY29kZSBhZGRyZXNzZXMgYXNwZWN0cyBvZiBzeW1saW5rIHJlc29sdXRpb24gd2l0aGluIHRoZSBjb25maWdmcyBoaWVyYXJjaHkuIE5lZWQgdG8gZGl2ZSBpbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGJlaW5nIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjEwOjI1Ljc1OTkxMjE2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9jb25maWdmcy9zeW1saW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjIwOlxcdFxcdGlub2RlX2xvY2soZGlyKTtcXG4gMjIxOlxcdFxcdGlmIChyZXQpXFxuIDIyMjpcXHRcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIDIyMzpcXHRcXG4gMjI0OlxcdFxcdGRvd25fcmVhZChcXHUwMDI2ZnJhZy1cXHUwMDNlZnJhZ19zZW0pO1xcbiAyMjU6XFx0XFx0aXNfZGVhZCA9IGZyYWctXFx1MDAzZWZyYWdfZGVhZDtcXG4gMjI2OlxcdFxcdHVwX3JlYWQoXFx1MDAyNmZyYWctXFx1MDAzZWZyYWdfc2VtKTtcXG4gMjI3OlxcdFxcbiAyMjg6XFx0XFx0aWYgKGlzX2RlYWQgfHwgSVNfREVBRERJUihkaXIpIHx8XFxuIDIyOTpcXHRcXHQgICAgZF91bmhhc2hlZChkZW50cnktXFx1MDAzZWRfcGFyZW50KSkge1xcbiAyMzA6XFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gMjMxOlxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gMjMyOlxcdFxcdH1cXG4gMjMzOlxcdFxcbiAyMzQ6XFx0XFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9pbm9kZSB8fCBkX3VuaGFzaGVkKGRlbnRyeSkpXFxuIDIzNTpcXHRcXHRcXHRyZXQgPSAtRUVYSVNUO1xcbiAyMzY6XFx0XFx0ZWxzZVxcbiAyMzc6XFx0XFx0XFx0cmV0ID0gaW5vZGVfcGVybWlzc2lvbihcXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLFxcbiAyMzg6XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcXG4gMjM5OlxcdFxcdGlmICghcmV0KVxcbiAyNDA6XFx0XFx0XFx0cmV0ID0gdHlwZS1cXHUwMDNlY3RfaXRlbV9vcHMtXFx1MDAzZWFsbG93X2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtKTtcXG4gMjQxOlxcdFxcdGlmICghcmV0KSB7XFxuIDI0MjpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjb25maWdmc19zeW1saW5rX211dGV4KTtcXG4gMjQzOlxcdFxcdFxcdHJldCA9IGNyZWF0ZV9saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSwgZGVudHJ5KTtcXG4gMjQ0OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XFxuIDI0NTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2Vkcm9wX2xpbmspXFxuIDI0NjpcXHRcXHRcXHRcXHR0eXBlLVxcdTAwM2VjdF9pdGVtX29wcy1cXHUwMDNlZHJvcF9saW5rKHBhcmVudF9pdGVtLFxcbiAyNDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0YXJnZXRfaXRlbSk7XFxuIDI0ODpcXHRcXHR9XFxuIDI0OTpcXHRcXG4gMjUwOlxcdG91dF9wdXQ6XFxuIDI1MTpcXHRcXHRjb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pO1xcbiAyNTI6XFx0XFx0Y29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTtcXG4gMjUzOlxcdFxcdGNvbmZpZ19pdGVtX3B1dChjb250YWluaW5nX2l0ZW0pO1xcbiAyNTQ6XFx0XFx0cHV0X2ZyYWdtZW50KGZyYWcpO1xcbiAyNTU6XFx0XFx0cmV0dXJuIHJldDtcXG4gMjU2OlxcdH1cXG4gMjU3OlxcdFxcbiAyNTg6XFx0aW50IGNvbmZpZ2ZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiAyNTk6XFx0e1xcbiAyNjA6XFx0XFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2QgPSBkZW50cnktXFx1MDAzZWRfZnNkYXRhLCAqdGFyZ2V0X3NkO1xcbiAyNjE6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbTtcXG4gMjYyOlxcdFxcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlO1xcbiAyNjM6XFx0XFx0aW50IHJldDtcXG4gMjY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMjoxMDoyNS43NjAwMDM0ODZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTk0NTM2MTYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29uZmlnZnMgUGF0Y2gncyBTYWZldHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgYGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oKWAgdG8gdGhlIGNvZGUsIGJhc2ljYWxseSB0byBuYXZpZ2F0ZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgZmluZCB0aGUgYGNvbmZpZ19pdGVtYCB0aGF0IGNvbnRhaW5zIGEgZGVmYXVsdCBncm91cC4gSXQncyBhbHNvIGdyYWJiaW5nIGEgcmVmZXJlbmNlIHRvIGBzZC1cdTAwM2VzX2ZyYWdgIHVzaW5nIGBnZXRfZnJhZ21lbnQoKWAuIFRoZSBjb2RlIHRoZW4gcGlucyBgY29udGFpbmluZ19pdGVtYCBpZiBhIHNwZWNpZmljIGZsYWcgaXMgc2V0IChgQ09ORklHRlNfVVNFVF9ERUZBVUxUYCkgdG8gYXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gQWZ0ZXIgZ2V0dGluZyB0aGUgaW5vZGUgbG9jayBhZ2FpbiwgaXQgdGhlbiBjaGVja3MgZm9yIGEgZmV3IFwiZGVhZFwiIHN0YXRlczogYGZyYWctXHUwMDNlZnJhZ19kZWFkYCwgYElTX0RFQURESVIoZGlyKWAsIGFuZCBgZF91bmhhc2hlZChkZW50cnktXHUwMDNlZF9wYXJlbnQpYC4gRmluYWxseSwgaXQgcmVsZWFzZXMgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIGl0ZW1zIGl0IGdvdCwgaW5jbHVkaW5nIHRoZSBmcmFnbWVudC5cblxuTm93LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgcmVsZXZhbnQgaGVyZS4gTGV0J3MgYXBwbHkgdGhlIEtNU0FOIGNyaXRlcmlhLiBEb2VzIGl0IGludHJvZHVjZSBvciBtb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2U/IE5vLCBub3QgdGhhdCBJIGNhbiBzZWUuIERvZXMgaXQgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGZvciBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmc/IE5vLCB0aGUgdmFyaWFibGVzIGFyZSBhbGwgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgYGlzX2RlYWRgIGNoZWNrIGNvbWVzIGZyb20gYW4gZXhpc3RpbmcgYm9vbGVhbiBmaWVsZCBpbnNpZGUgYGZyYWdgLiBBcmUgdGhlcmUgYW55IG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHdpdGhvdXQgcHJvcGVyIGluaXRpYWxpemF0aW9uPyBOb3BlLCBubyBuZXcgYWxsb2NhdGlvbnMuIERvZXMgaXQgY2hhbmdlIGFueSBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGJ1Z3MgYWRkcmVzc2VkIGFyZSBjbGVhcmx5IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgYW5kIHJlZmVyZW5jZSBsaWZldGltZSBpc3N1ZXMgZHVyaW5nIHN5bWxpbmsgY3JlYXRpb24gaW4gY29uZmlnZnMuIEknbSBzZWVpbmcgdGhhdCBLTVNBTiBpc24ndCB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlc2UgaXNzdWVzLiBLQVNBTiBpcyBiZXR0ZXIuXG5cblRoZSBpc3N1ZXMgdGhpcyBwYXRjaCB0YWNrbGVzIGFyZSBjbGVhcmx5IHJlbGF0ZWQgdG8gY29uY3VycmVuY3ksIHVzZS1hZnRlci1mcmVlLCBhbmQgcmVmZXJlbmNlIGxpZmV0aW1lcyBkdXJpbmcgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgc3ltbGlua3MuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSBkcm9wcGluZyBvciBmcmVlaW5nIGEgcGFyZW50IGl0ZW0gd2hpbGUgdGhlIGlub2RlIGxvY2sgd2FzIGJlaW5nIHVubG9ja2VkIHRvIHJlc29sdmUgdGhlIHN5bWxpbmsgdGFyZ2V0LiBUaGlzIHBhdGNoIHBpbnMgdGhlIHBhcmVudCwgYW5kIHRoZW4gZG9lcyBtb3JlIGNoZWNrcy4gTWVtb3J5IGxpZmVjeWNsZSBhbmQgdXNlLWFmdGVyLWZyZWUgcHJvYmxlbXMgYXJlIGVhc2lseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHRvb2xzIGxpa2UgTE9DS0RFUC5cblxuS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBkZWFscyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBzdHJ1Y3R1cmUgcGFkZGluZyBsZWFrcywgYW5kIGFsdGVyZWQgZGF0YSBsZW5ndGgvY29weSBsb2dpYy4gV2UgZG9uJ3QgaGF2ZSB0aG9zZSBpc3N1ZXMgaGVyZS4gQWxsIHZhcmlhYmxlcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBJJ20gY29uZmlkZW50IGluIHRoYXQgYXNzZXNzbWVudCwgYW5kIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NTYsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6MTA6MzEuNzA1MzY3MzI3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBhbmQgcmVmZXJlbmNlIGxpZmVjeWNsZSBpc3N1ZSBpbiBjb25maWdmc19zeW1saW5rKCkuIFNwZWNpZmljYWxseSwgaXQgcGlucyB0aGUgY29udGFpbmluZyBjb25maWdfaXRlbSBhbmQgY29uZmlnZnNfZnJhZ21lbnQgd2hpbGUgdGVtcG9yYXJpbHkgZHJvcHBpbmcgZGlyZWN0b3J5IGlub2RlIGxvY2tzIHRvIHJlc29sdmUgdGhlIHN5bWxpbmsgdGFyZ2V0LCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIGludmFsaWQgb3BlcmF0aW9ucyBvbiB1bmxpbmtlZC9kZWFkIGRlZmF1bHQgZ3JvdXBzLlxcblxcbi0gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgKGUuZy4gTE9DS0RFUCwgcmVmY291bnQgY2hlY2tpbmcpIGFyZSBmdWxseSBlcXVpcHBlZCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBVQUYsIGRvdWJsZS1wdXQsIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaC5cXG4tIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGJlY2F1c2UgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChlLmcuIGBjb250YWluaW5nX2l0ZW1gLCBgaXNfZGVhZGApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGFuZCByZWZlcmVuY2UgbGlmZWN5Y2xlIGlzc3VlIGluIGNvbmZpZ2ZzX3N5bWxpbmsoKS4gU3BlY2lmaWNhbGx5LCBpdCBwaW5zIHRoZSBjb250YWluaW5nIGNvbmZpZ19pdGVtIGFuZCBjb25maWdmc19mcmFnbWVudCB3aGlsZSB0ZW1wb3JhcmlseSBkcm9wcGluZyBkaXJlY3RvcnkgaW5vZGUgbG9ja3MgdG8gcmVzb2x2ZSB0aGUgc3ltbGluayB0YXJnZXQsIHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgaW52YWxpZCBvcGVyYXRpb25zIG9uIHVubGlua2VkL2RlYWQgZGVmYXVsdCBncm91cHMuXFxuXFxuLSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyAoZS5nLiBMT0NLREVQLCByZWZjb3VudCBjaGVja2luZykgYXJlIGZ1bGx5IGVxdWlwcGVkIHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIFVBRiwgZG91YmxlLXB1dCwgb3IgbG9ja2luZyBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHBhdGNoLlxcbi0gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgYmVjYXVzZSB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBoYW5kbGluZywgc3RydWN0dXJlIHBhZGRpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGUuZy4gYGNvbnRhaW5pbmdfaXRlbWAsIGBpc19kZWFkYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowspdw5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 12:08:29 +0000 UTC FinishedAt: 2026-09-04 12:10:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS" ], "series_id": "95061a53-d9bf-47ae-b159-c79951d9f9b0" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "configfs_symlink" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGFuZCByZWZlcmVuY2UgbGlmZWN5Y2xlIGlzc3VlIGluIGNvbmZpZ2ZzX3N5bWxpbmsoKS4gU3BlY2lmaWNhbGx5LCBpdCBwaW5zIHRoZSBjb250YWluaW5nIGNvbmZpZ19pdGVtIGFuZCBjb25maWdmc19mcmFnbWVudCB3aGlsZSB0ZW1wb3JhcmlseSBkcm9wcGluZyBkaXJlY3RvcnkgaW5vZGUgbG9ja3MgdG8gcmVzb2x2ZSB0aGUgc3ltbGluayB0YXJnZXQsIHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgaW52YWxpZCBvcGVyYXRpb25zIG9uIHVubGlua2VkL2RlYWQgZGVmYXVsdCBncm91cHMuXG5cbi0gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgKGUuZy4gTE9DS0RFUCwgcmVmY291bnQgY2hlY2tpbmcpIGFyZSBmdWxseSBlcXVpcHBlZCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBVQUYsIGRvdWJsZS1wdXQsIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaC5cbi0gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgYmVjYXVzZSB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBoYW5kbGluZywgc3RydWN0dXJlIHBhZGRpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGUuZy4gYGNvbnRhaW5pbmdfaXRlbWAsIGBpc19kZWFkYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzX3N5bWxpbmsgdG8gcGluIHRoZSBjb250YWluaW5nIGl0ZW0gb2YgZGVmYXVsdCBncm91cHMgYW5kIGFkZHMgbGl2ZWxpbmVzcyBjaGVja3MgYWZ0ZXIgcmUtYWNxdWlyaW5nIHRoZSBkaXJlY3RvcnkgaW5vZGUgbG9jayB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3ltbGluayBzeXNjYWxscyBvbiBjb25maWdmcyBtb3VudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6MDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZGE3Nzc1NmNlYTc0NGMxOTQ0ZWExMzM0NTAwYjBjYzE3MjY5NzAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxMjowOTo0MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9zeW1saW5rLmMgYi9mcy9jb25maWdmcy9zeW1saW5rLmNcbmluZGV4IDMxZWIyOGIyNzMwOTEuLjc1MDgzMjUxYmUyMmQgMTAwNjQ0XG4tLS0gYS9mcy9jb25maWdmcy9zeW1saW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuQEAgLTEzMSwxNSAmIzQzOzEzMSwzMyBAQCBzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZW50cnkgKmNvbnRhaW5pbmdfZGVudHJ5ID0gZGVudHJ5O1xuJiM0MztcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoIUlTX1JPT1QoY29udGFpbmluZ19kZW50cnkpKSB7XG4mIzQzO1x0XHRzZCA9IGNvbnRhaW5pbmdfZGVudHJ5LVx1MDAzZWRfZnNkYXRhO1xuJiM0MztcdFx0aWYgKCFzZCB8fCAhKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjb250YWluaW5nX2RlbnRyeSA9IGNvbnRhaW5pbmdfZGVudHJ5LVx1MDAzZWRfcGFyZW50O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoSVNfUk9PVChjb250YWluaW5nX2RlbnRyeSkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGNvbnRhaW5pbmdfZGVudHJ5KTtcbiYjNDM7fVxuIFxuIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXG4ge1xuIFx0aW50IHJldDtcbiBcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xuJiM0MztcdHN0cnVjdCBjb25maWdmc19mcmFnbWVudCAqZnJhZztcbiBcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbnRhaW5pbmdfaXRlbSA9IE5VTEw7XG4gXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcbiYjNDM7XHRib29sIGlzX2RlYWQ7XG4gXG4gXHRzZCA9IGRlbnRyeS1cdTAwM2VkX3BhcmVudC1cdTAwM2VkX2ZzZGF0YTtcbiBcdC8qXG5AQCAtMTQ5LDYgJiM0MzsxNjcsMTAgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKCFjb25maWdmc19kaXJlbnRfaXNfcmVhZHkoc2QpKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbiYjNDM7XHRmcmFnID0gZ2V0X2ZyYWdtZW50KHNkLVx1MDAzZXNfZnJhZyk7XG4mIzQzO1x0aWYgKCFmcmFnKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuIFx0cGFyZW50X2l0ZW0gPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbiBcdHR5cGUgPSBwYXJlbnRfaXRlbS1cdTAwM2VjaV90eXBlO1xuIFxuQEAgLTE1Nyw2ICYjNDM7MTc5LDE4IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdCAgICAhdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2VhbGxvd19saW5rKVxuIFx0XHRnb3RvIG91dF9wdXQ7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQaW4gdGhlIGNvbnRhaW5pbmcgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW5cbiYjNDM7XHQgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc2QtXHUwMDNlc190eXBlIFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpIHtcbiYjNDM7XHRcdGNvbnRhaW5pbmdfaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbiYjNDM7XHRcdGlmICghY29udGFpbmluZ19pdGVtKSB7XG4mIzQzO1x0XHRcdHJldCA9IC1FTk9FTlQ7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxuIFx0ICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWRcbkBAIC0xODcsNiAmIzQzOzIyMSwxNiBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF9wdXQ7XG4gXG4mIzQzO1x0ZG93bl9yZWFkKFx1MDAyNmZyYWctXHUwMDNlZnJhZ19zZW0pO1xuJiM0MztcdGlzX2RlYWQgPSBmcmFnLVx1MDAzZWZyYWdfZGVhZDtcbiYjNDM7XHR1cF9yZWFkKFx1MDAyNmZyYWctXHUwMDNlZnJhZ19zZW0pO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfZGVhZCB8fCBJU19ERUFERElSKGRpcikgfHxcbiYjNDM7XHQgICAgZF91bmhhc2hlZChkZW50cnktXHUwMDNlZF9wYXJlbnQpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PRU5UO1xuJiM0MztcdFx0Z290byBvdXRfcHV0O1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfaW5vZGUgfHwgZF91bmhhc2hlZChkZW50cnkpKVxuIFx0XHRyZXQgPSAtRUVYSVNUO1xuIFx0ZWxzZVxuQEAgLTIwMywxMCAmIzQzOzI0NywxMSBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHRcdFx0ICAgICB0YXJnZXRfaXRlbSk7XG4gXHR9XG4gXG4tXHRjb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pO1xuLVxuIG91dF9wdXQ6XG4mIzQzO1x0Y29uZmlnX2l0ZW1fcHV0KHRhcmdldF9pdGVtKTtcbiBcdGNvbmZpZ19pdGVtX3B1dChwYXJlbnRfaXRlbSk7XG4mIzQzO1x0Y29uZmlnX2l0ZW1fcHV0KGNvbnRhaW5pbmdfaXRlbSk7XG4mIzQzO1x0cHV0X2ZyYWdtZW50KGZyYWcpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb25maWdmc19zeW1saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzX3N5bWxpbmsgdG8gcGluIHRoZSBjb250YWluaW5nIGl0ZW0gb2YgZGVmYXVsdCBncm91cHMgYW5kIGFkZHMgbGl2ZWxpbmVzcyBjaGVja3MgYWZ0ZXIgcmUtYWNxdWlyaW5nIHRoZSBkaXJlY3RvcnkgaW5vZGUgbG9jayB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3ltbGluayBzeXNjYWxscyBvbiBjb25maWdmcyBtb3VudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZGE3Nzc1NmNlYTc0NGMxOTQ0ZWExMzM0NTAwYjBjYzE3MjY5NzAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxMjowOTo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYwppbmRleCAzMWViMjhiMjczMDkxLi43NTA4MzI1MWJlMjJkIDEwMDY0NAotLS0gYS9mcy9jb25maWdmcy9zeW1saW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvY29uZmlnZnMvc3ltbGluay5jCkBAIC0xMzEsMTUgJiM0MzsxMzEsMzMgQEAgc3RhdGljIGludCBnZXRfdGFyZ2V0KGNvbnN0IGNoYXIgKnN5bW5hbWUsIHN0cnVjdCBjb25maWdfaXRlbSAqKnRhcmdldCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KQomIzQzO3sKJiM0MzsJc3RydWN0IGRlbnRyeSAqY29udGFpbmluZ19kZW50cnkgPSBkZW50cnk7CiYjNDM7CXN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkOwomIzQzOwomIzQzOwl3aGlsZSAoIUlTX1JPT1QoY29udGFpbmluZ19kZW50cnkpKSB7CiYjNDM7CQlzZCA9IGNvbnRhaW5pbmdfZGVudHJ5LSZndDtkX2ZzZGF0YTsKJiM0MzsJCWlmICghc2QgfHwgIShzZC0mZ3Q7c190eXBlICZhbXA7IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljb250YWluaW5nX2RlbnRyeSA9IGNvbnRhaW5pbmdfZGVudHJ5LSZndDtkX3BhcmVudDsKJiM0MzsJfQomIzQzOwlpZiAoSVNfUk9PVChjb250YWluaW5nX2RlbnRyeSkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJcmV0dXJuIGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShjb250YWluaW5nX2RlbnRyeSk7CiYjNDM7fQogCiBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKQogewogCWludCByZXQ7CiAJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7CiYjNDM7CXN0cnVjdCBjb25maWdmc19mcmFnbWVudCAqZnJhZzsKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtOwogCXN0cnVjdCBjb25maWdfaXRlbSAqdGFyZ2V0X2l0ZW0gPSBOVUxMOwomIzQzOwlzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbnRhaW5pbmdfaXRlbSA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7CiYjNDM7CWJvb2wgaXNfZGVhZDsKIAogCXNkID0gZGVudHJ5LSZndDtkX3BhcmVudC0mZ3Q7ZF9mc2RhdGE7CiAJLyoKQEAgLTE0OSw2ICYjNDM7MTY3LDEwIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlpZiAoIWNvbmZpZ2ZzX2RpcmVudF9pc19yZWFkeShzZCkpCiAJCXJldHVybiAtRU5PRU5UOwogCiYjNDM7CWZyYWcgPSBnZXRfZnJhZ21lbnQoc2QtJmd0O3NfZnJhZyk7CiYjNDM7CWlmICghZnJhZykKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwogCXBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS0mZ3Q7ZF9wYXJlbnQpOwogCXR5cGUgPSBwYXJlbnRfaXRlbS0mZ3Q7Y2lfdHlwZTsKIApAQCAtMTU3LDYgJiM0MzsxNzksMTggQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCSAgICAhdHlwZS0mZ3Q7Y3RfaXRlbV9vcHMtJmd0O2FsbG93X2xpbmspCiAJCWdvdG8gb3V0X3B1dDsKIAomIzQzOwkvKgomIzQzOwkgKiBQaW4gdGhlIGNvbnRhaW5pbmcgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW4KJiM0MzsJICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suCiYjNDM7CSAqLwomIzQzOwlpZiAoc2QtJmd0O3NfdHlwZSAmYW1wOyBDT05GSUdGU19VU0VUX0RFRkFVTFQpIHsKJiM0MzsJCWNvbnRhaW5pbmdfaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oZGVudHJ5LSZndDtkX3BhcmVudCk7CiYjNDM7CQlpZiAoIWNvbnRhaW5pbmdfaXRlbSkgewomIzQzOwkJCXJldCA9IC1FTk9FTlQ7CiYjNDM7CQkJZ290byBvdXRfcHV0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2YKIAkgKiBsaW5rKDIpIGFuZCBzeW1saW5rKDIpIC0gdGhleSB3YW50ZWQgdGhlIHRhcmdldCByZXNvbHZlZApAQCAtMTg3LDYgJiM0MzsyMjEsMTYgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3B1dDsKIAomIzQzOwlkb3duX3JlYWQoJmFtcDtmcmFnLSZndDtmcmFnX3NlbSk7CiYjNDM7CWlzX2RlYWQgPSBmcmFnLSZndDtmcmFnX2RlYWQ7CiYjNDM7CXVwX3JlYWQoJmFtcDtmcmFnLSZndDtmcmFnX3NlbSk7CiYjNDM7CiYjNDM7CWlmIChpc19kZWFkIHx8IElTX0RFQURESVIoZGlyKSB8fAomIzQzOwkgICAgZF91bmhhc2hlZChkZW50cnktJmd0O2RfcGFyZW50KSkgewomIzQzOwkJcmV0ID0gLUVOT0VOVDsKJiM0MzsJCWdvdG8gb3V0X3B1dDsKJiM0MzsJfQomIzQzOwogCWlmIChkZW50cnktJmd0O2RfaW5vZGUgfHwgZF91bmhhc2hlZChkZW50cnkpKQogCQlyZXQgPSAtRUVYSVNUOwogCWVsc2UKQEAgLTIwMywxMCAmIzQzOzI0NywxMSBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCQkJCQkgICAgIHRhcmdldF9pdGVtKTsKIAl9CiAKLQljb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pOwotCiBvdXRfcHV0OgomIzQzOwljb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pOwogCWNvbmZpZ19pdGVtX3B1dChwYXJlbnRfaXRlbSk7CiYjNDM7CWNvbmZpZ19pdGVtX3B1dChjb250YWluaW5nX2l0ZW0pOwomIzQzOwlwdXRfZnJhZ21lbnQoZnJhZyk7CiAJcmV0dXJuIHJldDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODA2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBJIGFuYWx5emUgdGhpcyBwYXRjaDoKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgZXZlbiBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJJiMzOTttIGxvb2tpbmcgYXQgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AuIFRoYXQmIzM5O3MgYSBmaWxlIEkmIzM5O20gZmFtaWxpYXIgd2l0aCwgYW5kIGl0JiMzOTtzIG1vZGlmeWluZyBhIGZldyBrZXkgZnVuY3Rpb25zOiBgY29uZmlnZnNfc3ltbGlua2AgYW5kIGFkZGluZyBhIG5ldyBzdGF0aWMgZnVuY3Rpb24sIGBjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGFueXRoaW5nIGRlYWxpbmcgd2l0aCBzeW1saW5rcyB3aXRoaW4gYSBmaWxlc3lzdGVtIGNvbnRleHQgaXMgKmFsd2F5cyogd29ydGggYSBjbG9zZXIgbG9vayBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUuIFRoZXJlJiMzOTtzIGFsbW9zdCBhbHdheXMgc3VidGxlIGVkZ2UgY2FzZXMgYW5kIHBvdGVudGlhbCBmb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiBwYXRoIHJlc29sdXRpb24gYW5kIGFjY2VzcyBjb250cm9sLgoKTm93LCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1enppbmcgc3RyYXRlZ3ksIEkgbmVlZCB0byBrbm93IHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgS2NvbmZpZ2AgZm9yIGBjb25maWdmc2Agb3B0aW9ucyBhbmQgYW55IGRlcGVuZGVuY2llcy4gRmFpbGluZyB0aGF0LCBhIHF1aWNrIGBncmVwcGVyYCBzZXNzaW9uIHNob3VsZCByZXZlYWwgd2hhdCYjMzk7cyBlbmFibGVkIGFuZCBkaXNhYmxlZC4gT25jZSBJIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24sIEkgY2FuIG5hcnJvdyBkb3duIG15IGZvY3VzLiBUaGVuLCB0aGUgcmVhbCBmdW4gYmVnaW5zOiBkZXRlcm1pbmluZyB3aGF0IGZvY3VzIHN5bWJvbHMgYXJlIG1vc3QgbGlrZWx5IHRvIHRyaWdnZXIgaW50ZXJlc3RpbmcgY29kZSBwYXRocyBpbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBJJiMzOTtsbCBiZSB0aGlua2luZyBhYm91dCBob3cgYGNvbmZpZ2ZzX3N5bWxpbmtgIGludGVyYWN0cyB3aXRoIGBjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtYCwgY29uc2lkZXJpbmcgcG9zc2libGUgaW5wdXQgdmVjdG9ycyBhbmQgYm91bmRhcnkgY29uZGl0aW9ucy4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jb25maWdmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9jb25maWdmcy9LY29uZmlnOjI6Y29uZmlnIENPTkZJR0ZTX0ZTXG5mcy9jb25maWdmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtVc2Vyc3BhY2UtZHJpdmVuIGNvbmZpZ3VyYXRpb24gZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2NvbmZpZ2ZzL01ha2VmaWxlLTUtXG5mcy9jb25maWdmcy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19DT05GSUdGU19GUylcdCYjNDM7PSBjb25maWdmcy5vXG5mcy9jb25maWdmcy9NYWtlZmlsZS03LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZnMvY29uZmlnZnMvc3ltbGluay5jYCDigJMgVGltZSB0byBSZS1leGFtaW5lIHRoZSBTeW1ib2xzKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzIGlzc3VlLCBsZXQmIzM5O3MgZXN0YWJsaXNoIGEgY2xlYXIgcGljdHVyZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byBgZnMvY29uZmlnZnMvc3ltbGluay5jYCBhbmQgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHN5bWJvbHMgYXJlIG5vdyBwcmVzZW50IGFuZCBob3cgdGhleSBhcmUgdXRpbGl6ZWQsIGVzcGVjaWFsbHkgdGhvc2Ugc3Vycm91bmRpbmcgYW55IHJlY2VudCBtb2RpZmljYXRpb25zLiBJJiMzOTttIHRoaW5raW5nIGEgcXVpY2sgc2NhbiBvZiB0aGUgc3ltYm9sIGRlZmluaXRpb25zIGFuZCB0aGUgY2FsbCBzaXRlcyB3aXRoaW4gdGhhdCBmaWxlIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gdG8gYW5hbHl6ZSB0aGUgcG90ZW50aWFsIHJhbWlmaWNhdGlvbnMgb2YgdGhlIGNoYW5nZXMsIGlkZW50aWZ5IGRlcGVuZGVuY2llcywgYW5kIHBpbnBvaW50IHRoZSBsaWtlbHkgYXJlYXMgd2hlcmUgdGhlIGlzc3VlIGlzIGVtZXJnaW5nLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEyNTpcdFx0XHRyZXR1cm4gcmV0O1xuIDEyNjpcdFx0aWYgKHBhdGguZGVudHJ5LVx1MDAzZWRfc2IgIT0gc2IpXG4gMTI3Olx0XHRcdHJldHVybiAtRVBFUk07XG4gMTI4Olx0XHQqdGFyZ2V0ID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHBhdGguZGVudHJ5KTtcbiAxMjk6XHRcdGlmICghKnRhcmdldClcbiAxMzA6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gMTMxOlx0XHRyZXR1cm4gMDtcbiAxMzI6XHR9XG4gMTMzOlx0XG4gMTM0Olx0c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gMTM1Olx0e1xuIDEzNjpcdFx0c3RydWN0IGRlbnRyeSAqY29udGFpbmluZ19kZW50cnkgPSBkZW50cnk7XG4gMTM3Olx0XHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiAxMzg6XHRcbiAxMzk6XHRcdHdoaWxlICghSVNfUk9PVChjb250YWluaW5nX2RlbnRyeSkpIHtcbiAxNDA6XHRcdFx0c2QgPSBjb250YWluaW5nX2RlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbiAxNDE6XHRcdFx0aWYgKCFzZCB8fCAhKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSlcbiAxNDI6XHRcdFx0XHRicmVhaztcbiAxNDM6XHRcdFx0Y29udGFpbmluZ19kZW50cnkgPSBjb250YWluaW5nX2RlbnRyeS1cdTAwM2VkX3BhcmVudDtcbiAxNDQ6XHRcdH1cbiAxNDU6XHRcdGlmIChJU19ST09UKGNvbnRhaW5pbmdfZGVudHJ5KSlcbiAxNDY6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMTQ3Olx0XHRyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGNvbnRhaW5pbmdfZGVudHJ5KTtcbiAxNDg6XHR9XG4gMTQ5Olx0XG4gMTUwOlx0aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIDE1MTpcdFx0XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqc3ltbmFtZSlcbiAxNTI6XHR7XG4gMTUzOlx0XHRpbnQgcmV0O1xuIDE1NDpcdFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4gMTU1Olx0XHRzdHJ1Y3QgY29uZmlnZnNfZnJhZ21lbnQgKmZyYWc7XG4gMTU2Olx0XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xuIDE1NzpcdFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7XG4gMTU4Olx0XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbnRhaW5pbmdfaXRlbSA9IE5VTEw7XG4gMTU5Olx0XHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcbiAxNjA6XHRcdGJvb2wgaXNfZGVhZDtcbiAxNjE6XHRcbiAxNjI6XHRcdHNkID0gZGVudHJ5LVx1MDAzZWRfcGFyZW50LVx1MDAzZWRfZnNkYXRhO1xuIDE2MzpcdFx0LypcbiAxNjQ6XHRcdCAqIEZha2UgaW52aXNpYmlsaXR5IGlmIGRpciBiZWxvbmdzIHRvIGEgZ3JvdXAvZGVmYXVsdCBncm91cHMgaGllcmFyY2h5XG4gMTY1Olx0XHQgKiBiZWluZyBhdHRhY2hlZFxuIDE2NjpcdFx0ICovXG4gMTY3Olx0XHRpZiAoIWNvbmZpZ2ZzX2RpcmVudF9pc19yZWFkeShzZCkpXG4gMTY4Olx0XHRcdHJldHVybiAtRU5PRU5UO1xuIDE2OTpcdFxuIDE3MDpcdFx0ZnJhZyA9IGdldF9mcmFnbWVudChzZC1cdTAwM2VzX2ZyYWcpO1xuIDE3MTpcdFx0aWYgKCFmcmFnKVxuIDE3MjpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiAxNzM6XHRcbiAxNzQ6XHRcdHBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4gMTc1Olx0XHR0eXBlID0gcGFyZW50X2l0ZW0tXHUwMDNlY2lfdHlwZTtcbiAxNzY6XHRcbiAxNzc6XHRcdHJldCA9IC1FUEVSTTtcbiAxNzg6XHRcdGlmICghdHlwZSB8fCAhdHlwZS1cdTAwM2VjdF9pdGVtX29wcyB8fFxuIDE3OTpcdFx0ICAgICF0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzLVx1MDAzZWFsbG93X2xpbmspXG4gMTgwOlx0XHRcdGdvdG8gb3V0X3B1dDtcbiAxODE6XHRcbiAxODI6XHRcdC8qXG4gMTgzOlx0XHQgKiBQaW4gdGhlIGNvbnRhaW5pbmcgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW5cbiAxODQ6XHRcdCAqIGVtYmVkZGVkIGRlZmF1bHQgZ3JvdXApIGlzIG5vdCBmcmVlZCB3aGlsZSB3ZSBkcm9wIHRoZSBsb2NrLlxuIDE4NTpcdFx0ICovXG4gMTg2Olx0XHRpZiAoc2QtXHUwMDNlc190eXBlIFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpIHtcbiAxODc6XHRcdFx0Y29udGFpbmluZ19pdGVtID0gY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbShkZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuIDE4ODpcdFx0XHRpZiAoIWNvbnRhaW5pbmdfaXRlbSkge1xuIDE4OTpcdFx0XHRcdHJldCA9IC1FTk9FTlQ7XG4gMTkwOlx0XHRcdFx0Z290byBvdXRfcHV0O1xuIDE5MTpcdFx0XHR9XG4gMTkyOlx0XHR9XG4gMTkzOlx0XG4gMTk0Olx0XHQvKlxuIDE5NTpcdFx0ICogVGhpcyBpcyByZWFsbHkgc2ljay4gIFdoYXQgdGhleSB3YW50ZWQgd2FzIGEgaHlicmlkIG9mXG4gMTk2Olx0XHQgKiBsaW5rKDIpIGFuZCBzeW1saW5rKDIpIC0gdGhleSB3YW50ZWQgdGhlIHRhcmdldCByZXNvbHZlZFxuIDE5NzpcdFx0ICogYXQgc3lzY2FsbCB0aW1lIChhcyBsaW5rKDIpIHdvdWxkJiMzOTt2ZSBkb25lKSwgYmUgYSBkaXJlY3RvcnlcbiAxOTg6XHRcdCAqICh3aGljaCBsaW5rKDIpIHdvdWxkJiMzOTt2ZSByZWZ1c2VkIHRvIGRvKSAqQU5EKiBiZSBhIGRlZXBcbiAxOTk6XHRcdCAqIGZ1Y2tpbmcgbWFnaWMsIG1ha2luZyB0aGUgdGFyZ2V0IGJ1c3kgZnJvbSBybWRpciBQT1YuXG4gMjAwOlx0XHQgKiBzeW1saW5rKDIpIGlzIG5vdGhpbmcgb2YgdGhhdCBzb3J0LCBhbmQgdGhlIGxvY2tpbmcgaXRcbiAyMDE6XHRcdCAqIGdldHMgbWF0Y2hlcyB0aGUgbm9ybWFsIHN5bWxpbmsoMikgc2VtYW50aWNzLiAgV2l0aG91dFxuIDIwMjpcdFx0ICogYXR0ZW1wdHMgdG8gcmVzb2x2ZSB0aGUgdGFyZ2V0ICh3aGljaCBtaWdodCB2ZXJ5IHdlbGxcbiAyMDM6XHRcdCAqIG5vdCBldmVuIGV4aXN0IHlldCkgZG9uZSBwcmlvciB0byBsb2NraW5nIHRoZSBwYXJlbnRcbiAyMDQ6XHRcdCAqIGRpcmVjdG9yeS4gIFRoaXMgcGVydmVyc2lvbiwgT1RPSCwgbmVlZHMgdG8gcmVzb2x2ZVxuIDIwNTpcdFx0ICogdGhlIHRhcmdldCwgd2hpY2ggd291bGQgbGVhZCB0byBvYnZpb3VzIGRlYWRsb2NrcyBpZlxuIDIwNjpcdFx0ICogYXR0ZW1wdGVkIHdpdGggYW55IGRpcmVjdG9yaWVzIGxvY2tlZC5cbiAyMDc6XHRcdCAqXG4gMjA4Olx0XHQgKiBVbmZvcnR1bmF0ZWx5LCB0aGF0IGdhcmJhZ2UgaXMgdXNlcmxhbmQgQUJJIGFuZCB3ZSBzaG91bGQmIzM5O3ZlXG4gMjA5Olx0XHQgKiBzYWlkIFwmIzM0O25vXCYjMzQ7IGJhY2sgaW4gMjAwNS4gIFRvbyBsYXRlIG5vdywgc28gd2UgZ2V0IHRvXG4gMjEwOlx0XHQgKiBwbGF5IHZlcnkgdWdseSBnYW1lcyB3aXRoIGxvY2tpbmcuXG4gMjExOlx0XHQgKlxuIDIxMjpcdFx0ICogVHJ5ICpBTllUSElORyogb2YgdGhhdCBzb3J0IGluIG5ldyBjb2RlLCBhbmQgeW91IHdpbGxcbiAyMTM6XHRcdCAqIHJlYWxseSByZWdyZXQgaXQuICBKdXN0IGFzayB5b3Vyc2VsZiAtIHdoYXQgY291bGQgYSBCT0ZIXG4gMjE0Olx0XHQgKiBkbyB0byBtZSBhbmQgZG8gSSB3YW50IHRvIGZpbmQgaXQgb3V0IGZpcnN0LWhhbmQ/XG4gMjE1Olx0XHQgKlxuIDIxNjpcdFx0ICogIEFWLCBhIHRob3JvdWdobHkgYW5ub3llZCBiYXN0YXJkLlxuIDIxNzpcdFx0ICovXG4gMjE4Olx0XHRpbm9kZV91bmxvY2soZGlyKTtcbiAyMTk6XHRcdHJldCA9IGdldF90YXJnZXQoc3ltbmFtZSwgXHUwMDI2dGFyZ2V0X2l0ZW0sIGRlbnRyeS1cdTAwM2VkX3NiKTtcbiAyMjA6XHRcdGlub2RlX2xvY2soZGlyKTtcbiAyMjE6XHRcdGlmIChyZXQpXG4gMjIyOlx0XHRcdGdvdG8gb3V0X3B1dDtcbiAyMjM6XHRcbiAyMjQ6XHRcdGRvd25fcmVhZChcdTAwMjZmcmFnLVx1MDAzZWZyYWdfc2VtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTUzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgY29uZmlnZnMgU3ltbGluayBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYGNvbmZpZ2ZzX3N5bWxpbmtgLCBhbiBpbm9kZSBvcGVyYXRpb24gc3BlY2lmaWMgdG8gY29uZmlnZnMuIFRoZSBxdWVzdGlvbiBpczogaXMgY29uZmlnZnMgc29tZXRoaW5nIHRoYXQmIzM5O3MgZXZlbiBhY2Nlc3NpYmxlIGluIGEgc3RhbmRhcmQgUUVNVS9zeXprYWxsZXIgc2V0dXA/IEZvcnR1bmF0ZWx5LCB0aGUgYW5zd2VyIGlzIHllczsgc3l6a2FsbGVyIGFjdGl2ZWx5IGZ1enplcyBjb25maWdmcy4gSXQmIzM5O3MgbWVzc2luZyBhcm91bmQgd2l0aCBta2Rpciwgcm1kaXIsIHN5bWxpbmtzLCBhdHRyaWJ1dGUgd3JpdGVzIOKAkyB0aGUgd2hvbGUgc2hlYmFuZyDigJMgd2l0aGluIGNvbmZpZ2ZzIG1vdW50ZWQgaW5zdGFuY2VzLCBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGNvbnNvbGUsIGFuZCB0YXJnZXQgY29yZXMuIFRoZXkgYXJlIGFsc28ganVzdCBtb3VudGluZyBjb25maWdmcyBhbmQgY3JlYXRpbmcgaXRlbXMuCgpOb3csIHNwZWNpZmljYWxseSwgdGhlc2UgY2hhbmdlcyBpbiBgZnMvY29uZmlnZnMvc3ltbGluay5jYCBtb2RpZnkgYGNvbmZpZ2ZzX3N5bWxpbmtgLiBUaGUgY3J1eCBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBwaW5uaW5nIHRoZSBjb250YWluaW5nIGl0ZW0gd2hlbiBgc2QtJmd0O3NfdHlwZSAmYW1wOyBDT05GSUdGU19VU0VUX0RFRkFVTFRgIGlzIHRydWUuIFRoZW4gdGhlcmUmIzM5O3MgdGhlIGFkZGl0aW9uIG9mIGNoZWNrcyBmb3IgYGZyYWctJmd0O2ZyYWdfZGVhZGAsIGBJU19ERUFERElSKGRpcilgLCBhbmQgYGRfdW5oYXNoZWQoZGVudHJ5LSZndDtkX3BhcmVudClgIGFmdGVyIHJlLWFjcXVpcmluZyB0aGUgaW5vZGUgbG9jay4gVGhpcyBpcyBpbXBvcnRhbnQ7IGl0IHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgcmFjZSBjb25kaXRpb25zIHdpdGhpbiBgY29uZmlnZnNfc3ltbGlua2AsIHNwZWNpZmljYWxseSB0aG9zZSBhcmlzaW5nIHdoZW4gc3ltbGlua3MgYXJlIGNyZWF0ZWQgaW4gZGVmYXVsdCBncm91cHMgb3IgY29uY3VycmVudGx5IHdpdGggZGlyZWN0b3J5IHJlbW92YWwvdW5saW5raW5nLiBJdCYjMzk7cyBhYm91dCBlbnN1cmluZyBkYXRhIGNvbnNpc3RlbmN5IGluIHRob3NlIGVkZ2UgY2FzZXMuCgpUbyB1bmRlcnN0YW5kIHRoZSBzY29wZSwgbGV0JiMzOTtzIGNoZWNrIHRoZSBuYXR1cmUgb2YgYGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW1gLiBJdCBsb29rcyBsaWtlIGl0IGlzIGBzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlgLCBhbmQgdGhlIGBjb25maWdmc19zeW1saW5rYCBpcyBub3Qgc3RhdGljLCB3aGljaCBtZWFucyBpdCBjYW4gYmUgY2FsbGVkIGZyb20gb3V0c2lkZSBvZiB0aGlzIGZpbGUuCgpJIHNob3VsZCBwcm9iYWJseSBhbHNvIHRha2UgYSBxdWljayBsb29rIGF0IGBmcy9jb25maWdmcy9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBDT05GSUdGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlLWRyaXZlbiBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW1cJiMzNDtcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgY29uZmlnZnMgaXMgYSBSQU0tYmFzZWQgZmlsZXN5c3RlbSB0aGF0IHByb3ZpZGVzIHRoZSBjb252ZXJzZVxuICAgNjpcdFx0ICBvZiBzeXNmcyYjMzk7cyBmdW5jdGlvbmFsaXR5LiBXaGVyZSBzeXNmcyBpcyBhIGZpbGVzeXN0ZW0tYmFzZWRcbiAgIDc6XHRcdCAgdmlldyBvZiBrZXJuZWwgb2JqZWN0cywgY29uZmlnZnMgaXMgYSBmaWxlc3lzdGVtLWJhc2VkIG1hbmFnZXJcbiAgIDg6XHRcdCAgb2Yga2VybmVsIG9iamVjdHMsIG9yIGNvbmZpZ19pdGVtcy5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgQm90aCBzeXNmcyBhbmQgY29uZmlnZnMgY2FuIGFuZCBzaG91bGQgZXhpc3QgdG9nZXRoZXIgb24gdGhlXG4gIDExOlx0XHQgIHNhbWUgc3lzdGVtLiBPbmUgaXMgbm90IGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBvdGhlci5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDU0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIENvbmZpZ0ZTIFN5bWxpbmsgQ3JlYXRpb24qKgoKT2theSwgc28gYENPTkZJR0ZTX0ZTYCBpcyBuaWNlIGJlY2F1c2UgaXQmIzM5O3Mgc3RhbmRhbG9uZSwgbm8gZGVwZW5kZW5jaWVzIHRvIHdvcnJ5IGFib3V0IOKAkyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgaXMgYGNvbmZpZ2ZzX3N5bWxpbmtgIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmc/IEFic29sdXRlbHkhIEl0IGhhbmRsZXMgc3ltbGluayBjcmVhdGlvbiwgYW5kIHRoYXQgdG91Y2hlcyBjb3JlIGZpbGVzeXN0ZW0gY29kZSB3aXRoaW4gQ29uZmlnRlMuIFNwZWNpZmljYWxseSwgaXQgaW52b2x2ZXMgbG9ja2luZywgcGlubmluZywgYW5kIGxpdmVsaW5lc3MgY2hlY2tzIGR1cmluZyB0aGUgc3ltbGluayBjcmVhdGlvbiBwcm9jZXNzLiBBbmQsIGltcG9ydGFudGx5LCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgYHN5bWxpbmtgIHN5c2NhbGwsIGFzIGxvbmcgYXMgYSBDb25maWdGUyBtb3VudCBpcyBwcmVzZW50LiBUaGF0JiMzOTtzIGEgc29saWQgYXR0YWNrIHZlY3Rvci4KCkxldCYjMzk7cyBuYWlsIGRvd24gb3VyIGZvY3VzLiBPdXIgcHJpbWFyeSBzeW1ib2wgaXMgYGNvbmZpZ2ZzX3N5bWxpbmtgLiBOb3csIGFib3V0IHRoYXQgaGVscGVyIGZ1bmN0aW9uLCBgY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbWAg4oCTIGlzIGl0IHN0YXRpYz8gWXVwLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlgLCBhbmQgbGl2ZXMgcmlnaHQgdGhlcmUgaW4gYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AuIElubGluaW5nIG1pZ2h0IGhhcHBlbiwgb3IgaXQgbWlnaHQgaGF2ZSBhIHNlcGFyYXRlIHN5bWJvbCBpZiB0aGUgY29tcGlsZXIgZGVjaWRlcyBub3QgdG8gaW5saW5lIGl0LCBidXQgYGNvbmZpZ2ZzX3N5bWxpbmtgIGl0c2VsZiBpcyBkZWZpbml0ZWx5IGEgbm9uLXN0YXRpYyBzeW1ib2wsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LiBNaWdodCBiZSBnb29kIHRvIGp1c3QgaGF2ZSBhIGxvb2sgYXQgdGhlIG90aGVyIHN5bWJvbHMgaW4gYHN5bWxpbmsuY2Agd2hpbGUgd2UmIzM5O3JlIGF0IGl0LCBqdXN0IHRvIHNlZSB3aGF0IGVsc2UgaXMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aMC05X10uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jb25maWdmcy9zeW1saW5rLmMtMTktLyogUHJvdGVjdHMgYXR0YWNobWVudHMgb2YgbmV3IHN5bWxpbmtzICovXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MjA6REVGSU5FX01VVEVYKGNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xuZnMvY29uZmlnZnMvc3ltbGluay5jLTIxLVxuZnMvY29uZmlnZnMvc3ltbGluay5jOjIyOnN0YXRpYyBpbnQgaXRlbV9kZXB0aChzdHJ1Y3QgY29uZmlnX2l0ZW0gKiBpdGVtKVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTIzLXtcbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMjktXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MzA6c3RhdGljIGludCBpdGVtX3BhdGhfbGVuZ3RoKHN0cnVjdCBjb25maWdfaXRlbSAqIGl0ZW0pXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMzEte1xuLS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy00MC1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzo0MTpzdGF0aWMgdm9pZCBmaWxsX2l0ZW1fcGF0aChzdHJ1Y3QgY29uZmlnX2l0ZW0gKiBpdGVtLCBjaGFyICogYnVmZmVyLCBpbnQgbGVuZ3RoKVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTQyLXtcbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmMtNTUtXG5mcy9jb25maWdmcy9zeW1saW5rLmM6NTY6c3RhdGljIGludCBjb25maWdmc19nZXRfdGFyZ2V0X3BhdGgoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTU3LVx0XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldCwgY2hhciAqcGF0aClcbi0tXG5mcy9jb25maWdmcy9zeW1saW5rLmMtNzYtXG5mcy9jb25maWdmcy9zeW1saW5rLmM6Nzc6c3RhdGljIGludCBjcmVhdGVfbGluayhzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtLFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTc4LVx0XHQgICAgICAgc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xMTYtXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MTE3OnN0YXRpYyBpbnQgZ2V0X3RhcmdldChjb25zdCBjaGFyICpzeW1uYW1lLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKip0YXJnZXQsXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTE4LVx0XHQgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xMzMtXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MTM0OnN0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTEzNS17XG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTE0OS1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoxNTA6aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTE1MS1cdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXG4tLVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTI1Ny1cbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoyNTg6aW50IGNvbmZpZ2ZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuZnMvY29uZmlnZnMvc3ltbGluay5jLTI1OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNjUKCQkJCQkJCW91dHB1dDogMTAzCgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2Ugbm90ZXMsIHN1bW1hcml6ZWQgYXMgYSB0aG91Z2h0IHByb2Nlc3M6CgoqKlJldmlld2luZyB0aGUgQW5hbHlzaXMgb2YgYGNvbmZpZ2ZzX3N5bWxpbmtgKioKClJpZ2h0LCBzbyB0aGUgbWFpbiBmdW5jdGlvbiBvZiBpbnRlcmVzdCBpcyBgY29uZmlnZnNfc3ltbGlua2AuIExldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkgc2VlIHRoZSByZXBvcnQgaGFzIGZsYWdnZWQgaXQgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHdoaWNoIHNvdW5kcyByaWdodCBiYXNlZCBvbiBteSBrbm93bGVkZ2Ugb2YgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS4gVGhlIHJlYXNvbmluZyBwcm92aWRlZCBpcyBzdWNjaW5jdDogdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgY29uZmlnZnNfc3ltbGlua2Agd2l0aGluIGBmcy9jb25maWdmcy9zeW1saW5rLmNgIGJ5IGltcGxlbWVudGluZyByZWZlcmVuY2UgcGlubmluZyBmb3IgY29udGFpbmluZyBkZWZhdWx0IGdyb3VwcyBhbmQgYWRkaW5nIGxpdmVsaW5lc3MgY2hlY2tzIGFmdGVyIHJlLWFjcXVpcmluZyBsb2Nrcy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYXJlYSBmb3IgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMsIGVzcGVjaWFsbHkgZHVyaW5nIHN5bWxpbmsgY3JlYXRpb24gaW4gdGhlIGNvbmZpZ2ZzLiBHb29kLCBzZWVtcyBsaWtlIGEgc29saWQgZXhwbGFuYXRpb24uIEl0IGV4cGxpY2l0bHkgbWVudGlvbnMgdGhlIHVzZXItc3BhY2UgcmVhY2hhYmlsaXR5IG9mIHRoaXMgZnVuY3Rpb24gdmlhIHN5bWxpbmsgb3BlcmF0aW9ucywgd2hpY2ggaXMgY3J1Y2lhbC4KClRoZSBgRm9jdXNTeW1ib2xzYCBlbnRyeSBjb25maXJtcyBgY29uZmlnZnNfc3ltbGlua2AgaXMgaW5kZWVkIHRoZSB0YXJnZXQuIEFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIHNwZWNpZmljYWxseSBgQ09ORklHRlNfRlNgLCBjb25maXJtcyB0aGF0IGNvbmZpZ2ZzIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgcGF0Y2ggdG8gZXZlbiBiZSByZWxldmFudC4gRXhjZWxsZW50LCBpdCYjMzk7cyBhbGwgaW4gbGluZSB3aXRoIHdoYXQgSSYjMzk7ZCBleHBlY3QuIE5vdyBJIGp1c3QgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIExvb2tzIGxpa2UgYSBzb2xpZCBwaWVjZSBvZiB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb25maWdmc19zeW1saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzX3N5bWxpbmsgdG8gcGluIHRoZSBjb250YWluaW5nIGl0ZW0gb2YgZGVmYXVsdCBncm91cHMgYW5kIGFkZHMgbGl2ZWxpbmVzcyBjaGVja3MgYWZ0ZXIgcmUtYWNxdWlyaW5nIHRoZSBkaXJlY3RvcnkgaW5vZGUgbG9jayB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3ltbGluayBzeXNjYWxscyBvbiBjb25maWdmcyBtb3VudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfc3ltbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb25maWdmc19zeW1saW5rIHRvIHBpbiB0aGUgY29udGFpbmluZyBpdGVtIG9mIGRlZmF1bHQgZ3JvdXBzIGFuZCBhZGRzIGxpdmVsaW5lc3MgY2hlY2tzIGFmdGVyIHJlLWFjcXVpcmluZyB0aGUgZGlyZWN0b3J5IGlub2RlIGxvY2sgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5bWxpbmsgc3lzY2FsbHMgb24gY29uZmlnZnMgbW91bnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgYW5kIHJlZmVyZW5jZSBsaWZlY3ljbGUgaXNzdWUgaW4gY29uZmlnZnNfc3ltbGluaygpLiBTcGVjaWZpY2FsbHksIGl0IHBpbnMgdGhlIGNvbnRhaW5pbmcgY29uZmlnX2l0ZW0gYW5kIGNvbmZpZ2ZzX2ZyYWdtZW50IHdoaWxlIHRlbXBvcmFyaWx5IGRyb3BwaW5nIGRpcmVjdG9yeSBpbm9kZSBsb2NrcyB0byByZXNvbHZlIHRoZSBzeW1saW5rIHRhcmdldCwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBvciBpbnZhbGlkIG9wZXJhdGlvbnMgb24gdW5saW5rZWQvZGVhZCBkZWZhdWx0IGdyb3Vwcy5cblxuLSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyAoZS5nLiBMT0NLREVQLCByZWZjb3VudCBjaGVja2luZykgYXJlIGZ1bGx5IGVxdWlwcGVkIHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIFVBRiwgZG91YmxlLXB1dCwgb3IgbG9ja2luZyBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHBhdGNoLlxuLSBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBiZWNhdXNlIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBzdHJ1Y3R1cmUgcGFkZGluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlcyAoZS5nLiBgY29udGFpbmluZ19pdGVtYCwgYGlzX2RlYWRgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRkYTc3NzU2Y2VhNzQ0YzE5NDRlYTEzMzQ1MDBiMGNjMTcyNjk3MDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDEyOjA5OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvc3ltbGluay5jIGIvZnMvY29uZmlnZnMvc3ltbGluay5jCmluZGV4IDMxZWIyOGIyNzMwOTEuLjc1MDgzMjUxYmUyMmQgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jb25maWdmcy9zeW1saW5rLmMKQEAgLTEzMSwxNSAmIzQzOzEzMSwzMyBAQCBzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGVudHJ5ICpjb250YWluaW5nX2RlbnRyeSA9IGRlbnRyeTsKJiM0MzsJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7CiYjNDM7CiYjNDM7CXdoaWxlICghSVNfUk9PVChjb250YWluaW5nX2RlbnRyeSkpIHsKJiM0MzsJCXNkID0gY29udGFpbmluZ19kZW50cnktJmd0O2RfZnNkYXRhOwomIzQzOwkJaWYgKCFzZCB8fCAhKHNkLSZndDtzX3R5cGUgJmFtcDsgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSkKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNvbnRhaW5pbmdfZGVudHJ5ID0gY29udGFpbmluZ19kZW50cnktJmd0O2RfcGFyZW50OwomIzQzOwl9CiYjNDM7CWlmIChJU19ST09UKGNvbnRhaW5pbmdfZGVudHJ5KSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGNvbnRhaW5pbmdfZGVudHJ5KTsKJiM0Mzt9CiAKIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDsKJiM0MzsJc3RydWN0IGNvbmZpZ2ZzX2ZyYWdtZW50ICpmcmFnOwogCXN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07CiAJc3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7CiYjNDM7CXN0cnVjdCBjb25maWdfaXRlbSAqY29udGFpbmluZ19pdGVtID0gTlVMTDsKIAljb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTsKJiM0MzsJYm9vbCBpc19kZWFkOwogCiAJc2QgPSBkZW50cnktJmd0O2RfcGFyZW50LSZndDtkX2ZzZGF0YTsKIAkvKgpAQCAtMTQ5LDYgJiM0MzsxNjcsMTAgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHNkKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKJiM0MzsJZnJhZyA9IGdldF9mcmFnbWVudChzZC0mZ3Q7c19mcmFnKTsKJiM0MzsJaWYgKCFmcmFnKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiAJcGFyZW50X2l0ZW0gPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oZGVudHJ5LSZndDtkX3BhcmVudCk7CiAJdHlwZSA9IHBhcmVudF9pdGVtLSZndDtjaV90eXBlOwogCkBAIC0xNTcsNiAmIzQzOzE3OSwxOCBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJICAgICF0eXBlLSZndDtjdF9pdGVtX29wcy0mZ3Q7YWxsb3dfbGluaykKIAkJZ290byBvdXRfcHV0OwogCiYjNDM7CS8qCiYjNDM7CSAqIFBpbiB0aGUgY29udGFpbmluZyBvYmplY3Qgc28gdGhhdCB0aGUgcGFyZW50X2l0ZW0gKHdoaWNoIG1heSBiZSBhbgomIzQzOwkgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay4KJiM0MzsJICovCiYjNDM7CWlmIChzZC0mZ3Q7c190eXBlICZhbXA7IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkgewomIzQzOwkJY29udGFpbmluZ19pdGVtID0gY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbShkZW50cnktJmd0O2RfcGFyZW50KTsKJiM0MzsJCWlmICghY29udGFpbmluZ19pdGVtKSB7CiYjNDM7CQkJcmV0ID0gLUVOT0VOVDsKJiM0MzsJCQlnb3RvIG91dF9wdXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAkvKgogCSAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZgogCSAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkCkBAIC0xODcsNiAmIzQzOzIyMSwxNiBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJaWYgKHJldCkKIAkJZ290byBvdXRfcHV0OwogCiYjNDM7CWRvd25fcmVhZCgmYW1wO2ZyYWctJmd0O2ZyYWdfc2VtKTsKJiM0MzsJaXNfZGVhZCA9IGZyYWctJmd0O2ZyYWdfZGVhZDsKJiM0MzsJdXBfcmVhZCgmYW1wO2ZyYWctJmd0O2ZyYWdfc2VtKTsKJiM0MzsKJiM0MzsJaWYgKGlzX2RlYWQgfHwgSVNfREVBRERJUihkaXIpIHx8CiYjNDM7CSAgICBkX3VuaGFzaGVkKGRlbnRyeS0mZ3Q7ZF9wYXJlbnQpKSB7CiYjNDM7CQlyZXQgPSAtRU5PRU5UOwomIzQzOwkJZ290byBvdXRfcHV0OwomIzQzOwl9CiYjNDM7CiAJaWYgKGRlbnRyeS0mZ3Q7ZF9pbm9kZSB8fCBkX3VuaGFzaGVkKGRlbnRyeSkpCiAJCXJldCA9IC1FRVhJU1Q7CiAJZWxzZQpAQCAtMjAzLDEwICYjNDM7MjQ3LDExIEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkJCSAgICAgdGFyZ2V0X2l0ZW0pOwogCX0KIAotCWNvbmZpZ19pdGVtX3B1dCh0YXJnZXRfaXRlbSk7Ci0KIG91dF9wdXQ6CiYjNDM7CWNvbmZpZ19pdGVtX3B1dCh0YXJnZXRfaXRlbSk7CiAJY29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTsKJiM0MzsJY29uZmlnX2l0ZW1fcHV0KGNvbnRhaW5pbmdfaXRlbSk7CiYjNDM7CXB1dF9mcmFnbWVudChmcmFnKTsKIAlyZXR1cm4gcmV0OwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDE4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uZmlnRlMgU3ltbGluayBQYXRjaCBmb3IgTWVtb3J5IFNhZmV0eSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggZm9yIGBmcy9jb25maWdmcy9zeW1saW5rLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBpbXBhY3Qgb24gbWVtb3J5IHNhZmV0eSwgc3BlY2lmaWNhbGx5IHdoZXRoZXIgaXQgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlcyB0aGF0IEtNU0FOIHdvdWxkIGZsYWcsIG9yIGlmIGl0JiMzOTtzIHByaW1hcmlseSBjb25jZXJuZWQgd2l0aCBhZGRyZXNzaW5nIGxpZmV0aW1lIG1hbmFnZW1lbnQsIHN5bmNocm9uaXphdGlvbiwgVUFGLCBvciBsb2NraW5nIGlzc3VlcyB0aGF0IEtBU0FOIG9yIExPQ0tERVAgbWlnaHQgY2F0Y2guCgpGcm9tIHRoZSBjb2RlIGRpZmYsIHRoZSBmb2N1cyBzZWVtcyB0byBiZSBhcm91bmQgYGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oKWAgYW5kIGBjb25maWdmc19zeW1saW5rKClgLiAgYGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oKWAgYXBwZWFycyB0byB0cmF2ZXJzZSB0aGUgZGVudHJ5IHRyZWUsIGxvb2tpbmcgZm9yIGEgY29udGFpbmluZyBpdGVtIGFuZCBncmFiYmluZyBhIHJlZmVyZW5jZSB1c2luZyBgY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKClgLiBUaGVuIGBjb25maWdmc19zeW1saW5rKClgIGlzIG9idGFpbmluZyB0aGUgZnJhZyBhbmQgcGlubmluZyB0aGUgY29udGFpbmluZyBpdGVtIHZpYSBgY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbSgpYC4gYGdldF90YXJnZXQoKWAgcmVzb2x2ZXMgdGhlIHN5bWxpbmsmIzM5O3MgdGFyZ2V0LiAgQ3J1Y2lhbGx5LCBpdCB0aGVuIGNoZWNrcyBmb3IgYGZyYWctJmd0O2ZyYWdfZGVhZGAgdW5kZXIgYSByZWFkIGxvY2sgKGBkb3duX3JlYWQoJmFtcDtmcmFnLSZndDtmcmFnX3NlbSlgKSBhbmQgYWxzbyBjaGVja3MgaWYgdGhlIHBhcmVudCBkaXJlY3RvcnkgaXMgZGVhZCAoYElTX0RFQURESVIoZGlyKWAgb3IgYGRfdW5oYXNoZWQoLi4uKWApLiBUaGUgaW1wb3J0YW50IGNhbGxzIGFyZSBgY3JlYXRlX2xpbmsoKWAsIG9yIHJlbGVhc2luZyByZXNvdXJjZXMgaW4gYG91dF9wdXQ6YC4KClRoZSBmaXggYWRkcmVzc2VzIHRoZSBzY2VuYXJpbyB3aGVyZSBkZWZhdWx0IGdyb3VwcyB3aXRoaW4gY29uZmlnZnMgYXJlIGVtYmVkZGVkIGluIHBhcmVudCBncm91cHMuIFdoZW4gcmVzb2x2aW5nIHN5bWxpbmtzIGFjcm9zcyBkaWZmZXJlbnQgZGlyZWN0b3J5IGhpZXJhcmNoaWVzLCB0aGUgb3JpZ2luYWwgbG9naWMgY291bGQgbGVhZCB0byBsb2NrcyBiZWluZyBkcm9wcGVkIHByZW1hdHVyZWx5LCBvciBkZWZhdWx0IGdyb3VwcyBiZWluZyB1bmxpbmtlZCBvciBmcmVlZCBjb25jdXJyZW50bHksIGNhdXNpbmcgVUFGcyBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHN5bWxpbmsgY3JlYXRpb24uIFRoZSBwYXRjaCBhaW1zIHRvIHByZXZlbnQgdGhpcyBieSBwaW5uaW5nIHRoZSBjb250YWluaW5nIGl0ZW0gKHVzaW5nIHJlZmNvdW50aW5nKSBhbmQgY2hlY2tpbmcgaWYgdGhlIGZyYWdtZW50IG9yIGRpcmVjdG9yeSBpcyAmIzM0O2RlYWQmIzM0OyBiZWZvcmUgY29udGludWluZy4KCk5vdywgbGV0JiMzOTtzIHplcm8gaW4gb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCYjMzk7cyBsb29rIGF0IHRoZSB2YXJpYWJsZXMgaW5zaWRlIGBjb25maWdmc19zeW1saW5rYDogYHJldGAsIGBzZGAsIGBmcmFnYCwgYHBhcmVudF9pdGVtYCwgYHRhcmdldF9pdGVtYCwgYGNvbnRhaW5pbmdfaXRlbWAsIGB0eXBlYCwgYW5kIGBpc19kZWFkYC4KCmBpc19kZWFkYCBpcyBjcml0aWNhbCwgYXMgaXQgZGVwZW5kcyBvbiB0aGUgZnJhZ21lbnQmIzM5O3Mgc3RhdGU6CgpgYGBjCmRvd25fcmVhZCgmYW1wO2ZyYWctJmd0O2ZyYWdfc2VtKTsKaXNfZGVhZCA9IGZyYWctJmd0O2ZyYWdfZGVhZDsKdXBfcmVhZCgmYW1wO2ZyYWctJmd0O2ZyYWdfc2VtKTsKYGBgCgpTZWVtcyB0aGF0IGBpc19kZWFkYCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZCBpbiB0aGUgY29uZGl0aW9uYWwgY2hlY2suIGBjb250YWluaW5nX2l0ZW1gIGFuZCBgdGFyZ2V0X2l0ZW1gIGFyZSBpbml0aWFsaXplZCB0byBOVUxMLiBgZnJhZ2AgY29tZXMgZnJvbSBgZ2V0X2ZyYWdtZW50KClgLiBGcm9tIHRoZSBjb2RlIHNuaXBwZXQgYWxvbmUsIGV2ZXJ5dGhpbmcgbG9va3MgaW5pdGlhbGl6ZWQuIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBhbGxvY2F0aW9ucyAoa21hbGxvYyB3aXRob3V0IG1lbXNldC9remFsbG9jKSwgYGNvcHlfdG9fdXNlcmAgY2FsbHMsIHBhZGRpbmcgbGVha3MsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZnMvY29uZmlnZnMvc3ltbGluay5jYCBhcyB3ZWxsIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBzb21ldGhpbmcuICBBIHF1aWNrIHJlYWQtZmlsZSBvcGVyYXRpb24gc2hvdWxkIGdpdmUgbWUgZW5vdWdoIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvc3ltbGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XHRzdHJ1Y3QgcGF0aCBwYXRoIF9fZnJlZShwYXRoX3B1dCkgPSB7fTtcbiAxMjE6XHRcdGludCByZXQ7XG4gMTIyOlx0XG4gMTIzOlx0XHRyZXQgPSBrZXJuX3BhdGgoc3ltbmFtZSwgTE9PS1VQX0ZPTExPV3xMT09LVVBfRElSRUNUT1JZLCBcdTAwMjZwYXRoKTtcbiAxMjQ6XHRcdGlmIChyZXQpXG4gMTI1Olx0XHRcdHJldHVybiByZXQ7XG4gMTI2Olx0XHRpZiAocGF0aC5kZW50cnktXHUwMDNlZF9zYiAhPSBzYilcbiAxMjc6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbiAxMjg6XHRcdCp0YXJnZXQgPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0ocGF0aC5kZW50cnkpO1xuIDEyOTpcdFx0aWYgKCEqdGFyZ2V0KVxuIDEzMDpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiAxMzE6XHRcdHJldHVybiAwO1xuIDEzMjpcdH1cbiAxMzM6XHRcbiAxMzQ6XHRzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiAxMzU6XHR7XG4gMTM2Olx0XHRzdHJ1Y3QgZGVudHJ5ICpjb250YWluaW5nX2RlbnRyeSA9IGRlbnRyeTtcbiAxMzc6XHRcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xuIDEzODpcdFxuIDEzOTpcdFx0d2hpbGUgKCFJU19ST09UKGNvbnRhaW5pbmdfZGVudHJ5KSkge1xuIDE0MDpcdFx0XHRzZCA9IGNvbnRhaW5pbmdfZGVudHJ5LVx1MDAzZWRfZnNkYXRhO1xuIDE0MTpcdFx0XHRpZiAoIXNkIHx8ICEoc2QtXHUwMDNlc190eXBlIFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpKVxuIDE0MjpcdFx0XHRcdGJyZWFrO1xuIDE0MzpcdFx0XHRjb250YWluaW5nX2RlbnRyeSA9IGNvbnRhaW5pbmdfZGVudHJ5LVx1MDAzZWRfcGFyZW50O1xuIDE0NDpcdFx0fVxuIDE0NTpcdFx0aWYgKElTX1JPT1QoY29udGFpbmluZ19kZW50cnkpKVxuIDE0NjpcdFx0XHRyZXR1cm4gTlVMTDtcbiAxNDc6XHRcdHJldHVybiBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oY29udGFpbmluZ19kZW50cnkpO1xuIDE0ODpcdH1cbiAxNDk6XHRcbiAxNTA6XHRpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gMTUxOlx0XHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuIDE1MjpcdHtcbiAxNTM6XHRcdGludCByZXQ7XG4gMTU0Olx0XHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiAxNTU6XHRcdHN0cnVjdCBjb25maWdmc19mcmFnbWVudCAqZnJhZztcbiAxNTY6XHRcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XG4gMTU3Olx0XHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcbiAxNTg6XHRcdHN0cnVjdCBjb25maWdfaXRlbSAqY29udGFpbmluZ19pdGVtID0gTlVMTDtcbiAxNTk6XHRcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlO1xuIDE2MDpcdFx0Ym9vbCBpc19kZWFkO1xuIDE2MTpcdFxuIDE2MjpcdFx0c2QgPSBkZW50cnktXHUwMDNlZF9wYXJlbnQtXHUwMDNlZF9mc2RhdGE7XG4gMTYzOlx0XHQvKlxuIDE2NDpcdFx0ICogRmFrZSBpbnZpc2liaWxpdHkgaWYgZGlyIGJlbG9uZ3MgdG8gYSBncm91cC9kZWZhdWx0IGdyb3VwcyBoaWVyYXJjaHlcbiAxNjU6XHRcdCAqIGJlaW5nIGF0dGFjaGVkXG4gMTY2Olx0XHQgKi9cbiAxNjc6XHRcdGlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHNkKSlcbiAxNjg6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gMTY5Olx0XG4gMTcwOlx0XHRmcmFnID0gZ2V0X2ZyYWdtZW50KHNkLVx1MDAzZXNfZnJhZyk7XG4gMTcxOlx0XHRpZiAoIWZyYWcpXG4gMTcyOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuIDE3MzpcdFxuIDE3NDpcdFx0cGFyZW50X2l0ZW0gPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbiAxNzU6XHRcdHR5cGUgPSBwYXJlbnRfaXRlbS1cdTAwM2VjaV90eXBlO1xuIDE3NjpcdFxuIDE3NzpcdFx0cmV0ID0gLUVQRVJNO1xuIDE3ODpcdFx0aWYgKCF0eXBlIHx8ICF0eXBlLVx1MDAzZWN0X2l0ZW1fb3BzIHx8XG4gMTc5Olx0XHQgICAgIXR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlYWxsb3dfbGluaylcbiAxODA6XHRcdFx0Z290byBvdXRfcHV0O1xuIDE4MTpcdFxuIDE4MjpcdFx0LypcbiAxODM6XHRcdCAqIFBpbiB0aGUgY29udGFpbmluZyBvYmplY3Qgc28gdGhhdCB0aGUgcGFyZW50X2l0ZW0gKHdoaWNoIG1heSBiZSBhblxuIDE4NDpcdFx0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXG4gMTg1Olx0XHQgKi9cbiAxODY6XHRcdGlmIChzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkge1xuIDE4NzpcdFx0XHRjb250YWluaW5nX2l0ZW0gPSBjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4gMTg4Olx0XHRcdGlmICghY29udGFpbmluZ19pdGVtKSB7XG4gMTg5Olx0XHRcdFx0cmV0ID0gLUVOT0VOVDtcbiAxOTA6XHRcdFx0XHRnb3RvIG91dF9wdXQ7XG4gMTkxOlx0XHRcdH1cbiAxOTI6XHRcdH1cbiAxOTM6XHRcbiAxOTQ6XHRcdC8qXG4gMTk1Olx0XHQgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2ZcbiAxOTY6XHRcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXG4gMTk3Olx0XHQgKiBhdCBzeXNjYWxsIHRpbWUgKGFzIGxpbmsoMikgd291bGQmIzM5O3ZlIGRvbmUpLCBiZSBhIGRpcmVjdG9yeVxuIDE5ODpcdFx0ICogKHdoaWNoIGxpbmsoMikgd291bGQmIzM5O3ZlIHJlZnVzZWQgdG8gZG8pICpBTkQqIGJlIGEgZGVlcFxuIDE5OTpcdFx0ICogZnVja2luZyBtYWdpYywgbWFraW5nIHRoZSB0YXJnZXQgYnVzeSBmcm9tIHJtZGlyIFBPVi5cbiAyMDA6XHRcdCAqIHN5bWxpbmsoMikgaXMgbm90aGluZyBvZiB0aGF0IHNvcnQsIGFuZCB0aGUgbG9ja2luZyBpdFxuIDIwMTpcdFx0ICogZ2V0cyBtYXRjaGVzIHRoZSBub3JtYWwgc3ltbGluaygyKSBzZW1hbnRpY3MuICBXaXRob3V0XG4gMjAyOlx0XHQgKiBhdHRlbXB0cyB0byByZXNvbHZlIHRoZSB0YXJnZXQgKHdoaWNoIG1pZ2h0IHZlcnkgd2VsbFxuIDIwMzpcdFx0ICogbm90IGV2ZW4gZXhpc3QgeWV0KSBkb25lIHByaW9yIHRvIGxvY2tpbmcgdGhlIHBhcmVudFxuIDIwNDpcdFx0ICogZGlyZWN0b3J5LiAgVGhpcyBwZXJ2ZXJzaW9uLCBPVE9ILCBuZWVkcyB0byByZXNvbHZlXG4gMjA1Olx0XHQgKiB0aGUgdGFyZ2V0LCB3aGljaCB3b3VsZCBsZWFkIHRvIG9idmlvdXMgZGVhZGxvY2tzIGlmXG4gMjA2Olx0XHQgKiBhdHRlbXB0ZWQgd2l0aCBhbnkgZGlyZWN0b3JpZXMgbG9ja2VkLlxuIDIwNzpcdFx0ICpcbiAyMDg6XHRcdCAqIFVuZm9ydHVuYXRlbHksIHRoYXQgZ2FyYmFnZSBpcyB1c2VybGFuZCBBQkkgYW5kIHdlIHNob3VsZCYjMzk7dmVcbiAyMDk6XHRcdCAqIHNhaWQgXCYjMzQ7bm9cJiMzNDsgYmFjayBpbiAyMDA1LiAgVG9vIGxhdGUgbm93LCBzbyB3ZSBnZXQgdG9cbiAyMTA6XHRcdCAqIHBsYXkgdmVyeSB1Z2x5IGdhbWVzIHdpdGggbG9ja2luZy5cbiAyMTE6XHRcdCAqXG4gMjEyOlx0XHQgKiBUcnkgKkFOWVRISU5HKiBvZiB0aGF0IHNvcnQgaW4gbmV3IGNvZGUsIGFuZCB5b3Ugd2lsbFxuIDIxMzpcdFx0ICogcmVhbGx5IHJlZ3JldCBpdC4gIEp1c3QgYXNrIHlvdXJzZWxmIC0gd2hhdCBjb3VsZCBhIEJPRkhcbiAyMTQ6XHRcdCAqIGRvIHRvIG1lIGFuZCBkbyBJIHdhbnQgdG8gZmluZCBpdCBvdXQgZmlyc3QtaGFuZD9cbiAyMTU6XHRcdCAqXG4gMjE2Olx0XHQgKiAgQVYsIGEgdGhvcm91Z2hseSBhbm5veWVkIGJhc3RhcmQuXG4gMjE3Olx0XHQgKi9cbiAyMTg6XHRcdGlub2RlX3VubG9jayhkaXIpO1xuIDIxOTpcdFx0cmV0ID0gZ2V0X3RhcmdldChzeW1uYW1lLCBcdTAwMjZ0YXJnZXRfaXRlbSwgZGVudHJ5LVx1MDAzZWRfc2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDIzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwbHkgZmFtaWxpYXIgd2l0aCB0aGUgTGludXgga2VybmVsIGFuZCB0aGUgY29uZmlnZnMgc3Vic3lzdGVtLgoKKipEaXZpbmcgaW50byB0aGUgYHN5bWxpbmsuY2AgRGV0YWlscyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AgYWdhaW4uIFNlZW1zIGxpa2Ugd2UmIzM5O3JlIHplcm9pbmcgaW4gb24gYSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aGUgc3ltYm9saWMgbGluayBmdW5jdGlvbmFsaXR5IHdpdGhpbiBjb25maWdmcy4gTGV0IG1lIGdyYWIgbXkgbWVudGFsIG1hcCBvZiB0aGUgY29kZS4uLiBsaW5lcyAyMjAgdG8gMjYwLiBUaGF0IHVzdWFsbHkgY292ZXJzIGEgY3J1Y2lhbCBjaHVuaywgb2Z0ZW4gZGVhbGluZyB3aXRoIGVpdGhlciB0aGUgY3JlYXRpb24sIGhhbmRsaW5nIG9yIGRlbGV0aW9uIG9mIHN5bWJvbGljIGxpbmtzIHdpdGhpbiBjb25maWdmcy4gTXkgZ3Vlc3MgaXMgaXQgZGVhbHMgd2l0aCBzZXR0aW5nIHRoZSB0YXJnZXQgb2YgdGhlIHN5bWxpbmssIG1heWJlIHdpdGggZXJyb3IgaGFuZGxpbmcgZm9yIGJhZCBwYXRocywgb3IgcGVybWlzc2lvbnMuIEl04oCZcyBhbHNvIHBvc3NpYmxlIHRoZSBjb2RlIGFkZHJlc3NlcyBhc3BlY3RzIG9mIHN5bWxpbmsgcmVzb2x1dGlvbiB3aXRoaW4gdGhlIGNvbmZpZ2ZzIGhpZXJhcmNoeS4gTmVlZCB0byBkaXZlIGluIGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvY29uZmlnZnMvc3ltbGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMjA6XHRcdGlub2RlX2xvY2soZGlyKTtcbiAyMjE6XHRcdGlmIChyZXQpXG4gMjIyOlx0XHRcdGdvdG8gb3V0X3B1dDtcbiAyMjM6XHRcbiAyMjQ6XHRcdGRvd25fcmVhZChcdTAwMjZmcmFnLVx1MDAzZWZyYWdfc2VtKTtcbiAyMjU6XHRcdGlzX2RlYWQgPSBmcmFnLVx1MDAzZWZyYWdfZGVhZDtcbiAyMjY6XHRcdHVwX3JlYWQoXHUwMDI2ZnJhZy1cdTAwM2VmcmFnX3NlbSk7XG4gMjI3Olx0XG4gMjI4Olx0XHRpZiAoaXNfZGVhZCB8fCBJU19ERUFERElSKGRpcikgfHxcbiAyMjk6XHRcdCAgICBkX3VuaGFzaGVkKGRlbnRyeS1cdTAwM2VkX3BhcmVudCkpIHtcbiAyMzA6XHRcdFx0cmV0ID0gLUVOT0VOVDtcbiAyMzE6XHRcdFx0Z290byBvdXRfcHV0O1xuIDIzMjpcdFx0fVxuIDIzMzpcdFxuIDIzNDpcdFx0aWYgKGRlbnRyeS1cdTAwM2VkX2lub2RlIHx8IGRfdW5oYXNoZWQoZGVudHJ5KSlcbiAyMzU6XHRcdFx0cmV0ID0gLUVFWElTVDtcbiAyMzY6XHRcdGVsc2VcbiAyMzc6XHRcdFx0cmV0ID0gaW5vZGVfcGVybWlzc2lvbihcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsXG4gMjM4Olx0XHRcdFx0XHQgICAgICAgTUFZX1dSSVRFIHwgTUFZX0VYRUMpO1xuIDIzOTpcdFx0aWYgKCFyZXQpXG4gMjQwOlx0XHRcdHJldCA9IHR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlYWxsb3dfbGluayhwYXJlbnRfaXRlbSwgdGFyZ2V0X2l0ZW0pO1xuIDI0MTpcdFx0aWYgKCFyZXQpIHtcbiAyNDI6XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZjb25maWdmc19zeW1saW5rX211dGV4KTtcbiAyNDM6XHRcdFx0cmV0ID0gY3JlYXRlX2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtLCBkZW50cnkpO1xuIDI0NDpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XG4gMjQ1Olx0XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlZHJvcF9saW5rKVxuIDI0NjpcdFx0XHRcdHR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlZHJvcF9saW5rKHBhcmVudF9pdGVtLFxuIDI0NzpcdFx0XHRcdFx0XHRcdCAgICAgdGFyZ2V0X2l0ZW0pO1xuIDI0ODpcdFx0fVxuIDI0OTpcdFxuIDI1MDpcdG91dF9wdXQ6XG4gMjUxOlx0XHRjb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pO1xuIDI1MjpcdFx0Y29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTtcbiAyNTM6XHRcdGNvbmZpZ19pdGVtX3B1dChjb250YWluaW5nX2l0ZW0pO1xuIDI1NDpcdFx0cHV0X2ZyYWdtZW50KGZyYWcpO1xuIDI1NTpcdFx0cmV0dXJuIHJldDtcbiAyNTY6XHR9XG4gMjU3Olx0XG4gMjU4Olx0aW50IGNvbmZpZ2ZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIDI1OTpcdHtcbiAyNjA6XHRcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkID0gZGVudHJ5LVx1MDAzZWRfZnNkYXRhLCAqdGFyZ2V0X3NkO1xuIDI2MTpcdFx0c3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbTtcbiAyNjI6XHRcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlO1xuIDI2MzpcdFx0aW50IHJldDtcbiAyNjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTI6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk1NgoJCQkJCQkJb3V0cHV0OiAxOTcKCQkJCQkJCXRob3VnaHRzOiA1NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvbmZpZ2ZzIFBhdGNoJiMzOTtzIFNhZmV0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBgY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbSgpYCB0byB0aGUgY29kZSwgYmFzaWNhbGx5IHRvIG5hdmlnYXRlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGFuZCBmaW5kIHRoZSBgY29uZmlnX2l0ZW1gIHRoYXQgY29udGFpbnMgYSBkZWZhdWx0IGdyb3VwLiBJdCYjMzk7cyBhbHNvIGdyYWJiaW5nIGEgcmVmZXJlbmNlIHRvIGBzZC0mZ3Q7c19mcmFnYCB1c2luZyBgZ2V0X2ZyYWdtZW50KClgLiBUaGUgY29kZSB0aGVuIHBpbnMgYGNvbnRhaW5pbmdfaXRlbWAgaWYgYSBzcGVjaWZpYyBmbGFnIGlzIHNldCAoYENPTkZJR0ZTX1VTRVRfREVGQVVMVGApIHRvIGF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIEFmdGVyIGdldHRpbmcgdGhlIGlub2RlIGxvY2sgYWdhaW4sIGl0IHRoZW4gY2hlY2tzIGZvciBhIGZldyAmIzM0O2RlYWQmIzM0OyBzdGF0ZXM6IGBmcmFnLSZndDtmcmFnX2RlYWRgLCBgSVNfREVBRERJUihkaXIpYCwgYW5kIGBkX3VuaGFzaGVkKGRlbnRyeS0mZ3Q7ZF9wYXJlbnQpYC4gRmluYWxseSwgaXQgcmVsZWFzZXMgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIGl0ZW1zIGl0IGdvdCwgaW5jbHVkaW5nIHRoZSBmcmFnbWVudC4KCk5vdywgSSBuZWVkIHRvIGRldGVybWluZSBpZiBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzIHJlbGV2YW50IGhlcmUuIExldCYjMzk7cyBhcHBseSB0aGUgS01TQU4gY3JpdGVyaWEuIERvZXMgaXQgaW50cm9kdWNlIG9yIG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZT8gTm8sIG5vdCB0aGF0IEkgY2FuIHNlZS4gRG9lcyBpdCB1c2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZz8gTm8sIHRoZSB2YXJpYWJsZXMgYXJlIGFsbCBpbml0aWFsaXplZCwgYW5kIHRoZSBgaXNfZGVhZGAgY2hlY2sgY29tZXMgZnJvbSBhbiBleGlzdGluZyBib29sZWFuIGZpZWxkIGluc2lkZSBgZnJhZ2AuIEFyZSB0aGVyZSBhbnkgbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgd2l0aG91dCBwcm9wZXIgaW5pdGlhbGl6YXRpb24/IE5vcGUsIG5vIG5ldyBhbGxvY2F0aW9ucy4gRG9lcyBpdCBjaGFuZ2UgYW55IGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGUgYnVncyBhZGRyZXNzZWQgYXJlIGNsZWFybHkgY29uY3VycmVuY3ksIHVzZS1hZnRlci1mcmVlLCBhbmQgcmVmZXJlbmNlIGxpZmV0aW1lIGlzc3VlcyBkdXJpbmcgc3ltbGluayBjcmVhdGlvbiBpbiBjb25maWdmcy4gSSYjMzk7bSBzZWVpbmcgdGhhdCBLTVNBTiBpc24mIzM5O3QgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoZXNlIGlzc3Vlcy4gS0FTQU4gaXMgYmV0dGVyLgoKVGhlIGlzc3VlcyB0aGlzIHBhdGNoIHRhY2tsZXMgYXJlIGNsZWFybHkgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgdXNlLWFmdGVyLWZyZWUsIGFuZCByZWZlcmVuY2UgbGlmZXRpbWVzIGR1cmluZyB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyBzeW1saW5rcy4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHBvdGVudGlhbGx5IGRyb3BwaW5nIG9yIGZyZWVpbmcgYSBwYXJlbnQgaXRlbSB3aGlsZSB0aGUgaW5vZGUgbG9jayB3YXMgYmVpbmcgdW5sb2NrZWQgdG8gcmVzb2x2ZSB0aGUgc3ltbGluayB0YXJnZXQuIFRoaXMgcGF0Y2ggcGlucyB0aGUgcGFyZW50LCBhbmQgdGhlbiBkb2VzIG1vcmUgY2hlY2tzLiBNZW1vcnkgbGlmZWN5Y2xlIGFuZCB1c2UtYWZ0ZXItZnJlZSBwcm9ibGVtcyBhcmUgZWFzaWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgdG9vbHMgbGlrZSBMT0NLREVQLgoKS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBkZWFscyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBzdHJ1Y3R1cmUgcGFkZGluZyBsZWFrcywgYW5kIGFsdGVyZWQgZGF0YSBsZW5ndGgvY29weSBsb2dpYy4gV2UgZG9uJiMzOTt0IGhhdmUgdGhvc2UgaXNzdWVzIGhlcmUuIEFsbCB2YXJpYWJsZXMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuIEkmIzM5O20gY29uZmlkZW50IGluIHRoYXQgYXNzZXNzbWVudCwgYW5kIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBhbmQgcmVmZXJlbmNlIGxpZmVjeWNsZSBpc3N1ZSBpbiBjb25maWdmc19zeW1saW5rKCkuIFNwZWNpZmljYWxseSwgaXQgcGlucyB0aGUgY29udGFpbmluZyBjb25maWdfaXRlbSBhbmQgY29uZmlnZnNfZnJhZ21lbnQgd2hpbGUgdGVtcG9yYXJpbHkgZHJvcHBpbmcgZGlyZWN0b3J5IGlub2RlIGxvY2tzIHRvIHJlc29sdmUgdGhlIHN5bWxpbmsgdGFyZ2V0LCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIGludmFsaWQgb3BlcmF0aW9ucyBvbiB1bmxpbmtlZC9kZWFkIGRlZmF1bHQgZ3JvdXBzLlxuXG4tIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIChlLmcuIExPQ0tERVAsIHJlZmNvdW50IGNoZWNraW5nKSBhcmUgZnVsbHkgZXF1aXBwZWQgdG8gZGV0ZWN0IGFueSBwb3RlbnRpYWwgVUFGLCBkb3VibGUtcHV0LCBvciBsb2NraW5nIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgcGF0Y2guXG4tIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGJlY2F1c2UgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChlLmcuIGBjb250YWluaW5nX2l0ZW1gLCBgaXNfZGVhZGApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgYW5kIHJlZmVyZW5jZSBsaWZlY3ljbGUgaXNzdWUgaW4gY29uZmlnZnNfc3ltbGluaygpLiBTcGVjaWZpY2FsbHksIGl0IHBpbnMgdGhlIGNvbnRhaW5pbmcgY29uZmlnX2l0ZW0gYW5kIGNvbmZpZ2ZzX2ZyYWdtZW50IHdoaWxlIHRlbXBvcmFyaWx5IGRyb3BwaW5nIGRpcmVjdG9yeSBpbm9kZSBsb2NrcyB0byByZXNvbHZlIHRoZSBzeW1saW5rIHRhcmdldCwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBvciBpbnZhbGlkIG9wZXJhdGlvbnMgb24gdW5saW5rZWQvZGVhZCBkZWZhdWx0IGdyb3Vwcy5cblxuLSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyAoZS5nLiBMT0NLREVQLCByZWZjb3VudCBjaGVja2luZykgYXJlIGZ1bGx5IGVxdWlwcGVkIHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIFVBRiwgZG91YmxlLXB1dCwgb3IgbG9ja2luZyBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHBhdGNoLlxuLSBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBiZWNhdXNlIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBzdHJ1Y3R1cmUgcGFkZGluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIGxvY2FsIHZhcmlhYmxlcyAoZS5nLiBgY29udGFpbmluZ19pdGVtYCwgYGlzX2RlYWRgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6MDk6NDQuMDI0NDIyMzg0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2ODA5OTA1NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25maWdmc19zeW1saW5rXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBhbmQgcmVmZXJlbmNlIGxpZmVjeWNsZSBpc3N1ZSBpbiBjb25maWdmc19zeW1saW5rKCkuIFNwZWNpZmljYWxseSwgaXQgcGlucyB0aGUgY29udGFpbmluZyBjb25maWdfaXRlbSBhbmQgY29uZmlnZnNfZnJhZ21lbnQgd2hpbGUgdGVtcG9yYXJpbHkgZHJvcHBpbmcgZGlyZWN0b3J5IGlub2RlIGxvY2tzIHRvIHJlc29sdmUgdGhlIHN5bWxpbmsgdGFyZ2V0LCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIGludmFsaWQgb3BlcmF0aW9ucyBvbiB1bmxpbmtlZC9kZWFkIGRlZmF1bHQgZ3JvdXBzLlxcblxcbi0gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgKGUuZy4gTE9DS0RFUCwgcmVmY291bnQgY2hlY2tpbmcpIGFyZSBmdWxseSBlcXVpcHBlZCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBVQUYsIGRvdWJsZS1wdXQsIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaC5cXG4tIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGJlY2F1c2UgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChlLmcuIGBjb250YWluaW5nX2l0ZW1gLCBgaXNfZGVhZGApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzX3N5bWxpbmsgdG8gcGluIHRoZSBjb250YWluaW5nIGl0ZW0gb2YgZGVmYXVsdCBncm91cHMgYW5kIGFkZHMgbGl2ZWxpbmVzcyBjaGVja3MgYWZ0ZXIgcmUtYWNxdWlyaW5nIHRoZSBkaXJlY3RvcnkgaW5vZGUgbG9jayB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3ltbGluayBzeXNjYWxscyBvbiBjb25maWdmcyBtb3VudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjA5OjQ0LjAyNDQyODcwNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM2NzkwNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGRhNzc3NTZjZWE3NDRjMTk0NGVhMTMzNDUwMGIwY2MxNzI2OTcwMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDEyOjA5OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xcbmluZGV4IDMxZWIyOGIyNzMwOTEuLjc1MDgzMjUxYmUyMmQgMTAwNjQ0XFxuLS0tIGEvZnMvY29uZmlnZnMvc3ltbGluay5jXFxuKysrIGIvZnMvY29uZmlnZnMvc3ltbGluay5jXFxuQEAgLTEzMSwxNSArMTMxLDMzIEBAIHN0YXRpYyBpbnQgZ2V0X3RhcmdldChjb25zdCBjaGFyICpzeW1uYW1lLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKip0YXJnZXQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4re1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICpjb250YWluaW5nX2RlbnRyeSA9IGRlbnRyeTtcXG4rXFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XFxuK1xcbitcXHR3aGlsZSAoIUlTX1JPT1QoY29udGFpbmluZ19kZW50cnkpKSB7XFxuK1xcdFxcdHNkID0gY29udGFpbmluZ19kZW50cnktXFx1MDAzZWRfZnNkYXRhO1xcbitcXHRcXHRpZiAoIXNkIHx8ICEoc2QtXFx1MDAzZXNfdHlwZSBcXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjb250YWluaW5nX2RlbnRyeSA9IGNvbnRhaW5pbmdfZGVudHJ5LVxcdTAwM2VkX3BhcmVudDtcXG4rXFx0fVxcbitcXHRpZiAoSVNfUk9PVChjb250YWluaW5nX2RlbnRyeSkpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHRyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGNvbnRhaW5pbmdfZGVudHJ5KTtcXG4rfVxcbiBcXG4gaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqc3ltbmFtZSlcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcXG4rXFx0c3RydWN0IGNvbmZpZ2ZzX2ZyYWdtZW50ICpmcmFnO1xcbiBcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xcbiBcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcXG4rXFx0c3RydWN0IGNvbmZpZ19pdGVtICpjb250YWluaW5nX2l0ZW0gPSBOVUxMO1xcbiBcXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcXG4rXFx0Ym9vbCBpc19kZWFkO1xcbiBcXG4gXFx0c2QgPSBkZW50cnktXFx1MDAzZWRfcGFyZW50LVxcdTAwM2VkX2ZzZGF0YTtcXG4gXFx0LypcXG5AQCAtMTQ5LDYgKzE2NywxMCBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdGlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHNkKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIFxcbitcXHRmcmFnID0gZ2V0X2ZyYWdtZW50KHNkLVxcdTAwM2VzX2ZyYWcpO1xcbitcXHRpZiAoIWZyYWcpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4gXFx0cGFyZW50X2l0ZW0gPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oZGVudHJ5LVxcdTAwM2VkX3BhcmVudCk7XFxuIFxcdHR5cGUgPSBwYXJlbnRfaXRlbS1cXHUwMDNlY2lfdHlwZTtcXG4gXFxuQEAgLTE1Nyw2ICsxNzksMTggQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHQgICAgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2VhbGxvd19saW5rKVxcbiBcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBQaW4gdGhlIGNvbnRhaW5pbmcgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW5cXG4rXFx0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXFxuK1xcdCAqL1xcbitcXHRpZiAoc2QtXFx1MDAzZXNfdHlwZSBcXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkge1xcbitcXHRcXHRjb250YWluaW5nX2l0ZW0gPSBjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpO1xcbitcXHRcXHRpZiAoIWNvbnRhaW5pbmdfaXRlbSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbitcXHRcXHRcXHRnb3RvIG91dF9wdXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0LypcXG4gXFx0ICogVGhpcyBpcyByZWFsbHkgc2ljay4gIFdoYXQgdGhleSB3YW50ZWQgd2FzIGEgaHlicmlkIG9mXFxuIFxcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXFxuQEAgLTE4Nyw2ICsyMjEsMTYgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIFxcbitcXHRkb3duX3JlYWQoXFx1MDAyNmZyYWctXFx1MDAzZWZyYWdfc2VtKTtcXG4rXFx0aXNfZGVhZCA9IGZyYWctXFx1MDAzZWZyYWdfZGVhZDtcXG4rXFx0dXBfcmVhZChcXHUwMDI2ZnJhZy1cXHUwMDNlZnJhZ19zZW0pO1xcbitcXG4rXFx0aWYgKGlzX2RlYWQgfHwgSVNfREVBRERJUihkaXIpIHx8XFxuK1xcdCAgICBkX3VuaGFzaGVkKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9FTlQ7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9pbm9kZSB8fCBkX3VuaGFzaGVkKGRlbnRyeSkpXFxuIFxcdFxcdHJldCA9IC1FRVhJU1Q7XFxuIFxcdGVsc2VcXG5AQCAtMjAzLDEwICsyNDcsMTEgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRhcmdldF9pdGVtKTtcXG4gXFx0fVxcbiBcXG4tXFx0Y29uZmlnX2l0ZW1fcHV0KHRhcmdldF9pdGVtKTtcXG4tXFxuIG91dF9wdXQ6XFxuK1xcdGNvbmZpZ19pdGVtX3B1dCh0YXJnZXRfaXRlbSk7XFxuIFxcdGNvbmZpZ19pdGVtX3B1dChwYXJlbnRfaXRlbSk7XFxuK1xcdGNvbmZpZ19pdGVtX3B1dChjb250YWluaW5nX2l0ZW0pO1xcbitcXHRwdXRfZnJhZ21lbnQoZnJhZyk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjA5OjQ0LjU2MTk1MzMxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzAxNTU0ODkyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25maWdmc19zeW1saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29uZmlnZnNfc3ltbGluayB0byBwaW4gdGhlIGNvbnRhaW5pbmcgaXRlbSBvZiBkZWZhdWx0IGdyb3VwcyBhbmQgYWRkcyBsaXZlbGluZXNzIGNoZWNrcyBhZnRlciByZS1hY3F1aXJpbmcgdGhlIGRpcmVjdG9yeSBpbm9kZSBsb2NrIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeW1saW5rIHN5c2NhbGxzIG9uIGNvbmZpZ2ZzIG1vdW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0ZGE3Nzc1NmNlYTc0NGMxOTQ0ZWExMzM0NTAwYjBjYzE3MjY5NzAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxMjowOTo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuYyBiL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuaW5kZXggMzFlYjI4YjI3MzA5MS4uNzUwODMyNTFiZTIyZCAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1xuKysrIGIvZnMvY29uZmlnZnMvc3ltbGluay5jXG5AQCAtMTMxLDE1ICsxMzEsMzMgQEAgc3RhdGljIGludCBnZXRfdGFyZ2V0KGNvbnN0IGNoYXIgKnN5bW5hbWUsIHN0cnVjdCBjb25maWdfaXRlbSAqKnRhcmdldCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbit7XG4rXHRzdHJ1Y3QgZGVudHJ5ICpjb250YWluaW5nX2RlbnRyeSA9IGRlbnRyeTtcbitcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xuK1xuK1x0d2hpbGUgKCFJU19ST09UKGNvbnRhaW5pbmdfZGVudHJ5KSkge1xuK1x0XHRzZCA9IGNvbnRhaW5pbmdfZGVudHJ5LVx1MDAzZWRfZnNkYXRhO1xuK1x0XHRpZiAoIXNkIHx8ICEoc2QtXHUwMDNlc190eXBlIFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRjb250YWluaW5nX2RlbnRyeSA9IGNvbnRhaW5pbmdfZGVudHJ5LVx1MDAzZWRfcGFyZW50O1xuK1x0fVxuK1x0aWYgKElTX1JPT1QoY29udGFpbmluZ19kZW50cnkpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oY29udGFpbmluZ19kZW50cnkpO1xuK31cbiBcbiBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxuIHtcbiBcdGludCByZXQ7XG4gXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbitcdHN0cnVjdCBjb25maWdmc19mcmFnbWVudCAqZnJhZztcbiBcdHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW07XG4gXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnRhcmdldF9pdGVtID0gTlVMTDtcbitcdHN0cnVjdCBjb25maWdfaXRlbSAqY29udGFpbmluZ19pdGVtID0gTlVMTDtcbiBcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlO1xuK1x0Ym9vbCBpc19kZWFkO1xuIFxuIFx0c2QgPSBkZW50cnktXHUwMDNlZF9wYXJlbnQtXHUwMDNlZF9mc2RhdGE7XG4gXHQvKlxuQEAgLTE0OSw2ICsxNjcsMTAgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKCFjb25maWdmc19kaXJlbnRfaXNfcmVhZHkoc2QpKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbitcdGZyYWcgPSBnZXRfZnJhZ21lbnQoc2QtXHUwMDNlc19mcmFnKTtcbitcdGlmICghZnJhZylcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4gXHRwYXJlbnRfaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShkZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuIFx0dHlwZSA9IHBhcmVudF9pdGVtLVx1MDAzZWNpX3R5cGU7XG4gXG5AQCAtMTU3LDYgKzE3OSwxOCBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHQgICAgIXR5cGUtXHUwMDNlY3RfaXRlbV9vcHMtXHUwMDNlYWxsb3dfbGluaylcbiBcdFx0Z290byBvdXRfcHV0O1xuIFxuK1x0LypcbitcdCAqIFBpbiB0aGUgY29udGFpbmluZyBvYmplY3Qgc28gdGhhdCB0aGUgcGFyZW50X2l0ZW0gKHdoaWNoIG1heSBiZSBhblxuK1x0ICogZW1iZWRkZWQgZGVmYXVsdCBncm91cCkgaXMgbm90IGZyZWVkIHdoaWxlIHdlIGRyb3AgdGhlIGxvY2suXG4rXHQgKi9cbitcdGlmIChzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkge1xuK1x0XHRjb250YWluaW5nX2l0ZW0gPSBjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4rXHRcdGlmICghY29udGFpbmluZ19pdGVtKSB7XG4rXHRcdFx0cmV0ID0gLUVOT0VOVDtcbitcdFx0XHRnb3RvIG91dF9wdXQ7XG4rXHRcdH1cbitcdH1cbitcbiBcdC8qXG4gXHQgKiBUaGlzIGlzIHJlYWxseSBzaWNrLiAgV2hhdCB0aGV5IHdhbnRlZCB3YXMgYSBoeWJyaWQgb2ZcbiBcdCAqIGxpbmsoMikgYW5kIHN5bWxpbmsoMikgLSB0aGV5IHdhbnRlZCB0aGUgdGFyZ2V0IHJlc29sdmVkXG5AQCAtMTg3LDYgKzIyMSwxNiBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF9wdXQ7XG4gXG4rXHRkb3duX3JlYWQoXHUwMDI2ZnJhZy1cdTAwM2VmcmFnX3NlbSk7XG4rXHRpc19kZWFkID0gZnJhZy1cdTAwM2VmcmFnX2RlYWQ7XG4rXHR1cF9yZWFkKFx1MDAyNmZyYWctXHUwMDNlZnJhZ19zZW0pO1xuK1xuK1x0aWYgKGlzX2RlYWQgfHwgSVNfREVBRERJUihkaXIpIHx8XG4rXHQgICAgZF91bmhhc2hlZChkZW50cnktXHUwMDNlZF9wYXJlbnQpKSB7XG4rXHRcdHJldCA9IC1FTk9FTlQ7XG4rXHRcdGdvdG8gb3V0X3B1dDtcbitcdH1cbitcbiBcdGlmIChkZW50cnktXHUwMDNlZF9pbm9kZSB8fCBkX3VuaGFzaGVkKGRlbnRyeSkpXG4gXHRcdHJldCA9IC1FRVhJU1Q7XG4gXHRlbHNlXG5AQCAtMjAzLDEwICsyNDcsMTEgQEAgaW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0XHRcdCAgICAgdGFyZ2V0X2l0ZW0pO1xuIFx0fVxuIFxuLVx0Y29uZmlnX2l0ZW1fcHV0KHRhcmdldF9pdGVtKTtcbi1cbiBvdXRfcHV0OlxuK1x0Y29uZmlnX2l0ZW1fcHV0KHRhcmdldF9pdGVtKTtcbiBcdGNvbmZpZ19pdGVtX3B1dChwYXJlbnRfaXRlbSk7XG4rXHRjb25maWdfaXRlbV9wdXQoY29udGFpbmluZ19pdGVtKTtcbitcdHB1dF9mcmFnbWVudChmcmFnKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6MDk6NDQuNTYxOTU1ODA0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI2OTYyOTQ0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIEkgYW5hbHl6ZSB0aGlzIHBhdGNoOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaXMgZXZlbiBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJJ20gbG9va2luZyBhdCBgZnMvY29uZmlnZnMvc3ltbGluay5jYC4gVGhhdCdzIGEgZmlsZSBJJ20gZmFtaWxpYXIgd2l0aCwgYW5kIGl0J3MgbW9kaWZ5aW5nIGEgZmV3IGtleSBmdW5jdGlvbnM6IGBjb25maWdmc19zeW1saW5rYCBhbmQgYWRkaW5nIGEgbmV3IHN0YXRpYyBmdW5jdGlvbiwgYGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW1gLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgYW55dGhpbmcgZGVhbGluZyB3aXRoIHN5bWxpbmtzIHdpdGhpbiBhIGZpbGVzeXN0ZW0gY29udGV4dCBpcyAqYWx3YXlzKiB3b3J0aCBhIGNsb3NlciBsb29rIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gVGhlcmUncyBhbG1vc3QgYWx3YXlzIHN1YnRsZSBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgZm9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gcGF0aCByZXNvbHV0aW9uIGFuZCBhY2Nlc3MgY29udHJvbC5cblxuTm93LCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1enppbmcgc3RyYXRlZ3ksIEkgbmVlZCB0byBrbm93IHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50LiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBLY29uZmlnYCBmb3IgYGNvbmZpZ2ZzYCBvcHRpb25zIGFuZCBhbnkgZGVwZW5kZW5jaWVzLiBGYWlsaW5nIHRoYXQsIGEgcXVpY2sgYGdyZXBwZXJgIHNlc3Npb24gc2hvdWxkIHJldmVhbCB3aGF0J3MgZW5hYmxlZCBhbmQgZGlzYWJsZWQuIE9uY2UgSSB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCBJIGNhbiBuYXJyb3cgZG93biBteSBmb2N1cy4gVGhlbiwgdGhlIHJlYWwgZnVuIGJlZ2luczogZGV0ZXJtaW5pbmcgd2hhdCBmb2N1cyBzeW1ib2xzIGFyZSBtb3N0IGxpa2VseSB0byB0cmlnZ2VyIGludGVyZXN0aW5nIGNvZGUgcGF0aHMgaW4gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSSdsbCBiZSB0aGlua2luZyBhYm91dCBob3cgYGNvbmZpZ2ZzX3N5bWxpbmtgIGludGVyYWN0cyB3aXRoIGBjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtYCwgY29uc2lkZXJpbmcgcG9zc2libGUgaW5wdXQgdmVjdG9ycyBhbmQgYm91bmRhcnkgY29uZGl0aW9ucy4gVGhpcyBpcyBnb2luZyB0byBiZSBpbnRlcmVzdGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzgwNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6MDk6NTcuMjU4MjUzODU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTE1NzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR0ZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NvbmZpZ2ZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jb25maWdmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvY29uZmlnZnMvS2NvbmZpZzoyOmNvbmZpZyBDT05GSUdGU19GU1xcbmZzL2NvbmZpZ2ZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlLWRyaXZlbiBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9jb25maWdmcy9NYWtlZmlsZS01LVxcbmZzL2NvbmZpZ2ZzL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0NPTkZJR0ZTX0ZTKVxcdCs9IGNvbmZpZ2ZzLm9cXG5mcy9jb25maWdmcy9NYWtlZmlsZS03LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMjowOTo1Ny4zMDU3NzY2MTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTE1Nzg2MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgZnMvY29uZmlnZnMvc3ltbGluay5jYCDigJMgVGltZSB0byBSZS1leGFtaW5lIHRoZSBTeW1ib2xzKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgaXNzdWUsIGxldCdzIGVzdGFibGlzaCBhIGNsZWFyIHBpY3R1cmUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AgYW5kIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzeW1ib2xzIGFyZSBub3cgcHJlc2VudCBhbmQgaG93IHRoZXkgYXJlIHV0aWxpemVkLCBlc3BlY2lhbGx5IHRob3NlIHN1cnJvdW5kaW5nIGFueSByZWNlbnQgbW9kaWZpY2F0aW9ucy4gSSdtIHRoaW5raW5nIGEgcXVpY2sgc2NhbiBvZiB0aGUgc3ltYm9sIGRlZmluaXRpb25zIGFuZCB0aGUgY2FsbCBzaXRlcyB3aXRoaW4gdGhhdCBmaWxlIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gdG8gYW5hbHl6ZSB0aGUgcG90ZW50aWFsIHJhbWlmaWNhdGlvbnMgb2YgdGhlIGNoYW5nZXMsIGlkZW50aWZ5IGRlcGVuZGVuY2llcywgYW5kIHBpbnBvaW50IHRoZSBsaWtlbHkgYXJlYXMgd2hlcmUgdGhlIGlzc3VlIGlzIGVtZXJnaW5nLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjEwOjAwLjIyMTU3MDA0MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2NvbmZpZ2ZzL3N5bWxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTI1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDEyNjpcXHRcXHRpZiAocGF0aC5kZW50cnktXFx1MDAzZWRfc2IgIT0gc2IpXFxuIDEyNzpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiAxMjg6XFx0XFx0KnRhcmdldCA9IGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShwYXRoLmRlbnRyeSk7XFxuIDEyOTpcXHRcXHRpZiAoISp0YXJnZXQpXFxuIDEzMDpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gMTMxOlxcdFxcdHJldHVybiAwO1xcbiAxMzI6XFx0fVxcbiAxMzM6XFx0XFxuIDEzNDpcXHRzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gMTM1OlxcdHtcXG4gMTM2OlxcdFxcdHN0cnVjdCBkZW50cnkgKmNvbnRhaW5pbmdfZGVudHJ5ID0gZGVudHJ5O1xcbiAxMzc6XFx0XFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XFxuIDEzODpcXHRcXG4gMTM5OlxcdFxcdHdoaWxlICghSVNfUk9PVChjb250YWluaW5nX2RlbnRyeSkpIHtcXG4gMTQwOlxcdFxcdFxcdHNkID0gY29udGFpbmluZ19kZW50cnktXFx1MDAzZWRfZnNkYXRhO1xcbiAxNDE6XFx0XFx0XFx0aWYgKCFzZCB8fCAhKHNkLVxcdTAwM2VzX3R5cGUgXFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpKVxcbiAxNDI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDE0MzpcXHRcXHRcXHRjb250YWluaW5nX2RlbnRyeSA9IGNvbnRhaW5pbmdfZGVudHJ5LVxcdTAwM2VkX3BhcmVudDtcXG4gMTQ0OlxcdFxcdH1cXG4gMTQ1OlxcdFxcdGlmIChJU19ST09UKGNvbnRhaW5pbmdfZGVudHJ5KSlcXG4gMTQ2OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAxNDc6XFx0XFx0cmV0dXJuIGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShjb250YWluaW5nX2RlbnRyeSk7XFxuIDE0ODpcXHR9XFxuIDE0OTpcXHRcXG4gMTUwOlxcdGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gMTUxOlxcdFxcdFxcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lKVxcbiAxNTI6XFx0e1xcbiAxNTM6XFx0XFx0aW50IHJldDtcXG4gMTU0OlxcdFxcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xcbiAxNTU6XFx0XFx0c3RydWN0IGNvbmZpZ2ZzX2ZyYWdtZW50ICpmcmFnO1xcbiAxNTY6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbTtcXG4gMTU3OlxcdFxcdHN0cnVjdCBjb25maWdfaXRlbSAqdGFyZ2V0X2l0ZW0gPSBOVUxMO1xcbiAxNTg6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICpjb250YWluaW5nX2l0ZW0gPSBOVUxMO1xcbiAxNTk6XFx0XFx0Y29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7XFxuIDE2MDpcXHRcXHRib29sIGlzX2RlYWQ7XFxuIDE2MTpcXHRcXG4gMTYyOlxcdFxcdHNkID0gZGVudHJ5LVxcdTAwM2VkX3BhcmVudC1cXHUwMDNlZF9mc2RhdGE7XFxuIDE2MzpcXHRcXHQvKlxcbiAxNjQ6XFx0XFx0ICogRmFrZSBpbnZpc2liaWxpdHkgaWYgZGlyIGJlbG9uZ3MgdG8gYSBncm91cC9kZWZhdWx0IGdyb3VwcyBoaWVyYXJjaHlcXG4gMTY1OlxcdFxcdCAqIGJlaW5nIGF0dGFjaGVkXFxuIDE2NjpcXHRcXHQgKi9cXG4gMTY3OlxcdFxcdGlmICghY29uZmlnZnNfZGlyZW50X2lzX3JlYWR5KHNkKSlcXG4gMTY4OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAxNjk6XFx0XFxuIDE3MDpcXHRcXHRmcmFnID0gZ2V0X2ZyYWdtZW50KHNkLVxcdTAwM2VzX2ZyYWcpO1xcbiAxNzE6XFx0XFx0aWYgKCFmcmFnKVxcbiAxNzI6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDE3MzpcXHRcXG4gMTc0OlxcdFxcdHBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS1cXHUwMDNlZF9wYXJlbnQpO1xcbiAxNzU6XFx0XFx0dHlwZSA9IHBhcmVudF9pdGVtLVxcdTAwM2VjaV90eXBlO1xcbiAxNzY6XFx0XFxuIDE3NzpcXHRcXHRyZXQgPSAtRVBFUk07XFxuIDE3ODpcXHRcXHRpZiAoIXR5cGUgfHwgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzIHx8XFxuIDE3OTpcXHRcXHQgICAgIXR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2VhbGxvd19saW5rKVxcbiAxODA6XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbiAxODE6XFx0XFxuIDE4MjpcXHRcXHQvKlxcbiAxODM6XFx0XFx0ICogUGluIHRoZSBjb250YWluaW5nIG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuXFxuIDE4NDpcXHRcXHQgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay5cXG4gMTg1OlxcdFxcdCAqL1xcbiAxODY6XFx0XFx0aWYgKHNkLVxcdTAwM2VzX3R5cGUgXFx1MDAyNiBDT05GSUdGU19VU0VUX0RFRkFVTFQpIHtcXG4gMTg3OlxcdFxcdFxcdGNvbnRhaW5pbmdfaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oZGVudHJ5LVxcdTAwM2VkX3BhcmVudCk7XFxuIDE4ODpcXHRcXHRcXHRpZiAoIWNvbnRhaW5pbmdfaXRlbSkge1xcbiAxODk6XFx0XFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gMTkwOlxcdFxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gMTkxOlxcdFxcdFxcdH1cXG4gMTkyOlxcdFxcdH1cXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0LypcXG4gMTk1OlxcdFxcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxcbiAxOTY6XFx0XFx0ICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWRcXG4gMTk3OlxcdFxcdCAqIGF0IHN5c2NhbGwgdGltZSAoYXMgbGluaygyKSB3b3VsZCd2ZSBkb25lKSwgYmUgYSBkaXJlY3RvcnlcXG4gMTk4OlxcdFxcdCAqICh3aGljaCBsaW5rKDIpIHdvdWxkJ3ZlIHJlZnVzZWQgdG8gZG8pICpBTkQqIGJlIGEgZGVlcFxcbiAxOTk6XFx0XFx0ICogZnVja2luZyBtYWdpYywgbWFraW5nIHRoZSB0YXJnZXQgYnVzeSBmcm9tIHJtZGlyIFBPVi5cXG4gMjAwOlxcdFxcdCAqIHN5bWxpbmsoMikgaXMgbm90aGluZyBvZiB0aGF0IHNvcnQsIGFuZCB0aGUgbG9ja2luZyBpdFxcbiAyMDE6XFx0XFx0ICogZ2V0cyBtYXRjaGVzIHRoZSBub3JtYWwgc3ltbGluaygyKSBzZW1hbnRpY3MuICBXaXRob3V0XFxuIDIwMjpcXHRcXHQgKiBhdHRlbXB0cyB0byByZXNvbHZlIHRoZSB0YXJnZXQgKHdoaWNoIG1pZ2h0IHZlcnkgd2VsbFxcbiAyMDM6XFx0XFx0ICogbm90IGV2ZW4gZXhpc3QgeWV0KSBkb25lIHByaW9yIHRvIGxvY2tpbmcgdGhlIHBhcmVudFxcbiAyMDQ6XFx0XFx0ICogZGlyZWN0b3J5LiAgVGhpcyBwZXJ2ZXJzaW9uLCBPVE9ILCBuZWVkcyB0byByZXNvbHZlXFxuIDIwNTpcXHRcXHQgKiB0aGUgdGFyZ2V0LCB3aGljaCB3b3VsZCBsZWFkIHRvIG9idmlvdXMgZGVhZGxvY2tzIGlmXFxuIDIwNjpcXHRcXHQgKiBhdHRlbXB0ZWQgd2l0aCBhbnkgZGlyZWN0b3JpZXMgbG9ja2VkLlxcbiAyMDc6XFx0XFx0ICpcXG4gMjA4OlxcdFxcdCAqIFVuZm9ydHVuYXRlbHksIHRoYXQgZ2FyYmFnZSBpcyB1c2VybGFuZCBBQkkgYW5kIHdlIHNob3VsZCd2ZVxcbiAyMDk6XFx0XFx0ICogc2FpZCBcXFwibm9cXFwiIGJhY2sgaW4gMjAwNS4gIFRvbyBsYXRlIG5vdywgc28gd2UgZ2V0IHRvXFxuIDIxMDpcXHRcXHQgKiBwbGF5IHZlcnkgdWdseSBnYW1lcyB3aXRoIGxvY2tpbmcuXFxuIDIxMTpcXHRcXHQgKlxcbiAyMTI6XFx0XFx0ICogVHJ5ICpBTllUSElORyogb2YgdGhhdCBzb3J0IGluIG5ldyBjb2RlLCBhbmQgeW91IHdpbGxcXG4gMjEzOlxcdFxcdCAqIHJlYWxseSByZWdyZXQgaXQuICBKdXN0IGFzayB5b3Vyc2VsZiAtIHdoYXQgY291bGQgYSBCT0ZIXFxuIDIxNDpcXHRcXHQgKiBkbyB0byBtZSBhbmQgZG8gSSB3YW50IHRvIGZpbmQgaXQgb3V0IGZpcnN0LWhhbmQ/XFxuIDIxNTpcXHRcXHQgKlxcbiAyMTY6XFx0XFx0ICogIEFWLCBhIHRob3JvdWdobHkgYW5ub3llZCBiYXN0YXJkLlxcbiAyMTc6XFx0XFx0ICovXFxuIDIxODpcXHRcXHRpbm9kZV91bmxvY2soZGlyKTtcXG4gMjE5OlxcdFxcdHJldCA9IGdldF90YXJnZXQoc3ltbmFtZSwgXFx1MDAyNnRhcmdldF9pdGVtLCBkZW50cnktXFx1MDAzZWRfc2IpO1xcbiAyMjA6XFx0XFx0aW5vZGVfbG9jayhkaXIpO1xcbiAyMjE6XFx0XFx0aWYgKHJldClcXG4gMjIyOlxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZmcmFnLVxcdTAwM2VmcmFnX3NlbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjEwOjAwLjIyMTY2ODA1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NTYwOTAwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBjb25maWdmcyBTeW1saW5rIEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBgY29uZmlnZnNfc3ltbGlua2AsIGFuIGlub2RlIG9wZXJhdGlvbiBzcGVjaWZpYyB0byBjb25maWdmcy4gVGhlIHF1ZXN0aW9uIGlzOiBpcyBjb25maWdmcyBzb21ldGhpbmcgdGhhdCdzIGV2ZW4gYWNjZXNzaWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUvc3l6a2FsbGVyIHNldHVwPyBGb3J0dW5hdGVseSwgdGhlIGFuc3dlciBpcyB5ZXM7IHN5emthbGxlciBhY3RpdmVseSBmdXp6ZXMgY29uZmlnZnMuIEl0J3MgbWVzc2luZyBhcm91bmQgd2l0aCBta2Rpciwgcm1kaXIsIHN5bWxpbmtzLCBhdHRyaWJ1dGUgd3JpdGVzIOKAkyB0aGUgd2hvbGUgc2hlYmFuZyDigJMgd2l0aGluIGNvbmZpZ2ZzIG1vdW50ZWQgaW5zdGFuY2VzLCBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGNvbnNvbGUsIGFuZCB0YXJnZXQgY29yZXMuIFRoZXkgYXJlIGFsc28ganVzdCBtb3VudGluZyBjb25maWdmcyBhbmQgY3JlYXRpbmcgaXRlbXMuXG5cbk5vdywgc3BlY2lmaWNhbGx5LCB0aGVzZSBjaGFuZ2VzIGluIGBmcy9jb25maWdmcy9zeW1saW5rLmNgIG1vZGlmeSBgY29uZmlnZnNfc3ltbGlua2AuIFRoZSBjcnV4IG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIHBpbm5pbmcgdGhlIGNvbnRhaW5pbmcgaXRlbSB3aGVuIGBzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVGAgaXMgdHJ1ZS4gVGhlbiB0aGVyZSdzIHRoZSBhZGRpdGlvbiBvZiBjaGVja3MgZm9yIGBmcmFnLVx1MDAzZWZyYWdfZGVhZGAsIGBJU19ERUFERElSKGRpcilgLCBhbmQgYGRfdW5oYXNoZWQoZGVudHJ5LVx1MDAzZWRfcGFyZW50KWAgYWZ0ZXIgcmUtYWNxdWlyaW5nIHRoZSBpbm9kZSBsb2NrLiBUaGlzIGlzIGltcG9ydGFudDsgaXQgc3VnZ2VzdHMgdGhleSdyZSBhZGRyZXNzaW5nIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gYGNvbmZpZ2ZzX3N5bWxpbmtgLCBzcGVjaWZpY2FsbHkgdGhvc2UgYXJpc2luZyB3aGVuIHN5bWxpbmtzIGFyZSBjcmVhdGVkIGluIGRlZmF1bHQgZ3JvdXBzIG9yIGNvbmN1cnJlbnRseSB3aXRoIGRpcmVjdG9yeSByZW1vdmFsL3VubGlua2luZy4gSXQncyBhYm91dCBlbnN1cmluZyBkYXRhIGNvbnNpc3RlbmN5IGluIHRob3NlIGVkZ2UgY2FzZXMuXG5cblRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLCBsZXQncyBjaGVjayB0aGUgbmF0dXJlIG9mIGBjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtYC4gSXQgbG9va3MgbGlrZSBpdCBpcyBgc3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpYCwgYW5kIHRoZSBgY29uZmlnZnNfc3ltbGlua2AgaXMgbm90IHN0YXRpYywgd2hpY2ggbWVhbnMgaXQgY2FuIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhpcyBmaWxlLlxuXG5JIHNob3VsZCBwcm9iYWJseSBhbHNvIHRha2UgYSBxdWljayBsb29rIGF0IGBmcy9jb25maWdmcy9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTUzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6MTA6MDUuMDc3NzYwOTQ2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvY29uZmlnZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIENPTkZJR0ZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlLWRyaXZlbiBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW1cXFwiXFxuICAgNDpcXHRcXHRoZWxwXFxuICAgNTpcXHRcXHQgIGNvbmZpZ2ZzIGlzIGEgUkFNLWJhc2VkIGZpbGVzeXN0ZW0gdGhhdCBwcm92aWRlcyB0aGUgY29udmVyc2VcXG4gICA2OlxcdFxcdCAgb2Ygc3lzZnMncyBmdW5jdGlvbmFsaXR5LiBXaGVyZSBzeXNmcyBpcyBhIGZpbGVzeXN0ZW0tYmFzZWRcXG4gICA3OlxcdFxcdCAgdmlldyBvZiBrZXJuZWwgb2JqZWN0cywgY29uZmlnZnMgaXMgYSBmaWxlc3lzdGVtLWJhc2VkIG1hbmFnZXJcXG4gICA4OlxcdFxcdCAgb2Yga2VybmVsIG9iamVjdHMsIG9yIGNvbmZpZ19pdGVtcy5cXG4gICA5OlxcdFxcbiAgMTA6XFx0XFx0ICBCb3RoIHN5c2ZzIGFuZCBjb25maWdmcyBjYW4gYW5kIHNob3VsZCBleGlzdCB0b2dldGhlciBvbiB0aGVcXG4gIDExOlxcdFxcdCAgc2FtZSBzeXN0ZW0uIE9uZSBpcyBub3QgYSByZXBsYWNlbWVudCBmb3IgdGhlIG90aGVyLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMjoxMDowNS4wNzc4NDg3NTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTE0MjU0MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIENvbmZpZ0ZTIFN5bWxpbmsgQ3JlYXRpb24qKlxuXG5Pa2F5LCBzbyBgQ09ORklHRlNfRlNgIGlzIG5pY2UgYmVjYXVzZSBpdCdzIHN0YW5kYWxvbmUsIG5vIGRlcGVuZGVuY2llcyB0byB3b3JyeSBhYm91dCDigJMgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIGBjb25maWdmc19zeW1saW5rYCBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nPyBBYnNvbHV0ZWx5ISBJdCBoYW5kbGVzIHN5bWxpbmsgY3JlYXRpb24sIGFuZCB0aGF0IHRvdWNoZXMgY29yZSBmaWxlc3lzdGVtIGNvZGUgd2l0aGluIENvbmZpZ0ZTLiBTcGVjaWZpY2FsbHksIGl0IGludm9sdmVzIGxvY2tpbmcsIHBpbm5pbmcsIGFuZCBsaXZlbGluZXNzIGNoZWNrcyBkdXJpbmcgdGhlIHN5bWxpbmsgY3JlYXRpb24gcHJvY2Vzcy4gQW5kLCBpbXBvcnRhbnRseSwgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGBzeW1saW5rYCBzeXNjYWxsLCBhcyBsb25nIGFzIGEgQ29uZmlnRlMgbW91bnQgaXMgcHJlc2VudC4gVGhhdCdzIGEgc29saWQgYXR0YWNrIHZlY3Rvci5cblxuTGV0J3MgbmFpbCBkb3duIG91ciBmb2N1cy4gT3VyIHByaW1hcnkgc3ltYm9sIGlzIGBjb25maWdmc19zeW1saW5rYC4gTm93LCBhYm91dCB0aGF0IGhlbHBlciBmdW5jdGlvbiwgYGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW1gIOKAkyBpcyBpdCBzdGF0aWM/IFl1cCwgaXQncyBkZWZpbmVkIGFzIGBzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICpjb25maWdmc19nZXRfY29udGFpbmluZ19pdGVtKHN0cnVjdCBkZW50cnkgKmRlbnRyeSlgLCBhbmQgbGl2ZXMgcmlnaHQgdGhlcmUgaW4gYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AuIElubGluaW5nIG1pZ2h0IGhhcHBlbiwgb3IgaXQgbWlnaHQgaGF2ZSBhIHNlcGFyYXRlIHN5bWJvbCBpZiB0aGUgY29tcGlsZXIgZGVjaWRlcyBub3QgdG8gaW5saW5lIGl0LCBidXQgYGNvbmZpZ2ZzX3N5bWxpbmtgIGl0c2VsZiBpcyBkZWZpbml0ZWx5IGEgbm9uLXN0YXRpYyBzeW1ib2wsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LiBNaWdodCBiZSBnb29kIHRvIGp1c3QgaGF2ZSBhIGxvb2sgYXQgdGhlIG90aGVyIHN5bWJvbHMgaW4gYHN5bWxpbmsuY2Agd2hpbGUgd2UncmUgYXQgaXQsIGp1c3QgdG8gc2VlIHdoYXQgZWxzZSBpcyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA1NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjEwOjExLjU5MjEwNzA0NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2NTY4MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVowLTlfXS4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvY29uZmlnZnMvc3ltbGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xOS0vKiBQcm90ZWN0cyBhdHRhY2htZW50cyBvZiBuZXcgc3ltbGlua3MgKi9cXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MjA6REVGSU5FX01VVEVYKGNvbmZpZ2ZzX3N5bWxpbmtfbXV0ZXgpO1xcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yMS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MjI6c3RhdGljIGludCBpdGVtX2RlcHRoKHN0cnVjdCBjb25maWdfaXRlbSAqIGl0ZW0pXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTIzLXtcXG4tLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yOS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmM6MzA6c3RhdGljIGludCBpdGVtX3BhdGhfbGVuZ3RoKHN0cnVjdCBjb25maWdfaXRlbSAqIGl0ZW0pXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTMxLXtcXG4tLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy00MC1cXG5mcy9jb25maWdmcy9zeW1saW5rLmM6NDE6c3RhdGljIHZvaWQgZmlsbF9pdGVtX3BhdGgoc3RydWN0IGNvbmZpZ19pdGVtICogaXRlbSwgY2hhciAqIGJ1ZmZlciwgaW50IGxlbmd0aClcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtNDIte1xcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTU1LVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzo1NjpzdGF0aWMgaW50IGNvbmZpZ2ZzX2dldF90YXJnZXRfcGF0aChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTU3LVxcdFxcdHN0cnVjdCBjb25maWdfaXRlbSAqdGFyZ2V0LCBjaGFyICpwYXRoKVxcbi0tXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTc2LVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzo3NzpzdGF0aWMgaW50IGNyZWF0ZV9saW5rKHN0cnVjdCBjb25maWdfaXRlbSAqcGFyZW50X2l0ZW0sXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTc4LVxcdFxcdCAgICAgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTE2LVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoxMTc6c3RhdGljIGludCBnZXRfdGFyZ2V0KGNvbnN0IGNoYXIgKnN5bW5hbWUsIHN0cnVjdCBjb25maWdfaXRlbSAqKnRhcmdldCxcXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTE4LVxcdFxcdCAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTMzLVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoxMzQ6c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuZnMvY29uZmlnZnMvc3ltbGluay5jLTEzNS17XFxuLS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMTQ5LVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoxNTA6aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0xNTEtXFx0XFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXFxuLS1cXG5mcy9jb25maWdmcy9zeW1saW5rLmMtMjU3LVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYzoyNTg6aW50IGNvbmZpZ2ZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbmZzL2NvbmZpZ2ZzL3N5bWxpbmsuYy0yNTkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMjoxMDoxMS42Mzk3NzI3MjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk5NDQ0MjIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2Ugbm90ZXMsIHN1bW1hcml6ZWQgYXMgYSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqUmV2aWV3aW5nIHRoZSBBbmFseXNpcyBvZiBgY29uZmlnZnNfc3ltbGlua2AqKlxuXG5SaWdodCwgc28gdGhlIG1haW4gZnVuY3Rpb24gb2YgaW50ZXJlc3QgaXMgYGNvbmZpZ2ZzX3N5bWxpbmtgLiBMZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSBzZWUgdGhlIHJlcG9ydCBoYXMgZmxhZ2dlZCBpdCBhcyBgV29ydGhGdXp6aW5nOiB0cnVlYCwgd2hpY2ggc291bmRzIHJpZ2h0IGJhc2VkIG9uIG15IGtub3dsZWRnZSBvZiB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBUaGUgcmVhc29uaW5nIHByb3ZpZGVkIGlzIHN1Y2NpbmN0OiB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBjb25maWdmc19zeW1saW5rYCB3aXRoaW4gYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AgYnkgaW1wbGVtZW50aW5nIHJlZmVyZW5jZSBwaW5uaW5nIGZvciBjb250YWluaW5nIGRlZmF1bHQgZ3JvdXBzIGFuZCBhZGRpbmcgbGl2ZWxpbmVzcyBjaGVja3MgYWZ0ZXIgcmUtYWNxdWlyaW5nIGxvY2tzLiBUaGF0J3MgYSBjbGFzc2ljIGFyZWEgZm9yIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGR1cmluZyBzeW1saW5rIGNyZWF0aW9uIGluIHRoZSBjb25maWdmcy4gR29vZCwgc2VlbXMgbGlrZSBhIHNvbGlkIGV4cGxhbmF0aW9uLiBJdCBleHBsaWNpdGx5IG1lbnRpb25zIHRoZSB1c2VyLXNwYWNlIHJlYWNoYWJpbGl0eSBvZiB0aGlzIGZ1bmN0aW9uIHZpYSBzeW1saW5rIG9wZXJhdGlvbnMsIHdoaWNoIGlzIGNydWNpYWwuXG5cblRoZSBgRm9jdXNTeW1ib2xzYCBlbnRyeSBjb25maXJtcyBgY29uZmlnZnNfc3ltbGlua2AgaXMgaW5kZWVkIHRoZSB0YXJnZXQuIEFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QsIHNwZWNpZmljYWxseSBgQ09ORklHRlNfRlNgLCBjb25maXJtcyB0aGF0IGNvbmZpZ2ZzIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgcGF0Y2ggdG8gZXZlbiBiZSByZWxldmFudC4gRXhjZWxsZW50LCBpdCdzIGFsbCBpbiBsaW5lIHdpdGggd2hhdCBJJ2QgZXhwZWN0LiBOb3cgSSBqdXN0IG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBMb29rcyBsaWtlIGEgc29saWQgcGllY2Ugb2Ygd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI2NSwiT3V0cHV0VG9rZW5zIjoxMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6MTA6MTQuNjM0MjE3OTY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMyMjEyNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZmlnZnNfc3ltbGlua1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvbmZpZ2ZzX3N5bWxpbmsgdG8gcGluIHRoZSBjb250YWluaW5nIGl0ZW0gb2YgZGVmYXVsdCBncm91cHMgYW5kIGFkZHMgbGl2ZWxpbmVzcyBjaGVja3MgYWZ0ZXIgcmUtYWNxdWlyaW5nIHRoZSBkaXJlY3RvcnkgaW5vZGUgbG9jayB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3ltbGluayBzeXNjYWxscyBvbiBjb25maWdmcyBtb3VudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25maWdmc19zeW1saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29uZmlnZnNfc3ltbGluayB0byBwaW4gdGhlIGNvbnRhaW5pbmcgaXRlbSBvZiBkZWZhdWx0IGdyb3VwcyBhbmQgYWRkcyBsaXZlbGluZXNzIGNoZWNrcyBhZnRlciByZS1hY3F1aXJpbmcgdGhlIGRpcmVjdG9yeSBpbm9kZSBsb2NrIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeW1saW5rIHN5c2NhbGxzIG9uIGNvbmZpZ2ZzIG1vdW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6MTA6MTQuNzE3NDQ4MTg5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk4Nzk0MzMzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjEwOjE0LjcxODAwOTg4OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE2OTg3Mzc3OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBhbmQgcmVmZXJlbmNlIGxpZmVjeWNsZSBpc3N1ZSBpbiBjb25maWdmc19zeW1saW5rKCkuIFNwZWNpZmljYWxseSwgaXQgcGlucyB0aGUgY29udGFpbmluZyBjb25maWdfaXRlbSBhbmQgY29uZmlnZnNfZnJhZ21lbnQgd2hpbGUgdGVtcG9yYXJpbHkgZHJvcHBpbmcgZGlyZWN0b3J5IGlub2RlIGxvY2tzIHRvIHJlc29sdmUgdGhlIHN5bWxpbmsgdGFyZ2V0LCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIGludmFsaWQgb3BlcmF0aW9ucyBvbiB1bmxpbmtlZC9kZWFkIGRlZmF1bHQgZ3JvdXBzLlxcblxcbi0gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgKGUuZy4gTE9DS0RFUCwgcmVmY291bnQgY2hlY2tpbmcpIGFyZSBmdWxseSBlcXVpcHBlZCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBVQUYsIGRvdWJsZS1wdXQsIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaC5cXG4tIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGJlY2F1c2UgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChlLmcuIGBjb250YWluaW5nX2l0ZW1gLCBgaXNfZGVhZGApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRkYTc3NzU2Y2VhNzQ0YzE5NDRlYTEzMzQ1MDBiMGNjMTcyNjk3MDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDEyOjA5OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvc3ltbGluay5jIGIvZnMvY29uZmlnZnMvc3ltbGluay5jXG5pbmRleCAzMWViMjhiMjczMDkxLi43NTA4MzI1MWJlMjJkIDEwMDY0NFxuLS0tIGEvZnMvY29uZmlnZnMvc3ltbGluay5jXG4rKysgYi9mcy9jb25maWdmcy9zeW1saW5rLmNcbkBAIC0xMzEsMTUgKzEzMSwzMyBAQCBzdGF0aWMgaW50IGdldF90YXJnZXQoY29uc3QgY2hhciAqc3ltbmFtZSwgc3RydWN0IGNvbmZpZ19pdGVtICoqdGFyZ2V0LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuK3tcbitcdHN0cnVjdCBkZW50cnkgKmNvbnRhaW5pbmdfZGVudHJ5ID0gZGVudHJ5O1xuK1x0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4rXG4rXHR3aGlsZSAoIUlTX1JPT1QoY29udGFpbmluZ19kZW50cnkpKSB7XG4rXHRcdHNkID0gY29udGFpbmluZ19kZW50cnktXHUwMDNlZF9mc2RhdGE7XG4rXHRcdGlmICghc2QgfHwgIShzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNvbnRhaW5pbmdfZGVudHJ5ID0gY29udGFpbmluZ19kZW50cnktXHUwMDNlZF9wYXJlbnQ7XG4rXHR9XG4rXHRpZiAoSVNfUk9PVChjb250YWluaW5nX2RlbnRyeSkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0cmV0dXJuIGNvbmZpZ2ZzX2dldF9jb25maWdfaXRlbShjb250YWluaW5nX2RlbnRyeSk7XG4rfVxuIFxuIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXG4ge1xuIFx0aW50IHJldDtcbiBcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xuK1x0c3RydWN0IGNvbmZpZ2ZzX2ZyYWdtZW50ICpmcmFnO1xuIFx0c3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbTtcbiBcdHN0cnVjdCBjb25maWdfaXRlbSAqdGFyZ2V0X2l0ZW0gPSBOVUxMO1xuK1x0c3RydWN0IGNvbmZpZ19pdGVtICpjb250YWluaW5nX2l0ZW0gPSBOVUxMO1xuIFx0Y29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKnR5cGU7XG4rXHRib29sIGlzX2RlYWQ7XG4gXG4gXHRzZCA9IGRlbnRyeS1cdTAwM2VkX3BhcmVudC1cdTAwM2VkX2ZzZGF0YTtcbiBcdC8qXG5AQCAtMTQ5LDYgKzE2NywxMCBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoIWNvbmZpZ2ZzX2RpcmVudF9pc19yZWFkeShzZCkpXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuK1x0ZnJhZyA9IGdldF9mcmFnbWVudChzZC1cdTAwM2VzX2ZyYWcpO1xuK1x0aWYgKCFmcmFnKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcbiBcdHBhcmVudF9pdGVtID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGRlbnRyeS1cdTAwM2VkX3BhcmVudCk7XG4gXHR0eXBlID0gcGFyZW50X2l0ZW0tXHUwMDNlY2lfdHlwZTtcbiBcbkBAIC0xNTcsNiArMTc5LDE4IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdCAgICAhdHlwZS1cdTAwM2VjdF9pdGVtX29wcy1cdTAwM2VhbGxvd19saW5rKVxuIFx0XHRnb3RvIG91dF9wdXQ7XG4gXG4rXHQvKlxuK1x0ICogUGluIHRoZSBjb250YWluaW5nIG9iamVjdCBzbyB0aGF0IHRoZSBwYXJlbnRfaXRlbSAod2hpY2ggbWF5IGJlIGFuXG4rXHQgKiBlbWJlZGRlZCBkZWZhdWx0IGdyb3VwKSBpcyBub3QgZnJlZWQgd2hpbGUgd2UgZHJvcCB0aGUgbG9jay5cbitcdCAqL1xuK1x0aWYgKHNkLVx1MDAzZXNfdHlwZSBcdTAwMjYgQ09ORklHRlNfVVNFVF9ERUZBVUxUKSB7XG4rXHRcdGNvbnRhaW5pbmdfaXRlbSA9IGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbitcdFx0aWYgKCFjb250YWluaW5nX2l0ZW0pIHtcbitcdFx0XHRyZXQgPSAtRU5PRU5UO1xuK1x0XHRcdGdvdG8gb3V0X3B1dDtcbitcdFx0fVxuK1x0fVxuK1xuIFx0LypcbiBcdCAqIFRoaXMgaXMgcmVhbGx5IHNpY2suICBXaGF0IHRoZXkgd2FudGVkIHdhcyBhIGh5YnJpZCBvZlxuIFx0ICogbGluaygyKSBhbmQgc3ltbGluaygyKSAtIHRoZXkgd2FudGVkIHRoZSB0YXJnZXQgcmVzb2x2ZWRcbkBAIC0xODcsNiArMjIxLDE2IEBAIGludCBjb25maWdmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X3B1dDtcbiBcbitcdGRvd25fcmVhZChcdTAwMjZmcmFnLVx1MDAzZWZyYWdfc2VtKTtcbitcdGlzX2RlYWQgPSBmcmFnLVx1MDAzZWZyYWdfZGVhZDtcbitcdHVwX3JlYWQoXHUwMDI2ZnJhZy1cdTAwM2VmcmFnX3NlbSk7XG4rXG4rXHRpZiAoaXNfZGVhZCB8fCBJU19ERUFERElSKGRpcikgfHxcbitcdCAgICBkX3VuaGFzaGVkKGRlbnRyeS1cdTAwM2VkX3BhcmVudCkpIHtcbitcdFx0cmV0ID0gLUVOT0VOVDtcbitcdFx0Z290byBvdXRfcHV0O1xuK1x0fVxuK1xuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX2lub2RlIHx8IGRfdW5oYXNoZWQoZGVudHJ5KSlcbiBcdFx0cmV0ID0gLUVFWElTVDtcbiBcdGVsc2VcbkBAIC0yMDMsMTAgKzI0NywxMSBAQCBpbnQgY29uZmlnZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHRcdFx0ICAgICB0YXJnZXRfaXRlbSk7XG4gXHR9XG4gXG4tXHRjb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pO1xuLVxuIG91dF9wdXQ6XG4rXHRjb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pO1xuIFx0Y29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTtcbitcdGNvbmZpZ19pdGVtX3B1dChjb250YWluaW5nX2l0ZW0pO1xuK1x0cHV0X2ZyYWdtZW50KGZyYWcpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMjoxMDoxNC43MTgwMTIwNTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODcxMzUxMDkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbmZpZ0ZTIFN5bWxpbmsgUGF0Y2ggZm9yIE1lbW9yeSBTYWZldHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBmb3IgYGZzL2NvbmZpZ2ZzL3N5bWxpbmsuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaXRzIGltcGFjdCBvbiBtZW1vcnkgc2FmZXR5LCBzcGVjaWZpY2FsbHkgd2hldGhlciBpdCBpbnRyb2R1Y2VzIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzIHRoYXQgS01TQU4gd291bGQgZmxhZywgb3IgaWYgaXQncyBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggYWRkcmVzc2luZyBsaWZldGltZSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIFVBRiwgb3IgbG9ja2luZyBpc3N1ZXMgdGhhdCBLQVNBTiBvciBMT0NLREVQIG1pZ2h0IGNhdGNoLlxuXG5Gcm9tIHRoZSBjb2RlIGRpZmYsIHRoZSBmb2N1cyBzZWVtcyB0byBiZSBhcm91bmQgYGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oKWAgYW5kIGBjb25maWdmc19zeW1saW5rKClgLiAgYGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oKWAgYXBwZWFycyB0byB0cmF2ZXJzZSB0aGUgZGVudHJ5IHRyZWUsIGxvb2tpbmcgZm9yIGEgY29udGFpbmluZyBpdGVtIGFuZCBncmFiYmluZyBhIHJlZmVyZW5jZSB1c2luZyBgY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKClgLiBUaGVuIGBjb25maWdmc19zeW1saW5rKClgIGlzIG9idGFpbmluZyB0aGUgZnJhZyBhbmQgcGlubmluZyB0aGUgY29udGFpbmluZyBpdGVtIHZpYSBgY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbSgpYC4gYGdldF90YXJnZXQoKWAgcmVzb2x2ZXMgdGhlIHN5bWxpbmsncyB0YXJnZXQuICBDcnVjaWFsbHksIGl0IHRoZW4gY2hlY2tzIGZvciBgZnJhZy1cdTAwM2VmcmFnX2RlYWRgIHVuZGVyIGEgcmVhZCBsb2NrIChgZG93bl9yZWFkKFx1MDAyNmZyYWctXHUwMDNlZnJhZ19zZW0pYCkgYW5kIGFsc28gY2hlY2tzIGlmIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGlzIGRlYWQgKGBJU19ERUFERElSKGRpcilgIG9yIGBkX3VuaGFzaGVkKC4uLilgKS4gVGhlIGltcG9ydGFudCBjYWxscyBhcmUgYGNyZWF0ZV9saW5rKClgLCBvciByZWxlYXNpbmcgcmVzb3VyY2VzIGluIGBvdXRfcHV0OmAuXG5cblRoZSBmaXggYWRkcmVzc2VzIHRoZSBzY2VuYXJpbyB3aGVyZSBkZWZhdWx0IGdyb3VwcyB3aXRoaW4gY29uZmlnZnMgYXJlIGVtYmVkZGVkIGluIHBhcmVudCBncm91cHMuIFdoZW4gcmVzb2x2aW5nIHN5bWxpbmtzIGFjcm9zcyBkaWZmZXJlbnQgZGlyZWN0b3J5IGhpZXJhcmNoaWVzLCB0aGUgb3JpZ2luYWwgbG9naWMgY291bGQgbGVhZCB0byBsb2NrcyBiZWluZyBkcm9wcGVkIHByZW1hdHVyZWx5LCBvciBkZWZhdWx0IGdyb3VwcyBiZWluZyB1bmxpbmtlZCBvciBmcmVlZCBjb25jdXJyZW50bHksIGNhdXNpbmcgVUFGcyBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHN5bWxpbmsgY3JlYXRpb24uIFRoZSBwYXRjaCBhaW1zIHRvIHByZXZlbnQgdGhpcyBieSBwaW5uaW5nIHRoZSBjb250YWluaW5nIGl0ZW0gKHVzaW5nIHJlZmNvdW50aW5nKSBhbmQgY2hlY2tpbmcgaWYgdGhlIGZyYWdtZW50IG9yIGRpcmVjdG9yeSBpcyBcImRlYWRcIiBiZWZvcmUgY29udGludWluZy5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQncyBsb29rIGF0IHRoZSB2YXJpYWJsZXMgaW5zaWRlIGBjb25maWdmc19zeW1saW5rYDogYHJldGAsIGBzZGAsIGBmcmFnYCwgYHBhcmVudF9pdGVtYCwgYHRhcmdldF9pdGVtYCwgYGNvbnRhaW5pbmdfaXRlbWAsIGB0eXBlYCwgYW5kIGBpc19kZWFkYC5cblxuYGlzX2RlYWRgIGlzIGNyaXRpY2FsLCBhcyBpdCBkZXBlbmRzIG9uIHRoZSBmcmFnbWVudCdzIHN0YXRlOlxuXG5gYGBjXG5kb3duX3JlYWQoXHUwMDI2ZnJhZy1cdTAwM2VmcmFnX3NlbSk7XG5pc19kZWFkID0gZnJhZy1cdTAwM2VmcmFnX2RlYWQ7XG51cF9yZWFkKFx1MDAyNmZyYWctXHUwMDNlZnJhZ19zZW0pO1xuYGBgXG5cblNlZW1zIHRoYXQgYGlzX2RlYWRgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkIGluIHRoZSBjb25kaXRpb25hbCBjaGVjay4gYGNvbnRhaW5pbmdfaXRlbWAgYW5kIGB0YXJnZXRfaXRlbWAgYXJlIGluaXRpYWxpemVkIHRvIE5VTEwuIGBmcmFnYCBjb21lcyBmcm9tIGBnZXRfZnJhZ21lbnQoKWAuIEZyb20gdGhlIGNvZGUgc25pcHBldCBhbG9uZSwgZXZlcnl0aGluZyBsb29rcyBpbml0aWFsaXplZC4gSSBkb24ndCBzZWUgYW55IG9idmlvdXMgYWxsb2NhdGlvbnMgKGttYWxsb2Mgd2l0aG91dCBtZW1zZXQva3phbGxvYyksIGBjb3B5X3RvX3VzZXJgIGNhbGxzLCBwYWRkaW5nIGxlYWtzLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZnMvY29uZmlnZnMvc3ltbGluay5jYCBhcyB3ZWxsIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIHNvbWV0aGluZy4gIEEgcXVpY2sgcmVhZC1maWxlIG9wZXJhdGlvbiBzaG91bGQgZ2l2ZSBtZSBlbm91Z2ggY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAxOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjEwOjIzLjQzMTUyNTkzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvY29uZmlnZnMvc3ltbGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMjA6XFx0XFx0c3RydWN0IHBhdGggcGF0aCBfX2ZyZWUocGF0aF9wdXQpID0ge307XFxuIDEyMTpcXHRcXHRpbnQgcmV0O1xcbiAxMjI6XFx0XFxuIDEyMzpcXHRcXHRyZXQgPSBrZXJuX3BhdGgoc3ltbmFtZSwgTE9PS1VQX0ZPTExPV3xMT09LVVBfRElSRUNUT1JZLCBcXHUwMDI2cGF0aCk7XFxuIDEyNDpcXHRcXHRpZiAocmV0KVxcbiAxMjU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTI2OlxcdFxcdGlmIChwYXRoLmRlbnRyeS1cXHUwMDNlZF9zYiAhPSBzYilcXG4gMTI3OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIDEyODpcXHRcXHQqdGFyZ2V0ID0gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKHBhdGguZGVudHJ5KTtcXG4gMTI5OlxcdFxcdGlmICghKnRhcmdldClcXG4gMTMwOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAxMzE6XFx0XFx0cmV0dXJuIDA7XFxuIDEzMjpcXHR9XFxuIDEzMzpcXHRcXG4gMTM0OlxcdHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiAxMzU6XFx0e1xcbiAxMzY6XFx0XFx0c3RydWN0IGRlbnRyeSAqY29udGFpbmluZ19kZW50cnkgPSBkZW50cnk7XFxuIDEzNzpcXHRcXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcXG4gMTM4OlxcdFxcbiAxMzk6XFx0XFx0d2hpbGUgKCFJU19ST09UKGNvbnRhaW5pbmdfZGVudHJ5KSkge1xcbiAxNDA6XFx0XFx0XFx0c2QgPSBjb250YWluaW5nX2RlbnRyeS1cXHUwMDNlZF9mc2RhdGE7XFxuIDE0MTpcXHRcXHRcXHRpZiAoIXNkIHx8ICEoc2QtXFx1MDAzZXNfdHlwZSBcXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkpXFxuIDE0MjpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTQzOlxcdFxcdFxcdGNvbnRhaW5pbmdfZGVudHJ5ID0gY29udGFpbmluZ19kZW50cnktXFx1MDAzZWRfcGFyZW50O1xcbiAxNDQ6XFx0XFx0fVxcbiAxNDU6XFx0XFx0aWYgKElTX1JPT1QoY29udGFpbmluZ19kZW50cnkpKVxcbiAxNDY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDE0NzpcXHRcXHRyZXR1cm4gY29uZmlnZnNfZ2V0X2NvbmZpZ19pdGVtKGNvbnRhaW5pbmdfZGVudHJ5KTtcXG4gMTQ4OlxcdH1cXG4gMTQ5OlxcdFxcbiAxNTA6XFx0aW50IGNvbmZpZ2ZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiAxNTE6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUpXFxuIDE1MjpcXHR7XFxuIDE1MzpcXHRcXHRpbnQgcmV0O1xcbiAxNTQ6XFx0XFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XFxuIDE1NTpcXHRcXHRzdHJ1Y3QgY29uZmlnZnNfZnJhZ21lbnQgKmZyYWc7XFxuIDE1NjpcXHRcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKnBhcmVudF9pdGVtO1xcbiAxNTc6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICp0YXJnZXRfaXRlbSA9IE5VTEw7XFxuIDE1ODpcXHRcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKmNvbnRhaW5pbmdfaXRlbSA9IE5VTEw7XFxuIDE1OTpcXHRcXHRjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSAqdHlwZTtcXG4gMTYwOlxcdFxcdGJvb2wgaXNfZGVhZDtcXG4gMTYxOlxcdFxcbiAxNjI6XFx0XFx0c2QgPSBkZW50cnktXFx1MDAzZWRfcGFyZW50LVxcdTAwM2VkX2ZzZGF0YTtcXG4gMTYzOlxcdFxcdC8qXFxuIDE2NDpcXHRcXHQgKiBGYWtlIGludmlzaWJpbGl0eSBpZiBkaXIgYmVsb25ncyB0byBhIGdyb3VwL2RlZmF1bHQgZ3JvdXBzIGhpZXJhcmNoeVxcbiAxNjU6XFx0XFx0ICogYmVpbmcgYXR0YWNoZWRcXG4gMTY2OlxcdFxcdCAqL1xcbiAxNjc6XFx0XFx0aWYgKCFjb25maWdmc19kaXJlbnRfaXNfcmVhZHkoc2QpKVxcbiAxNjg6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuIDE2OTpcXHRcXG4gMTcwOlxcdFxcdGZyYWcgPSBnZXRfZnJhZ21lbnQoc2QtXFx1MDAzZXNfZnJhZyk7XFxuIDE3MTpcXHRcXHRpZiAoIWZyYWcpXFxuIDE3MjpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gMTczOlxcdFxcbiAxNzQ6XFx0XFx0cGFyZW50X2l0ZW0gPSBjb25maWdmc19nZXRfY29uZmlnX2l0ZW0oZGVudHJ5LVxcdTAwM2VkX3BhcmVudCk7XFxuIDE3NTpcXHRcXHR0eXBlID0gcGFyZW50X2l0ZW0tXFx1MDAzZWNpX3R5cGU7XFxuIDE3NjpcXHRcXG4gMTc3OlxcdFxcdHJldCA9IC1FUEVSTTtcXG4gMTc4OlxcdFxcdGlmICghdHlwZSB8fCAhdHlwZS1cXHUwMDNlY3RfaXRlbV9vcHMgfHxcXG4gMTc5OlxcdFxcdCAgICAhdHlwZS1cXHUwMDNlY3RfaXRlbV9vcHMtXFx1MDAzZWFsbG93X2xpbmspXFxuIDE4MDpcXHRcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIDE4MTpcXHRcXG4gMTgyOlxcdFxcdC8qXFxuIDE4MzpcXHRcXHQgKiBQaW4gdGhlIGNvbnRhaW5pbmcgb2JqZWN0IHNvIHRoYXQgdGhlIHBhcmVudF9pdGVtICh3aGljaCBtYXkgYmUgYW5cXG4gMTg0OlxcdFxcdCAqIGVtYmVkZGVkIGRlZmF1bHQgZ3JvdXApIGlzIG5vdCBmcmVlZCB3aGlsZSB3ZSBkcm9wIHRoZSBsb2NrLlxcbiAxODU6XFx0XFx0ICovXFxuIDE4NjpcXHRcXHRpZiAoc2QtXFx1MDAzZXNfdHlwZSBcXHUwMDI2IENPTkZJR0ZTX1VTRVRfREVGQVVMVCkge1xcbiAxODc6XFx0XFx0XFx0Y29udGFpbmluZ19pdGVtID0gY29uZmlnZnNfZ2V0X2NvbnRhaW5pbmdfaXRlbShkZW50cnktXFx1MDAzZWRfcGFyZW50KTtcXG4gMTg4OlxcdFxcdFxcdGlmICghY29udGFpbmluZ19pdGVtKSB7XFxuIDE4OTpcXHRcXHRcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbiAxOTA6XFx0XFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbiAxOTE6XFx0XFx0XFx0fVxcbiAxOTI6XFx0XFx0fVxcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHQvKlxcbiAxOTU6XFx0XFx0ICogVGhpcyBpcyByZWFsbHkgc2ljay4gIFdoYXQgdGhleSB3YW50ZWQgd2FzIGEgaHlicmlkIG9mXFxuIDE5NjpcXHRcXHQgKiBsaW5rKDIpIGFuZCBzeW1saW5rKDIpIC0gdGhleSB3YW50ZWQgdGhlIHRhcmdldCByZXNvbHZlZFxcbiAxOTc6XFx0XFx0ICogYXQgc3lzY2FsbCB0aW1lIChhcyBsaW5rKDIpIHdvdWxkJ3ZlIGRvbmUpLCBiZSBhIGRpcmVjdG9yeVxcbiAxOTg6XFx0XFx0ICogKHdoaWNoIGxpbmsoMikgd291bGQndmUgcmVmdXNlZCB0byBkbykgKkFORCogYmUgYSBkZWVwXFxuIDE5OTpcXHRcXHQgKiBmdWNraW5nIG1hZ2ljLCBtYWtpbmcgdGhlIHRhcmdldCBidXN5IGZyb20gcm1kaXIgUE9WLlxcbiAyMDA6XFx0XFx0ICogc3ltbGluaygyKSBpcyBub3RoaW5nIG9mIHRoYXQgc29ydCwgYW5kIHRoZSBsb2NraW5nIGl0XFxuIDIwMTpcXHRcXHQgKiBnZXRzIG1hdGNoZXMgdGhlIG5vcm1hbCBzeW1saW5rKDIpIHNlbWFudGljcy4gIFdpdGhvdXRcXG4gMjAyOlxcdFxcdCAqIGF0dGVtcHRzIHRvIHJlc29sdmUgdGhlIHRhcmdldCAod2hpY2ggbWlnaHQgdmVyeSB3ZWxsXFxuIDIwMzpcXHRcXHQgKiBub3QgZXZlbiBleGlzdCB5ZXQpIGRvbmUgcHJpb3IgdG8gbG9ja2luZyB0aGUgcGFyZW50XFxuIDIwNDpcXHRcXHQgKiBkaXJlY3RvcnkuICBUaGlzIHBlcnZlcnNpb24sIE9UT0gsIG5lZWRzIHRvIHJlc29sdmVcXG4gMjA1OlxcdFxcdCAqIHRoZSB0YXJnZXQsIHdoaWNoIHdvdWxkIGxlYWQgdG8gb2J2aW91cyBkZWFkbG9ja3MgaWZcXG4gMjA2OlxcdFxcdCAqIGF0dGVtcHRlZCB3aXRoIGFueSBkaXJlY3RvcmllcyBsb2NrZWQuXFxuIDIwNzpcXHRcXHQgKlxcbiAyMDg6XFx0XFx0ICogVW5mb3J0dW5hdGVseSwgdGhhdCBnYXJiYWdlIGlzIHVzZXJsYW5kIEFCSSBhbmQgd2Ugc2hvdWxkJ3ZlXFxuIDIwOTpcXHRcXHQgKiBzYWlkIFxcXCJub1xcXCIgYmFjayBpbiAyMDA1LiAgVG9vIGxhdGUgbm93LCBzbyB3ZSBnZXQgdG9cXG4gMjEwOlxcdFxcdCAqIHBsYXkgdmVyeSB1Z2x5IGdhbWVzIHdpdGggbG9ja2luZy5cXG4gMjExOlxcdFxcdCAqXFxuIDIxMjpcXHRcXHQgKiBUcnkgKkFOWVRISU5HKiBvZiB0aGF0IHNvcnQgaW4gbmV3IGNvZGUsIGFuZCB5b3Ugd2lsbFxcbiAyMTM6XFx0XFx0ICogcmVhbGx5IHJlZ3JldCBpdC4gIEp1c3QgYXNrIHlvdXJzZWxmIC0gd2hhdCBjb3VsZCBhIEJPRkhcXG4gMjE0OlxcdFxcdCAqIGRvIHRvIG1lIGFuZCBkbyBJIHdhbnQgdG8gZmluZCBpdCBvdXQgZmlyc3QtaGFuZD9cXG4gMjE1OlxcdFxcdCAqXFxuIDIxNjpcXHRcXHQgKiAgQVYsIGEgdGhvcm91Z2hseSBhbm5veWVkIGJhc3RhcmQuXFxuIDIxNzpcXHRcXHQgKi9cXG4gMjE4OlxcdFxcdGlub2RlX3VubG9jayhkaXIpO1xcbiAyMTk6XFx0XFx0cmV0ID0gZ2V0X3RhcmdldChzeW1uYW1lLCBcXHUwMDI2dGFyZ2V0X2l0ZW0sIGRlbnRyeS1cXHUwMDNlZF9zYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjEwOjIzLjQzMTYyODY1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzI4MjgwNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IGRlZXBseSBmYW1pbGlhciB3aXRoIHRoZSBMaW51eCBrZXJuZWwgYW5kIHRoZSBjb25maWdmcyBzdWJzeXN0ZW0uXG5cbioqRGl2aW5nIGludG8gdGhlIGBzeW1saW5rLmNgIERldGFpbHMqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBgZnMvY29uZmlnZnMvc3ltbGluay5jYCBhZ2Fpbi4gU2VlbXMgbGlrZSB3ZSdyZSB6ZXJvaW5nIGluIG9uIGEgcGFydGljdWxhciBhc3BlY3Qgb2YgdGhlIHN5bWJvbGljIGxpbmsgZnVuY3Rpb25hbGl0eSB3aXRoaW4gY29uZmlnZnMuIExldCBtZSBncmFiIG15IG1lbnRhbCBtYXAgb2YgdGhlIGNvZGUuLi4gbGluZXMgMjIwIHRvIDI2MC4gVGhhdCB1c3VhbGx5IGNvdmVycyBhIGNydWNpYWwgY2h1bmssIG9mdGVuIGRlYWxpbmcgd2l0aCBlaXRoZXIgdGhlIGNyZWF0aW9uLCBoYW5kbGluZyBvciBkZWxldGlvbiBvZiBzeW1ib2xpYyBsaW5rcyB3aXRoaW4gY29uZmlnZnMuIE15IGd1ZXNzIGlzIGl0IGRlYWxzIHdpdGggc2V0dGluZyB0aGUgdGFyZ2V0IG9mIHRoZSBzeW1saW5rLCBtYXliZSB3aXRoIGVycm9yIGhhbmRsaW5nIGZvciBiYWQgcGF0aHMsIG9yIHBlcm1pc3Npb25zLiBJdOKAmXMgYWxzbyBwb3NzaWJsZSB0aGUgY29kZSBhZGRyZXNzZXMgYXNwZWN0cyBvZiBzeW1saW5rIHJlc29sdXRpb24gd2l0aGluIHRoZSBjb25maWdmcyBoaWVyYXJjaHkuIE5lZWQgdG8gZGl2ZSBpbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGJlaW5nIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEyOjEwOjI1Ljc1OTkxMjE2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9jb25maWdmcy9zeW1saW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjIwOlxcdFxcdGlub2RlX2xvY2soZGlyKTtcXG4gMjIxOlxcdFxcdGlmIChyZXQpXFxuIDIyMjpcXHRcXHRcXHRnb3RvIG91dF9wdXQ7XFxuIDIyMzpcXHRcXG4gMjI0OlxcdFxcdGRvd25fcmVhZChcXHUwMDI2ZnJhZy1cXHUwMDNlZnJhZ19zZW0pO1xcbiAyMjU6XFx0XFx0aXNfZGVhZCA9IGZyYWctXFx1MDAzZWZyYWdfZGVhZDtcXG4gMjI2OlxcdFxcdHVwX3JlYWQoXFx1MDAyNmZyYWctXFx1MDAzZWZyYWdfc2VtKTtcXG4gMjI3OlxcdFxcbiAyMjg6XFx0XFx0aWYgKGlzX2RlYWQgfHwgSVNfREVBRERJUihkaXIpIHx8XFxuIDIyOTpcXHRcXHQgICAgZF91bmhhc2hlZChkZW50cnktXFx1MDAzZWRfcGFyZW50KSkge1xcbiAyMzA6XFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gMjMxOlxcdFxcdFxcdGdvdG8gb3V0X3B1dDtcXG4gMjMyOlxcdFxcdH1cXG4gMjMzOlxcdFxcbiAyMzQ6XFx0XFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9pbm9kZSB8fCBkX3VuaGFzaGVkKGRlbnRyeSkpXFxuIDIzNTpcXHRcXHRcXHRyZXQgPSAtRUVYSVNUO1xcbiAyMzY6XFx0XFx0ZWxzZVxcbiAyMzc6XFx0XFx0XFx0cmV0ID0gaW5vZGVfcGVybWlzc2lvbihcXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLFxcbiAyMzg6XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcXG4gMjM5OlxcdFxcdGlmICghcmV0KVxcbiAyNDA6XFx0XFx0XFx0cmV0ID0gdHlwZS1cXHUwMDNlY3RfaXRlbV9vcHMtXFx1MDAzZWFsbG93X2xpbmsocGFyZW50X2l0ZW0sIHRhcmdldF9pdGVtKTtcXG4gMjQxOlxcdFxcdGlmICghcmV0KSB7XFxuIDI0MjpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjb25maWdmc19zeW1saW5rX211dGV4KTtcXG4gMjQzOlxcdFxcdFxcdHJldCA9IGNyZWF0ZV9saW5rKHBhcmVudF9pdGVtLCB0YXJnZXRfaXRlbSwgZGVudHJ5KTtcXG4gMjQ0OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y29uZmlnZnNfc3ltbGlua19tdXRleCk7XFxuIDI0NTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHR5cGUtXFx1MDAzZWN0X2l0ZW1fb3BzLVxcdTAwM2Vkcm9wX2xpbmspXFxuIDI0NjpcXHRcXHRcXHRcXHR0eXBlLVxcdTAwM2VjdF9pdGVtX29wcy1cXHUwMDNlZHJvcF9saW5rKHBhcmVudF9pdGVtLFxcbiAyNDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0YXJnZXRfaXRlbSk7XFxuIDI0ODpcXHRcXHR9XFxuIDI0OTpcXHRcXG4gMjUwOlxcdG91dF9wdXQ6XFxuIDI1MTpcXHRcXHRjb25maWdfaXRlbV9wdXQodGFyZ2V0X2l0ZW0pO1xcbiAyNTI6XFx0XFx0Y29uZmlnX2l0ZW1fcHV0KHBhcmVudF9pdGVtKTtcXG4gMjUzOlxcdFxcdGNvbmZpZ19pdGVtX3B1dChjb250YWluaW5nX2l0ZW0pO1xcbiAyNTQ6XFx0XFx0cHV0X2ZyYWdtZW50KGZyYWcpO1xcbiAyNTU6XFx0XFx0cmV0dXJuIHJldDtcXG4gMjU2OlxcdH1cXG4gMjU3OlxcdFxcbiAyNTg6XFx0aW50IGNvbmZpZ2ZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiAyNTk6XFx0e1xcbiAyNjA6XFx0XFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2QgPSBkZW50cnktXFx1MDAzZWRfZnNkYXRhLCAqdGFyZ2V0X3NkO1xcbiAyNjE6XFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICpwYXJlbnRfaXRlbTtcXG4gMjYyOlxcdFxcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICp0eXBlO1xcbiAyNjM6XFx0XFx0aW50IHJldDtcXG4gMjY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMjoxMDoyNS43NjAwMDM0ODZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTk0NTM2MTYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29uZmlnZnMgUGF0Y2gncyBTYWZldHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRpbmcgYGNvbmZpZ2ZzX2dldF9jb250YWluaW5nX2l0ZW0oKWAgdG8gdGhlIGNvZGUsIGJhc2ljYWxseSB0byBuYXZpZ2F0ZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgZmluZCB0aGUgYGNvbmZpZ19pdGVtYCB0aGF0IGNvbnRhaW5zIGEgZGVmYXVsdCBncm91cC4gSXQncyBhbHNvIGdyYWJiaW5nIGEgcmVmZXJlbmNlIHRvIGBzZC1cdTAwM2VzX2ZyYWdgIHVzaW5nIGBnZXRfZnJhZ21lbnQoKWAuIFRoZSBjb2RlIHRoZW4gcGlucyBgY29udGFpbmluZ19pdGVtYCBpZiBhIHNwZWNpZmljIGZsYWcgaXMgc2V0IChgQ09ORklHRlNfVVNFVF9ERUZBVUxUYCkgdG8gYXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gQWZ0ZXIgZ2V0dGluZyB0aGUgaW5vZGUgbG9jayBhZ2FpbiwgaXQgdGhlbiBjaGVja3MgZm9yIGEgZmV3IFwiZGVhZFwiIHN0YXRlczogYGZyYWctXHUwMDNlZnJhZ19kZWFkYCwgYElTX0RFQURESVIoZGlyKWAsIGFuZCBgZF91bmhhc2hlZChkZW50cnktXHUwMDNlZF9wYXJlbnQpYC4gRmluYWxseSwgaXQgcmVsZWFzZXMgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIGl0ZW1zIGl0IGdvdCwgaW5jbHVkaW5nIHRoZSBmcmFnbWVudC5cblxuTm93LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgcmVsZXZhbnQgaGVyZS4gTGV0J3MgYXBwbHkgdGhlIEtNU0FOIGNyaXRlcmlhLiBEb2VzIGl0IGludHJvZHVjZSBvciBtb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2U/IE5vLCBub3QgdGhhdCBJIGNhbiBzZWUuIERvZXMgaXQgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGZvciBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmc/IE5vLCB0aGUgdmFyaWFibGVzIGFyZSBhbGwgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgYGlzX2RlYWRgIGNoZWNrIGNvbWVzIGZyb20gYW4gZXhpc3RpbmcgYm9vbGVhbiBmaWVsZCBpbnNpZGUgYGZyYWdgLiBBcmUgdGhlcmUgYW55IG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHdpdGhvdXQgcHJvcGVyIGluaXRpYWxpemF0aW9uPyBOb3BlLCBubyBuZXcgYWxsb2NhdGlvbnMuIERvZXMgaXQgY2hhbmdlIGFueSBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGJ1Z3MgYWRkcmVzc2VkIGFyZSBjbGVhcmx5IGNvbmN1cnJlbmN5LCB1c2UtYWZ0ZXItZnJlZSwgYW5kIHJlZmVyZW5jZSBsaWZldGltZSBpc3N1ZXMgZHVyaW5nIHN5bWxpbmsgY3JlYXRpb24gaW4gY29uZmlnZnMuIEknbSBzZWVpbmcgdGhhdCBLTVNBTiBpc24ndCB0aGUgcmlnaHQgdG9vbCBmb3IgdGhlc2UgaXNzdWVzLiBLQVNBTiBpcyBiZXR0ZXIuXG5cblRoZSBpc3N1ZXMgdGhpcyBwYXRjaCB0YWNrbGVzIGFyZSBjbGVhcmx5IHJlbGF0ZWQgdG8gY29uY3VycmVuY3ksIHVzZS1hZnRlci1mcmVlLCBhbmQgcmVmZXJlbmNlIGxpZmV0aW1lcyBkdXJpbmcgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgc3ltbGlua3MuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSBkcm9wcGluZyBvciBmcmVlaW5nIGEgcGFyZW50IGl0ZW0gd2hpbGUgdGhlIGlub2RlIGxvY2sgd2FzIGJlaW5nIHVubG9ja2VkIHRvIHJlc29sdmUgdGhlIHN5bWxpbmsgdGFyZ2V0LiBUaGlzIHBhdGNoIHBpbnMgdGhlIHBhcmVudCwgYW5kIHRoZW4gZG9lcyBtb3JlIGNoZWNrcy4gTWVtb3J5IGxpZmVjeWNsZSBhbmQgdXNlLWFmdGVyLWZyZWUgcHJvYmxlbXMgYXJlIGVhc2lseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHRvb2xzIGxpa2UgTE9DS0RFUC5cblxuS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBkZWFscyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBzdHJ1Y3R1cmUgcGFkZGluZyBsZWFrcywgYW5kIGFsdGVyZWQgZGF0YSBsZW5ndGgvY29weSBsb2dpYy4gV2UgZG9uJ3QgaGF2ZSB0aG9zZSBpc3N1ZXMgaGVyZS4gQWxsIHZhcmlhYmxlcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBJJ20gY29uZmlkZW50IGluIHRoYXQgYXNzZXNzbWVudCwgYW5kIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NTYsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTI6MTA6MzEuNzA1MzY3MzI3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBhbmQgcmVmZXJlbmNlIGxpZmVjeWNsZSBpc3N1ZSBpbiBjb25maWdmc19zeW1saW5rKCkuIFNwZWNpZmljYWxseSwgaXQgcGlucyB0aGUgY29udGFpbmluZyBjb25maWdfaXRlbSBhbmQgY29uZmlnZnNfZnJhZ21lbnQgd2hpbGUgdGVtcG9yYXJpbHkgZHJvcHBpbmcgZGlyZWN0b3J5IGlub2RlIGxvY2tzIHRvIHJlc29sdmUgdGhlIHN5bWxpbmsgdGFyZ2V0LCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIChVQUYpIG9yIGludmFsaWQgb3BlcmF0aW9ucyBvbiB1bmxpbmtlZC9kZWFkIGRlZmF1bHQgZ3JvdXBzLlxcblxcbi0gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgKGUuZy4gTE9DS0RFUCwgcmVmY291bnQgY2hlY2tpbmcpIGFyZSBmdWxseSBlcXVpcHBlZCB0byBkZXRlY3QgYW55IHBvdGVudGlhbCBVQUYsIGRvdWJsZS1wdXQsIG9yIGxvY2tpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaC5cXG4tIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGJlY2F1c2UgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gQWxsIG5ld2x5IGludHJvZHVjZWQgbG9jYWwgdmFyaWFibGVzIChlLmcuIGBjb250YWluaW5nX2l0ZW1gLCBgaXNfZGVhZGApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGFuZCByZWZlcmVuY2UgbGlmZWN5Y2xlIGlzc3VlIGluIGNvbmZpZ2ZzX3N5bWxpbmsoKS4gU3BlY2lmaWNhbGx5LCBpdCBwaW5zIHRoZSBjb250YWluaW5nIGNvbmZpZ19pdGVtIGFuZCBjb25maWdmc19mcmFnbWVudCB3aGlsZSB0ZW1wb3JhcmlseSBkcm9wcGluZyBkaXJlY3RvcnkgaW5vZGUgbG9ja3MgdG8gcmVzb2x2ZSB0aGUgc3ltbGluayB0YXJnZXQsIHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgKFVBRikgb3IgaW52YWxpZCBvcGVyYXRpb25zIG9uIHVubGlua2VkL2RlYWQgZGVmYXVsdCBncm91cHMuXFxuXFxuLSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyAoZS5nLiBMT0NLREVQLCByZWZjb3VudCBjaGVja2luZykgYXJlIGZ1bGx5IGVxdWlwcGVkIHRvIGRldGVjdCBhbnkgcG90ZW50aWFsIFVBRiwgZG91YmxlLXB1dCwgb3IgbG9ja2luZyBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHBhdGNoLlxcbi0gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgYmVjYXVzZSB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSBoYW5kbGluZywgc3RydWN0dXJlIHBhZGRpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBsb2NhbCB2YXJpYWJsZXMgKGUuZy4gYGNvbnRhaW5pbmdfaXRlbWAsIGBpc19kZWFkYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowspdw5[1] Phase: Succeeded StartedAt: 2026-09-04 12:10:43 +0000 UTC FinishedAt: 2026-09-04 12:10:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 12:10:43 +0000 UTC FinishedAt: 2026-09-04 12:10:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2] Phase: Succeeded StartedAt: 2026-09-04 12:10:43 +0000 UTC FinishedAt: 2026-09-04 15:51:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 12:10:43 +0000 UTC FinishedAt: 2026-09-04 15:51:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 12:10:43 +0000 UTC FinishedAt: 2026-09-04 12:10:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 12:10:43 +0000 UTC FinishedAt: 2026-09-04 12:10:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowspdw5/series-workflowspdw5-convert-artifact-1023781929/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 12:10:53 +0000 UTC FinishedAt: 2026-09-04 12:27:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 12:10:53 +0000 UTC FinishedAt: 2026-09-04 12:27:39 +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:*50c96a4e-475f-409d-9a85-b9e418cd9c51,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-workflowspdw5/series-workflowspdw5-convert-artifact-1023781929/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": "b039b21f-5617-41ad-975f-1e68e7e22c49", "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-workflowspdw5/series-workflowspdw5-build-action-905712775/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 12:10:53 +0000 UTC FinishedAt: 2026-09-04 12:27:29 +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:*50c96a4e-475f-409d-9a85-b9e418cd9c51,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-workflowspdw5/series-workflowspdw5-convert-artifact-1023781929/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": "b039b21f-5617-41ad-975f-1e68e7e22c49", "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-workflowspdw5/series-workflowspdw5-build-action-905712775/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 12:27:39 +0000 UTC FinishedAt: 2026-09-04 12:27:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 12:27:39 +0000 UTC FinishedAt: 2026-09-04 12:27:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 12:27:39 +0000 UTC FinishedAt: 2026-09-04 12:27:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 12:27:39 +0000 UTC FinishedAt: 2026-09-04 12:27:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowspdw5/series-workflowspdw5-convert-artifact-3206603708/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 12:27:49 +0000 UTC FinishedAt: 2026-09-04 12:29:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 12:27:49 +0000 UTC FinishedAt: 2026-09-04 12:29:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b039b21f-5617-41ad-975f-1e68e7e22c49,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-workflowspdw5/series-workflowspdw5-build-action-905712775/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-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 12:29:53 +0000 UTC FinishedAt: 2026-09-04 12:29:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 12:29:53 +0000 UTC FinishedAt: 2026-09-04 12:29:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 12:29:53 +0000 UTC FinishedAt: 2026-09-04 12:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 12:29:53 +0000 UTC FinishedAt: 2026-09-04 12:46:24 +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:*50c96a4e-475f-409d-9a85-b9e418cd9c51,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-workflowspdw5/series-workflowspdw5-convert-artifact-3206603708/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": "5ad5e833-fbe9-4161-8047-a0e18cdb70f1", "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-workflowspdw5/series-workflowspdw5-build-action-2400497176/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 12:29:53 +0000 UTC FinishedAt: 2026-09-04 12:46:14 +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:*50c96a4e-475f-409d-9a85-b9e418cd9c51,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-workflowspdw5/series-workflowspdw5-convert-artifact-3206603708/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": "5ad5e833-fbe9-4161-8047-a0e18cdb70f1", "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-workflowspdw5/series-workflowspdw5-build-action-2400497176/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 12:46:24 +0000 UTC FinishedAt: 2026-09-04 12:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 12:46:24 +0000 UTC FinishedAt: 2026-09-04 12:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 12:46:24 +0000 UTC FinishedAt: 2026-09-04 12:48:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 12:46:24 +0000 UTC FinishedAt: 2026-09-04 12:48:13 +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:*5ad5e833-fbe9-4161-8047-a0e18cdb70f1,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-workflowspdw5/series-workflowspdw5-build-action-2400497176/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-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 12:48:22 +0000 UTC FinishedAt: 2026-09-04 15:51:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 12:48:22 +0000 UTC FinishedAt: 2026-09-04 15:51:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"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:*b039b21f-5617-41ad-975f-1e68e7e22c49,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5ad5e833-fbe9-4161-8047-a0e18cdb70f1,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-workflowspdw5/series-workflowspdw5-build-action-905712775/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-workflowspdw5/series-workflowspdw5-build-action-2400497176/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 12:48:22 +0000 UTC FinishedAt: 2026-09-04 12:48:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 12:48:22 +0000 UTC FinishedAt: 2026-09-04 12:48:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"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-workflowspdw5/series-workflowspdw5-convert-artifact-3501757573/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 12:48:22 +0000 UTC FinishedAt: 2026-09-04 12:48:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 12:48:22 +0000 UTC FinishedAt: 2026-09-04 12:48:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 12:48:22 +0000 UTC FinishedAt: 2026-09-04 12:48:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 12:48:33 +0000 UTC FinishedAt: 2026-09-04 15:51:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspdw5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_symlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS"],"series_id":"95061a53-d9bf-47ae-b159-c79951d9f9b0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 12:48:33 +0000 UTC FinishedAt: 2026-09-04 15:51:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b039b21f-5617-41ad-975f-1e68e7e22c49,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5ad5e833-fbe9-4161-8047-a0e18cdb70f1,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-workflowspdw5/series-workflowspdw5-build-action-905712775/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-workflowspdw5/series-workflowspdw5-build-action-2400497176/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-workflowspdw5/series-workflowspdw5-convert-artifact-3501757573/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,}