Name: series-workflow99jqz Phase: Succeeded StartedAt: 2026-09-07 06:41:33 +0000 UTC FinishedAt: 2026-09-07 11:31:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[0] Phase: Succeeded StartedAt: 2026-09-07 06:41:33 +0000 UTC FinishedAt: 2026-09-07 07:48:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 06:41:33 +0000 UTC FinishedAt: 2026-09-07 07:48:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "a2fd94e7-a138-464e-8021-bfe6abdad0f6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_calculate_protection_path", "page_counter_calculate_protection", "mem_cgroup_calculate_protection", "lru_gen_shrink_node" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoJiMzNDssCiAgICAmIzM0O3BhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbiYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uJiMzNDssCiAgICAmIzM0O2xydV9nZW5fc2hyaW5rX25vZGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgaW50ZWdlciBvdmVyZmxvdyAvIGFyaXRobWV0aWMgaGFuZGxpbmcgaW4gcGFnZV9jb3VudGVyIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9uIChtbS9wYWdlX2NvdW50ZXIuYykgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgdG8gY2FsY3VsYXRlIGFuY2VzdG9yIG1lbW9yeSBjZ3JvdXAgcHJvdGVjdGlvbiBhbG9uZyB0aGUgaGllcmFyY2h5IHBhdGggZHVyaW5nIE1HTFJVIHJlY2xhaW0gKG1tL21lbWNvbnRyb2wuYywgbW0vdm1zY2FuLmMpLlxuXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3Nlcywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IHRyYW5zZmVycy4gVGhlIGJ1Z3MgYWRkcmVzc2VkIGFuZCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGluIHRoaXMgY29kZSBwYXRoIChzdWNoIGFzIGRpdmlzaW9uIGVycm9ycywgaGllcmFyY2h5IHRyYXZlcnNhbCBidWdzLCBvciBwb2ludGVyIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1aWxkIGNoZWNrcyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYnkgdXBkYXRpbmcgZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb25zIGluIG1tL3BhZ2VfY291bnRlci5jIHRvIHByZXZlbnQgYXJpdGhtZXRpYyBvdmVyZmxvdyBhbmQgZGl2aXNpb24gaXNzdWVzLCBpbnRyb2R1Y2luZyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSBpbiBtbS9tZW1jb250cm9sLmMsIGFuZCBob29raW5nIGl0IGludG8gdGhlIE11bHRpLUdlbiBMUlUgcGFnZSByZWNsYWltIHBhdGggaW4gbW0vdm1zY2FuLmMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBtZW1vcnkgcmVjbGFpbSBhbmQgY2dyb3VwIGFjY291bnRpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzZTRmZmRhOGNhNjczODVkNGU0ZTQ1YTc5NWU1NDQ1OWVkMjk0OWQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNzo0Nzo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA0ZjcyMDc5MWEzMWM5Li40NmJmNzI0Y2FlN2FmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTkyMSw2ICYjNDM7MTkyMSwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIH1cbiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4gXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0xSVV9HRU4pXG4mIzQzO3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuJiM0MztcdFx0XHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19aU1dBUClcbiBib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7XG4gdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDMwNzIwMzMwMWEyYTUuLjE0NjBjYmE1MzU4OGUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTUyNTMsNiAmIzQzOzUyNTMsNTEgQEAgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuIFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LCBcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfTFJVX0dFTlxuJiM0MzsvKipcbiYjNDM7ICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoIC0gY29tcHV0ZSBwcm90ZWN0aW9uIGFsb25nIGEgcGF0aFxuJiM0MzsgKiBAcm9vdDogdGhlIHRvcCBhbmNlc3RvciBvZiB0aGUgc3ViLXRyZWUgYmVpbmcgY2hlY2tlZCAoTlVMTCBmb3Igcm9vdF9tZW1fY2dyb3VwKVxuJiM0MzsgKiBAbWVtY2c6IHRoZSB0YXJnZXQgbWVtb3J5IGNncm91cFxuJiM0MzsgKlxuJiM0MzsgKiBXYWxrIHRoZSBhbmNlc3RvciBwYXRoIGZyb20gQHJvb3QgZG93biB0byBAbWVtY2cgYW5kIGNvbXB1dGUgdGhlIGVmZmVjdGl2ZVxuJiM0MzsgKiBwcm90ZWN0aW9uIGF0IGVhY2ggbGV2ZWwuICBUaGlzIGlzIHNhZmUgZm9yIGlzb2xhdGVkIHF1ZXJpZXMgYmVjYXVzZSBpdFxuJiM0MzsgKiBlbnN1cmVzIHBhcmVudHMgYXJlIGNvbXB1dGVkIGJlZm9yZSBjaGlsZHJlbi5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO3tcbiYjNDM7XHRib29sIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uID1cbiYjNDM7XHRcdGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfUkVDVVJTSVZFX1BST1Q7XG4mIzQzO1x0c3RydWN0IGNncm91cCAqY2c7XG4mIzQzO1x0aW50IHJvb3RfbGV2ZWwsIGk7XG4mIzQzO1xuJiM0MztcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghcm9vdClcbiYjNDM7XHRcdHJvb3QgPSByb290X21lbV9jZ3JvdXA7XG4mIzQzO1xuJiM0MztcdGlmIChtZW1jZyA9PSByb290KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRyb290X2xldmVsID0gcm9vdC1cdTAwM2Vjc3MuY2dyb3VwLVx1MDAzZWxldmVsO1xuJiM0MztcdGNnID0gbWVtY2ctXHUwMDNlY3NzLmNncm91cDtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGZvciAoaSA9IHJvb3RfbGV2ZWwgJiM0MzsgMTsgaSBcdTAwM2M9IGNnLVx1MDAzZWxldmVsOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKmN1cjtcbiYjNDM7XG4mIzQzO1x0XHRjdXIgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNncm91cF9jc3MoY2ctXHUwMDNlYW5jZXN0b3JzW2ldLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cykpO1xuJiM0MztcdFx0aWYgKGN1cilcbiYjNDM7XHRcdFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgXHUwMDI2Y3VyLVx1MDAzZW1lbW9yeSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO31cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4mIzQzO1xuIHN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRnZnBfdCBnZnApXG4ge1xuZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmNcbmluZGV4IDQ1MDU0M2Y0YjMxOGIuLjk4MzIyODAzOTQxYTcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2NvdW50ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9jb3VudGVyLmNcbkBAIC04LDYgJiM0Mzs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX2NvdW50ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWF0aDY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuQEAgLTM3Niw3ICYjNDM7Mzc3LDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSxcbiBcdCAqIG90aGVyd2lzZSBnZXQgYSBzbWFsbGVyIGNodW5rIHRoYW4gd2hhdCB0aGV5IGNsYWltZWQuXG4gXHQgKi9cbiBcdGlmIChzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDNlIHBhcmVudF9lZmZlY3RpdmUpXG4tXHRcdHJldHVybiBwcm90ZWN0ZWQgKiBwYXJlbnRfZWZmZWN0aXZlIC8gc2libGluZ3NfcHJvdGVjdGVkO1xuJiM0MztcdFx0cmV0dXJuIG11bF91NjRfdTY0X2Rpdl91NjQocHJvdGVjdGVkLCBwYXJlbnRfZWZmZWN0aXZlLFxuJiM0MztcdFx0XHRcdFx0ICAgc2libGluZ3NfcHJvdGVjdGVkKTtcbiBcbiBcdC8qXG4gXHQgKiBPaywgdXRpbGl6ZWQgcHJvdGVjdGlvbiBvZiBhbGwgY2hpbGRyZW4gaXMgd2l0aGluIHdoYXQgdGhlXG5AQCAtNDE3LDEzICYjNDM7NDE5LDIwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsXG4gXHRpZiAocGFyZW50X2VmZmVjdGl2ZSBcdTAwM2Ugc2libGluZ3NfcHJvdGVjdGVkIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHBhcmVudF91c2FnZSBcdTAwM2Ugc2libGluZ3NfcHJvdGVjdGVkIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHVzYWdlIFx1MDAzZSBwcm90ZWN0ZWQpIHtcbi1cdFx0dW5zaWduZWQgbG9uZyB1bmNsYWltZWQ7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBhcmVudF91bmNsYWltZWQsIHBhcmVudF91bnByb3RlY3RlZCwgdW5wcm90ZWN0ZWQ7XG4gXG4tXHRcdHVuY2xhaW1lZCA9IHBhcmVudF9lZmZlY3RpdmUgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4tXHRcdHVuY2xhaW1lZCAqPSB1c2FnZSAtIHByb3RlY3RlZDtcbi1cdFx0dW5jbGFpbWVkIC89IHBhcmVudF91c2FnZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDtcbiYjNDM7XHRcdHBhcmVudF91bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuJiM0MztcdFx0cGFyZW50X3VucHJvdGVjdGVkID0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuIFxuLVx0XHRlcCAmIzQzOz0gdW5jbGFpbWVkO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSB1c2FnZXMgYXJlbiYjMzk7dCByZWFkIGF0b21pY2FsbHksIHNvIGEgY2hpbGQgY2FuIHRyYW5zaWVudGx5XG4mIzQzO1x0XHQgKiBhcHBlYXIgdG8gdXNlIG1vcmUgdGhhbiBpdHMgcGFyZW50LCBtYWtpbmcgdGhlIHJhdGlvIGV4Y2VlZCAxXG4mIzQzO1x0XHQgKiBhbmQgdGhlIHF1b3RpZW50IG92ZXJmbG93IDY0IGJpdHMgKCNERSBvbiB4ODYpLiAgQ2FwIGl0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR1bnByb3RlY3RlZCA9IG1pbih1c2FnZSAtIHByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTtcbiYjNDM7XG4mIzQzO1x0XHRlcCAmIzQzOz0gbXVsX3U2NF91NjRfZGl2X3U2NChwYXJlbnRfdW5jbGFpbWVkLCB1bnByb3RlY3RlZCxcbiYjNDM7XHRcdFx0XHRcdCAgcGFyZW50X3VucHJvdGVjdGVkKTtcbiBcdH1cbiBcbiBcdHJldHVybiBlcDtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA0MGQzZjFiNDhhNzRjLi5mZDU1MTVmZDUxNDJkIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNTE5Myw3ICYjNDM7NTE5MywxMyBAQCBzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuIFxuLVx0LyogbHJ1X2dlbl9hZ2Vfbm9kZSgpIGNhbGxlZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKCkgKi9cbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZvciBrc3dhcGQsIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKSBoYXMgYWxyZWFkeVxuJiM0MztcdCAqIGJlZW4gY2FsbGVkIGR1cmluZyB0aGUgdG9wLWRvd24gY2dyb3VwIHRyYXZlcnNhbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpXG4mIzQzO1x0XHRtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoTlVMTCwgbWVtY2cpO1xuJiM0MztcbiBcdGlmIChtZW1fY2dyb3VwX2JlbG93X21pbihOVUxMLCBtZW1jZykpXG4gXHRcdHJldHVybiBNRU1DR19MUlVfWU9VTkc7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgmIzM0OywKICAgICYjMzQ7cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24mIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9zaHJpbmtfbm9kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGJ5IHVwZGF0aW5nIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9ucyBpbiBtbS9wYWdlX2NvdW50ZXIuYyB0byBwcmV2ZW50IGFyaXRobWV0aWMgb3ZlcmZsb3cgYW5kIGRpdmlzaW9uIGlzc3VlcywgaW50cm9kdWNpbmcgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgaW4gbW0vbWVtY29udHJvbC5jLCBhbmQgaG9va2luZyBpdCBpbnRvIHRoZSBNdWx0aS1HZW4gTFJVIHBhZ2UgcmVjbGFpbSBwYXRoIGluIG1tL3Ztc2Nhbi5jLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbWVtb3J5IHJlY2xhaW0gYW5kIGNncm91cCBhY2NvdW50aW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2U0ZmZkYThjYTY3Mzg1ZDRlNGU0NWE3OTVlNTQ0NTllZDI5NDlkNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDc6NDc6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDRmNzIwNzkxYTMxYzkuLjQ2YmY3MjRjYWU3YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xOTIxLDYgJiM0MzsxOTIxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB9CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfTFJVX0dFTikKJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKJiM0MzsJCQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsCiYjNDM7CQkJCQkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0Mzt7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogI2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX1pTV0FQKQogYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpOwogdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAzMDcyMDMzMDFhMmE1Li4xNDYwY2JhNTM1ODhlIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC01MjUzLDYgJiM0Mzs1MjUzLDUxIEBAIHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKIAlwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oJmFtcDtyb290LSZndDttZW1vcnksICZhbXA7bWVtY2ctJmd0O21lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19MUlVfR0VOCiYjNDM7LyoqCiYjNDM7ICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoIC0gY29tcHV0ZSBwcm90ZWN0aW9uIGFsb25nIGEgcGF0aAomIzQzOyAqIEByb290OiB0aGUgdG9wIGFuY2VzdG9yIG9mIHRoZSBzdWItdHJlZSBiZWluZyBjaGVja2VkIChOVUxMIGZvciByb290X21lbV9jZ3JvdXApCiYjNDM7ICogQG1lbWNnOiB0aGUgdGFyZ2V0IG1lbW9yeSBjZ3JvdXAKJiM0MzsgKgomIzQzOyAqIFdhbGsgdGhlIGFuY2VzdG9yIHBhdGggZnJvbSBAcm9vdCBkb3duIHRvIEBtZW1jZyBhbmQgY29tcHV0ZSB0aGUgZWZmZWN0aXZlCiYjNDM7ICogcHJvdGVjdGlvbiBhdCBlYWNoIGxldmVsLiAgVGhpcyBpcyBzYWZlIGZvciBpc29sYXRlZCBxdWVyaWVzIGJlY2F1c2UgaXQKJiM0MzsgKiBlbnN1cmVzIHBhcmVudHMgYXJlIGNvbXB1dGVkIGJlZm9yZSBjaGlsZHJlbi4KJiM0MzsgKi8KJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKJiM0MzsJCQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0MzsJYm9vbCByZWN1cnNpdmVfcHJvdGVjdGlvbiA9CiYjNDM7CQljZ3JwX2RmbF9yb290LmZsYWdzICZhbXA7IENHUlBfUk9PVF9NRU1PUllfUkVDVVJTSVZFX1BST1Q7CiYjNDM7CXN0cnVjdCBjZ3JvdXAgKmNnOwomIzQzOwlpbnQgcm9vdF9sZXZlbCwgaTsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKCFyb290KQomIzQzOwkJcm9vdCA9IHJvb3RfbWVtX2Nncm91cDsKJiM0MzsKJiM0MzsJaWYgKG1lbWNnID09IHJvb3QpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJvb3RfbGV2ZWwgPSByb290LSZndDtjc3MuY2dyb3VwLSZndDtsZXZlbDsKJiM0MzsJY2cgPSBtZW1jZy0mZ3Q7Y3NzLmNncm91cDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlmb3IgKGkgPSByb290X2xldmVsICYjNDM7IDE7IGkgJmx0Oz0gY2ctJmd0O2xldmVsOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IG1lbV9jZ3JvdXAgKmN1cjsKJiM0MzsKJiM0MzsJCWN1ciA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY2dyb3VwX2NzcyhjZy0mZ3Q7YW5jZXN0b3JzW2ldLAomIzQzOwkJCQkJCSAgICAgJmFtcDttZW1vcnlfY2dycF9zdWJzeXMpKTsKJiM0MzsJCWlmIChjdXIpCiYjNDM7CQkJcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKCZhbXA7cm9vdC0mZ3Q7bWVtb3J5LAomIzQzOwkJCQkJCQkgICZhbXA7Y3VyLSZndDttZW1vcnksCiYjNDM7CQkJCQkJCSAgcmVjdXJzaXZlX3Byb3RlY3Rpb24pOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzO30KJiM0MzsjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi8KJiM0MzsKIHN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCWdmcF90IGdmcCkKIHsKZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmMKaW5kZXggNDUwNTQzZjRiMzE4Yi4uOTgzMjI4MDM5NDFhNyAxMDA2NDQKLS0tIGEvbW0vcGFnZV9jb3VudGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9jb3VudGVyLmMKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VfY291bnRlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2F0b21pYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tYXRoNjQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J1Zy5oJmd0OwpAQCAtMzc2LDcgJiM0MzszNzcsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLAogCSAqIG90aGVyd2lzZSBnZXQgYSBzbWFsbGVyIGNodW5rIHRoYW4gd2hhdCB0aGV5IGNsYWltZWQuCiAJICovCiAJaWYgKHNpYmxpbmdzX3Byb3RlY3RlZCAmZ3Q7IHBhcmVudF9lZmZlY3RpdmUpCi0JCXJldHVybiBwcm90ZWN0ZWQgKiBwYXJlbnRfZWZmZWN0aXZlIC8gc2libGluZ3NfcHJvdGVjdGVkOwomIzQzOwkJcmV0dXJuIG11bF91NjRfdTY0X2Rpdl91NjQocHJvdGVjdGVkLCBwYXJlbnRfZWZmZWN0aXZlLAomIzQzOwkJCQkJICAgc2libGluZ3NfcHJvdGVjdGVkKTsKIAogCS8qCiAJICogT2ssIHV0aWxpemVkIHByb3RlY3Rpb24gb2YgYWxsIGNoaWxkcmVuIGlzIHdpdGhpbiB3aGF0IHRoZQpAQCAtNDE3LDEzICYjNDM7NDE5LDIwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsCiAJaWYgKHBhcmVudF9lZmZlY3RpdmUgJmd0OyBzaWJsaW5nc19wcm90ZWN0ZWQgJmFtcDsmYW1wOwogCSAgICBwYXJlbnRfdXNhZ2UgJmd0OyBzaWJsaW5nc19wcm90ZWN0ZWQgJmFtcDsmYW1wOwogCSAgICB1c2FnZSAmZ3Q7IHByb3RlY3RlZCkgewotCQl1bnNpZ25lZCBsb25nIHVuY2xhaW1lZDsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGFyZW50X3VuY2xhaW1lZCwgcGFyZW50X3VucHJvdGVjdGVkLCB1bnByb3RlY3RlZDsKIAotCQl1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkOwotCQl1bmNsYWltZWQgKj0gdXNhZ2UgLSBwcm90ZWN0ZWQ7Ci0JCXVuY2xhaW1lZCAvPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7CiYjNDM7CQlwYXJlbnRfdW5jbGFpbWVkID0gcGFyZW50X2VmZmVjdGl2ZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDsKJiM0MzsJCXBhcmVudF91bnByb3RlY3RlZCA9IHBhcmVudF91c2FnZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDsKIAotCQllcCAmIzQzOz0gdW5jbGFpbWVkOwomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSB1c2FnZXMgYXJlbiYjMzk7dCByZWFkIGF0b21pY2FsbHksIHNvIGEgY2hpbGQgY2FuIHRyYW5zaWVudGx5CiYjNDM7CQkgKiBhcHBlYXIgdG8gdXNlIG1vcmUgdGhhbiBpdHMgcGFyZW50LCBtYWtpbmcgdGhlIHJhdGlvIGV4Y2VlZCAxCiYjNDM7CQkgKiBhbmQgdGhlIHF1b3RpZW50IG92ZXJmbG93IDY0IGJpdHMgKCNERSBvbiB4ODYpLiAgQ2FwIGl0LgomIzQzOwkJICovCiYjNDM7CQl1bnByb3RlY3RlZCA9IG1pbih1c2FnZSAtIHByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTsKJiM0MzsKJiM0MzsJCWVwICYjNDM7PSBtdWxfdTY0X3U2NF9kaXZfdTY0KHBhcmVudF91bmNsYWltZWQsIHVucHJvdGVjdGVkLAomIzQzOwkJCQkJICBwYXJlbnRfdW5wcm90ZWN0ZWQpOwogCX0KIAogCXJldHVybiBlcDsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNDBkM2YxYjQ4YTc0Yy4uZmQ1NTE1ZmQ1MTQyZCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTUxOTMsNyAmIzQzOzUxOTMsMTMgQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwogCi0JLyogbHJ1X2dlbl9hZ2Vfbm9kZSgpIGNhbGxlZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKCkgKi8KJiM0MzsJLyoKJiM0MzsJICogRm9yIGtzd2FwZCwgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpIGhhcyBhbHJlYWR5CiYjNDM7CSAqIGJlZW4gY2FsbGVkIGR1cmluZyB0aGUgdG9wLWRvd24gY2dyb3VwIHRyYXZlcnNhbC4KJiM0MzsJICovCiYjNDM7CWlmICghY3VycmVudF9pc19rc3dhcGQoKSkKJiM0MzsJCW1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChOVUxMLCBtZW1jZyk7CiYjNDM7CiAJaWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKE5VTEwsIG1lbWNnKSkKIAkJcmV0dXJuIE1FTUNHX0xSVV9ZT1VORzsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDg2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nIGFuZCBpZiBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzeXprYWxsZXIuIEZyb20gdGhlIGRpZmYsIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzZXZlcmFsIGZpbGVzOiBgbWVtY29udHJvbC5oYCwgYG1lbWNvbnRyb2wuY2AsIGBwYWdlX2NvdW50ZXIuY2AsIGFuZCBgdm1zY2FuLmNgLiBJdCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIG1lbW9yeSBjZ3JvdXBzLCBzcGVjaWZpY2FsbHkgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbiB3aXRoaW4gdGhlIG11bHRpLWdlbiBMUlUgcmVjbGFpbSBwYXRoLiBJIHNlZSBhIG5ldyBmdW5jdGlvbiBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKClgIGJlaW5nIGludHJvZHVjZWQsIHdoaWNoIHRyYXZlcnNlcyB0aGUgY2dyb3VwIGhpZXJhcmNoeSBhbmQgaW50ZXJhY3RzIHdpdGggYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbigpYC4KClRoZSBgcGFnZV9jb3VudGVyLmNgIGNoYW5nZSBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZS4gV2UgaGF2ZSBhbiBvdmVyZmxvdyBmaXggdXNpbmcgYG11bF91NjRfdTY0X2Rpdl91NjRgIGluc3RlYWQgb2YgYSBzaW1wbGUgZGl2aXNpb24sIHdoaWNoIGlzIGdvb2QuIFRoYXQmIzM5O3MgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyBmdXp6aW5nIHRlbmRzIHRvIGV4cG9zZS4gVGhlcmUmIzM5O3MgYWxzbyBhIHBvdGVudGlhbCBkaXZpZGUtYnktemVybyBvciBvdmVyZmxvdyBmaXggaW4gdW5jbGFpbWVkIHByb3RlY3Rpb24gY2FsY3VsYXRpb24uIFRoaXMgaXMgYSBjbGVhciBpbmRpY2F0b3IgdGhhdCBmdXp6aW5nIGNvdWxkIGJlIGJlbmVmaWNpYWwuCgpUaGUgY2hhbmdlIGluIGB2bXNjYW4uY2AgdGhhdCBjYWxscyBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKClgIHdpdGhpbiBgc2hyaW5rX29uZSgpYCBkdXJpbmcgcmVjbGFpbSBpcyBhbHNvIGEga2V5IGFyZWEgdG8gZXhwbG9yZS4gVGhpcyBpbnRlZ3JhdGVzIHRoZSBuZXcgcHJvdGVjdGlvbiBwYXRoIGludG8gdGhlIG1lbW9yeSByZWNsYWltIHByb2Nlc3MuIEdpdmVuIHRoYXQgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cHMgYXJlIGNvcmUga2VybmVsIGZlYXR1cmVzLCBhbmQgaXQgc2VlbXMgdGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggdGVzdGluZy4gVGhlIGludGVyYWN0aW9uIHdpdGggbXVsdGktZ2VuIExSVSBpcyBhbHNvIHByb21pc2luZy4KClNvLCB5ZXMsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gVGhlIE1NIGNvcmUgbG9naWMgbW9kaWZpY2F0aW9ucywgY2dyb3VwIHByb3RlY3Rpb24gY2FsY3VsYXRpb25zLCBhbmQgcGFnZSByZWNsYWltIGFsbCBtYWtlIHRoaXMgYSBwcmltZSBjYW5kaWRhdGUuIE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gTGV0JiMzOTtzIHNlZSBpZiBzeXprYWxsZXIgY2FuIGhhbmRsZSB0aGUgYENPTkZJR19MUlVfR0VOYCBhbmQgYENPTkZJR19NRU1DR2AgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzg3PWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbi0tXG5tbS9LY29uZmlnLTEzOTctIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTM5ODpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xMzk5LVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDA2LVxubW0vS2NvbmZpZzoxNDA3OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQwOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTItXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQxNC1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDIxLVxubW0vS2NvbmZpZzoxNDIyOmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDIzLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIENPTkZJR19MUlVfR0VOIGFuZCBDT05GSUdfTUVNQ0cgRGVwZW5kZW5jaWVzIGluIG1tL0tjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYG1tL0tjb25maWdgIGFyb3VuZCBsaW5lIDEzOTguIE15IGdvYWwgaGVyZSBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB0aGUgZGVwZW5kZW5jeSBjaGFpbiBmb3IgYENPTkZJR19MUlVfR0VOYCBhbmQgYENPTkZJR19NRU1DR2AuIFVzaW5nIGByZWFkLWZpbGVgIGlzIHRoZSByaWdodCBhcHByb2FjaDsgaXQmIzM5O2xsIGxldCBtZSBlZmZpY2llbnRseSBwYXJzZSB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgYW5kIGF2b2lkIGFueSB1bm5lY2Vzc2FyeSBkaXN0cmFjdGlvbnMuIEkgd2FudCB0byBzZWUgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBnYXRlIHRoZXNlIGZlYXR1cmVzLCBpZiB0aGV5IGhhdmUgYW55IG1hbmRhdG9yeSByZXF1aXJlbWVudHMsIGFuZCB0aGUgbG9naWMgdGhhdCBjb25uZWN0cyB0aGVtLCBhbGwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBtYXRyaXggYXQgaGFuZC4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGNydWNpYWwgZm9yIGFueSB3b3JrIHRoYXQgYWZmZWN0cyBlaXRoZXIgb3IgYm90aCBvZiB0aGVzZSBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM5NTpcdFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxuMTM5NjpcdFxuMTM5NzpcdCMgbXVsdGktZ2VuIExSVSB7XG4xMzk4Olx0Y29uZmlnIExSVV9HRU5cbjEzOTk6XHRcdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuMTQwMDpcdFx0ZGVwZW5kcyBvbiBNTVVcbjE0MDE6XHRcdCMgbWFrZSBzdXJlIGZvbGlvLVx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xuMTQwMjpcdFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXG4xNDAzOlx0XHRoZWxwXG4xNDA0Olx0XHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxuMTQwNTpcdFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXG4xNDA2Olx0XG4xNDA3Olx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxuMTQwODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuMTQwOTpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDEwOlx0XHRoZWxwXG4xNDExOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cbjE0MTI6XHRcbjE0MTM6XHRjb25maWcgTFJVX0dFTl9TVEFUU1xuMTQxNDpcdFx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbjE0MTU6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQxNjpcdFx0aGVscFxuMTQxNzpcdFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcbjE0MTg6XHRcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cbjE0MTk6XHRcbjE0MjA6XHRcdCAgVGhpcyBvcHRpb24gaGFzIGEgcGVyLW1lbWNnIGFuZCBwZXItbm9kZSBtZW1vcnkgb3ZlcmhlYWQuXG4xNDIxOlx0XG4xNDIyOlx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG4xNDIzOlx0XHRkZWZfYm9vbCB5XG4xNDI0Olx0XHRkZXBlbmRzIG9uIExSVV9HRU4gXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xuMTQyNTpcdCMgfVxuMTQyNjpcdFxuMTQyNzpcdGNvbmZpZyBMT0NLX01NX0FORF9GSU5EX1ZNQVxuMTQyODpcdFx0Ym9vbFxuMTQyOTpcdFx0ZGVwZW5kcyBvbiAhU1RBQ0tfR1JPV1NVUFxuMTQzMDpcdFxuMTQzMTpcdGNvbmZpZyBJT01NVV9NTV9EQVRBXG4xNDMyOlx0XHRib29sXG4xNDMzOlx0XG4xNDM0Olx0Y29uZmlnIEVYRUNNRU1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDQ0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBiZWZvcmUgd2UgbW92ZSB0b28gZmFyIGRvd24gdGhpcyByYWJiaXQgaG9sZSwgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJiMzOTtyZSBvbiBzb2xpZCBncm91bmQgd2l0aCBtZW1vcnkgY2dyb3Vwcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gbWV0aWN1bG91c2x5IHZlcmlmeSB0aGUgYENPTkZJR19NRU1DR2AgZGVmaW5pdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gSXQmIzM5O3MgdG9vIGVhc3kgdG8gbWFrZSBhc3N1bXB0aW9ucywgYW5kIGEgc3VidGxlIG1pc2NvbmZpZ3VyYXRpb24gY2FuIGxlYWQgdG8gc29tZSB0cnVseSBiYWZmbGluZyBiZWhhdmlvciBkb3duIHRoZSBsaW5lLiBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhhdCBzcGVjaWZpYyBzeW1ib2wsIHRyYWNlIGl0cyBvcmlnaW5zIGFuZCBjdXJyZW50IHN0YXRlLCBhbmQgbWFrZSBjZXJ0YWluIHRoZSBidWlsZCBzeXN0ZW0gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuCgpCZXlvbmQgdGhhdCwgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHdhbGtpbmcgdGhyb3VnaCB0aGUgZGVwZW5kZW5jeSBjaGFpbi4gYENPTkZJR19NRU1DR2AgYWxtb3N0IGNlcnRhaW5seSBoYXMgYSBzZXQgb2YgcHJlcmVxdWlzaXRlcyDigJMgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbXVzdCBiZSBlbmFibGVkIGZvciBpdCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRob3NlIGRlcGVuZGVuY2llcyBhcmUgbWV0LCBub3QganVzdCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLCBidXQgYWxzbyBjb25zaWRlcmluZyB0aGUgdGFyZ2V0IGVudmlyb25tZW50IGFuZCBhbnkgcG90ZW50aWFsIGJ1aWxkLXRpbWUgdmFyaWF0aW9ucy4gSeKAmWxsIG1ha2UgYSBxdWljayBwYXNzIHRvIGNvbmZpcm0gdGhlIHByZXJlcXVpc2l0ZXMsIGxvb2tpbmcgZm9yIGFueSB3ZWFrIGxpbmtzLiBXZSBhbGwga25vdyBob3cgaW5zaWRpb3VzIHRob3NlIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBjYW4gYmUuIFRpbWUgdG8gZGlnIGluIGFuZCBjb25maXJtIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDc3LVxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA3OS1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA4Ni1cbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4OC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDAtXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTAyLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk0OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB1bnRhbmdsaW5nIHRoaXMgY29uZmlndXJhdGlvbiBpc3N1ZT8gTXkgaW5zdGluY3RzIGFyZSB0ZWxsaW5nIG1lIHRvIGdvIHN0cmFpZ2h0IHRvIGBpbml0L0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTA3OC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIGEgbG90IG9mIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQgaW4gdGhhdCBzZWN0aW9uIGhhcyBvZnRlbiBwcm92ZW4gZnJ1aXRmdWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGNlcnRhaW4gZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZHVyaW5nIGJvb3QuIEl04oCZcyBsaWtlbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHRyYWNlIGRlcGVuZGVuY2llcyBvciB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSBnZXRzIGl0cyBzZXR0aW5ncy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA3NTpcdFxuMTA3NjpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDc3Olx0XG4xMDc4Olx0Y29uZmlnIE1FTUNHXG4xMDc5Olx0XHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMDgwOlx0XHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4xMDgxOlx0XHRzZWxlY3QgRVZFTlRGRFxuMTA4MjpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA4MzpcdFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4xMDg0Olx0XHRoZWxwXG4xMDg1Olx0XHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cbjEwODY6XHRcbjEwODc6XHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuMTA4ODpcdFx0Ym9vbFxuMTA4OTpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5MDpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5MTpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTI6XHRcdGRlZmF1bHQgeVxuMTA5MzpcdFxuMTA5NDpcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuMTA5NTpcdFx0Ym9vbFxuMTA5NjpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5NzpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5ODpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5OTpcdFx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0OTMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCB0aGUgcmlwcGxlIGVmZmVjdHMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIG1vZGlmaWVkIHN5bWJvbHM7IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTttIHNlZWluZyB0aHJlZSBrZXkgZnVuY3Rpb25zOiBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCBmcm9tIGBtbS9tZW1jb250cm9sLmNgLCBhbmQgdGhlbiBib3RoIGBlZmZlY3RpdmVfcHJvdGVjdGlvbmAgYW5kIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gIGZyb20gYG1tL3BhZ2VfY291bnRlci5jYCBhbmQgZmluYWxseSBgc2hyaW5rX29uZWAgZnJvbSBgbW0vdm1zY2FuLmNgLCBsaWtlbHkgcmVsYXRpbmcgdG8gdGhlIG11bHRpLWdlbiBMUlUgZnVuY3Rpb25hbGl0eS4KCk5vdywgSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYGVmZmVjdGl2ZV9wcm90ZWN0aW9uYC4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGFyZWEgaXMgY3JpdGljYWwsIHNvIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiBgbW0vcGFnZV9jb3VudGVyLmNgIGFzIGEgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgdGllcyBpbnRvIHRoZSByZXN0IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWZmZWN0aXZlX3Byb3RlY3Rpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9jb3VudGVyLmM9MjkzPWludCBwYWdlX2NvdW50ZXJfbWVtcGFyc2UoY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICptYXgsXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtMzU3LSAqL1xubW0vcGFnZV9jb3VudGVyLmM6MzU4OnN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsXG5tbS9wYWdlX2NvdW50ZXIuYy0zNTktXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBwYXJlbnRfdXNhZ2UsXG4tLVxubW0vcGFnZV9jb3VudGVyLmM9NDUzPXZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtNDgxLVxubW0vcGFnZV9jb3VudGVyLmM6NDgyOlx0V1JJVEVfT05DRShjb3VudGVyLVx1MDAzZWVtaW4sIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVzYWdlLCBwYXJlbnRfdXNhZ2UsXG5tbS9wYWdlX2NvdW50ZXIuYy00ODMtXHRcdFx0UkVBRF9PTkNFKGNvdW50ZXItXHUwMDNlbWluKSxcbi0tXG5tbS9wYWdlX2NvdW50ZXIuYy00ODctXG5tbS9wYWdlX2NvdW50ZXIuYzo0ODg6XHRXUklURV9PTkNFKGNvdW50ZXItXHUwMDNlZWxvdywgZWZmZWN0aXZlX3Byb3RlY3Rpb24odXNhZ2UsIHBhcmVudF91c2FnZSxcbm1tL3BhZ2VfY291bnRlci5jLTQ4OS1cdFx0XHRSRUFEX09OQ0UoY291bnRlci1cdTAwM2Vsb3cpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDk5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmc6CgoqKkV4YW1pbmluZyB0aGUgU2NvcGUgb2YgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAqKgoKT2theSwgc28gYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAgaXNuJiMzOTt0IHN0YXRpYy4gVGhhdCBtZWFucyBpdCYjMzk7cyBlaXRoZXIgZXhwbGljaXRseSBleHBvcnRlZCBvciBhY2Nlc3NpYmxlIHRocm91Z2ggYSBoZWFkZXIgZmlsZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyByb2xlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZWl0aGVyIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgY29kZSB0byBpZGVudGlmeSBpdHMgY2FsbGVycywgb3IgaW52ZXN0aWdhdGUgdGhlIGhlYWRlciBmaWxlcyB0byBzZWUgd2hlcmUgaXQmIzM5O3MgZGVjbGFyZWQgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyBhY2Nlc3NlZCBmcm9tIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIG92ZXJhbGwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTUyNDE9dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjUyLVxubW0vbWVtY29udHJvbC5jOjUyNTM6XHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXHUwMDI2cm9vdC1cdTAwM2VtZW1vcnksIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xubW0vbWVtY29udHJvbC5jLTUyNTQtfVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MjY2PXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjkyLVx0XHRpZiAoY3VyKVxubW0vbWVtY29udHJvbC5jOjUyOTM6XHRcdFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LFxubW0vbWVtY29udHJvbC5jLTUyOTQtXHRcdFx0XHRcdFx0XHQgIFx1MDAyNmN1ci1cdTAwM2VtZW1vcnksXG4tLVxubW0vcGFnZV9jb3VudGVyLmM9MzU4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtNDQyLS8qKlxubW0vcGFnZV9jb3VudGVyLmM6NDQzOiAqIHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbiAtIGNoZWNrIGlmIG1lbW9yeSBjb25zdW1wdGlvbiBpcyBpbiB0aGUgbm9ybWFsIHJhbmdlXG5tbS9wYWdlX2NvdW50ZXIuYy00NDQtICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWRcbi0tXG5tbS9wYWdlX2NvdW50ZXIuYy00NTItICovXG5tbS9wYWdlX2NvdW50ZXIuYzo0NTM6dm9pZCBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IHBhZ2VfY291bnRlciAqcm9vdCxcbm1tL3BhZ2VfY291bnRlci5jLTQ1NC1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjU4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHZtc2Nhbi5jIGFuZCB0aGUgc2hyaW5rX29uZSBGdW5jdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbW0vdm1zY2FuLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgd29ya2luZ3Mgb2YgYHNocmlua19vbmVgLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgdGhlIHBhZ2UgcmVjbGFpbSBwcm9jZXNzLCBhbmQgSSB3YW50IHRvIHJlLWV4YW1pbmUgaG93IGl0JiMzOTtzIG1ha2luZyBkZWNpc2lvbnMgYWJvdXQgd2hpY2ggcGFnZXMgdG8gcG90ZW50aWFsbHkgZXZpY3QuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBiYWxhbmNlcyBmYWN0b3JzIGxpa2UgcGFnZSB1c2FnZSwgZGlydHkgc3RhdGUsIGFjY2VzcyBmcmVxdWVuY3ksIGFuZCB0aGUgb3ZlcmFsbCBwcmVzc3VyZSBvbiB0aGUgc3lzdGVtLiBOZWVkIHRvIHNlZSBleGFjdGx5IGhvdyB0aGUgcmVjbGFpbSBhbGdvcml0aG0gZXZhbHVhdGVzIHRob3NlIGFzcGVjdHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSB2YXJpb3VzIExSVSBsaXN0cyBhbmQgdGhlIGxvZ2ljIGJlaGluZCBzZWxlY3RpbmcgdmljdGltcyBmb3Igc2Nhbm5pbmcgYW5kIGV2aWN0aW9uLiBJIG1heSBldmVuIGNoZWNrIGhvdyB0aGUgTlVNQSBsb2NhbGl0eSBjb25zaWRlcmF0aW9ucyBmYWN0b3IgaW50byB0aGUgb3ZlcmFsbCBkZWNpc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX29uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MTQzPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTE4Ny1cbm1tL3Ztc2Nhbi5jOjUxODg6c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MTg5LXtcbi0tXG5tbS92bXNjYW4uYz01MjM1PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyNzYtXG5tbS92bXNjYW4uYzo1Mjc3Olx0XHRvcCA9IHNocmlua19vbmUobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01Mjc4LVxuLS1cbm1tL3Ztc2Nhbi5jPTUzMjY9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MzUyLVx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL3Ztc2Nhbi5jOjUzNTM6XHRcdHNocmlua19vbmUoXHUwMDI2cGdkYXQtXHUwMDNlX19scnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTUzNTQtXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMTAKCQkJCQkJCW91dHB1dDogMTc2CgkJCQkJCQl0aG91Z2h0czogNzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaHVuY2ggaXMgdG8gbG9vayBhdCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBjZ3JvdXBzIGFuZCBtdWx0aS1nZW4gTFJVLiBUaGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaGFzIGxlZCBtZSB0byBldmFsdWF0ZSBzZXZlcmFsIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHBpbnBvaW50IGdvb2QgY2FuZGlkYXRlcyBmb3IgZnV6emluZyDigJMgd2hpY2ggZnVuY3Rpb25zIGFyZSBjZW50cmFsIGFuZCBoYXZlIGdvb2QgY292ZXJhZ2UuCgpGaXJzdCwgSSBjb25zaWRlcmVkIGBscnVfZ2VuX3Nocmlua19ub2RlYCwgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAsIGFuZCBgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYC4gIFRoZXNlIHN0b29kIG91dC4gRGl2aW5nIGRlZXBlciwgSSBpZGVudGlmaWVkIHRoZXNlIGtleSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OgoKKiAgIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgOiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBpdCB3YXMgYWRkZWQgYnkgdGhlIHBhdGNoIGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBpcyBjYWxsZWQgYnkgYHNocmlua19vbmVgLiBJdCYjMzk7cyBhIGRpcmVjdCBjb25uZWN0aW9uIHRvIHRoZSBjb2RlIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4KKiAgIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gOiAgVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0JiMzOTtzIG1vZGlmaWVkIGluZGlyZWN0bHksIGFmZmVjdGluZyB0aGUgYGVmZmVjdGl2ZV9wcm90ZWN0aW9uYCBjYWxjdWxhdGlvbiwgYW5kIGlzLCBpdHNlbGYsIGNhbGxlZCBieSBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCBhbmQgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLgoqICAgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25gOiAgSXQmIzM5O3MgYSBkaXJlY3QgY2FsbGVyIG9mIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLCBtYWtpbmcgaXQgYW5vdGhlciBjZW50cmFsIHBvaW50LgoqICAgYGxydV9nZW5fc2hyaW5rX25vZGVgLCBgc2hyaW5rX21hbnlgLCBgc2hyaW5rX29uZWA6ICBUaGVzZSBhcmUgZnVuZGFtZW50YWwgbXVsdGlnZW4gTFJVIHJlY2xhaW0gZnVuY3Rpb25zIGFuZCBhcmUgb2J2aW91c2x5IHJlbGV2YW50LgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgZnVuY3Rpb25zIGFyZSBnb29kIGNhbmRpZGF0ZXMuIEFyZSB0aGV5IHViaXF1aXRvdXM/IE5vLCB0aGV5JiMzOTtyZSBub3QuIFRoZXkgYXJlIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGNncm91cCBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIG11bHRpLWdlbiBMUlUuICBUaGlzIG1ha2VzIHRoZW0gbW9yZSB0YXJnZXRlZCBhbmQgdGhlcmVmb3JlIHBvdGVudGlhbGx5IG1vcmUgZnJ1aXRmdWwgZm9yIGZ1enppbmcuCgpOZXh0LCB0aGUgY29uZmlnczogIGBNRU1DR2AgaXMgcmVxdWlyZWQgZm9yIHRoZSBjZ3JvdXAgbWVtb3J5IGNvbnRyb2xsZXIgKGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIGBtbS9tZW1jb250cm9sLmNgLCBgbW0vcGFnZV9jb3VudGVyLmNgKSwgYW5kIGBMUlVfR0VOYCBpcyBuZWVkZWQgZm9yIHRoZSBtdWx0aS1nZW4gTFJVIChgbW0vdm1zY2FuLmNgLCBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCkuICBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3lzdGVtIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgdG8gYWN0dWFsbHkgX3VzZV8gdGhlc2UgZmVhdHVyZXMuCgpBIGZldyBtb3JlIGNvbmZpZ3VyYXRpb25zIG5lZWQgZXhhbWluYXRpb246IGBDT05GSUdfTFJVX0dFTmAgZGVwZW5kcyBvbiBgTU1VYCwgYDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBgLiBXaGlsZSB0aGF0IGlzIG5lY2Vzc2FyeSB0byBoYXZlIGBDT05GSUdfTFJVX0dFTmAgZW5hYmxlZCwgaXQgaXMgbm90IHNvbWV0aGluZyB0aGF0IHdvdWxkIGFmZmVjdCBmdXp6aW5nLiBgQ09ORklHX01FTUNHYCBpcyB1bmRlciBgaW5pdC9LY29uZmlnYC4gYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIG1pZ2h0IGJlIGhlbHBmdWwgdG8gbWFrZSBzdXJlIHRoYXQgTFJVXF9HRU4gaXMgYWN0aXZlLCBidXQgdGhlc2UgYXJlIHNlY29uZGFyeSB0byB0aGUgY29tcGlsYXRpb24gY29uZmlnIGRlcGVuZGVuY2llcy4KCkhlcmUmIzM5O3MgbXkgc3VtbWFyeTogIHRoaXMgaXMgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBiZWNhdXNlIHRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjZ3JvdXAgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbiBsb2dpYyBpbiBgbW0vcGFnZV9jb3VudGVyLmNgLCBhZGRpbmcgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpYCBpbiBgbW0vbWVtY29udHJvbC5jYCBhbmQgaW50ZWdyYXRpbmcgaXQgaW50byBtdWx0aS1nZW4gTFJVIHBhZ2UgcmVjbGFpbSBpbiBgbW0vdm1zY2FuLmNgLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhcmUgZnVsbHkgcmVhY2hhYmxlLiAgTXkga2V5IEZvY3VzU3ltYm9scyBhcmUgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAsIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLCBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbmAsIGFuZCBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAuICBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgTUVNQ0dgLCBgTFJVX0dFTmAsIGFuZCBwb3RlbnRpYWxseSBgTFJVX0dFTl9FTkFCTEVEYCBmb3IgdGhlIGZ1enppbmcgdG8gYmUgZWZmZWN0aXZlLgoKTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoJiMzNDssCiAgICAmIzM0O3BhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbiYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uJiMzNDssCiAgICAmIzM0O2xydV9nZW5fc2hyaW5rX25vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBieSB1cGRhdGluZyBlZmZlY3RpdmUgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbnMgaW4gbW0vcGFnZV9jb3VudGVyLmMgdG8gcHJldmVudCBhcml0aG1ldGljIG92ZXJmbG93IGFuZCBkaXZpc2lvbiBpc3N1ZXMsIGludHJvZHVjaW5nIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIGluIG1tL21lbWNvbnRyb2wuYywgYW5kIGhvb2tpbmcgaXQgaW50byB0aGUgTXVsdGktR2VuIExSVSBwYWdlIHJlY2xhaW0gcGF0aCBpbiBtbS92bXNjYW4uYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIG1lbW9yeSByZWNsYWltIGFuZCBjZ3JvdXAgYWNjb3VudGluZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgmIzM0OywKICAgICYjMzQ7cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24mIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9zaHJpbmtfbm9kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGJ5IHVwZGF0aW5nIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9ucyBpbiBtbS9wYWdlX2NvdW50ZXIuYyB0byBwcmV2ZW50IGFyaXRobWV0aWMgb3ZlcmZsb3cgYW5kIGRpdmlzaW9uIGlzc3VlcywgaW50cm9kdWNpbmcgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgaW4gbW0vbWVtY29udHJvbC5jLCBhbmQgaG9va2luZyBpdCBpbnRvIHRoZSBNdWx0aS1HZW4gTFJVIHBhZ2UgcmVjbGFpbSBwYXRoIGluIG1tL3Ztc2Nhbi5jLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbWVtb3J5IHJlY2xhaW0gYW5kIGNncm91cCBhY2NvdW50aW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGludGVnZXIgb3ZlcmZsb3cgLyBhcml0aG1ldGljIGhhbmRsaW5nIGluIHBhZ2VfY291bnRlciBlZmZlY3RpdmUgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbiAobW0vcGFnZV9jb3VudGVyLmMpIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIHRvIGNhbGN1bGF0ZSBhbmNlc3RvciBtZW1vcnkgY2dyb3VwIHByb3RlY3Rpb24gYWxvbmcgdGhlIGhpZXJhcmNoeSBwYXRoIGR1cmluZyBNR0xSVSByZWNsYWltIChtbS9tZW1jb250cm9sLmMsIG1tL3Ztc2Nhbi5jKS5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSB0cmFuc2ZlcnMuIFRoZSBidWdzIGFkZHJlc3NlZCBhbmQgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBpbiB0aGlzIGNvZGUgcGF0aCAoc3VjaCBhcyBkaXZpc2lvbiBlcnJvcnMsIGhpZXJhcmNoeSB0cmF2ZXJzYWwgYnVncywgb3IgcG9pbnRlciBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWlsZCBjaGVja3MgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2U0ZmZkYThjYTY3Mzg1ZDRlNGU0NWE3OTVlNTQ0NTllZDI5NDlkNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDc6NDc6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDRmNzIwNzkxYTMxYzkuLjQ2YmY3MjRjYWU3YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xOTIxLDYgJiM0MzsxOTIxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB9CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfTFJVX0dFTikKJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKJiM0MzsJCQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsCiYjNDM7CQkJCQkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0Mzt7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogI2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX1pTV0FQKQogYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpOwogdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAzMDcyMDMzMDFhMmE1Li4xNDYwY2JhNTM1ODhlIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC01MjUzLDYgJiM0Mzs1MjUzLDUxIEBAIHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKIAlwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oJmFtcDtyb290LSZndDttZW1vcnksICZhbXA7bWVtY2ctJmd0O21lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19MUlVfR0VOCiYjNDM7LyoqCiYjNDM7ICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoIC0gY29tcHV0ZSBwcm90ZWN0aW9uIGFsb25nIGEgcGF0aAomIzQzOyAqIEByb290OiB0aGUgdG9wIGFuY2VzdG9yIG9mIHRoZSBzdWItdHJlZSBiZWluZyBjaGVja2VkIChOVUxMIGZvciByb290X21lbV9jZ3JvdXApCiYjNDM7ICogQG1lbWNnOiB0aGUgdGFyZ2V0IG1lbW9yeSBjZ3JvdXAKJiM0MzsgKgomIzQzOyAqIFdhbGsgdGhlIGFuY2VzdG9yIHBhdGggZnJvbSBAcm9vdCBkb3duIHRvIEBtZW1jZyBhbmQgY29tcHV0ZSB0aGUgZWZmZWN0aXZlCiYjNDM7ICogcHJvdGVjdGlvbiBhdCBlYWNoIGxldmVsLiAgVGhpcyBpcyBzYWZlIGZvciBpc29sYXRlZCBxdWVyaWVzIGJlY2F1c2UgaXQKJiM0MzsgKiBlbnN1cmVzIHBhcmVudHMgYXJlIGNvbXB1dGVkIGJlZm9yZSBjaGlsZHJlbi4KJiM0MzsgKi8KJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKJiM0MzsJCQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0MzsJYm9vbCByZWN1cnNpdmVfcHJvdGVjdGlvbiA9CiYjNDM7CQljZ3JwX2RmbF9yb290LmZsYWdzICZhbXA7IENHUlBfUk9PVF9NRU1PUllfUkVDVVJTSVZFX1BST1Q7CiYjNDM7CXN0cnVjdCBjZ3JvdXAgKmNnOwomIzQzOwlpbnQgcm9vdF9sZXZlbCwgaTsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKCFyb290KQomIzQzOwkJcm9vdCA9IHJvb3RfbWVtX2Nncm91cDsKJiM0MzsKJiM0MzsJaWYgKG1lbWNnID09IHJvb3QpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJvb3RfbGV2ZWwgPSByb290LSZndDtjc3MuY2dyb3VwLSZndDtsZXZlbDsKJiM0MzsJY2cgPSBtZW1jZy0mZ3Q7Y3NzLmNncm91cDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlmb3IgKGkgPSByb290X2xldmVsICYjNDM7IDE7IGkgJmx0Oz0gY2ctJmd0O2xldmVsOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IG1lbV9jZ3JvdXAgKmN1cjsKJiM0MzsKJiM0MzsJCWN1ciA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY2dyb3VwX2NzcyhjZy0mZ3Q7YW5jZXN0b3JzW2ldLAomIzQzOwkJCQkJCSAgICAgJmFtcDttZW1vcnlfY2dycF9zdWJzeXMpKTsKJiM0MzsJCWlmIChjdXIpCiYjNDM7CQkJcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKCZhbXA7cm9vdC0mZ3Q7bWVtb3J5LAomIzQzOwkJCQkJCQkgICZhbXA7Y3VyLSZndDttZW1vcnksCiYjNDM7CQkJCQkJCSAgcmVjdXJzaXZlX3Byb3RlY3Rpb24pOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzO30KJiM0MzsjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi8KJiM0MzsKIHN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCWdmcF90IGdmcCkKIHsKZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmMKaW5kZXggNDUwNTQzZjRiMzE4Yi4uOTgzMjI4MDM5NDFhNyAxMDA2NDQKLS0tIGEvbW0vcGFnZV9jb3VudGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9jb3VudGVyLmMKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VfY291bnRlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2F0b21pYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tYXRoNjQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J1Zy5oJmd0OwpAQCAtMzc2LDcgJiM0MzszNzcsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLAogCSAqIG90aGVyd2lzZSBnZXQgYSBzbWFsbGVyIGNodW5rIHRoYW4gd2hhdCB0aGV5IGNsYWltZWQuCiAJICovCiAJaWYgKHNpYmxpbmdzX3Byb3RlY3RlZCAmZ3Q7IHBhcmVudF9lZmZlY3RpdmUpCi0JCXJldHVybiBwcm90ZWN0ZWQgKiBwYXJlbnRfZWZmZWN0aXZlIC8gc2libGluZ3NfcHJvdGVjdGVkOwomIzQzOwkJcmV0dXJuIG11bF91NjRfdTY0X2Rpdl91NjQocHJvdGVjdGVkLCBwYXJlbnRfZWZmZWN0aXZlLAomIzQzOwkJCQkJICAgc2libGluZ3NfcHJvdGVjdGVkKTsKIAogCS8qCiAJICogT2ssIHV0aWxpemVkIHByb3RlY3Rpb24gb2YgYWxsIGNoaWxkcmVuIGlzIHdpdGhpbiB3aGF0IHRoZQpAQCAtNDE3LDEzICYjNDM7NDE5LDIwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsCiAJaWYgKHBhcmVudF9lZmZlY3RpdmUgJmd0OyBzaWJsaW5nc19wcm90ZWN0ZWQgJmFtcDsmYW1wOwogCSAgICBwYXJlbnRfdXNhZ2UgJmd0OyBzaWJsaW5nc19wcm90ZWN0ZWQgJmFtcDsmYW1wOwogCSAgICB1c2FnZSAmZ3Q7IHByb3RlY3RlZCkgewotCQl1bnNpZ25lZCBsb25nIHVuY2xhaW1lZDsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGFyZW50X3VuY2xhaW1lZCwgcGFyZW50X3VucHJvdGVjdGVkLCB1bnByb3RlY3RlZDsKIAotCQl1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkOwotCQl1bmNsYWltZWQgKj0gdXNhZ2UgLSBwcm90ZWN0ZWQ7Ci0JCXVuY2xhaW1lZCAvPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7CiYjNDM7CQlwYXJlbnRfdW5jbGFpbWVkID0gcGFyZW50X2VmZmVjdGl2ZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDsKJiM0MzsJCXBhcmVudF91bnByb3RlY3RlZCA9IHBhcmVudF91c2FnZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDsKIAotCQllcCAmIzQzOz0gdW5jbGFpbWVkOwomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSB1c2FnZXMgYXJlbiYjMzk7dCByZWFkIGF0b21pY2FsbHksIHNvIGEgY2hpbGQgY2FuIHRyYW5zaWVudGx5CiYjNDM7CQkgKiBhcHBlYXIgdG8gdXNlIG1vcmUgdGhhbiBpdHMgcGFyZW50LCBtYWtpbmcgdGhlIHJhdGlvIGV4Y2VlZCAxCiYjNDM7CQkgKiBhbmQgdGhlIHF1b3RpZW50IG92ZXJmbG93IDY0IGJpdHMgKCNERSBvbiB4ODYpLiAgQ2FwIGl0LgomIzQzOwkJICovCiYjNDM7CQl1bnByb3RlY3RlZCA9IG1pbih1c2FnZSAtIHByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTsKJiM0MzsKJiM0MzsJCWVwICYjNDM7PSBtdWxfdTY0X3U2NF9kaXZfdTY0KHBhcmVudF91bmNsYWltZWQsIHVucHJvdGVjdGVkLAomIzQzOwkJCQkJICBwYXJlbnRfdW5wcm90ZWN0ZWQpOwogCX0KIAogCXJldHVybiBlcDsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNDBkM2YxYjQ4YTc0Yy4uZmQ1NTE1ZmQ1MTQyZCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTUxOTMsNyAmIzQzOzUxOTMsMTMgQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwogCi0JLyogbHJ1X2dlbl9hZ2Vfbm9kZSgpIGNhbGxlZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKCkgKi8KJiM0MzsJLyoKJiM0MzsJICogRm9yIGtzd2FwZCwgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpIGhhcyBhbHJlYWR5CiYjNDM7CSAqIGJlZW4gY2FsbGVkIGR1cmluZyB0aGUgdG9wLWRvd24gY2dyb3VwIHRyYXZlcnNhbC4KJiM0MzsJICovCiYjNDM7CWlmICghY3VycmVudF9pc19rc3dhcGQoKSkKJiM0MzsJCW1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChOVUxMLCBtZW1jZyk7CiYjNDM7CiAJaWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKE5VTEwsIG1lbWNnKSkKIAkJcmV0dXJuIE1FTUNHX0xSVV9ZT1VORzsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDkwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEFzc2Vzc21lbnQgZm9yIFRoaXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBjaGFuZ2VzIHRvdWNoIGBtZW1jb250cm9sLmhgLCBgbWVtY29udHJvbC5jYCwgYHBhZ2VfY291bnRlci5jYCwgYW5kIGB2bXNjYW4uY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHByaW1hcmlseSBkZWFsaW5nIHdpdGg6CgoqICAgQXJpdGhtZXRpYyBvdmVyZmxvdyBmaXhlcyBpbiBgcGFnZV9jb3VudGVyLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBlZmZlY3RpdmVfcHJvdGVjdGlvbmAgY2FsY3VsYXRpb24uIFRoaXMgdXNlcyBgbXVsX3U2NF91NjRfZGl2X3U2NGAgYW5kIGBtaW5gIHRvIGF2b2lkIHRob3NlIGlzc3Vlcy4KKiAgIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAsIGEgaGVscGVyIGZ1bmN0aW9uIHRvIHRyYXZlcnNlIHRoZSBtZW1vcnkgY2dyb3VwIGhpZXJhcmNoeSAoYW5jZXN0b3JzKSBhbmQgY2FsY3VsYXRlIHByb3RlY3Rpb24gdmFsdWVzLiBUaGlzIGlzIHJlbGV2YW50IHRvIE1HTFJVLCBnaXZlbiB0aGUgYENPTkZJR19MUlVfR0VOYCBkZXBlbmRlbmN5LgoqICAgVGhpcyBuZXcgaGVscGVyIGlzIGNhbGxlZCB3aXRoaW4gYHNocmlua19vbmVgIGluIGB2bXNjYW4uY2AsIGxpa2VseSBmb3IgZGlyZWN0IHJlY2xhaW1lcnMuCgpUaGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb246IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBJIG5lZWQgdG8gYXBwbHkgdGhlIEtNU0FOIGNyaXRlcmlhLiBSZW1lbWJlciwgS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoc3RhY2ssIGhlYXAsIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4gVGhlIG1haW4gY3JpdGVyaWEgSSYjMzk7bSBsb29raW5nIGZvciBhcmU6CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UuCjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLgozLiAgQWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4KNC4gIEJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBieXRlcy4KCkxldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBwYXRjaCwgbGluZSBieSBsaW5lLCBhZ2FpbnN0IHRoZXNlIGNyaXRlcmlhOgoKKiAgICoqQ3JpdGVyaW9uIDEgKFVzZXJzcGFjZSBFeHBvc3VyZSk6KiogTm90aGluZyBoZXJlIHNlbmRzIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSwgc28gd2UmIzM5O3JlIGdvb2Qgb24gdGhhdCBmcm9udC4KKiAgICoqQ3JpdGVyaW9uIDIgKFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzIGluIExvZ2ljKToqKiBOb3csIGxldCYjMzk7cyBkaWcgaW50byB0aGF0IGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgIGFuZCBgZWZmZWN0aXZlX3Byb3RlY3Rpb25gLiBJJiMzOTttIHNlZWluZyB2YXJpYWJsZXMgbGlrZSBgcmVjdXJzaXZlX3Byb3RlY3Rpb25gLCBgY2dgLCBgcm9vdF9sZXZlbGAsIGBpYCwgYW5kIGBjdXJgLiBCdXQgSSYjMzk7bSBjaGVja2luZywgYW5kIGl0IHNlZW1zIGFsbCB0aGVzZSB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGV5JiMzOTtyZSB1c2VkLiBFdmVyeXRoaW5nIGxvb2tzIHNhZmUgaGVyZSEgSW4gYGVmZmVjdGl2ZV9wcm90ZWN0aW9uYCwgdmFyaWFibGVzIGxpa2UgYHBhcmVudF91bmNsYWltZWRgLCBgcGFyZW50X3VucHJvdGVjdGVkYCwgYW5kIGB1bnByb3RlY3RlZGAgYXJlIGFsbCBqdXN0IGRpcmVjdCByZXN1bHRzIG9mIGFyaXRobWV0aWMgb3BlcmF0aW9ucywgc28gdGhlcmUmIzM5O3Mgbm8gcmlzay4KKiAgICoqQ3JpdGVyaW9uIDMgKENvbXBsZXggRGF0YSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb24pOioqIE5vIG5ldyBhbGxvY2F0aW9ucyBhcmUgaW4gdGhpcyBwYXRjaCwgc28gd2UgY2FuIGNoZWNrIHRoaXMgY3JpdGVyaW9uIG9mZi4KKiAgICoqQ3JpdGVyaW9uIDQgKFVuaW5pdGlhbGl6ZWQgQnVmZmVyIEFjY2Vzcyk6KiogVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgaXQmIzM5O3MgbWVzc2luZyB3aXRoIGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLgoKU28sIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGZpeGluZyBhcml0aG1ldGljIGlzc3VlcyBpbiBtZW1vcnkgY2dyb3VwIHByb3RlY3Rpb24gYW5kIGNvcnJlY3RseSBjYWxjdWxhdGluZyB2YWx1ZXMsIGVzcGVjaWFsbHkgZm9yIE1HTFJVLiBXZSYjMzk7dmUgYXNzZXNzZWQgdGhhdCBpdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYmFzZWQgb24gdGhlc2UgY2hhbmdlcyB0aGVtc2VsdmVzLiBXZSBuZWVkIHRvIGNoZWNrIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gIG9yIGFueXRoaW5nIGVsc2UgdGhpcyBwYXRjaCBoYXMgdG91Y2hlZCwgYnV0IGJhc2VkIG9uIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQsIEkmIzM5O2Qgc2F5IG5vIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeSAqZm9yIHRoaXMgcGF0Y2gqLiBXZSYjMzk7cmUgcHJvYmFibHkgZ29vZCB3aXRoIHRoZSBleGlzdGluZyBjb3ZlcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9jb3VudGVyLmM9MzU4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtNDUyLSAqL1xubW0vcGFnZV9jb3VudGVyLmM6NDUzOnZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXG5tbS9wYWdlX2NvdW50ZXIuYy00NTQtXHRcdFx0XHQgICAgICAgc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQzMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIFBhZ2UgQ291bnRlciBQcm90ZWN0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYG1tL3BhZ2VfY291bnRlci5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHByb3RlY3Rpb24gd2l0aGluIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLiBUaGlzIGFyZWEgaXMgY3J1Y2lhbCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVzb3VyY2UgYWNjb3VudGluZywgYW5kIGFueSBwb3RlbnRpYWwgZmxhd3MgaGVyZSBjb3VsZCBoYXZlIHNlcmlvdXMgcmFtaWZpY2F0aW9ucy4gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGEgY2xlYW4sIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiB0aGF0IGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgaXNzdWVzIHJlbGF0ZWQgdG8gY29uY3VycmVudCBhY2Nlc3MuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGFwcHJvYWNoZWQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2NvdW50ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDUwOlx0ICogV0FSTklORzogVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3RhdGVsZXNzISBJdCBjYW4gb25seSBiZSB1c2VkIGFzIHBhcnRcbiA0NTE6XHQgKiAgICAgICAgICBvZiBhIHRvcC1kb3duIHRyZWUgaXRlcmF0aW9uLCBub3QgZm9yIGlzb2xhdGVkIHF1ZXJpZXMuXG4gNDUyOlx0ICovXG4gNDUzOlx0dm9pZCBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IHBhZ2VfY291bnRlciAqcm9vdCxcbiA0NTQ6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxuIDQ1NTpcdFx0XHRcdFx0ICAgICAgIGJvb2wgcmVjdXJzaXZlX3Byb3RlY3Rpb24pXG4gNDU2Olx0e1xuIDQ1NzpcdFx0dW5zaWduZWQgbG9uZyB1c2FnZSwgcGFyZW50X3VzYWdlO1xuIDQ1ODpcdFx0c3RydWN0IHBhZ2VfY291bnRlciAqcGFyZW50ID0gY291bnRlci1cdTAwM2VwYXJlbnQ7XG4gNDU5Olx0XG4gNDYwOlx0XHQvKlxuIDQ2MTpcdFx0ICogRWZmZWN0aXZlIHZhbHVlcyBvZiB0aGUgcmVjbGFpbSB0YXJnZXRzIGFyZSBpZ25vcmVkIHNvIHRoZXlcbiA0NjI6XHRcdCAqIGNhbiBiZSBzdGFsZS4gSGF2ZSBhIGxvb2sgYXQgbWVtX2Nncm91cF9wcm90ZWN0aW9uIGZvciBtb3JlXG4gNDYzOlx0XHQgKiBkZXRhaWxzLlxuIDQ2NDpcdFx0ICogVE9ETzogY2FsY3VsYXRpb24gc2hvdWxkIGJlIG1vcmUgcm9idXN0IHNvIHRoYXQgd2UgZG8gbm90IG5lZWRcbiA0NjU6XHRcdCAqIHRoYXQgc3BlY2lhbCBjYXNpbmcuXG4gNDY2Olx0XHQgKi9cbiA0Njc6XHRcdGlmIChyb290ID09IGNvdW50ZXIpXG4gNDY4Olx0XHRcdHJldHVybjtcbiA0Njk6XHRcbiA0NzA6XHRcdHVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcik7XG4gNDcxOlx0XHRpZiAoIXVzYWdlKVxuIDQ3MjpcdFx0XHRyZXR1cm47XG4gNDczOlx0XG4gNDc0Olx0XHRpZiAocGFyZW50ID09IHJvb3QpIHtcbiA0NzU6XHRcdFx0Y291bnRlci1cdTAwM2VlbWluID0gUkVBRF9PTkNFKGNvdW50ZXItXHUwMDNlbWluKTtcbiA0NzY6XHRcdFx0Y291bnRlci1cdTAwM2VlbG93ID0gUkVBRF9PTkNFKGNvdW50ZXItXHUwMDNlbG93KTtcbiA0Nzc6XHRcdFx0cmV0dXJuO1xuIDQ3ODpcdFx0fVxuIDQ3OTpcdFxuIDQ4MDpcdFx0cGFyZW50X3VzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQocGFyZW50KTtcbiA0ODE6XHRcbiA0ODI6XHRcdFdSSVRFX09OQ0UoY291bnRlci1cdTAwM2VlbWluLCBlZmZlY3RpdmVfcHJvdGVjdGlvbih1c2FnZSwgcGFyZW50X3VzYWdlLFxuIDQ4MzpcdFx0XHRcdFJFQURfT05DRShjb3VudGVyLVx1MDAzZW1pbiksXG4gNDg0Olx0XHRcdFx0UkVBRF9PTkNFKHBhcmVudC1cdTAwM2VlbWluKSxcbiA0ODU6XHRcdFx0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnBhcmVudC1cdTAwM2VjaGlsZHJlbl9taW5fdXNhZ2UpLFxuIDQ4NjpcdFx0XHRcdHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKSk7XG4gNDg3Olx0XG4gNDg4Olx0XHRXUklURV9PTkNFKGNvdW50ZXItXHUwMDNlZWxvdywgZWZmZWN0aXZlX3Byb3RlY3Rpb24odXNhZ2UsIHBhcmVudF91c2FnZSxcbiA0ODk6XHRcdFx0XHRSRUFEX09OQ0UoY291bnRlci1cdTAwM2Vsb3cpLFxuIDQ5MDpcdFx0XHRcdFJFQURfT05DRShwYXJlbnQtXHUwMDNlZWxvdyksXG4gNDkxOlx0XHRcdFx0YXRvbWljX2xvbmdfcmVhZChcdTAwMjZwYXJlbnQtXHUwMDNlY2hpbGRyZW5fbG93X3VzYWdlKSxcbiA0OTI6XHRcdFx0XHRyZWN1cnNpdmVfcHJvdGVjdGlvbikpO1xuIDQ5MzpcdH1cbiA0OTQ6XHQjZW5kaWYgLyogQ09ORklHX01FTUNHIHx8IENPTkZJR19DR1JPVVBfRE1FTSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjU3CgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGlzIHByZXR0eSBjbGVhbi4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBrbm93biBhcml0aG1ldGljIGlzc3VlIGluIGBlZmZlY3RpdmVfcHJvdGVjdGlvbigpYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBwcmV2ZW50aW5nIDY0LWJpdCBpbnRlZ2VyIG92ZXJmbG93IGFuZCBkaXZpc2lvbiBlcnJvcnMsIHdoaWNoIG1ha2VzIHNlbnNlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGNvcmUgY2FsY3VsYXRpb24sIHNvIGl0JiMzOTtzIGdvb2QgdG8gYmUgbWV0aWN1bG91cyBoZXJlLiBUaGUgYWRkaXRpb24gb2YgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpYCBsb29rcyBsaWtlIGEgbmVjZXNzYXJ5IGNvbXBhbmlvbiBmdW5jdGlvbiB0byBlbnN1cmUgYWNjdXJhdGUgY2FsY3VsYXRpb25zIGR1cmluZyB0aGUgTUdMUlUtZHJpdmVuIGBzaHJpbmtfb25lKClgIGNhbGxzLiBFbnN1cmluZyB0aGlzIHRvcC1kb3duIGNhbGN1bGF0aW9uIGluIHRoZSBhbmNlc3RvciBwYXRoIGlzIGVzc2VudGlhbCBmb3IgTUdMUlUmIzM5O3MgY29uc2lzdGVuY3kuCgpEaWdnaW5nIGRlZXBlciwgdGhlcmUmIzM5O3Mgbm90aGluZyBjb25jZXJuaW5nIGp1bXBpbmcgb3V0IGF0IG1lIGluIHRlcm1zIG9mIG1lbW9yeSBzYWZldHkuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL2J1ZmZlcnMuIFRoZSBjb2RlIGxvb2tzIHNvdW5kIGluIHRoYXQgcmVzcGVjdC4gS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSB0aGUgcmlnaHQgdG9vbHMgZm9yIHRoZSBqb2IgaGVyZTsgbm8gbmVlZCB0byBicmluZyBpbiBLTVNBTiYjMzk7cyBoZWF2aWVyIGFydGlsbGVyeS4gSXQgYWxsIHNlZW1zIHByZXR0eSBsb3ctcmlzayBmcm9tIGEgbWVtb3J5LXNhZmV0eSBwZXJzcGVjdGl2ZS4KClRoZXJlZm9yZSwgYHNldC1yZXN1bHRzYCB3aXRoIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgYSBjb25jaXNlIGJ1dCBjbGVhciBleHBsYW5hdGlvbiBvZiB0aGUgb3ZlcmZsb3cvZGl2aXNpb24gZml4IGFuZCB0aGUgTUdMUlUgcHJvdGVjdGlvbiBwYXRoIGFkanVzdG1lbnQgc2hvdWxkIGJlIHRoZSB3YXkgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBpbnRlZ2VyIG92ZXJmbG93IC8gYXJpdGhtZXRpYyBoYW5kbGluZyBpbiBwYWdlX2NvdW50ZXIgZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb24gKG1tL3BhZ2VfY291bnRlci5jKSBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSB0byBjYWxjdWxhdGUgYW5jZXN0b3IgbWVtb3J5IGNncm91cCBwcm90ZWN0aW9uIGFsb25nIHRoZSBoaWVyYXJjaHkgcGF0aCBkdXJpbmcgTUdMUlUgcmVjbGFpbSAobW0vbWVtY29udHJvbC5jLCBtbS92bXNjYW4uYykuXG5cblRoZXNlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgdHJhbnNmZXJzLiBUaGUgYnVncyBhZGRyZXNzZWQgYW5kIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gdGhpcyBjb2RlIHBhdGggKHN1Y2ggYXMgZGl2aXNpb24gZXJyb3JzLCBoaWVyYXJjaHkgdHJhdmVyc2FsIGJ1Z3MsIG9yIHBvaW50ZXIgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgY2hlY2tzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBpbnRlZ2VyIG92ZXJmbG93IC8gYXJpdGhtZXRpYyBoYW5kbGluZyBpbiBwYWdlX2NvdW50ZXIgZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb24gKG1tL3BhZ2VfY291bnRlci5jKSBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSB0byBjYWxjdWxhdGUgYW5jZXN0b3IgbWVtb3J5IGNncm91cCBwcm90ZWN0aW9uIGFsb25nIHRoZSBoaWVyYXJjaHkgcGF0aCBkdXJpbmcgTUdMUlUgcmVjbGFpbSAobW0vbWVtY29udHJvbC5jLCBtbS92bXNjYW4uYykuXG5cblRoZXNlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgdHJhbnNmZXJzLiBUaGUgYnVncyBhZGRyZXNzZWQgYW5kIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gdGhpcyBjb2RlIHBhdGggKHN1Y2ggYXMgZGl2aXNpb24gZXJyb3JzLCBoaWVyYXJjaHkgdHJhdmVyc2FsIGJ1Z3MsIG9yIHBvaW50ZXIgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgY2hlY2tzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDc6NTguMzYyNTc0OTU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4MDIzNzEyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aFwiLFxuICAgIFwicGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uXCIsXG4gICAgXCJscnVfZ2VuX3Nocmlua19ub2RlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgaW50ZWdlciBvdmVyZmxvdyAvIGFyaXRobWV0aWMgaGFuZGxpbmcgaW4gcGFnZV9jb3VudGVyIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9uIChtbS9wYWdlX2NvdW50ZXIuYykgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgdG8gY2FsY3VsYXRlIGFuY2VzdG9yIG1lbW9yeSBjZ3JvdXAgcHJvdGVjdGlvbiBhbG9uZyB0aGUgaGllcmFyY2h5IHBhdGggZHVyaW5nIE1HTFJVIHJlY2xhaW0gKG1tL21lbWNvbnRyb2wuYywgbW0vdm1zY2FuLmMpLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgdHJhbnNmZXJzLiBUaGUgYnVncyBhZGRyZXNzZWQgYW5kIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gdGhpcyBjb2RlIHBhdGggKHN1Y2ggYXMgZGl2aXNpb24gZXJyb3JzLCBoaWVyYXJjaHkgdHJhdmVyc2FsIGJ1Z3MsIG9yIHBvaW50ZXIgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgY2hlY2tzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGJ5IHVwZGF0aW5nIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9ucyBpbiBtbS9wYWdlX2NvdW50ZXIuYyB0byBwcmV2ZW50IGFyaXRobWV0aWMgb3ZlcmZsb3cgYW5kIGRpdmlzaW9uIGlzc3VlcywgaW50cm9kdWNpbmcgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgaW4gbW0vbWVtY29udHJvbC5jLCBhbmQgaG9va2luZyBpdCBpbnRvIHRoZSBNdWx0aS1HZW4gTFJVIHBhZ2UgcmVjbGFpbSBwYXRoIGluIG1tL3Ztc2Nhbi5jLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbWVtb3J5IHJlY2xhaW0gYW5kIGNncm91cCBhY2NvdW50aW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzo0Nzo1OC4zNjI1Nzk1MjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTY2NjMzMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzZTRmZmRhOGNhNjczODVkNGU0ZTQ1YTc5NWU1NDQ1OWVkMjk0OWQ3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMDc6NDc6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbmluZGV4IDRmNzIwNzkxYTMxYzkuLjQ2YmY3MjRjYWU3YWYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbkBAIC0xOTIxLDYgKzE5MjEsMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gfVxcbiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxuIFxcbisjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0xSVV9HRU4pXFxuK3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4re1xcbit9XFxuKyNlbmRpZlxcbitcXG4gI2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19aU1dBUClcXG4gYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpO1xcbiB2b2lkIG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgc2l6ZV90IHNpemUpO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCAzMDcyMDMzMDFhMmE1Li4xNDYwY2JhNTM1ODhlIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC01MjUzLDYgKzUyNTMsNTEgQEAgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbiBcXHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXFx1MDAyNnJvb3QtXFx1MDAzZW1lbW9yeSwgXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19MUlVfR0VOXFxuKy8qKlxcbisgKiBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGggLSBjb21wdXRlIHByb3RlY3Rpb24gYWxvbmcgYSBwYXRoXFxuKyAqIEByb290OiB0aGUgdG9wIGFuY2VzdG9yIG9mIHRoZSBzdWItdHJlZSBiZWluZyBjaGVja2VkIChOVUxMIGZvciByb290X21lbV9jZ3JvdXApXFxuKyAqIEBtZW1jZzogdGhlIHRhcmdldCBtZW1vcnkgY2dyb3VwXFxuKyAqXFxuKyAqIFdhbGsgdGhlIGFuY2VzdG9yIHBhdGggZnJvbSBAcm9vdCBkb3duIHRvIEBtZW1jZyBhbmQgY29tcHV0ZSB0aGUgZWZmZWN0aXZlXFxuKyAqIHByb3RlY3Rpb24gYXQgZWFjaCBsZXZlbC4gIFRoaXMgaXMgc2FmZSBmb3IgaXNvbGF0ZWQgcXVlcmllcyBiZWNhdXNlIGl0XFxuKyAqIGVuc3VyZXMgcGFyZW50cyBhcmUgY29tcHV0ZWQgYmVmb3JlIGNoaWxkcmVuLlxcbisgKi9cXG4rdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbit7XFxuK1xcdGJvb2wgcmVjdXJzaXZlX3Byb3RlY3Rpb24gPVxcbitcXHRcXHRjZ3JwX2RmbF9yb290LmZsYWdzIFxcdTAwMjYgQ0dSUF9ST09UX01FTU9SWV9SRUNVUlNJVkVfUFJPVDtcXG4rXFx0c3RydWN0IGNncm91cCAqY2c7XFxuK1xcdGludCByb290X2xldmVsLCBpO1xcbitcXG4rXFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCFyb290KVxcbitcXHRcXHRyb290ID0gcm9vdF9tZW1fY2dyb3VwO1xcbitcXG4rXFx0aWYgKG1lbWNnID09IHJvb3QpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJvb3RfbGV2ZWwgPSByb290LVxcdTAwM2Vjc3MuY2dyb3VwLVxcdTAwM2VsZXZlbDtcXG4rXFx0Y2cgPSBtZW1jZy1cXHUwMDNlY3NzLmNncm91cDtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0Zm9yIChpID0gcm9vdF9sZXZlbCArIDE7IGkgXFx1MDAzYz0gY2ctXFx1MDAzZWxldmVsOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKmN1cjtcXG4rXFxuK1xcdFxcdGN1ciA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY2dyb3VwX2NzcyhjZy1cXHUwMDNlYW5jZXN0b3JzW2ldLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMpKTtcXG4rXFx0XFx0aWYgKGN1cilcXG4rXFx0XFx0XFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFxcdTAwMjZyb290LVxcdTAwM2VtZW1vcnksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmN1ci1cXHUwMDNlbWVtb3J5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcXG4rXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rfVxcbisjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG4rXFxuIHN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gXFx0XFx0XFx0Z2ZwX3QgZ2ZwKVxcbiB7XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmNcXG5pbmRleCA0NTA1NDNmNGIzMThiLi45ODMyMjgwMzk0MWE3IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXFxuKysrIGIvbW0vcGFnZV9jb3VudGVyLmNcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VfY291bnRlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYXRvbWljLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21hdGg2NC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuQEAgLTM3Niw3ICszNzcsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxcbiBcXHQgKiBvdGhlcndpc2UgZ2V0IGEgc21hbGxlciBjaHVuayB0aGFuIHdoYXQgdGhleSBjbGFpbWVkLlxcbiBcXHQgKi9cXG4gXFx0aWYgKHNpYmxpbmdzX3Byb3RlY3RlZCBcXHUwMDNlIHBhcmVudF9lZmZlY3RpdmUpXFxuLVxcdFxcdHJldHVybiBwcm90ZWN0ZWQgKiBwYXJlbnRfZWZmZWN0aXZlIC8gc2libGluZ3NfcHJvdGVjdGVkO1xcbitcXHRcXHRyZXR1cm4gbXVsX3U2NF91NjRfZGl2X3U2NChwcm90ZWN0ZWQsIHBhcmVudF9lZmZlY3RpdmUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHNpYmxpbmdzX3Byb3RlY3RlZCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBPaywgdXRpbGl6ZWQgcHJvdGVjdGlvbiBvZiBhbGwgY2hpbGRyZW4gaXMgd2l0aGluIHdoYXQgdGhlXFxuQEAgLTQxNywxMyArNDE5LDIwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsXFxuIFxcdGlmIChwYXJlbnRfZWZmZWN0aXZlIFxcdTAwM2Ugc2libGluZ3NfcHJvdGVjdGVkIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBwYXJlbnRfdXNhZ2UgXFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHVzYWdlIFxcdTAwM2UgcHJvdGVjdGVkKSB7XFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgdW5jbGFpbWVkO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBhcmVudF91bmNsYWltZWQsIHBhcmVudF91bnByb3RlY3RlZCwgdW5wcm90ZWN0ZWQ7XFxuIFxcbi1cXHRcXHR1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xcbi1cXHRcXHR1bmNsYWltZWQgKj0gdXNhZ2UgLSBwcm90ZWN0ZWQ7XFxuLVxcdFxcdHVuY2xhaW1lZCAvPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7XFxuK1xcdFxcdHBhcmVudF91bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xcbitcXHRcXHRwYXJlbnRfdW5wcm90ZWN0ZWQgPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7XFxuIFxcbi1cXHRcXHRlcCArPSB1bmNsYWltZWQ7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSB1c2FnZXMgYXJlbid0IHJlYWQgYXRvbWljYWxseSwgc28gYSBjaGlsZCBjYW4gdHJhbnNpZW50bHlcXG4rXFx0XFx0ICogYXBwZWFyIHRvIHVzZSBtb3JlIHRoYW4gaXRzIHBhcmVudCwgbWFraW5nIHRoZSByYXRpbyBleGNlZWQgMVxcbitcXHRcXHQgKiBhbmQgdGhlIHF1b3RpZW50IG92ZXJmbG93IDY0IGJpdHMgKCNERSBvbiB4ODYpLiAgQ2FwIGl0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dW5wcm90ZWN0ZWQgPSBtaW4odXNhZ2UgLSBwcm90ZWN0ZWQsIHBhcmVudF91bnByb3RlY3RlZCk7XFxuK1xcbitcXHRcXHRlcCArPSBtdWxfdTY0X3U2NF9kaXZfdTY0KHBhcmVudF91bmNsYWltZWQsIHVucHJvdGVjdGVkLFxcbitcXHRcXHRcXHRcXHRcXHQgIHBhcmVudF91bnByb3RlY3RlZCk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBlcDtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDQwZDNmMWI0OGE3NGMuLmZkNTUxNWZkNTE0MmQgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC01MTkzLDcgKzUxOTMsMTMgQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuIFxcbi1cXHQvKiBscnVfZ2VuX2FnZV9ub2RlKCkgY2FsbGVkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKSAqL1xcbitcXHQvKlxcbitcXHQgKiBGb3Iga3N3YXBkLCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKCkgaGFzIGFscmVhZHlcXG4rXFx0ICogYmVlbiBjYWxsZWQgZHVyaW5nIHRoZSB0b3AtZG93biBjZ3JvdXAgdHJhdmVyc2FsLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpKVxcbitcXHRcXHRtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoTlVMTCwgbWVtY2cpO1xcbitcXG4gXFx0aWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKE5VTEwsIG1lbWNnKSlcXG4gXFx0XFx0cmV0dXJuIE1FTUNHX0xSVV9ZT1VORztcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjAwLjEyMDI0MzM3MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjc4MzQ3NjE1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aFwiLFxuICAgIFwicGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uXCIsXG4gICAgXCJscnVfZ2VuX3Nocmlua19ub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBieSB1cGRhdGluZyBlZmZlY3RpdmUgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbnMgaW4gbW0vcGFnZV9jb3VudGVyLmMgdG8gcHJldmVudCBhcml0aG1ldGljIG92ZXJmbG93IGFuZCBkaXZpc2lvbiBpc3N1ZXMsIGludHJvZHVjaW5nIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIGluIG1tL21lbWNvbnRyb2wuYywgYW5kIGhvb2tpbmcgaXQgaW50byB0aGUgTXVsdGktR2VuIExSVSBwYWdlIHJlY2xhaW0gcGF0aCBpbiBtbS92bXNjYW4uYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIG1lbW9yeSByZWNsYWltIGFuZCBjZ3JvdXAgYWNjb3VudGluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZTRmZmRhOGNhNjczODVkNGU0ZTQ1YTc5NWU1NDQ1OWVkMjk0OWQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNzo0Nzo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDRmNzIwNzkxYTMxYzkuLjQ2YmY3MjRjYWU3YWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xOTIxLDYgKzE5MjEsMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0xSVV9HRU4pXG4rdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4rXHRcdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4rXHRcdFx0XHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4re1xuK31cbisjZW5kaWZcbitcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19aU1dBUClcbiBib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7XG4gdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDMwNzIwMzMwMWEyYTUuLjE0NjBjYmE1MzU4OGUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTUyNTMsNiArNTI1Myw1MSBAQCB2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4gXHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXHUwMDI2cm9vdC1cdTAwM2VtZW1vcnksIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cbisvKipcbisgKiBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGggLSBjb21wdXRlIHByb3RlY3Rpb24gYWxvbmcgYSBwYXRoXG4rICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWQgKE5VTEwgZm9yIHJvb3RfbWVtX2Nncm91cClcbisgKiBAbWVtY2c6IHRoZSB0YXJnZXQgbWVtb3J5IGNncm91cFxuKyAqXG4rICogV2FsayB0aGUgYW5jZXN0b3IgcGF0aCBmcm9tIEByb290IGRvd24gdG8gQG1lbWNnIGFuZCBjb21wdXRlIHRoZSBlZmZlY3RpdmVcbisgKiBwcm90ZWN0aW9uIGF0IGVhY2ggbGV2ZWwuICBUaGlzIGlzIHNhZmUgZm9yIGlzb2xhdGVkIHF1ZXJpZXMgYmVjYXVzZSBpdFxuKyAqIGVuc3VyZXMgcGFyZW50cyBhcmUgY29tcHV0ZWQgYmVmb3JlIGNoaWxkcmVuLlxuKyAqL1xuK3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbit7XG4rXHRib29sIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uID1cbitcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjYgQ0dSUF9ST09UX01FTU9SWV9SRUNVUlNJVkVfUFJPVDtcbitcdHN0cnVjdCBjZ3JvdXAgKmNnO1xuK1x0aW50IHJvb3RfbGV2ZWwsIGk7XG4rXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIXJvb3QpXG4rXHRcdHJvb3QgPSByb290X21lbV9jZ3JvdXA7XG4rXG4rXHRpZiAobWVtY2cgPT0gcm9vdClcbitcdFx0cmV0dXJuO1xuK1xuK1x0cm9vdF9sZXZlbCA9IHJvb3QtXHUwMDNlY3NzLmNncm91cC1cdTAwM2VsZXZlbDtcbitcdGNnID0gbWVtY2ctXHUwMDNlY3NzLmNncm91cDtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGZvciAoaSA9IHJvb3RfbGV2ZWwgKyAxOyBpIFx1MDAzYz0gY2ctXHUwMDNlbGV2ZWw7IGkrKykge1xuK1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqY3VyO1xuK1xuK1x0XHRjdXIgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNncm91cF9jc3MoY2ctXHUwMDNlYW5jZXN0b3JzW2ldLFxuK1x0XHRcdFx0XHRcdCAgICAgXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzKSk7XG4rXHRcdGlmIChjdXIpXG4rXHRcdFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LFxuK1x0XHRcdFx0XHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlbWVtb3J5LFxuK1x0XHRcdFx0XHRcdFx0ICByZWN1cnNpdmVfcHJvdGVjdGlvbik7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbit9XG4rI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4rXG4gc3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdGdmcF90IGdmcClcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuY1xuaW5kZXggNDUwNTQzZjRiMzE4Yi4uOTgzMjI4MDM5NDFhNyAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXG4rKysgYi9tbS9wYWdlX2NvdW50ZXIuY1xuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9jb3VudGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWF0aDY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuQEAgLTM3Niw3ICszNzcsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxuIFx0ICogb3RoZXJ3aXNlIGdldCBhIHNtYWxsZXIgY2h1bmsgdGhhbiB3aGF0IHRoZXkgY2xhaW1lZC5cbiBcdCAqL1xuIFx0aWYgKHNpYmxpbmdzX3Byb3RlY3RlZCBcdTAwM2UgcGFyZW50X2VmZmVjdGl2ZSlcbi1cdFx0cmV0dXJuIHByb3RlY3RlZCAqIHBhcmVudF9lZmZlY3RpdmUgLyBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4rXHRcdHJldHVybiBtdWxfdTY0X3U2NF9kaXZfdTY0KHByb3RlY3RlZCwgcGFyZW50X2VmZmVjdGl2ZSxcbitcdFx0XHRcdFx0ICAgc2libGluZ3NfcHJvdGVjdGVkKTtcbiBcbiBcdC8qXG4gXHQgKiBPaywgdXRpbGl6ZWQgcHJvdGVjdGlvbiBvZiBhbGwgY2hpbGRyZW4gaXMgd2l0aGluIHdoYXQgdGhlXG5AQCAtNDE3LDEzICs0MTksMjAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSxcbiBcdGlmIChwYXJlbnRfZWZmZWN0aXZlIFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDI2XHUwMDI2XG4gXHQgICAgcGFyZW50X3VzYWdlIFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDI2XHUwMDI2XG4gXHQgICAgdXNhZ2UgXHUwMDNlIHByb3RlY3RlZCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIHVuY2xhaW1lZDtcbitcdFx0dW5zaWduZWQgbG9uZyBwYXJlbnRfdW5jbGFpbWVkLCBwYXJlbnRfdW5wcm90ZWN0ZWQsIHVucHJvdGVjdGVkO1xuIFxuLVx0XHR1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuLVx0XHR1bmNsYWltZWQgKj0gdXNhZ2UgLSBwcm90ZWN0ZWQ7XG4tXHRcdHVuY2xhaW1lZCAvPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4rXHRcdHBhcmVudF91bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuK1x0XHRwYXJlbnRfdW5wcm90ZWN0ZWQgPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4gXG4tXHRcdGVwICs9IHVuY2xhaW1lZDtcbitcdFx0LypcbitcdFx0ICogVGhlIHVzYWdlcyBhcmVuJ3QgcmVhZCBhdG9taWNhbGx5LCBzbyBhIGNoaWxkIGNhbiB0cmFuc2llbnRseVxuK1x0XHQgKiBhcHBlYXIgdG8gdXNlIG1vcmUgdGhhbiBpdHMgcGFyZW50LCBtYWtpbmcgdGhlIHJhdGlvIGV4Y2VlZCAxXG4rXHRcdCAqIGFuZCB0aGUgcXVvdGllbnQgb3ZlcmZsb3cgNjQgYml0cyAoI0RFIG9uIHg4NikuICBDYXAgaXQuXG4rXHRcdCAqL1xuK1x0XHR1bnByb3RlY3RlZCA9IG1pbih1c2FnZSAtIHByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTtcbitcbitcdFx0ZXAgKz0gbXVsX3U2NF91NjRfZGl2X3U2NChwYXJlbnRfdW5jbGFpbWVkLCB1bnByb3RlY3RlZCxcbitcdFx0XHRcdFx0ICBwYXJlbnRfdW5wcm90ZWN0ZWQpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGVwO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDQwZDNmMWI0OGE3NGMuLmZkNTUxNWZkNTE0MmQgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC01MTkzLDcgKzUxOTMsMTMgQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbiBcbi1cdC8qIGxydV9nZW5fYWdlX25vZGUoKSBjYWxsZWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpICovXG4rXHQvKlxuK1x0ICogRm9yIGtzd2FwZCwgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpIGhhcyBhbHJlYWR5XG4rXHQgKiBiZWVuIGNhbGxlZCBkdXJpbmcgdGhlIHRvcC1kb3duIGNncm91cCB0cmF2ZXJzYWwuXG4rXHQgKi9cbitcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcbitcdFx0bWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKE5VTEwsIG1lbWNnKTtcbitcbiBcdGlmIChtZW1fY2dyb3VwX2JlbG93X21pbihOVUxMLCBtZW1jZykpXG4gXHRcdHJldHVybiBNRU1DR19MUlVfWU9VTkc7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzo0ODowMC4xMjAyNDUzNDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODEyMjE4NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgaWYgaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzeXprYWxsZXIuIEZyb20gdGhlIGRpZmYsIGl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIHNldmVyYWwgZmlsZXM6IGBtZW1jb250cm9sLmhgLCBgbWVtY29udHJvbC5jYCwgYHBhZ2VfY291bnRlci5jYCwgYW5kIGB2bXNjYW4uY2AuIEl0IHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gbWVtb3J5IGNncm91cHMsIHNwZWNpZmljYWxseSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9uIHdpdGhpbiB0aGUgbXVsdGktZ2VuIExSVSByZWNsYWltIHBhdGguIEkgc2VlIGEgbmV3IGZ1bmN0aW9uIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKWAgYmVpbmcgaW50cm9kdWNlZCwgd2hpY2ggdHJhdmVyc2VzIHRoZSBjZ3JvdXAgaGllcmFyY2h5IGFuZCBpbnRlcmFjdHMgd2l0aCBgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKClgLlxuXG5UaGUgYHBhZ2VfY291bnRlci5jYCBjaGFuZ2UgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUuIFdlIGhhdmUgYW4gb3ZlcmZsb3cgZml4IHVzaW5nIGBtdWxfdTY0X3U2NF9kaXZfdTY0YCBpbnN0ZWFkIG9mIGEgc2ltcGxlIGRpdmlzaW9uLCB3aGljaCBpcyBnb29kLiBUaGF0J3MgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyBmdXp6aW5nIHRlbmRzIHRvIGV4cG9zZS4gVGhlcmUncyBhbHNvIGEgcG90ZW50aWFsIGRpdmlkZS1ieS16ZXJvIG9yIG92ZXJmbG93IGZpeCBpbiB1bmNsYWltZWQgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbi4gVGhpcyBpcyBhIGNsZWFyIGluZGljYXRvciB0aGF0IGZ1enppbmcgY291bGQgYmUgYmVuZWZpY2lhbC5cblxuVGhlIGNoYW5nZSBpbiBgdm1zY2FuLmNgIHRoYXQgY2FsbHMgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpYCB3aXRoaW4gYHNocmlua19vbmUoKWAgZHVyaW5nIHJlY2xhaW0gaXMgYWxzbyBhIGtleSBhcmVhIHRvIGV4cGxvcmUuIFRoaXMgaW50ZWdyYXRlcyB0aGUgbmV3IHByb3RlY3Rpb24gcGF0aCBpbnRvIHRoZSBtZW1vcnkgcmVjbGFpbSBwcm9jZXNzLiBHaXZlbiB0aGF0IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXBzIGFyZSBjb3JlIGtlcm5lbCBmZWF0dXJlcywgYW5kIGl0IHNlZW1zIHRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIHRlc3RpbmcuIFRoZSBpbnRlcmFjdGlvbiB3aXRoIG11bHRpLWdlbiBMUlUgaXMgYWxzbyBwcm9taXNpbmcuXG5cblNvLCB5ZXMsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gVGhlIE1NIGNvcmUgbG9naWMgbW9kaWZpY2F0aW9ucywgY2dyb3VwIHByb3RlY3Rpb24gY2FsY3VsYXRpb25zLCBhbmQgcGFnZSByZWNsYWltIGFsbCBtYWtlIHRoaXMgYSBwcmltZSBjYW5kaWRhdGUuIE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc2VlIGlmIHN5emthbGxlciBjYW4gaGFuZGxlIHRoZSBgQ09ORklHX0xSVV9HRU5gIGFuZCBgQ09ORklHX01FTUNHYCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ4NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjA2LjkzMjQ2NjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzOTA1NDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzODc9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xMzk3LSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxMzk4OmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xMzk5LVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MDYtXFxubW0vS2NvbmZpZzoxNDA3OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MDgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTItXFxubW0vS2NvbmZpZzoxNDEzOmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDE0LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyMS1cXG5tbS9LY29uZmlnOjE0MjI6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDIzLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MDcuMDQ2Mzc3OTIxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2NTY5MzI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBDT05GSUdfTFJVX0dFTiBhbmQgQ09ORklHX01FTUNHIERlcGVuZGVuY2llcyBpbiBtbS9LY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBtbS9LY29uZmlnYCBhcm91bmQgbGluZSAxMzk4LiBNeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gdGhlIGRlcGVuZGVuY3kgY2hhaW4gZm9yIGBDT05GSUdfTFJVX0dFTmAgYW5kIGBDT05GSUdfTUVNQ0dgLiBVc2luZyBgcmVhZC1maWxlYCBpcyB0aGUgcmlnaHQgYXBwcm9hY2g7IGl0J2xsIGxldCBtZSBlZmZpY2llbnRseSBwYXJzZSB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgYW5kIGF2b2lkIGFueSB1bm5lY2Vzc2FyeSBkaXN0cmFjdGlvbnMuIEkgd2FudCB0byBzZWUgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBnYXRlIHRoZXNlIGZlYXR1cmVzLCBpZiB0aGV5IGhhdmUgYW55IG1hbmRhdG9yeSByZXF1aXJlbWVudHMsIGFuZCB0aGUgbG9naWMgdGhhdCBjb25uZWN0cyB0aGVtLCBhbGwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBtYXRyaXggYXQgaGFuZC4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGNydWNpYWwgZm9yIGFueSB3b3JrIHRoYXQgYWZmZWN0cyBlaXRoZXIgb3IgYm90aCBvZiB0aGVzZSBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjQxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MDkuNDEyMDc0NTYyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTM5NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM5NTpcXHRcXHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXFxuMTM5NjpcXHRcXG4xMzk3OlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTM5ODpcXHRjb25maWcgTFJVX0dFTlxcbjEzOTk6XFx0XFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4xNDAwOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTQwMTpcXHRcXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxuMTQwMjpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcXG4xNDAzOlxcdFxcdGhlbHBcXG4xNDA0OlxcdFxcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXFxuMTQwNTpcXHRcXHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cXG4xNDA2OlxcdFxcbjE0MDc6XFx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbjE0MDg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuMTQwOTpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDEwOlxcdFxcdGhlbHBcXG4xNDExOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxcbjE0MTI6XFx0XFxuMTQxMzpcXHRjb25maWcgTFJVX0dFTl9TVEFUU1xcbjE0MTQ6XFx0XFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbjE0MTU6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxNjpcXHRcXHRoZWxwXFxuMTQxNzpcXHRcXHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xcbjE0MTg6XFx0XFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxcbjE0MTk6XFx0XFxuMTQyMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxcbjE0MjE6XFx0XFxuMTQyMjpcXHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG4xNDIzOlxcdFxcdGRlZl9ib29sIHlcXG4xNDI0OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTiBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcXG4xNDI1OlxcdCMgfVxcbjE0MjY6XFx0XFxuMTQyNzpcXHRjb25maWcgTE9DS19NTV9BTkRfRklORF9WTUFcXG4xNDI4OlxcdFxcdGJvb2xcXG4xNDI5OlxcdFxcdGRlcGVuZHMgb24gIVNUQUNLX0dST1dTVVBcXG4xNDMwOlxcdFxcbjE0MzE6XFx0Y29uZmlnIElPTU1VX01NX0RBVEFcXG4xNDMyOlxcdFxcdGJvb2xcXG4xNDMzOlxcdFxcbjE0MzQ6XFx0Y29uZmlnIEVYRUNNRU1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MDkuNDEyMjQyNTUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM5NTY0MDc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIHRoZSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIGJlZm9yZSB3ZSBtb3ZlIHRvbyBmYXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UncmUgb24gc29saWQgZ3JvdW5kIHdpdGggbWVtb3J5IGNncm91cHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIG1ldGljdWxvdXNseSB2ZXJpZnkgdGhlIGBDT05GSUdfTUVNQ0dgIGRlZmluaXRpb24gd2l0aGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gSXQncyB0b28gZWFzeSB0byBtYWtlIGFzc3VtcHRpb25zLCBhbmQgYSBzdWJ0bGUgbWlzY29uZmlndXJhdGlvbiBjYW4gbGVhZCB0byBzb21lIHRydWx5IGJhZmZsaW5nIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUuIEknbSBnb2luZyB0byB0cmFjayBkb3duIHRoYXQgc3BlY2lmaWMgc3ltYm9sLCB0cmFjZSBpdHMgb3JpZ2lucyBhbmQgY3VycmVudCBzdGF0ZSwgYW5kIG1ha2UgY2VydGFpbiB0aGUgYnVpbGQgc3lzdGVtIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLlxuXG5CZXlvbmQgdGhhdCwgSSdtIGFscmVhZHkgbWVudGFsbHkgd2Fsa2luZyB0aHJvdWdoIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBgQ09ORklHX01FTUNHYCBhbG1vc3QgY2VydGFpbmx5IGhhcyBhIHNldCBvZiBwcmVyZXF1aXNpdGVzIOKAkyBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtdXN0IGJlIGVuYWJsZWQgZm9yIGl0IHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBtZXQsIG5vdCBqdXN0IGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIGJ1dCBhbHNvIGNvbnNpZGVyaW5nIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQgYW5kIGFueSBwb3RlbnRpYWwgYnVpbGQtdGltZSB2YXJpYXRpb25zLiBJ4oCZbGwgbWFrZSBhIHF1aWNrIHBhc3MgdG8gY29uZmlybSB0aGUgcHJlcmVxdWlzaXRlcywgbG9va2luZyBmb3IgYW55IHdlYWsgbGlua3MuIFdlIGFsbCBrbm93IGhvdyBpbnNpZGlvdXMgdGhvc2UgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGNhbiBiZS4gVGltZSB0byBkaWcgaW4gYW5kIGNvbmZpcm0hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NDQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjExLjgwNzg4NzgzOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTU5OTA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ny1cXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3OS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg2LVxcbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODgtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDAtXFxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDItXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MTEuODc5NDkyMTM2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ2MjQ3NjMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB3aGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBjb25maWd1cmF0aW9uIGlzc3VlPyBNeSBpbnN0aW5jdHMgYXJlIHRlbGxpbmcgbWUgdG8gZ28gc3RyYWlnaHQgdG8gYGluaXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMDc4LiBUaGF0J3MgdXN1YWxseSB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IGluIHRoYXQgc2VjdGlvbiBoYXMgb2Z0ZW4gcHJvdmVuIGZydWl0ZnVsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBjZXJ0YWluIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGR1cmluZyBib290LiBJdOKAmXMgbGlrZWx5IGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmFjZSBkZXBlbmRlbmNpZXMgb3IgdW5kZXJzdGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIGZlYXR1cmUgZ2V0cyBpdHMgc2V0dGluZ3MuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTQ5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MTMuMzQxOTcxMTQxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA3NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA3NTpcXHRcXG4xMDc2OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwNzc6XFx0XFxuMTA3ODpcXHRjb25maWcgTUVNQ0dcXG4xMDc5OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODA6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODE6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDgyOlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDgzOlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwODQ6XFx0XFx0aGVscFxcbjEwODU6XFx0XFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXFxuMTA4NjpcXHRcXG4xMDg3OlxcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuMTA4ODpcXHRcXHRib29sXFxuMTA4OTpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5MDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5MTpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5MjpcXHRcXHRkZWZhdWx0IHlcXG4xMDkzOlxcdFxcbjEwOTQ6XFx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuMTA5NTpcXHRcXHRib29sXFxuMTA5NjpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5NzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5ODpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDk5OlxcdFxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzo0ODoxMy4zNDIxNjkyMTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzNTIwNjM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCB0aGUgcmlwcGxlIGVmZmVjdHMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIG1vZGlmaWVkIHN5bWJvbHM7IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLiBJJ20gc2VlaW5nIHRocmVlIGtleSBmdW5jdGlvbnM6IGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgIGZyb20gYG1tL21lbWNvbnRyb2wuY2AsIGFuZCB0aGVuIGJvdGggYGVmZmVjdGl2ZV9wcm90ZWN0aW9uYCBhbmQgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAgZnJvbSBgbW0vcGFnZV9jb3VudGVyLmNgIGFuZCBmaW5hbGx5IGBzaHJpbmtfb25lYCBmcm9tIGBtbS92bXNjYW4uY2AsIGxpa2VseSByZWxhdGluZyB0byB0aGUgbXVsdGktZ2VuIExSVSBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYGVmZmVjdGl2ZV9wcm90ZWN0aW9uYC4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGFyZWEgaXMgY3JpdGljYWwsIHNvIEknbGwgd2FudCB0byBzZWUgaG93IGl0J3MgZGVmaW5lZCB3aXRoaW4gYG1tL3BhZ2VfY291bnRlci5jYCBhcyBhIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBzZWUgaG93IHRoaXMgdGllcyBpbnRvIHRoZSByZXN0IG9mIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ5MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjE1LjM3NzM3NzcxNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxODYxOTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVmZmVjdGl2ZV9wcm90ZWN0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2NvdW50ZXIuYz0yOTM9aW50IHBhZ2VfY291bnRlcl9tZW1wYXJzZShjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKm1heCxcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jLTM1Ny0gKi9cXG5tbS9wYWdlX2NvdW50ZXIuYzozNTg6c3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSxcXG5tbS9wYWdlX2NvdW50ZXIuYy0zNTktXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHBhcmVudF91c2FnZSxcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jPTQ1Mz12b2lkIHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpyb290LFxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmMtNDgxLVxcbm1tL3BhZ2VfY291bnRlci5jOjQ4MjpcXHRXUklURV9PTkNFKGNvdW50ZXItXFx1MDAzZWVtaW4sIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVzYWdlLCBwYXJlbnRfdXNhZ2UsXFxubW0vcGFnZV9jb3VudGVyLmMtNDgzLVxcdFxcdFxcdFJFQURfT05DRShjb3VudGVyLVxcdTAwM2VtaW4pLFxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmMtNDg3LVxcbm1tL3BhZ2VfY291bnRlci5jOjQ4ODpcXHRXUklURV9PTkNFKGNvdW50ZXItXFx1MDAzZWVsb3csIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVzYWdlLCBwYXJlbnRfdXNhZ2UsXFxubW0vcGFnZV9jb3VudGVyLmMtNDg5LVxcdFxcdFxcdFJFQURfT05DRShjb3VudGVyLVxcdTAwM2Vsb3cpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzo0ODoxNS40NzkyNDY5NTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkwOTE3MzUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyB0aGUgU2NvcGUgb2YgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAqKlxuXG5Pa2F5LCBzbyBgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYCBpc24ndCBzdGF0aWMuIFRoYXQgbWVhbnMgaXQncyBlaXRoZXIgZXhwbGljaXRseSBleHBvcnRlZCBvciBhY2Nlc3NpYmxlIHRocm91Z2ggYSBoZWFkZXIgZmlsZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQncyBiZWluZyB1c2VkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIHJvbGUuIE15IG5leHQgc3RlcCBpcyB0byBlaXRoZXIgdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBjb2RlIHRvIGlkZW50aWZ5IGl0cyBjYWxsZXJzLCBvciBpbnZlc3RpZ2F0ZSB0aGUgaGVhZGVyIGZpbGVzIHRvIHNlZSB3aGVyZSBpdCdzIGRlY2xhcmVkIGFuZCBob3cgaXQncyBiZWluZyBhY2Nlc3NlZCBmcm9tIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIG92ZXJhbGwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDk5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MTguMzg4NDIzMzYyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Nzc1NTc0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01MjQxPXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjUyLVxcbm1tL21lbWNvbnRyb2wuYzo1MjUzOlxcdHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihcXHUwMDI2cm9vdC1cXHUwMDNlbWVtb3J5LCBcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xcbm1tL21lbWNvbnRyb2wuYy01MjU0LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjY2PXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyOTItXFx0XFx0aWYgKGN1cilcXG5tbS9tZW1jb250cm9sLmM6NTI5MzpcXHRcXHRcXHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXFx1MDAyNnJvb3QtXFx1MDAzZW1lbW9yeSxcXG5tbS9tZW1jb250cm9sLmMtNTI5NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZjdXItXFx1MDAzZW1lbW9yeSxcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jPTM1OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmMtNDQyLS8qKlxcbm1tL3BhZ2VfY291bnRlci5jOjQ0MzogKiBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24gLSBjaGVjayBpZiBtZW1vcnkgY29uc3VtcHRpb24gaXMgaW4gdGhlIG5vcm1hbCByYW5nZVxcbm1tL3BhZ2VfY291bnRlci5jLTQ0NC0gKiBAcm9vdDogdGhlIHRvcCBhbmNlc3RvciBvZiB0aGUgc3ViLXRyZWUgYmVpbmcgY2hlY2tlZFxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmMtNDUyLSAqL1xcbm1tL3BhZ2VfY291bnRlci5jOjQ1Mzp2b2lkIHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpyb290LFxcbm1tL3BhZ2VfY291bnRlci5jLTQ1NC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MTguNDc2MTgzNTA4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODA0MTkxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHZtc2Nhbi5jIGFuZCB0aGUgc2hyaW5rX29uZSBGdW5jdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYG1tL3Ztc2Nhbi5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHdvcmtpbmdzIG9mIGBzaHJpbmtfb25lYC4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIHRoZSBwYWdlIHJlY2xhaW0gcHJvY2VzcywgYW5kIEkgd2FudCB0byByZS1leGFtaW5lIGhvdyBpdCdzIG1ha2luZyBkZWNpc2lvbnMgYWJvdXQgd2hpY2ggcGFnZXMgdG8gcG90ZW50aWFsbHkgZXZpY3QuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGJhbGFuY2VzIGZhY3RvcnMgbGlrZSBwYWdlIHVzYWdlLCBkaXJ0eSBzdGF0ZSwgYWNjZXNzIGZyZXF1ZW5jeSwgYW5kIHRoZSBvdmVyYWxsIHByZXNzdXJlIG9uIHRoZSBzeXN0ZW0uIE5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZSByZWNsYWltIGFsZ29yaXRobSBldmFsdWF0ZXMgdGhvc2UgYXNwZWN0cy4gSSdsbCBiZSBsb29raW5nIHRvIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgdmFyaW91cyBMUlUgbGlzdHMgYW5kIHRoZSBsb2dpYyBiZWhpbmQgc2VsZWN0aW5nIHZpY3RpbXMgZm9yIHNjYW5uaW5nIGFuZCBldmljdGlvbi4gSSBtYXkgZXZlbiBjaGVjayBob3cgdGhlIE5VTUEgbG9jYWxpdHkgY29uc2lkZXJhdGlvbnMgZmFjdG9yIGludG8gdGhlIG92ZXJhbGwgZGVjaXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NTgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzo0ODoyMC44NTY2MDUwOTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTIwMzE3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01MTQzPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTg3LVxcbm1tL3Ztc2Nhbi5jOjUxODg6c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTE4OS17XFxuLS1cXG5tbS92bXNjYW4uYz01MjM1PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI3Ni1cXG5tbS92bXNjYW4uYzo1Mjc3OlxcdFxcdG9wID0gc2hyaW5rX29uZShscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy01Mjc4LVxcbi0tXFxubW0vdm1zY2FuLmM9NTMyNj1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTM1Mi1cXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL3Ztc2Nhbi5jOjUzNTM6XFx0XFx0c2hyaW5rX29uZShcXHUwMDI2cGdkYXQtXFx1MDAzZV9fbHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTM1NC1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjIwLjk1NzgxMjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjgzOTg1MTM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBodW5jaCBpcyB0byBsb29rIGF0IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGNncm91cHMgYW5kIG11bHRpLWdlbiBMUlUuIFRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBoYXMgbGVkIG1lIHRvIGV2YWx1YXRlIHNldmVyYWwgZnVuY3Rpb25zLiBJIG5lZWQgdG8gcGlucG9pbnQgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nIOKAkyB3aGljaCBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgYW5kIGhhdmUgZ29vZCBjb3ZlcmFnZS5cblxuRmlyc3QsIEkgY29uc2lkZXJlZCBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAsIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgLCBhbmQgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAuICBUaGVzZSBzdG9vZCBvdXQuIERpdmluZyBkZWVwZXIsIEkgaWRlbnRpZmllZCB0aGVzZSBrZXkgXCJGb2N1c1N5bWJvbHNcIjpcblxuKiAgIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgOiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBpdCB3YXMgYWRkZWQgYnkgdGhlIHBhdGNoIGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBpcyBjYWxsZWQgYnkgYHNocmlua19vbmVgLiBJdCdzIGEgZGlyZWN0IGNvbm5lY3Rpb24gdG8gdGhlIGNvZGUgSSdtIGludGVyZXN0ZWQgaW4uXG4qICAgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmA6ICBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQncyBtb2RpZmllZCBpbmRpcmVjdGx5LCBhZmZlY3RpbmcgdGhlIGBlZmZlY3RpdmVfcHJvdGVjdGlvbmAgY2FsY3VsYXRpb24sIGFuZCBpcywgaXRzZWxmLCBjYWxsZWQgYnkgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAgYW5kIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYC5cbiogICBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbmA6ICBJdCdzIGEgZGlyZWN0IGNhbGxlciBvZiBgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYCwgbWFraW5nIGl0IGFub3RoZXIgY2VudHJhbCBwb2ludC5cbiogICBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAsIGBzaHJpbmtfbWFueWAsIGBzaHJpbmtfb25lYDogIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBtdWx0aWdlbiBMUlUgcmVjbGFpbSBmdW5jdGlvbnMgYW5kIGFyZSBvYnZpb3VzbHkgcmVsZXZhbnQuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZ29vZCBjYW5kaWRhdGVzLiBBcmUgdGhleSB1YmlxdWl0b3VzPyBObywgdGhleSdyZSBub3QuIFRoZXkgYXJlIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGNncm91cCBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIG11bHRpLWdlbiBMUlUuICBUaGlzIG1ha2VzIHRoZW0gbW9yZSB0YXJnZXRlZCBhbmQgdGhlcmVmb3JlIHBvdGVudGlhbGx5IG1vcmUgZnJ1aXRmdWwgZm9yIGZ1enppbmcuXG5cbk5leHQsIHRoZSBjb25maWdzOiAgYE1FTUNHYCBpcyByZXF1aXJlZCBmb3IgdGhlIGNncm91cCBtZW1vcnkgY29udHJvbGxlciAoYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCwgYG1tL21lbWNvbnRyb2wuY2AsIGBtbS9wYWdlX2NvdW50ZXIuY2ApLCBhbmQgYExSVV9HRU5gIGlzIG5lZWRlZCBmb3IgdGhlIG11bHRpLWdlbiBMUlUgKGBtbS92bXNjYW4uY2AsIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgKS4gIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzeXN0ZW0gaXMgcHJvcGVybHkgY29uZmlndXJlZCB0byBhY3R1YWxseSBfdXNlXyB0aGVzZSBmZWF0dXJlcy5cblxuQSBmZXcgbW9yZSBjb25maWd1cmF0aW9ucyBuZWVkIGV4YW1pbmF0aW9uOiBgQ09ORklHX0xSVV9HRU5gIGRlcGVuZHMgb24gYE1NVWAsIGA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQYC4gV2hpbGUgdGhhdCBpcyBuZWNlc3NhcnkgdG8gaGF2ZSBgQ09ORklHX0xSVV9HRU5gIGVuYWJsZWQsIGl0IGlzIG5vdCBzb21ldGhpbmcgdGhhdCB3b3VsZCBhZmZlY3QgZnV6emluZy4gYENPTkZJR19NRU1DR2AgaXMgdW5kZXIgYGluaXQvS2NvbmZpZ2AuIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBtaWdodCBiZSBoZWxwZnVsIHRvIG1ha2Ugc3VyZSB0aGF0IExSVVxcX0dFTiBpcyBhY3RpdmUsIGJ1dCB0aGVzZSBhcmUgc2Vjb25kYXJ5IHRvIHRoZSBjb21waWxhdGlvbiBjb25maWcgZGVwZW5kZW5jaWVzLlxuXG5IZXJlJ3MgbXkgc3VtbWFyeTogIHRoaXMgaXMgXCJXb3J0aEZ1enppbmdcIiBiZWNhdXNlIHRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjZ3JvdXAgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbiBsb2dpYyBpbiBgbW0vcGFnZV9jb3VudGVyLmNgLCBhZGRpbmcgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpYCBpbiBgbW0vbWVtY29udHJvbC5jYCBhbmQgaW50ZWdyYXRpbmcgaXQgaW50byBtdWx0aS1nZW4gTFJVIHBhZ2UgcmVjbGFpbSBpbiBgbW0vdm1zY2FuLmNgLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhcmUgZnVsbHkgcmVhY2hhYmxlLiAgTXkga2V5IEZvY3VzU3ltYm9scyBhcmUgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAsIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLCBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbmAsIGFuZCBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAuICBJJ2xsIG5lZWQgdG8gZW5hYmxlIGBNRU1DR2AsIGBMUlVfR0VOYCwgYW5kIHBvdGVudGlhbGx5IGBMUlVfR0VOX0VOQUJMRURgIGZvciB0aGUgZnV6emluZyB0byBiZSBlZmZlY3RpdmUuXG5cbkxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIxMCwiT3V0cHV0VG9rZW5zIjoxNzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MjcuNzk3NjY2NjkzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MzMyOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoXCIsXG4gICAgXCJwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25cIixcbiAgICBcIm1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25cIixcbiAgICBcImxydV9nZW5fc2hyaW5rX25vZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGJ5IHVwZGF0aW5nIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9ucyBpbiBtbS9wYWdlX2NvdW50ZXIuYyB0byBwcmV2ZW50IGFyaXRobWV0aWMgb3ZlcmZsb3cgYW5kIGRpdmlzaW9uIGlzc3VlcywgaW50cm9kdWNpbmcgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgaW4gbW0vbWVtY29udHJvbC5jLCBhbmQgaG9va2luZyBpdCBpbnRvIHRoZSBNdWx0aS1HZW4gTFJVIHBhZ2UgcmVjbGFpbSBwYXRoIGluIG1tL3Ztc2Nhbi5jLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbWVtb3J5IHJlY2xhaW0gYW5kIGNncm91cCBhY2NvdW50aW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhcIixcbiAgICBcInBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvblwiLFxuICAgIFwibWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvblwiLFxuICAgIFwibHJ1X2dlbl9zaHJpbmtfbm9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYnkgdXBkYXRpbmcgZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb25zIGluIG1tL3BhZ2VfY291bnRlci5jIHRvIHByZXZlbnQgYXJpdGhtZXRpYyBvdmVyZmxvdyBhbmQgZGl2aXNpb24gaXNzdWVzLCBpbnRyb2R1Y2luZyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSBpbiBtbS9tZW1jb250cm9sLmMsIGFuZCBob29raW5nIGl0IGludG8gdGhlIE11bHRpLUdlbiBMUlUgcGFnZSByZWNsYWltIHBhdGggaW4gbW0vdm1zY2FuLmMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBtZW1vcnkgcmVjbGFpbSBhbmQgY2dyb3VwIGFjY291bnRpbmcgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjI3Ljk1NTAxMDIwOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMDk5MjY3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzo0ODoyNy45NTU3MDAwODhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxODIwOTIzMjM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGludGVnZXIgb3ZlcmZsb3cgLyBhcml0aG1ldGljIGhhbmRsaW5nIGluIHBhZ2VfY291bnRlciBlZmZlY3RpdmUgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbiAobW0vcGFnZV9jb3VudGVyLmMpIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIHRvIGNhbGN1bGF0ZSBhbmNlc3RvciBtZW1vcnkgY2dyb3VwIHByb3RlY3Rpb24gYWxvbmcgdGhlIGhpZXJhcmNoeSBwYXRoIGR1cmluZyBNR0xSVSByZWNsYWltIChtbS9tZW1jb250cm9sLmMsIG1tL3Ztc2Nhbi5jKS5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3Nlcywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IHRyYW5zZmVycy4gVGhlIGJ1Z3MgYWRkcmVzc2VkIGFuZCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGluIHRoaXMgY29kZSBwYXRoIChzdWNoIGFzIGRpdmlzaW9uIGVycm9ycywgaGllcmFyY2h5IHRyYXZlcnNhbCBidWdzLCBvciBwb2ludGVyIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1aWxkIGNoZWNrcyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2U0ZmZkYThjYTY3Mzg1ZDRlNGU0NWE3OTVlNTQ0NTllZDI5NDlkN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDc6NDc6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA0ZjcyMDc5MWEzMWM5Li40NmJmNzI0Y2FlN2FmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTkyMSw2ICsxOTIxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gfVxuICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19MUlVfR0VOKVxuK3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuK1x0XHRcdFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3tcbit9XG4rI2VuZGlmXG4rXG4gI2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfWlNXQVApXG4gYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpO1xuIHZvaWQgb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAzMDcyMDMzMDFhMmE1Li4xNDYwY2JhNTM1ODhlIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC01MjUzLDYgKzUyNTMsNTEgQEAgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuIFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LCBcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19MUlVfR0VOXG4rLyoqXG4rICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoIC0gY29tcHV0ZSBwcm90ZWN0aW9uIGFsb25nIGEgcGF0aFxuKyAqIEByb290OiB0aGUgdG9wIGFuY2VzdG9yIG9mIHRoZSBzdWItdHJlZSBiZWluZyBjaGVja2VkIChOVUxMIGZvciByb290X21lbV9jZ3JvdXApXG4rICogQG1lbWNnOiB0aGUgdGFyZ2V0IG1lbW9yeSBjZ3JvdXBcbisgKlxuKyAqIFdhbGsgdGhlIGFuY2VzdG9yIHBhdGggZnJvbSBAcm9vdCBkb3duIHRvIEBtZW1jZyBhbmQgY29tcHV0ZSB0aGUgZWZmZWN0aXZlXG4rICogcHJvdGVjdGlvbiBhdCBlYWNoIGxldmVsLiAgVGhpcyBpcyBzYWZlIGZvciBpc29sYXRlZCBxdWVyaWVzIGJlY2F1c2UgaXRcbisgKiBlbnN1cmVzIHBhcmVudHMgYXJlIGNvbXB1dGVkIGJlZm9yZSBjaGlsZHJlbi5cbisgKi9cbit2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4re1xuK1x0Ym9vbCByZWN1cnNpdmVfcHJvdGVjdGlvbiA9XG4rXHRcdGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfUkVDVVJTSVZFX1BST1Q7XG4rXHRzdHJ1Y3QgY2dyb3VwICpjZztcbitcdGludCByb290X2xldmVsLCBpO1xuK1xuK1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKCFyb290KVxuK1x0XHRyb290ID0gcm9vdF9tZW1fY2dyb3VwO1xuK1xuK1x0aWYgKG1lbWNnID09IHJvb3QpXG4rXHRcdHJldHVybjtcbitcbitcdHJvb3RfbGV2ZWwgPSByb290LVx1MDAzZWNzcy5jZ3JvdXAtXHUwMDNlbGV2ZWw7XG4rXHRjZyA9IG1lbWNnLVx1MDAzZWNzcy5jZ3JvdXA7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRmb3IgKGkgPSByb290X2xldmVsICsgMTsgaSBcdTAwM2M9IGNnLVx1MDAzZWxldmVsOyBpKyspIHtcbitcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKmN1cjtcbitcbitcdFx0Y3VyID0gbWVtX2Nncm91cF9mcm9tX2NzcyhjZ3JvdXBfY3NzKGNnLVx1MDAzZWFuY2VzdG9yc1tpXSxcbitcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cykpO1xuK1x0XHRpZiAoY3VyKVxuK1x0XHRcdHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihcdTAwMjZyb290LVx1MDAzZW1lbW9yeSxcbitcdFx0XHRcdFx0XHRcdCAgXHUwMDI2Y3VyLVx1MDAzZW1lbW9yeSxcbitcdFx0XHRcdFx0XHRcdCAgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rfVxuKyNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuK1xuIHN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRnZnBfdCBnZnApXG4ge1xuZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmNcbmluZGV4IDQ1MDU0M2Y0YjMxOGIuLjk4MzIyODAzOTQxYTcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2NvdW50ZXIuY1xuKysrIGIvbW0vcGFnZV9jb3VudGVyLmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VfY291bnRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21hdGg2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbkBAIC0zNzYsNyArMzc3LDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSxcbiBcdCAqIG90aGVyd2lzZSBnZXQgYSBzbWFsbGVyIGNodW5rIHRoYW4gd2hhdCB0aGV5IGNsYWltZWQuXG4gXHQgKi9cbiBcdGlmIChzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDNlIHBhcmVudF9lZmZlY3RpdmUpXG4tXHRcdHJldHVybiBwcm90ZWN0ZWQgKiBwYXJlbnRfZWZmZWN0aXZlIC8gc2libGluZ3NfcHJvdGVjdGVkO1xuK1x0XHRyZXR1cm4gbXVsX3U2NF91NjRfZGl2X3U2NChwcm90ZWN0ZWQsIHBhcmVudF9lZmZlY3RpdmUsXG4rXHRcdFx0XHRcdCAgIHNpYmxpbmdzX3Byb3RlY3RlZCk7XG4gXG4gXHQvKlxuIFx0ICogT2ssIHV0aWxpemVkIHByb3RlY3Rpb24gb2YgYWxsIGNoaWxkcmVuIGlzIHdpdGhpbiB3aGF0IHRoZVxuQEAgLTQxNywxMyArNDE5LDIwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsXG4gXHRpZiAocGFyZW50X2VmZmVjdGl2ZSBcdTAwM2Ugc2libGluZ3NfcHJvdGVjdGVkIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHBhcmVudF91c2FnZSBcdTAwM2Ugc2libGluZ3NfcHJvdGVjdGVkIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHVzYWdlIFx1MDAzZSBwcm90ZWN0ZWQpIHtcbi1cdFx0dW5zaWduZWQgbG9uZyB1bmNsYWltZWQ7XG4rXHRcdHVuc2lnbmVkIGxvbmcgcGFyZW50X3VuY2xhaW1lZCwgcGFyZW50X3VucHJvdGVjdGVkLCB1bnByb3RlY3RlZDtcbiBcbi1cdFx0dW5jbGFpbWVkID0gcGFyZW50X2VmZmVjdGl2ZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDtcbi1cdFx0dW5jbGFpbWVkICo9IHVzYWdlIC0gcHJvdGVjdGVkO1xuLVx0XHR1bmNsYWltZWQgLz0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuK1x0XHRwYXJlbnRfdW5jbGFpbWVkID0gcGFyZW50X2VmZmVjdGl2ZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDtcbitcdFx0cGFyZW50X3VucHJvdGVjdGVkID0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuIFxuLVx0XHRlcCArPSB1bmNsYWltZWQ7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSB1c2FnZXMgYXJlbid0IHJlYWQgYXRvbWljYWxseSwgc28gYSBjaGlsZCBjYW4gdHJhbnNpZW50bHlcbitcdFx0ICogYXBwZWFyIHRvIHVzZSBtb3JlIHRoYW4gaXRzIHBhcmVudCwgbWFraW5nIHRoZSByYXRpbyBleGNlZWQgMVxuK1x0XHQgKiBhbmQgdGhlIHF1b3RpZW50IG92ZXJmbG93IDY0IGJpdHMgKCNERSBvbiB4ODYpLiAgQ2FwIGl0LlxuK1x0XHQgKi9cbitcdFx0dW5wcm90ZWN0ZWQgPSBtaW4odXNhZ2UgLSBwcm90ZWN0ZWQsIHBhcmVudF91bnByb3RlY3RlZCk7XG4rXG4rXHRcdGVwICs9IG11bF91NjRfdTY0X2Rpdl91NjQocGFyZW50X3VuY2xhaW1lZCwgdW5wcm90ZWN0ZWQsXG4rXHRcdFx0XHRcdCAgcGFyZW50X3VucHJvdGVjdGVkKTtcbiBcdH1cbiBcbiBcdHJldHVybiBlcDtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA0MGQzZjFiNDhhNzRjLi5mZDU1MTVmZDUxNDJkIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNTE5Myw3ICs1MTkzLDEzIEBAIHN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4gXG4tXHQvKiBscnVfZ2VuX2FnZV9ub2RlKCkgY2FsbGVkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKSAqL1xuK1x0LypcbitcdCAqIEZvciBrc3dhcGQsIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKSBoYXMgYWxyZWFkeVxuK1x0ICogYmVlbiBjYWxsZWQgZHVyaW5nIHRoZSB0b3AtZG93biBjZ3JvdXAgdHJhdmVyc2FsLlxuK1x0ICovXG4rXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpXG4rXHRcdG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChOVUxMLCBtZW1jZyk7XG4rXG4gXHRpZiAobWVtX2Nncm91cF9iZWxvd19taW4oTlVMTCwgbWVtY2cpKVxuIFx0XHRyZXR1cm4gTUVNQ0dfTFJVX1lPVU5HO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MjcuOTU1NzAxNjc4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg1MjcxOTM2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBBc3Nlc3NtZW50IGZvciBUaGlzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIGNoYW5nZXMgdG91Y2ggYG1lbWNvbnRyb2wuaGAsIGBtZW1jb250cm9sLmNgLCBgcGFnZV9jb3VudGVyLmNgLCBhbmQgYHZtc2Nhbi5jYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBwcmltYXJpbHkgZGVhbGluZyB3aXRoOlxuXG4qICAgQXJpdGhtZXRpYyBvdmVyZmxvdyBmaXhlcyBpbiBgcGFnZV9jb3VudGVyLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBlZmZlY3RpdmVfcHJvdGVjdGlvbmAgY2FsY3VsYXRpb24uIFRoaXMgdXNlcyBgbXVsX3U2NF91NjRfZGl2X3U2NGAgYW5kIGBtaW5gIHRvIGF2b2lkIHRob3NlIGlzc3Vlcy5cbiogICBUaGUgaW50cm9kdWN0aW9uIG9mIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgLCBhIGhlbHBlciBmdW5jdGlvbiB0byB0cmF2ZXJzZSB0aGUgbWVtb3J5IGNncm91cCBoaWVyYXJjaHkgKGFuY2VzdG9ycykgYW5kIGNhbGN1bGF0ZSBwcm90ZWN0aW9uIHZhbHVlcy4gVGhpcyBpcyByZWxldmFudCB0byBNR0xSVSwgZ2l2ZW4gdGhlIGBDT05GSUdfTFJVX0dFTmAgZGVwZW5kZW5jeS5cbiogICBUaGlzIG5ldyBoZWxwZXIgaXMgY2FsbGVkIHdpdGhpbiBgc2hyaW5rX29uZWAgaW4gYHZtc2Nhbi5jYCwgbGlrZWx5IGZvciBkaXJlY3QgcmVjbGFpbWVycy5cblxuVGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gSSBuZWVkIHRvIGFwcGx5IHRoZSBLTVNBTiBjcml0ZXJpYS4gUmVtZW1iZXIsIEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgKHN0YWNrLCBoZWFwLCBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuIFRoZSBtYWluIGNyaXRlcmlhIEknbSBsb29raW5nIGZvciBhcmU6XG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZS5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gIEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuXG40LiAgQm91bmRzIGNoZWNrcyBvciBsZW5ndGggbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzLlxuXG5MZXQncyBnbyB0aHJvdWdoIHRoZSBwYXRjaCwgbGluZSBieSBsaW5lLCBhZ2FpbnN0IHRoZXNlIGNyaXRlcmlhOlxuXG4qICAgKipDcml0ZXJpb24gMSAoVXNlcnNwYWNlIEV4cG9zdXJlKToqKiBOb3RoaW5nIGhlcmUgc2VuZHMga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBzbyB3ZSdyZSBnb29kIG9uIHRoYXQgZnJvbnQuXG4qICAgKipDcml0ZXJpb24gMiAoVW5pbml0aWFsaXplZCBWYXJpYWJsZXMgaW4gTG9naWMpOioqIE5vdywgbGV0J3MgZGlnIGludG8gdGhhdCBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCBhbmQgYGVmZmVjdGl2ZV9wcm90ZWN0aW9uYC4gSSdtIHNlZWluZyB2YXJpYWJsZXMgbGlrZSBgcmVjdXJzaXZlX3Byb3RlY3Rpb25gLCBgY2dgLCBgcm9vdF9sZXZlbGAsIGBpYCwgYW5kIGBjdXJgLiBCdXQgSSdtIGNoZWNraW5nLCBhbmQgaXQgc2VlbXMgYWxsIHRoZXNlIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZXkncmUgdXNlZC4gRXZlcnl0aGluZyBsb29rcyBzYWZlIGhlcmUhIEluIGBlZmZlY3RpdmVfcHJvdGVjdGlvbmAsIHZhcmlhYmxlcyBsaWtlIGBwYXJlbnRfdW5jbGFpbWVkYCwgYHBhcmVudF91bnByb3RlY3RlZGAsIGFuZCBgdW5wcm90ZWN0ZWRgIGFyZSBhbGwganVzdCBkaXJlY3QgcmVzdWx0cyBvZiBhcml0aG1ldGljIG9wZXJhdGlvbnMsIHNvIHRoZXJlJ3Mgbm8gcmlzay5cbiogICAqKkNyaXRlcmlvbiAzIChDb21wbGV4IERhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uKToqKiBObyBuZXcgYWxsb2NhdGlvbnMgYXJlIGluIHRoaXMgcGF0Y2gsIHNvIHdlIGNhbiBjaGVjayB0aGlzIGNyaXRlcmlvbiBvZmYuXG4qICAgKipDcml0ZXJpb24gNCAoVW5pbml0aWFsaXplZCBCdWZmZXIgQWNjZXNzKToqKiBUaGlzIHBhdGNoIGRvZXNuJ3QgbG9vayBsaWtlIGl0J3MgbWVzc2luZyB3aXRoIGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLlxuXG5TbywgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gZml4aW5nIGFyaXRobWV0aWMgaXNzdWVzIGluIG1lbW9yeSBjZ3JvdXAgcHJvdGVjdGlvbiBhbmQgY29ycmVjdGx5IGNhbGN1bGF0aW5nIHZhbHVlcywgZXNwZWNpYWxseSBmb3IgTUdMUlUuIFdlJ3ZlIGFzc2Vzc2VkIHRoYXQgaXQgZG9lc24ndCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYmFzZWQgb24gdGhlc2UgY2hhbmdlcyB0aGVtc2VsdmVzLiBXZSBuZWVkIHRvIGNoZWNrIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gIG9yIGFueXRoaW5nIGVsc2UgdGhpcyBwYXRjaCBoYXMgdG91Y2hlZCwgYnV0IGJhc2VkIG9uIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQsIEknZCBzYXkgbm8gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbmVjZXNzYXJ5ICpmb3IgdGhpcyBwYXRjaCouIFdlJ3JlIHByb2JhYmx5IGdvb2Qgd2l0aCB0aGUgZXhpc3RpbmcgY292ZXJhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzo0ODozNi40ODI4OTkwM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYzNjY3NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfY291bnRlci5jPTM1OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmMtNDUyLSAqL1xcbm1tL3BhZ2VfY291bnRlci5jOjQ1Mzp2b2lkIHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpyb290LFxcbm1tL3BhZ2VfY291bnRlci5jLTQ1NC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MzYuNTc5MjcyMjk1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MzAyMDA3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gUGFnZSBDb3VudGVyIFByb3RlY3Rpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBtbS9wYWdlX2NvdW50ZXIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5J3JlIGhhbmRsaW5nIHByb3RlY3Rpb24gd2l0aGluIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLiBUaGlzIGFyZWEgaXMgY3J1Y2lhbCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVzb3VyY2UgYWNjb3VudGluZywgYW5kIGFueSBwb3RlbnRpYWwgZmxhd3MgaGVyZSBjb3VsZCBoYXZlIHNlcmlvdXMgcmFtaWZpY2F0aW9ucy4gSSdtIGhvcGluZyB0byBzZWUgYSBjbGVhbiwgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIHRoYXQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBpc3N1ZXMgcmVsYXRlZCB0byBjb25jdXJyZW50IGFjY2Vzcy4gTGV0J3Mgc2VlIGhvdyB0aGV5J3ZlIGFwcHJvYWNoZWQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQzMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjM4LjMwOTQ3NjUyN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9jb3VudGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDUwOlxcdCAqIFdBUk5JTkc6IFRoaXMgZnVuY3Rpb24gaXMgbm90IHN0YXRlbGVzcyEgSXQgY2FuIG9ubHkgYmUgdXNlZCBhcyBwYXJ0XFxuIDQ1MTpcXHQgKiAgICAgICAgICBvZiBhIHRvcC1kb3duIHRyZWUgaXRlcmF0aW9uLCBub3QgZm9yIGlzb2xhdGVkIHF1ZXJpZXMuXFxuIDQ1MjpcXHQgKi9cXG4gNDUzOlxcdHZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXFxuIDQ1NDpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcXG4gNDU1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBib29sIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKVxcbiA0NTY6XFx0e1xcbiA0NTc6XFx0XFx0dW5zaWduZWQgbG9uZyB1c2FnZSwgcGFyZW50X3VzYWdlO1xcbiA0NTg6XFx0XFx0c3RydWN0IHBhZ2VfY291bnRlciAqcGFyZW50ID0gY291bnRlci1cXHUwMDNlcGFyZW50O1xcbiA0NTk6XFx0XFxuIDQ2MDpcXHRcXHQvKlxcbiA0NjE6XFx0XFx0ICogRWZmZWN0aXZlIHZhbHVlcyBvZiB0aGUgcmVjbGFpbSB0YXJnZXRzIGFyZSBpZ25vcmVkIHNvIHRoZXlcXG4gNDYyOlxcdFxcdCAqIGNhbiBiZSBzdGFsZS4gSGF2ZSBhIGxvb2sgYXQgbWVtX2Nncm91cF9wcm90ZWN0aW9uIGZvciBtb3JlXFxuIDQ2MzpcXHRcXHQgKiBkZXRhaWxzLlxcbiA0NjQ6XFx0XFx0ICogVE9ETzogY2FsY3VsYXRpb24gc2hvdWxkIGJlIG1vcmUgcm9idXN0IHNvIHRoYXQgd2UgZG8gbm90IG5lZWRcXG4gNDY1OlxcdFxcdCAqIHRoYXQgc3BlY2lhbCBjYXNpbmcuXFxuIDQ2NjpcXHRcXHQgKi9cXG4gNDY3OlxcdFxcdGlmIChyb290ID09IGNvdW50ZXIpXFxuIDQ2ODpcXHRcXHRcXHRyZXR1cm47XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdFxcdHVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcik7XFxuIDQ3MTpcXHRcXHRpZiAoIXVzYWdlKVxcbiA0NzI6XFx0XFx0XFx0cmV0dXJuO1xcbiA0NzM6XFx0XFxuIDQ3NDpcXHRcXHRpZiAocGFyZW50ID09IHJvb3QpIHtcXG4gNDc1OlxcdFxcdFxcdGNvdW50ZXItXFx1MDAzZWVtaW4gPSBSRUFEX09OQ0UoY291bnRlci1cXHUwMDNlbWluKTtcXG4gNDc2OlxcdFxcdFxcdGNvdW50ZXItXFx1MDAzZWVsb3cgPSBSRUFEX09OQ0UoY291bnRlci1cXHUwMDNlbG93KTtcXG4gNDc3OlxcdFxcdFxcdHJldHVybjtcXG4gNDc4OlxcdFxcdH1cXG4gNDc5OlxcdFxcbiA0ODA6XFx0XFx0cGFyZW50X3VzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQocGFyZW50KTtcXG4gNDgxOlxcdFxcbiA0ODI6XFx0XFx0V1JJVEVfT05DRShjb3VudGVyLVxcdTAwM2VlbWluLCBlZmZlY3RpdmVfcHJvdGVjdGlvbih1c2FnZSwgcGFyZW50X3VzYWdlLFxcbiA0ODM6XFx0XFx0XFx0XFx0UkVBRF9PTkNFKGNvdW50ZXItXFx1MDAzZW1pbiksXFxuIDQ4NDpcXHRcXHRcXHRcXHRSRUFEX09OQ0UocGFyZW50LVxcdTAwM2VlbWluKSxcXG4gNDg1OlxcdFxcdFxcdFxcdGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnBhcmVudC1cXHUwMDNlY2hpbGRyZW5fbWluX3VzYWdlKSxcXG4gNDg2OlxcdFxcdFxcdFxcdHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKSk7XFxuIDQ4NzpcXHRcXG4gNDg4OlxcdFxcdFdSSVRFX09OQ0UoY291bnRlci1cXHUwMDNlZWxvdywgZWZmZWN0aXZlX3Byb3RlY3Rpb24odXNhZ2UsIHBhcmVudF91c2FnZSxcXG4gNDg5OlxcdFxcdFxcdFxcdFJFQURfT05DRShjb3VudGVyLVxcdTAwM2Vsb3cpLFxcbiA0OTA6XFx0XFx0XFx0XFx0UkVBRF9PTkNFKHBhcmVudC1cXHUwMDNlZWxvdyksXFxuIDQ5MTpcXHRcXHRcXHRcXHRhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZwYXJlbnQtXFx1MDAzZWNoaWxkcmVuX2xvd191c2FnZSksXFxuIDQ5MjpcXHRcXHRcXHRcXHRyZWN1cnNpdmVfcHJvdGVjdGlvbikpO1xcbiA0OTM6XFx0fVxcbiA0OTQ6XFx0I2VuZGlmIC8qIENPTkZJR19NRU1DRyB8fCBDT05GSUdfQ0dST1VQX0RNRU0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MzguMzA5NjQ0NjU3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4NTUyNjc0MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIHByZXR0eSBjbGVhbi4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBrbm93biBhcml0aG1ldGljIGlzc3VlIGluIGBlZmZlY3RpdmVfcHJvdGVjdGlvbigpYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBwcmV2ZW50aW5nIDY0LWJpdCBpbnRlZ2VyIG92ZXJmbG93IGFuZCBkaXZpc2lvbiBlcnJvcnMsIHdoaWNoIG1ha2VzIHNlbnNlLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgY29yZSBjYWxjdWxhdGlvbiwgc28gaXQncyBnb29kIHRvIGJlIG1ldGljdWxvdXMgaGVyZS4gVGhlIGFkZGl0aW9uIG9mIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKWAgbG9va3MgbGlrZSBhIG5lY2Vzc2FyeSBjb21wYW5pb24gZnVuY3Rpb24gdG8gZW5zdXJlIGFjY3VyYXRlIGNhbGN1bGF0aW9ucyBkdXJpbmcgdGhlIE1HTFJVLWRyaXZlbiBgc2hyaW5rX29uZSgpYCBjYWxscy4gRW5zdXJpbmcgdGhpcyB0b3AtZG93biBjYWxjdWxhdGlvbiBpbiB0aGUgYW5jZXN0b3IgcGF0aCBpcyBlc3NlbnRpYWwgZm9yIE1HTFJVJ3MgY29uc2lzdGVuY3kuXG5cbkRpZ2dpbmcgZGVlcGVyLCB0aGVyZSdzIG5vdGhpbmcgY29uY2VybmluZyBqdW1waW5nIG91dCBhdCBtZSBpbiB0ZXJtcyBvZiBtZW1vcnkgc2FmZXR5LiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdXNlci1zcGFjZSBjb3BpZXMsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9idWZmZXJzLiBUaGUgY29kZSBsb29rcyBzb3VuZCBpbiB0aGF0IHJlc3BlY3QuIEtBU0FOIGFuZCB0aGUgc3RhbmRhcmQgc2FuaXRpemVycyBhcmUgdGhlIHJpZ2h0IHRvb2xzIGZvciB0aGUgam9iIGhlcmU7IG5vIG5lZWQgdG8gYnJpbmcgaW4gS01TQU4ncyBoZWF2aWVyIGFydGlsbGVyeS4gSXQgYWxsIHNlZW1zIHByZXR0eSBsb3ctcmlzayBmcm9tIGEgbWVtb3J5LXNhZmV0eSBwZXJzcGVjdGl2ZS5cblxuVGhlcmVmb3JlLCBgc2V0LXJlc3VsdHNgIHdpdGggYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBhIGNvbmNpc2UgYnV0IGNsZWFyIGV4cGxhbmF0aW9uIG9mIHRoZSBvdmVyZmxvdy9kaXZpc2lvbiBmaXggYW5kIHRoZSBNR0xSVSBwcm90ZWN0aW9uIHBhdGggYWRqdXN0bWVudCBzaG91bGQgYmUgdGhlIHdheSB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI1NywiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzo0ODo0Ni4xNjQ5MTUwMDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpbnRlZ2VyIG92ZXJmbG93IC8gYXJpdGhtZXRpYyBoYW5kbGluZyBpbiBwYWdlX2NvdW50ZXIgZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb24gKG1tL3BhZ2VfY291bnRlci5jKSBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSB0byBjYWxjdWxhdGUgYW5jZXN0b3IgbWVtb3J5IGNncm91cCBwcm90ZWN0aW9uIGFsb25nIHRoZSBoaWVyYXJjaHkgcGF0aCBkdXJpbmcgTUdMUlUgcmVjbGFpbSAobW0vbWVtY29udHJvbC5jLCBtbS92bXNjYW4uYykuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSB0cmFuc2ZlcnMuIFRoZSBidWdzIGFkZHJlc3NlZCBhbmQgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBpbiB0aGlzIGNvZGUgcGF0aCAoc3VjaCBhcyBkaXZpc2lvbiBlcnJvcnMsIGhpZXJhcmNoeSB0cmF2ZXJzYWwgYnVncywgb3IgcG9pbnRlciBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWlsZCBjaGVja3MgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpbnRlZ2VyIG92ZXJmbG93IC8gYXJpdGhtZXRpYyBoYW5kbGluZyBpbiBwYWdlX2NvdW50ZXIgZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb24gKG1tL3BhZ2VfY291bnRlci5jKSBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSB0byBjYWxjdWxhdGUgYW5jZXN0b3IgbWVtb3J5IGNncm91cCBwcm90ZWN0aW9uIGFsb25nIHRoZSBoaWVyYXJjaHkgcGF0aCBkdXJpbmcgTUdMUlUgcmVjbGFpbSAobW0vbWVtY29udHJvbC5jLCBtbS92bXNjYW4uYykuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSB0cmFuc2ZlcnMuIFRoZSBidWdzIGFkZHJlc3NlZCBhbmQgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBpbiB0aGlzIGNvZGUgcGF0aCAoc3VjaCBhcyBkaXZpc2lvbiBlcnJvcnMsIGhpZXJhcmNoeSB0cmF2ZXJzYWwgYnVncywgb3IgcG9pbnRlciBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWlsZCBjaGVja3MgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow99jqz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 06:41:33 +0000 UTC FinishedAt: 2026-09-07 07:48:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "a2fd94e7-a138-464e-8021-bfe6abdad0f6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_calculate_protection_path", "page_counter_calculate_protection", "mem_cgroup_calculate_protection", "lru_gen_shrink_node" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoJiMzNDssCiAgICAmIzM0O3BhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbiYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uJiMzNDssCiAgICAmIzM0O2xydV9nZW5fc2hyaW5rX25vZGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgaW50ZWdlciBvdmVyZmxvdyAvIGFyaXRobWV0aWMgaGFuZGxpbmcgaW4gcGFnZV9jb3VudGVyIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9uIChtbS9wYWdlX2NvdW50ZXIuYykgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgdG8gY2FsY3VsYXRlIGFuY2VzdG9yIG1lbW9yeSBjZ3JvdXAgcHJvdGVjdGlvbiBhbG9uZyB0aGUgaGllcmFyY2h5IHBhdGggZHVyaW5nIE1HTFJVIHJlY2xhaW0gKG1tL21lbWNvbnRyb2wuYywgbW0vdm1zY2FuLmMpLlxuXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3Nlcywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IHRyYW5zZmVycy4gVGhlIGJ1Z3MgYWRkcmVzc2VkIGFuZCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGluIHRoaXMgY29kZSBwYXRoIChzdWNoIGFzIGRpdmlzaW9uIGVycm9ycywgaGllcmFyY2h5IHRyYXZlcnNhbCBidWdzLCBvciBwb2ludGVyIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1aWxkIGNoZWNrcyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYnkgdXBkYXRpbmcgZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb25zIGluIG1tL3BhZ2VfY291bnRlci5jIHRvIHByZXZlbnQgYXJpdGhtZXRpYyBvdmVyZmxvdyBhbmQgZGl2aXNpb24gaXNzdWVzLCBpbnRyb2R1Y2luZyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSBpbiBtbS9tZW1jb250cm9sLmMsIGFuZCBob29raW5nIGl0IGludG8gdGhlIE11bHRpLUdlbiBMUlUgcGFnZSByZWNsYWltIHBhdGggaW4gbW0vdm1zY2FuLmMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBtZW1vcnkgcmVjbGFpbSBhbmQgY2dyb3VwIGFjY291bnRpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzZTRmZmRhOGNhNjczODVkNGU0ZTQ1YTc5NWU1NDQ1OWVkMjk0OWQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNzo0Nzo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA0ZjcyMDc5MWEzMWM5Li40NmJmNzI0Y2FlN2FmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTkyMSw2ICYjNDM7MTkyMSwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIH1cbiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4gXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0xSVV9HRU4pXG4mIzQzO3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuJiM0MztcdFx0XHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19aU1dBUClcbiBib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7XG4gdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDMwNzIwMzMwMWEyYTUuLjE0NjBjYmE1MzU4OGUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTUyNTMsNiAmIzQzOzUyNTMsNTEgQEAgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuIFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LCBcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfTFJVX0dFTlxuJiM0MzsvKipcbiYjNDM7ICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoIC0gY29tcHV0ZSBwcm90ZWN0aW9uIGFsb25nIGEgcGF0aFxuJiM0MzsgKiBAcm9vdDogdGhlIHRvcCBhbmNlc3RvciBvZiB0aGUgc3ViLXRyZWUgYmVpbmcgY2hlY2tlZCAoTlVMTCBmb3Igcm9vdF9tZW1fY2dyb3VwKVxuJiM0MzsgKiBAbWVtY2c6IHRoZSB0YXJnZXQgbWVtb3J5IGNncm91cFxuJiM0MzsgKlxuJiM0MzsgKiBXYWxrIHRoZSBhbmNlc3RvciBwYXRoIGZyb20gQHJvb3QgZG93biB0byBAbWVtY2cgYW5kIGNvbXB1dGUgdGhlIGVmZmVjdGl2ZVxuJiM0MzsgKiBwcm90ZWN0aW9uIGF0IGVhY2ggbGV2ZWwuICBUaGlzIGlzIHNhZmUgZm9yIGlzb2xhdGVkIHF1ZXJpZXMgYmVjYXVzZSBpdFxuJiM0MzsgKiBlbnN1cmVzIHBhcmVudHMgYXJlIGNvbXB1dGVkIGJlZm9yZSBjaGlsZHJlbi5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO3tcbiYjNDM7XHRib29sIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uID1cbiYjNDM7XHRcdGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfUkVDVVJTSVZFX1BST1Q7XG4mIzQzO1x0c3RydWN0IGNncm91cCAqY2c7XG4mIzQzO1x0aW50IHJvb3RfbGV2ZWwsIGk7XG4mIzQzO1xuJiM0MztcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghcm9vdClcbiYjNDM7XHRcdHJvb3QgPSByb290X21lbV9jZ3JvdXA7XG4mIzQzO1xuJiM0MztcdGlmIChtZW1jZyA9PSByb290KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRyb290X2xldmVsID0gcm9vdC1cdTAwM2Vjc3MuY2dyb3VwLVx1MDAzZWxldmVsO1xuJiM0MztcdGNnID0gbWVtY2ctXHUwMDNlY3NzLmNncm91cDtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGZvciAoaSA9IHJvb3RfbGV2ZWwgJiM0MzsgMTsgaSBcdTAwM2M9IGNnLVx1MDAzZWxldmVsOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKmN1cjtcbiYjNDM7XG4mIzQzO1x0XHRjdXIgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNncm91cF9jc3MoY2ctXHUwMDNlYW5jZXN0b3JzW2ldLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cykpO1xuJiM0MztcdFx0aWYgKGN1cilcbiYjNDM7XHRcdFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgXHUwMDI2Y3VyLVx1MDAzZW1lbW9yeSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO31cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4mIzQzO1xuIHN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRnZnBfdCBnZnApXG4ge1xuZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmNcbmluZGV4IDQ1MDU0M2Y0YjMxOGIuLjk4MzIyODAzOTQxYTcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2NvdW50ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9jb3VudGVyLmNcbkBAIC04LDYgJiM0Mzs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX2NvdW50ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWF0aDY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuQEAgLTM3Niw3ICYjNDM7Mzc3LDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSxcbiBcdCAqIG90aGVyd2lzZSBnZXQgYSBzbWFsbGVyIGNodW5rIHRoYW4gd2hhdCB0aGV5IGNsYWltZWQuXG4gXHQgKi9cbiBcdGlmIChzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDNlIHBhcmVudF9lZmZlY3RpdmUpXG4tXHRcdHJldHVybiBwcm90ZWN0ZWQgKiBwYXJlbnRfZWZmZWN0aXZlIC8gc2libGluZ3NfcHJvdGVjdGVkO1xuJiM0MztcdFx0cmV0dXJuIG11bF91NjRfdTY0X2Rpdl91NjQocHJvdGVjdGVkLCBwYXJlbnRfZWZmZWN0aXZlLFxuJiM0MztcdFx0XHRcdFx0ICAgc2libGluZ3NfcHJvdGVjdGVkKTtcbiBcbiBcdC8qXG4gXHQgKiBPaywgdXRpbGl6ZWQgcHJvdGVjdGlvbiBvZiBhbGwgY2hpbGRyZW4gaXMgd2l0aGluIHdoYXQgdGhlXG5AQCAtNDE3LDEzICYjNDM7NDE5LDIwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsXG4gXHRpZiAocGFyZW50X2VmZmVjdGl2ZSBcdTAwM2Ugc2libGluZ3NfcHJvdGVjdGVkIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHBhcmVudF91c2FnZSBcdTAwM2Ugc2libGluZ3NfcHJvdGVjdGVkIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHVzYWdlIFx1MDAzZSBwcm90ZWN0ZWQpIHtcbi1cdFx0dW5zaWduZWQgbG9uZyB1bmNsYWltZWQ7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBhcmVudF91bmNsYWltZWQsIHBhcmVudF91bnByb3RlY3RlZCwgdW5wcm90ZWN0ZWQ7XG4gXG4tXHRcdHVuY2xhaW1lZCA9IHBhcmVudF9lZmZlY3RpdmUgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4tXHRcdHVuY2xhaW1lZCAqPSB1c2FnZSAtIHByb3RlY3RlZDtcbi1cdFx0dW5jbGFpbWVkIC89IHBhcmVudF91c2FnZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDtcbiYjNDM7XHRcdHBhcmVudF91bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuJiM0MztcdFx0cGFyZW50X3VucHJvdGVjdGVkID0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuIFxuLVx0XHRlcCAmIzQzOz0gdW5jbGFpbWVkO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSB1c2FnZXMgYXJlbiYjMzk7dCByZWFkIGF0b21pY2FsbHksIHNvIGEgY2hpbGQgY2FuIHRyYW5zaWVudGx5XG4mIzQzO1x0XHQgKiBhcHBlYXIgdG8gdXNlIG1vcmUgdGhhbiBpdHMgcGFyZW50LCBtYWtpbmcgdGhlIHJhdGlvIGV4Y2VlZCAxXG4mIzQzO1x0XHQgKiBhbmQgdGhlIHF1b3RpZW50IG92ZXJmbG93IDY0IGJpdHMgKCNERSBvbiB4ODYpLiAgQ2FwIGl0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR1bnByb3RlY3RlZCA9IG1pbih1c2FnZSAtIHByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTtcbiYjNDM7XG4mIzQzO1x0XHRlcCAmIzQzOz0gbXVsX3U2NF91NjRfZGl2X3U2NChwYXJlbnRfdW5jbGFpbWVkLCB1bnByb3RlY3RlZCxcbiYjNDM7XHRcdFx0XHRcdCAgcGFyZW50X3VucHJvdGVjdGVkKTtcbiBcdH1cbiBcbiBcdHJldHVybiBlcDtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA0MGQzZjFiNDhhNzRjLi5mZDU1MTVmZDUxNDJkIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNTE5Myw3ICYjNDM7NTE5MywxMyBAQCBzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuIFxuLVx0LyogbHJ1X2dlbl9hZ2Vfbm9kZSgpIGNhbGxlZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKCkgKi9cbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZvciBrc3dhcGQsIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKSBoYXMgYWxyZWFkeVxuJiM0MztcdCAqIGJlZW4gY2FsbGVkIGR1cmluZyB0aGUgdG9wLWRvd24gY2dyb3VwIHRyYXZlcnNhbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpXG4mIzQzO1x0XHRtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoTlVMTCwgbWVtY2cpO1xuJiM0MztcbiBcdGlmIChtZW1fY2dyb3VwX2JlbG93X21pbihOVUxMLCBtZW1jZykpXG4gXHRcdHJldHVybiBNRU1DR19MUlVfWU9VTkc7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgmIzM0OywKICAgICYjMzQ7cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24mIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9zaHJpbmtfbm9kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGJ5IHVwZGF0aW5nIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9ucyBpbiBtbS9wYWdlX2NvdW50ZXIuYyB0byBwcmV2ZW50IGFyaXRobWV0aWMgb3ZlcmZsb3cgYW5kIGRpdmlzaW9uIGlzc3VlcywgaW50cm9kdWNpbmcgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgaW4gbW0vbWVtY29udHJvbC5jLCBhbmQgaG9va2luZyBpdCBpbnRvIHRoZSBNdWx0aS1HZW4gTFJVIHBhZ2UgcmVjbGFpbSBwYXRoIGluIG1tL3Ztc2Nhbi5jLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbWVtb3J5IHJlY2xhaW0gYW5kIGNncm91cCBhY2NvdW50aW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2U0ZmZkYThjYTY3Mzg1ZDRlNGU0NWE3OTVlNTQ0NTllZDI5NDlkNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDc6NDc6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDRmNzIwNzkxYTMxYzkuLjQ2YmY3MjRjYWU3YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xOTIxLDYgJiM0MzsxOTIxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB9CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfTFJVX0dFTikKJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKJiM0MzsJCQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsCiYjNDM7CQkJCQkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0Mzt7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogI2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX1pTV0FQKQogYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpOwogdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAzMDcyMDMzMDFhMmE1Li4xNDYwY2JhNTM1ODhlIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC01MjUzLDYgJiM0Mzs1MjUzLDUxIEBAIHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKIAlwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oJmFtcDtyb290LSZndDttZW1vcnksICZhbXA7bWVtY2ctJmd0O21lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19MUlVfR0VOCiYjNDM7LyoqCiYjNDM7ICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoIC0gY29tcHV0ZSBwcm90ZWN0aW9uIGFsb25nIGEgcGF0aAomIzQzOyAqIEByb290OiB0aGUgdG9wIGFuY2VzdG9yIG9mIHRoZSBzdWItdHJlZSBiZWluZyBjaGVja2VkIChOVUxMIGZvciByb290X21lbV9jZ3JvdXApCiYjNDM7ICogQG1lbWNnOiB0aGUgdGFyZ2V0IG1lbW9yeSBjZ3JvdXAKJiM0MzsgKgomIzQzOyAqIFdhbGsgdGhlIGFuY2VzdG9yIHBhdGggZnJvbSBAcm9vdCBkb3duIHRvIEBtZW1jZyBhbmQgY29tcHV0ZSB0aGUgZWZmZWN0aXZlCiYjNDM7ICogcHJvdGVjdGlvbiBhdCBlYWNoIGxldmVsLiAgVGhpcyBpcyBzYWZlIGZvciBpc29sYXRlZCBxdWVyaWVzIGJlY2F1c2UgaXQKJiM0MzsgKiBlbnN1cmVzIHBhcmVudHMgYXJlIGNvbXB1dGVkIGJlZm9yZSBjaGlsZHJlbi4KJiM0MzsgKi8KJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKJiM0MzsJCQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0MzsJYm9vbCByZWN1cnNpdmVfcHJvdGVjdGlvbiA9CiYjNDM7CQljZ3JwX2RmbF9yb290LmZsYWdzICZhbXA7IENHUlBfUk9PVF9NRU1PUllfUkVDVVJTSVZFX1BST1Q7CiYjNDM7CXN0cnVjdCBjZ3JvdXAgKmNnOwomIzQzOwlpbnQgcm9vdF9sZXZlbCwgaTsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKCFyb290KQomIzQzOwkJcm9vdCA9IHJvb3RfbWVtX2Nncm91cDsKJiM0MzsKJiM0MzsJaWYgKG1lbWNnID09IHJvb3QpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJvb3RfbGV2ZWwgPSByb290LSZndDtjc3MuY2dyb3VwLSZndDtsZXZlbDsKJiM0MzsJY2cgPSBtZW1jZy0mZ3Q7Y3NzLmNncm91cDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlmb3IgKGkgPSByb290X2xldmVsICYjNDM7IDE7IGkgJmx0Oz0gY2ctJmd0O2xldmVsOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IG1lbV9jZ3JvdXAgKmN1cjsKJiM0MzsKJiM0MzsJCWN1ciA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY2dyb3VwX2NzcyhjZy0mZ3Q7YW5jZXN0b3JzW2ldLAomIzQzOwkJCQkJCSAgICAgJmFtcDttZW1vcnlfY2dycF9zdWJzeXMpKTsKJiM0MzsJCWlmIChjdXIpCiYjNDM7CQkJcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKCZhbXA7cm9vdC0mZ3Q7bWVtb3J5LAomIzQzOwkJCQkJCQkgICZhbXA7Y3VyLSZndDttZW1vcnksCiYjNDM7CQkJCQkJCSAgcmVjdXJzaXZlX3Byb3RlY3Rpb24pOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzO30KJiM0MzsjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi8KJiM0MzsKIHN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCWdmcF90IGdmcCkKIHsKZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmMKaW5kZXggNDUwNTQzZjRiMzE4Yi4uOTgzMjI4MDM5NDFhNyAxMDA2NDQKLS0tIGEvbW0vcGFnZV9jb3VudGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9jb3VudGVyLmMKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VfY291bnRlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2F0b21pYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tYXRoNjQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J1Zy5oJmd0OwpAQCAtMzc2LDcgJiM0MzszNzcsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLAogCSAqIG90aGVyd2lzZSBnZXQgYSBzbWFsbGVyIGNodW5rIHRoYW4gd2hhdCB0aGV5IGNsYWltZWQuCiAJICovCiAJaWYgKHNpYmxpbmdzX3Byb3RlY3RlZCAmZ3Q7IHBhcmVudF9lZmZlY3RpdmUpCi0JCXJldHVybiBwcm90ZWN0ZWQgKiBwYXJlbnRfZWZmZWN0aXZlIC8gc2libGluZ3NfcHJvdGVjdGVkOwomIzQzOwkJcmV0dXJuIG11bF91NjRfdTY0X2Rpdl91NjQocHJvdGVjdGVkLCBwYXJlbnRfZWZmZWN0aXZlLAomIzQzOwkJCQkJICAgc2libGluZ3NfcHJvdGVjdGVkKTsKIAogCS8qCiAJICogT2ssIHV0aWxpemVkIHByb3RlY3Rpb24gb2YgYWxsIGNoaWxkcmVuIGlzIHdpdGhpbiB3aGF0IHRoZQpAQCAtNDE3LDEzICYjNDM7NDE5LDIwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsCiAJaWYgKHBhcmVudF9lZmZlY3RpdmUgJmd0OyBzaWJsaW5nc19wcm90ZWN0ZWQgJmFtcDsmYW1wOwogCSAgICBwYXJlbnRfdXNhZ2UgJmd0OyBzaWJsaW5nc19wcm90ZWN0ZWQgJmFtcDsmYW1wOwogCSAgICB1c2FnZSAmZ3Q7IHByb3RlY3RlZCkgewotCQl1bnNpZ25lZCBsb25nIHVuY2xhaW1lZDsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGFyZW50X3VuY2xhaW1lZCwgcGFyZW50X3VucHJvdGVjdGVkLCB1bnByb3RlY3RlZDsKIAotCQl1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkOwotCQl1bmNsYWltZWQgKj0gdXNhZ2UgLSBwcm90ZWN0ZWQ7Ci0JCXVuY2xhaW1lZCAvPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7CiYjNDM7CQlwYXJlbnRfdW5jbGFpbWVkID0gcGFyZW50X2VmZmVjdGl2ZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDsKJiM0MzsJCXBhcmVudF91bnByb3RlY3RlZCA9IHBhcmVudF91c2FnZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDsKIAotCQllcCAmIzQzOz0gdW5jbGFpbWVkOwomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSB1c2FnZXMgYXJlbiYjMzk7dCByZWFkIGF0b21pY2FsbHksIHNvIGEgY2hpbGQgY2FuIHRyYW5zaWVudGx5CiYjNDM7CQkgKiBhcHBlYXIgdG8gdXNlIG1vcmUgdGhhbiBpdHMgcGFyZW50LCBtYWtpbmcgdGhlIHJhdGlvIGV4Y2VlZCAxCiYjNDM7CQkgKiBhbmQgdGhlIHF1b3RpZW50IG92ZXJmbG93IDY0IGJpdHMgKCNERSBvbiB4ODYpLiAgQ2FwIGl0LgomIzQzOwkJICovCiYjNDM7CQl1bnByb3RlY3RlZCA9IG1pbih1c2FnZSAtIHByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTsKJiM0MzsKJiM0MzsJCWVwICYjNDM7PSBtdWxfdTY0X3U2NF9kaXZfdTY0KHBhcmVudF91bmNsYWltZWQsIHVucHJvdGVjdGVkLAomIzQzOwkJCQkJICBwYXJlbnRfdW5wcm90ZWN0ZWQpOwogCX0KIAogCXJldHVybiBlcDsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNDBkM2YxYjQ4YTc0Yy4uZmQ1NTE1ZmQ1MTQyZCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTUxOTMsNyAmIzQzOzUxOTMsMTMgQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwogCi0JLyogbHJ1X2dlbl9hZ2Vfbm9kZSgpIGNhbGxlZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKCkgKi8KJiM0MzsJLyoKJiM0MzsJICogRm9yIGtzd2FwZCwgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpIGhhcyBhbHJlYWR5CiYjNDM7CSAqIGJlZW4gY2FsbGVkIGR1cmluZyB0aGUgdG9wLWRvd24gY2dyb3VwIHRyYXZlcnNhbC4KJiM0MzsJICovCiYjNDM7CWlmICghY3VycmVudF9pc19rc3dhcGQoKSkKJiM0MzsJCW1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChOVUxMLCBtZW1jZyk7CiYjNDM7CiAJaWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKE5VTEwsIG1lbWNnKSkKIAkJcmV0dXJuIE1FTUNHX0xSVV9ZT1VORzsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDg2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nIGFuZCBpZiBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzeXprYWxsZXIuIEZyb20gdGhlIGRpZmYsIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzZXZlcmFsIGZpbGVzOiBgbWVtY29udHJvbC5oYCwgYG1lbWNvbnRyb2wuY2AsIGBwYWdlX2NvdW50ZXIuY2AsIGFuZCBgdm1zY2FuLmNgLiBJdCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIG1lbW9yeSBjZ3JvdXBzLCBzcGVjaWZpY2FsbHkgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbiB3aXRoaW4gdGhlIG11bHRpLWdlbiBMUlUgcmVjbGFpbSBwYXRoLiBJIHNlZSBhIG5ldyBmdW5jdGlvbiBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKClgIGJlaW5nIGludHJvZHVjZWQsIHdoaWNoIHRyYXZlcnNlcyB0aGUgY2dyb3VwIGhpZXJhcmNoeSBhbmQgaW50ZXJhY3RzIHdpdGggYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbigpYC4KClRoZSBgcGFnZV9jb3VudGVyLmNgIGNoYW5nZSBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZS4gV2UgaGF2ZSBhbiBvdmVyZmxvdyBmaXggdXNpbmcgYG11bF91NjRfdTY0X2Rpdl91NjRgIGluc3RlYWQgb2YgYSBzaW1wbGUgZGl2aXNpb24sIHdoaWNoIGlzIGdvb2QuIFRoYXQmIzM5O3MgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyBmdXp6aW5nIHRlbmRzIHRvIGV4cG9zZS4gVGhlcmUmIzM5O3MgYWxzbyBhIHBvdGVudGlhbCBkaXZpZGUtYnktemVybyBvciBvdmVyZmxvdyBmaXggaW4gdW5jbGFpbWVkIHByb3RlY3Rpb24gY2FsY3VsYXRpb24uIFRoaXMgaXMgYSBjbGVhciBpbmRpY2F0b3IgdGhhdCBmdXp6aW5nIGNvdWxkIGJlIGJlbmVmaWNpYWwuCgpUaGUgY2hhbmdlIGluIGB2bXNjYW4uY2AgdGhhdCBjYWxscyBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKClgIHdpdGhpbiBgc2hyaW5rX29uZSgpYCBkdXJpbmcgcmVjbGFpbSBpcyBhbHNvIGEga2V5IGFyZWEgdG8gZXhwbG9yZS4gVGhpcyBpbnRlZ3JhdGVzIHRoZSBuZXcgcHJvdGVjdGlvbiBwYXRoIGludG8gdGhlIG1lbW9yeSByZWNsYWltIHByb2Nlc3MuIEdpdmVuIHRoYXQgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cHMgYXJlIGNvcmUga2VybmVsIGZlYXR1cmVzLCBhbmQgaXQgc2VlbXMgdGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggdGVzdGluZy4gVGhlIGludGVyYWN0aW9uIHdpdGggbXVsdGktZ2VuIExSVSBpcyBhbHNvIHByb21pc2luZy4KClNvLCB5ZXMsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gVGhlIE1NIGNvcmUgbG9naWMgbW9kaWZpY2F0aW9ucywgY2dyb3VwIHByb3RlY3Rpb24gY2FsY3VsYXRpb25zLCBhbmQgcGFnZSByZWNsYWltIGFsbCBtYWtlIHRoaXMgYSBwcmltZSBjYW5kaWRhdGUuIE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gTGV0JiMzOTtzIHNlZSBpZiBzeXprYWxsZXIgY2FuIGhhbmRsZSB0aGUgYENPTkZJR19MUlVfR0VOYCBhbmQgYENPTkZJR19NRU1DR2AgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzg3PWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbi0tXG5tbS9LY29uZmlnLTEzOTctIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTM5ODpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xMzk5LVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDA2LVxubW0vS2NvbmZpZzoxNDA3OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQwOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTItXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQxNC1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDIxLVxubW0vS2NvbmZpZzoxNDIyOmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDIzLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIENPTkZJR19MUlVfR0VOIGFuZCBDT05GSUdfTUVNQ0cgRGVwZW5kZW5jaWVzIGluIG1tL0tjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYG1tL0tjb25maWdgIGFyb3VuZCBsaW5lIDEzOTguIE15IGdvYWwgaGVyZSBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB0aGUgZGVwZW5kZW5jeSBjaGFpbiBmb3IgYENPTkZJR19MUlVfR0VOYCBhbmQgYENPTkZJR19NRU1DR2AuIFVzaW5nIGByZWFkLWZpbGVgIGlzIHRoZSByaWdodCBhcHByb2FjaDsgaXQmIzM5O2xsIGxldCBtZSBlZmZpY2llbnRseSBwYXJzZSB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgYW5kIGF2b2lkIGFueSB1bm5lY2Vzc2FyeSBkaXN0cmFjdGlvbnMuIEkgd2FudCB0byBzZWUgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBnYXRlIHRoZXNlIGZlYXR1cmVzLCBpZiB0aGV5IGhhdmUgYW55IG1hbmRhdG9yeSByZXF1aXJlbWVudHMsIGFuZCB0aGUgbG9naWMgdGhhdCBjb25uZWN0cyB0aGVtLCBhbGwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBtYXRyaXggYXQgaGFuZC4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGNydWNpYWwgZm9yIGFueSB3b3JrIHRoYXQgYWZmZWN0cyBlaXRoZXIgb3IgYm90aCBvZiB0aGVzZSBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM5NTpcdFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxuMTM5NjpcdFxuMTM5NzpcdCMgbXVsdGktZ2VuIExSVSB7XG4xMzk4Olx0Y29uZmlnIExSVV9HRU5cbjEzOTk6XHRcdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuMTQwMDpcdFx0ZGVwZW5kcyBvbiBNTVVcbjE0MDE6XHRcdCMgbWFrZSBzdXJlIGZvbGlvLVx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xuMTQwMjpcdFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXG4xNDAzOlx0XHRoZWxwXG4xNDA0Olx0XHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxuMTQwNTpcdFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXG4xNDA2Olx0XG4xNDA3Olx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxuMTQwODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuMTQwOTpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDEwOlx0XHRoZWxwXG4xNDExOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cbjE0MTI6XHRcbjE0MTM6XHRjb25maWcgTFJVX0dFTl9TVEFUU1xuMTQxNDpcdFx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbjE0MTU6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQxNjpcdFx0aGVscFxuMTQxNzpcdFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcbjE0MTg6XHRcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cbjE0MTk6XHRcbjE0MjA6XHRcdCAgVGhpcyBvcHRpb24gaGFzIGEgcGVyLW1lbWNnIGFuZCBwZXItbm9kZSBtZW1vcnkgb3ZlcmhlYWQuXG4xNDIxOlx0XG4xNDIyOlx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG4xNDIzOlx0XHRkZWZfYm9vbCB5XG4xNDI0Olx0XHRkZXBlbmRzIG9uIExSVV9HRU4gXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xuMTQyNTpcdCMgfVxuMTQyNjpcdFxuMTQyNzpcdGNvbmZpZyBMT0NLX01NX0FORF9GSU5EX1ZNQVxuMTQyODpcdFx0Ym9vbFxuMTQyOTpcdFx0ZGVwZW5kcyBvbiAhU1RBQ0tfR1JPV1NVUFxuMTQzMDpcdFxuMTQzMTpcdGNvbmZpZyBJT01NVV9NTV9EQVRBXG4xNDMyOlx0XHRib29sXG4xNDMzOlx0XG4xNDM0Olx0Y29uZmlnIEVYRUNNRU1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDQ0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBiZWZvcmUgd2UgbW92ZSB0b28gZmFyIGRvd24gdGhpcyByYWJiaXQgaG9sZSwgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJiMzOTtyZSBvbiBzb2xpZCBncm91bmQgd2l0aCBtZW1vcnkgY2dyb3Vwcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gbWV0aWN1bG91c2x5IHZlcmlmeSB0aGUgYENPTkZJR19NRU1DR2AgZGVmaW5pdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gSXQmIzM5O3MgdG9vIGVhc3kgdG8gbWFrZSBhc3N1bXB0aW9ucywgYW5kIGEgc3VidGxlIG1pc2NvbmZpZ3VyYXRpb24gY2FuIGxlYWQgdG8gc29tZSB0cnVseSBiYWZmbGluZyBiZWhhdmlvciBkb3duIHRoZSBsaW5lLiBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhhdCBzcGVjaWZpYyBzeW1ib2wsIHRyYWNlIGl0cyBvcmlnaW5zIGFuZCBjdXJyZW50IHN0YXRlLCBhbmQgbWFrZSBjZXJ0YWluIHRoZSBidWlsZCBzeXN0ZW0gaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuCgpCZXlvbmQgdGhhdCwgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHdhbGtpbmcgdGhyb3VnaCB0aGUgZGVwZW5kZW5jeSBjaGFpbi4gYENPTkZJR19NRU1DR2AgYWxtb3N0IGNlcnRhaW5seSBoYXMgYSBzZXQgb2YgcHJlcmVxdWlzaXRlcyDigJMgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbXVzdCBiZSBlbmFibGVkIGZvciBpdCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEkgbmVlZCB0byBiZSBjZXJ0YWluIHRob3NlIGRlcGVuZGVuY2llcyBhcmUgbWV0LCBub3QganVzdCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLCBidXQgYWxzbyBjb25zaWRlcmluZyB0aGUgdGFyZ2V0IGVudmlyb25tZW50IGFuZCBhbnkgcG90ZW50aWFsIGJ1aWxkLXRpbWUgdmFyaWF0aW9ucy4gSeKAmWxsIG1ha2UgYSBxdWljayBwYXNzIHRvIGNvbmZpcm0gdGhlIHByZXJlcXVpc2l0ZXMsIGxvb2tpbmcgZm9yIGFueSB3ZWFrIGxpbmtzLiBXZSBhbGwga25vdyBob3cgaW5zaWRpb3VzIHRob3NlIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBjYW4gYmUuIFRpbWUgdG8gZGlnIGluIGFuZCBjb25maXJtIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDc3LVxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA3OS1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA4Ni1cbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4OC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDAtXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTAyLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk0OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCB1bnRhbmdsaW5nIHRoaXMgY29uZmlndXJhdGlvbiBpc3N1ZT8gTXkgaW5zdGluY3RzIGFyZSB0ZWxsaW5nIG1lIHRvIGdvIHN0cmFpZ2h0IHRvIGBpbml0L0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTA3OC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIGEgbG90IG9mIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQgaW4gdGhhdCBzZWN0aW9uIGhhcyBvZnRlbiBwcm92ZW4gZnJ1aXRmdWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGNlcnRhaW4gZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZHVyaW5nIGJvb3QuIEl04oCZcyBsaWtlbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHRyYWNlIGRlcGVuZGVuY2llcyBvciB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSBnZXRzIGl0cyBzZXR0aW5ncy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA3NTpcdFxuMTA3NjpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDc3Olx0XG4xMDc4Olx0Y29uZmlnIE1FTUNHXG4xMDc5Olx0XHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMDgwOlx0XHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4xMDgxOlx0XHRzZWxlY3QgRVZFTlRGRFxuMTA4MjpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA4MzpcdFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4xMDg0Olx0XHRoZWxwXG4xMDg1Olx0XHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cbjEwODY6XHRcbjEwODc6XHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuMTA4ODpcdFx0Ym9vbFxuMTA4OTpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5MDpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5MTpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTI6XHRcdGRlZmF1bHQgeVxuMTA5MzpcdFxuMTA5NDpcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuMTA5NTpcdFx0Ym9vbFxuMTA5NjpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5NzpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5ODpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5OTpcdFx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0OTMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCB0aGUgcmlwcGxlIGVmZmVjdHMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIG1vZGlmaWVkIHN5bWJvbHM7IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTttIHNlZWluZyB0aHJlZSBrZXkgZnVuY3Rpb25zOiBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCBmcm9tIGBtbS9tZW1jb250cm9sLmNgLCBhbmQgdGhlbiBib3RoIGBlZmZlY3RpdmVfcHJvdGVjdGlvbmAgYW5kIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gIGZyb20gYG1tL3BhZ2VfY291bnRlci5jYCBhbmQgZmluYWxseSBgc2hyaW5rX29uZWAgZnJvbSBgbW0vdm1zY2FuLmNgLCBsaWtlbHkgcmVsYXRpbmcgdG8gdGhlIG11bHRpLWdlbiBMUlUgZnVuY3Rpb25hbGl0eS4KCk5vdywgSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYGVmZmVjdGl2ZV9wcm90ZWN0aW9uYC4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGFyZWEgaXMgY3JpdGljYWwsIHNvIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiBgbW0vcGFnZV9jb3VudGVyLmNgIGFzIGEgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgdGllcyBpbnRvIHRoZSByZXN0IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWZmZWN0aXZlX3Byb3RlY3Rpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9jb3VudGVyLmM9MjkzPWludCBwYWdlX2NvdW50ZXJfbWVtcGFyc2UoY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICptYXgsXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtMzU3LSAqL1xubW0vcGFnZV9jb3VudGVyLmM6MzU4OnN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsXG5tbS9wYWdlX2NvdW50ZXIuYy0zNTktXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBwYXJlbnRfdXNhZ2UsXG4tLVxubW0vcGFnZV9jb3VudGVyLmM9NDUzPXZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtNDgxLVxubW0vcGFnZV9jb3VudGVyLmM6NDgyOlx0V1JJVEVfT05DRShjb3VudGVyLVx1MDAzZWVtaW4sIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVzYWdlLCBwYXJlbnRfdXNhZ2UsXG5tbS9wYWdlX2NvdW50ZXIuYy00ODMtXHRcdFx0UkVBRF9PTkNFKGNvdW50ZXItXHUwMDNlbWluKSxcbi0tXG5tbS9wYWdlX2NvdW50ZXIuYy00ODctXG5tbS9wYWdlX2NvdW50ZXIuYzo0ODg6XHRXUklURV9PTkNFKGNvdW50ZXItXHUwMDNlZWxvdywgZWZmZWN0aXZlX3Byb3RlY3Rpb24odXNhZ2UsIHBhcmVudF91c2FnZSxcbm1tL3BhZ2VfY291bnRlci5jLTQ4OS1cdFx0XHRSRUFEX09OQ0UoY291bnRlci1cdTAwM2Vsb3cpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDk5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmc6CgoqKkV4YW1pbmluZyB0aGUgU2NvcGUgb2YgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAqKgoKT2theSwgc28gYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAgaXNuJiMzOTt0IHN0YXRpYy4gVGhhdCBtZWFucyBpdCYjMzk7cyBlaXRoZXIgZXhwbGljaXRseSBleHBvcnRlZCBvciBhY2Nlc3NpYmxlIHRocm91Z2ggYSBoZWFkZXIgZmlsZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyByb2xlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZWl0aGVyIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgY29kZSB0byBpZGVudGlmeSBpdHMgY2FsbGVycywgb3IgaW52ZXN0aWdhdGUgdGhlIGhlYWRlciBmaWxlcyB0byBzZWUgd2hlcmUgaXQmIzM5O3MgZGVjbGFyZWQgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyBhY2Nlc3NlZCBmcm9tIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIG92ZXJhbGwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTUyNDE9dm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjUyLVxubW0vbWVtY29udHJvbC5jOjUyNTM6XHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXHUwMDI2cm9vdC1cdTAwM2VtZW1vcnksIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xubW0vbWVtY29udHJvbC5jLTUyNTQtfVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MjY2PXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjkyLVx0XHRpZiAoY3VyKVxubW0vbWVtY29udHJvbC5jOjUyOTM6XHRcdFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LFxubW0vbWVtY29udHJvbC5jLTUyOTQtXHRcdFx0XHRcdFx0XHQgIFx1MDAyNmN1ci1cdTAwM2VtZW1vcnksXG4tLVxubW0vcGFnZV9jb3VudGVyLmM9MzU4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtNDQyLS8qKlxubW0vcGFnZV9jb3VudGVyLmM6NDQzOiAqIHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbiAtIGNoZWNrIGlmIG1lbW9yeSBjb25zdW1wdGlvbiBpcyBpbiB0aGUgbm9ybWFsIHJhbmdlXG5tbS9wYWdlX2NvdW50ZXIuYy00NDQtICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWRcbi0tXG5tbS9wYWdlX2NvdW50ZXIuYy00NTItICovXG5tbS9wYWdlX2NvdW50ZXIuYzo0NTM6dm9pZCBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IHBhZ2VfY291bnRlciAqcm9vdCxcbm1tL3BhZ2VfY291bnRlci5jLTQ1NC1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjU4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHZtc2Nhbi5jIGFuZCB0aGUgc2hyaW5rX29uZSBGdW5jdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbW0vdm1zY2FuLmNgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgd29ya2luZ3Mgb2YgYHNocmlua19vbmVgLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgdGhlIHBhZ2UgcmVjbGFpbSBwcm9jZXNzLCBhbmQgSSB3YW50IHRvIHJlLWV4YW1pbmUgaG93IGl0JiMzOTtzIG1ha2luZyBkZWNpc2lvbnMgYWJvdXQgd2hpY2ggcGFnZXMgdG8gcG90ZW50aWFsbHkgZXZpY3QuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBiYWxhbmNlcyBmYWN0b3JzIGxpa2UgcGFnZSB1c2FnZSwgZGlydHkgc3RhdGUsIGFjY2VzcyBmcmVxdWVuY3ksIGFuZCB0aGUgb3ZlcmFsbCBwcmVzc3VyZSBvbiB0aGUgc3lzdGVtLiBOZWVkIHRvIHNlZSBleGFjdGx5IGhvdyB0aGUgcmVjbGFpbSBhbGdvcml0aG0gZXZhbHVhdGVzIHRob3NlIGFzcGVjdHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSB2YXJpb3VzIExSVSBsaXN0cyBhbmQgdGhlIGxvZ2ljIGJlaGluZCBzZWxlY3RpbmcgdmljdGltcyBmb3Igc2Nhbm5pbmcgYW5kIGV2aWN0aW9uLiBJIG1heSBldmVuIGNoZWNrIGhvdyB0aGUgTlVNQSBsb2NhbGl0eSBjb25zaWRlcmF0aW9ucyBmYWN0b3IgaW50byB0aGUgb3ZlcmFsbCBkZWNpc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX29uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MTQzPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTE4Ny1cbm1tL3Ztc2Nhbi5jOjUxODg6c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MTg5LXtcbi0tXG5tbS92bXNjYW4uYz01MjM1PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyNzYtXG5tbS92bXNjYW4uYzo1Mjc3Olx0XHRvcCA9IHNocmlua19vbmUobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01Mjc4LVxuLS1cbm1tL3Ztc2Nhbi5jPTUzMjY9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MzUyLVx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbm1tL3Ztc2Nhbi5jOjUzNTM6XHRcdHNocmlua19vbmUoXHUwMDI2cGdkYXQtXHUwMDNlX19scnV2ZWMsIHNjKTtcbm1tL3Ztc2Nhbi5jLTUzNTQtXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMTAKCQkJCQkJCW91dHB1dDogMTc2CgkJCQkJCQl0aG91Z2h0czogNzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaHVuY2ggaXMgdG8gbG9vayBhdCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBjZ3JvdXBzIGFuZCBtdWx0aS1nZW4gTFJVLiBUaGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaGFzIGxlZCBtZSB0byBldmFsdWF0ZSBzZXZlcmFsIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHBpbnBvaW50IGdvb2QgY2FuZGlkYXRlcyBmb3IgZnV6emluZyDigJMgd2hpY2ggZnVuY3Rpb25zIGFyZSBjZW50cmFsIGFuZCBoYXZlIGdvb2QgY292ZXJhZ2UuCgpGaXJzdCwgSSBjb25zaWRlcmVkIGBscnVfZ2VuX3Nocmlua19ub2RlYCwgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAsIGFuZCBgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYC4gIFRoZXNlIHN0b29kIG91dC4gRGl2aW5nIGRlZXBlciwgSSBpZGVudGlmaWVkIHRoZXNlIGtleSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OgoKKiAgIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgOiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBpdCB3YXMgYWRkZWQgYnkgdGhlIHBhdGNoIGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBpcyBjYWxsZWQgYnkgYHNocmlua19vbmVgLiBJdCYjMzk7cyBhIGRpcmVjdCBjb25uZWN0aW9uIHRvIHRoZSBjb2RlIEkmIzM5O20gaW50ZXJlc3RlZCBpbi4KKiAgIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gOiAgVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0JiMzOTtzIG1vZGlmaWVkIGluZGlyZWN0bHksIGFmZmVjdGluZyB0aGUgYGVmZmVjdGl2ZV9wcm90ZWN0aW9uYCBjYWxjdWxhdGlvbiwgYW5kIGlzLCBpdHNlbGYsIGNhbGxlZCBieSBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCBhbmQgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLgoqICAgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25gOiAgSXQmIzM5O3MgYSBkaXJlY3QgY2FsbGVyIG9mIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLCBtYWtpbmcgaXQgYW5vdGhlciBjZW50cmFsIHBvaW50LgoqICAgYGxydV9nZW5fc2hyaW5rX25vZGVgLCBgc2hyaW5rX21hbnlgLCBgc2hyaW5rX29uZWA6ICBUaGVzZSBhcmUgZnVuZGFtZW50YWwgbXVsdGlnZW4gTFJVIHJlY2xhaW0gZnVuY3Rpb25zIGFuZCBhcmUgb2J2aW91c2x5IHJlbGV2YW50LgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgZnVuY3Rpb25zIGFyZSBnb29kIGNhbmRpZGF0ZXMuIEFyZSB0aGV5IHViaXF1aXRvdXM/IE5vLCB0aGV5JiMzOTtyZSBub3QuIFRoZXkgYXJlIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGNncm91cCBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIG11bHRpLWdlbiBMUlUuICBUaGlzIG1ha2VzIHRoZW0gbW9yZSB0YXJnZXRlZCBhbmQgdGhlcmVmb3JlIHBvdGVudGlhbGx5IG1vcmUgZnJ1aXRmdWwgZm9yIGZ1enppbmcuCgpOZXh0LCB0aGUgY29uZmlnczogIGBNRU1DR2AgaXMgcmVxdWlyZWQgZm9yIHRoZSBjZ3JvdXAgbWVtb3J5IGNvbnRyb2xsZXIgKGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIGBtbS9tZW1jb250cm9sLmNgLCBgbW0vcGFnZV9jb3VudGVyLmNgKSwgYW5kIGBMUlVfR0VOYCBpcyBuZWVkZWQgZm9yIHRoZSBtdWx0aS1nZW4gTFJVIChgbW0vdm1zY2FuLmNgLCBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCkuICBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3lzdGVtIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgdG8gYWN0dWFsbHkgX3VzZV8gdGhlc2UgZmVhdHVyZXMuCgpBIGZldyBtb3JlIGNvbmZpZ3VyYXRpb25zIG5lZWQgZXhhbWluYXRpb246IGBDT05GSUdfTFJVX0dFTmAgZGVwZW5kcyBvbiBgTU1VYCwgYDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBgLiBXaGlsZSB0aGF0IGlzIG5lY2Vzc2FyeSB0byBoYXZlIGBDT05GSUdfTFJVX0dFTmAgZW5hYmxlZCwgaXQgaXMgbm90IHNvbWV0aGluZyB0aGF0IHdvdWxkIGFmZmVjdCBmdXp6aW5nLiBgQ09ORklHX01FTUNHYCBpcyB1bmRlciBgaW5pdC9LY29uZmlnYC4gYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIG1pZ2h0IGJlIGhlbHBmdWwgdG8gbWFrZSBzdXJlIHRoYXQgTFJVXF9HRU4gaXMgYWN0aXZlLCBidXQgdGhlc2UgYXJlIHNlY29uZGFyeSB0byB0aGUgY29tcGlsYXRpb24gY29uZmlnIGRlcGVuZGVuY2llcy4KCkhlcmUmIzM5O3MgbXkgc3VtbWFyeTogIHRoaXMgaXMgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBiZWNhdXNlIHRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjZ3JvdXAgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbiBsb2dpYyBpbiBgbW0vcGFnZV9jb3VudGVyLmNgLCBhZGRpbmcgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpYCBpbiBgbW0vbWVtY29udHJvbC5jYCBhbmQgaW50ZWdyYXRpbmcgaXQgaW50byBtdWx0aS1nZW4gTFJVIHBhZ2UgcmVjbGFpbSBpbiBgbW0vdm1zY2FuLmNgLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhcmUgZnVsbHkgcmVhY2hhYmxlLiAgTXkga2V5IEZvY3VzU3ltYm9scyBhcmUgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAsIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLCBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbmAsIGFuZCBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAuICBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgTUVNQ0dgLCBgTFJVX0dFTmAsIGFuZCBwb3RlbnRpYWxseSBgTFJVX0dFTl9FTkFCTEVEYCBmb3IgdGhlIGZ1enppbmcgdG8gYmUgZWZmZWN0aXZlLgoKTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoJiMzNDssCiAgICAmIzM0O3BhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbiYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uJiMzNDssCiAgICAmIzM0O2xydV9nZW5fc2hyaW5rX25vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBieSB1cGRhdGluZyBlZmZlY3RpdmUgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbnMgaW4gbW0vcGFnZV9jb3VudGVyLmMgdG8gcHJldmVudCBhcml0aG1ldGljIG92ZXJmbG93IGFuZCBkaXZpc2lvbiBpc3N1ZXMsIGludHJvZHVjaW5nIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIGluIG1tL21lbWNvbnRyb2wuYywgYW5kIGhvb2tpbmcgaXQgaW50byB0aGUgTXVsdGktR2VuIExSVSBwYWdlIHJlY2xhaW0gcGF0aCBpbiBtbS92bXNjYW4uYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIG1lbW9yeSByZWNsYWltIGFuZCBjZ3JvdXAgYWNjb3VudGluZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgmIzM0OywKICAgICYjMzQ7cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24mIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9zaHJpbmtfbm9kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGJ5IHVwZGF0aW5nIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9ucyBpbiBtbS9wYWdlX2NvdW50ZXIuYyB0byBwcmV2ZW50IGFyaXRobWV0aWMgb3ZlcmZsb3cgYW5kIGRpdmlzaW9uIGlzc3VlcywgaW50cm9kdWNpbmcgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgaW4gbW0vbWVtY29udHJvbC5jLCBhbmQgaG9va2luZyBpdCBpbnRvIHRoZSBNdWx0aS1HZW4gTFJVIHBhZ2UgcmVjbGFpbSBwYXRoIGluIG1tL3Ztc2Nhbi5jLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbWVtb3J5IHJlY2xhaW0gYW5kIGNncm91cCBhY2NvdW50aW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGludGVnZXIgb3ZlcmZsb3cgLyBhcml0aG1ldGljIGhhbmRsaW5nIGluIHBhZ2VfY291bnRlciBlZmZlY3RpdmUgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbiAobW0vcGFnZV9jb3VudGVyLmMpIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIHRvIGNhbGN1bGF0ZSBhbmNlc3RvciBtZW1vcnkgY2dyb3VwIHByb3RlY3Rpb24gYWxvbmcgdGhlIGhpZXJhcmNoeSBwYXRoIGR1cmluZyBNR0xSVSByZWNsYWltIChtbS9tZW1jb250cm9sLmMsIG1tL3Ztc2Nhbi5jKS5cblxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSB0cmFuc2ZlcnMuIFRoZSBidWdzIGFkZHJlc3NlZCBhbmQgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBpbiB0aGlzIGNvZGUgcGF0aCAoc3VjaCBhcyBkaXZpc2lvbiBlcnJvcnMsIGhpZXJhcmNoeSB0cmF2ZXJzYWwgYnVncywgb3IgcG9pbnRlciBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWlsZCBjaGVja3MgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2U0ZmZkYThjYTY3Mzg1ZDRlNGU0NWE3OTVlNTQ0NTllZDI5NDlkNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDc6NDc6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDRmNzIwNzkxYTMxYzkuLjQ2YmY3MjRjYWU3YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xOTIxLDYgJiM0MzsxOTIxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB9CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfTFJVX0dFTikKJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKJiM0MzsJCQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsCiYjNDM7CQkJCQkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0Mzt7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogI2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX1pTV0FQKQogYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpOwogdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAzMDcyMDMzMDFhMmE1Li4xNDYwY2JhNTM1ODhlIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC01MjUzLDYgJiM0Mzs1MjUzLDUxIEBAIHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKIAlwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oJmFtcDtyb290LSZndDttZW1vcnksICZhbXA7bWVtY2ctJmd0O21lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19MUlVfR0VOCiYjNDM7LyoqCiYjNDM7ICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoIC0gY29tcHV0ZSBwcm90ZWN0aW9uIGFsb25nIGEgcGF0aAomIzQzOyAqIEByb290OiB0aGUgdG9wIGFuY2VzdG9yIG9mIHRoZSBzdWItdHJlZSBiZWluZyBjaGVja2VkIChOVUxMIGZvciByb290X21lbV9jZ3JvdXApCiYjNDM7ICogQG1lbWNnOiB0aGUgdGFyZ2V0IG1lbW9yeSBjZ3JvdXAKJiM0MzsgKgomIzQzOyAqIFdhbGsgdGhlIGFuY2VzdG9yIHBhdGggZnJvbSBAcm9vdCBkb3duIHRvIEBtZW1jZyBhbmQgY29tcHV0ZSB0aGUgZWZmZWN0aXZlCiYjNDM7ICogcHJvdGVjdGlvbiBhdCBlYWNoIGxldmVsLiAgVGhpcyBpcyBzYWZlIGZvciBpc29sYXRlZCBxdWVyaWVzIGJlY2F1c2UgaXQKJiM0MzsgKiBlbnN1cmVzIHBhcmVudHMgYXJlIGNvbXB1dGVkIGJlZm9yZSBjaGlsZHJlbi4KJiM0MzsgKi8KJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKJiM0MzsJCQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0MzsJYm9vbCByZWN1cnNpdmVfcHJvdGVjdGlvbiA9CiYjNDM7CQljZ3JwX2RmbF9yb290LmZsYWdzICZhbXA7IENHUlBfUk9PVF9NRU1PUllfUkVDVVJTSVZFX1BST1Q7CiYjNDM7CXN0cnVjdCBjZ3JvdXAgKmNnOwomIzQzOwlpbnQgcm9vdF9sZXZlbCwgaTsKJiM0MzsKJiM0MzsJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKCFyb290KQomIzQzOwkJcm9vdCA9IHJvb3RfbWVtX2Nncm91cDsKJiM0MzsKJiM0MzsJaWYgKG1lbWNnID09IHJvb3QpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJvb3RfbGV2ZWwgPSByb290LSZndDtjc3MuY2dyb3VwLSZndDtsZXZlbDsKJiM0MzsJY2cgPSBtZW1jZy0mZ3Q7Y3NzLmNncm91cDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlmb3IgKGkgPSByb290X2xldmVsICYjNDM7IDE7IGkgJmx0Oz0gY2ctJmd0O2xldmVsOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IG1lbV9jZ3JvdXAgKmN1cjsKJiM0MzsKJiM0MzsJCWN1ciA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY2dyb3VwX2NzcyhjZy0mZ3Q7YW5jZXN0b3JzW2ldLAomIzQzOwkJCQkJCSAgICAgJmFtcDttZW1vcnlfY2dycF9zdWJzeXMpKTsKJiM0MzsJCWlmIChjdXIpCiYjNDM7CQkJcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKCZhbXA7cm9vdC0mZ3Q7bWVtb3J5LAomIzQzOwkJCQkJCQkgICZhbXA7Y3VyLSZndDttZW1vcnksCiYjNDM7CQkJCQkJCSAgcmVjdXJzaXZlX3Byb3RlY3Rpb24pOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzO30KJiM0MzsjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi8KJiM0MzsKIHN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCWdmcF90IGdmcCkKIHsKZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmMKaW5kZXggNDUwNTQzZjRiMzE4Yi4uOTgzMjI4MDM5NDFhNyAxMDA2NDQKLS0tIGEvbW0vcGFnZV9jb3VudGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9jb3VudGVyLmMKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VfY291bnRlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2F0b21pYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tYXRoNjQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J1Zy5oJmd0OwpAQCAtMzc2LDcgJiM0MzszNzcsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLAogCSAqIG90aGVyd2lzZSBnZXQgYSBzbWFsbGVyIGNodW5rIHRoYW4gd2hhdCB0aGV5IGNsYWltZWQuCiAJICovCiAJaWYgKHNpYmxpbmdzX3Byb3RlY3RlZCAmZ3Q7IHBhcmVudF9lZmZlY3RpdmUpCi0JCXJldHVybiBwcm90ZWN0ZWQgKiBwYXJlbnRfZWZmZWN0aXZlIC8gc2libGluZ3NfcHJvdGVjdGVkOwomIzQzOwkJcmV0dXJuIG11bF91NjRfdTY0X2Rpdl91NjQocHJvdGVjdGVkLCBwYXJlbnRfZWZmZWN0aXZlLAomIzQzOwkJCQkJICAgc2libGluZ3NfcHJvdGVjdGVkKTsKIAogCS8qCiAJICogT2ssIHV0aWxpemVkIHByb3RlY3Rpb24gb2YgYWxsIGNoaWxkcmVuIGlzIHdpdGhpbiB3aGF0IHRoZQpAQCAtNDE3LDEzICYjNDM7NDE5LDIwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsCiAJaWYgKHBhcmVudF9lZmZlY3RpdmUgJmd0OyBzaWJsaW5nc19wcm90ZWN0ZWQgJmFtcDsmYW1wOwogCSAgICBwYXJlbnRfdXNhZ2UgJmd0OyBzaWJsaW5nc19wcm90ZWN0ZWQgJmFtcDsmYW1wOwogCSAgICB1c2FnZSAmZ3Q7IHByb3RlY3RlZCkgewotCQl1bnNpZ25lZCBsb25nIHVuY2xhaW1lZDsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGFyZW50X3VuY2xhaW1lZCwgcGFyZW50X3VucHJvdGVjdGVkLCB1bnByb3RlY3RlZDsKIAotCQl1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkOwotCQl1bmNsYWltZWQgKj0gdXNhZ2UgLSBwcm90ZWN0ZWQ7Ci0JCXVuY2xhaW1lZCAvPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7CiYjNDM7CQlwYXJlbnRfdW5jbGFpbWVkID0gcGFyZW50X2VmZmVjdGl2ZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDsKJiM0MzsJCXBhcmVudF91bnByb3RlY3RlZCA9IHBhcmVudF91c2FnZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDsKIAotCQllcCAmIzQzOz0gdW5jbGFpbWVkOwomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSB1c2FnZXMgYXJlbiYjMzk7dCByZWFkIGF0b21pY2FsbHksIHNvIGEgY2hpbGQgY2FuIHRyYW5zaWVudGx5CiYjNDM7CQkgKiBhcHBlYXIgdG8gdXNlIG1vcmUgdGhhbiBpdHMgcGFyZW50LCBtYWtpbmcgdGhlIHJhdGlvIGV4Y2VlZCAxCiYjNDM7CQkgKiBhbmQgdGhlIHF1b3RpZW50IG92ZXJmbG93IDY0IGJpdHMgKCNERSBvbiB4ODYpLiAgQ2FwIGl0LgomIzQzOwkJICovCiYjNDM7CQl1bnByb3RlY3RlZCA9IG1pbih1c2FnZSAtIHByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTsKJiM0MzsKJiM0MzsJCWVwICYjNDM7PSBtdWxfdTY0X3U2NF9kaXZfdTY0KHBhcmVudF91bmNsYWltZWQsIHVucHJvdGVjdGVkLAomIzQzOwkJCQkJICBwYXJlbnRfdW5wcm90ZWN0ZWQpOwogCX0KIAogCXJldHVybiBlcDsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNDBkM2YxYjQ4YTc0Yy4uZmQ1NTE1ZmQ1MTQyZCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTUxOTMsNyAmIzQzOzUxOTMsMTMgQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwogCi0JLyogbHJ1X2dlbl9hZ2Vfbm9kZSgpIGNhbGxlZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKCkgKi8KJiM0MzsJLyoKJiM0MzsJICogRm9yIGtzd2FwZCwgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpIGhhcyBhbHJlYWR5CiYjNDM7CSAqIGJlZW4gY2FsbGVkIGR1cmluZyB0aGUgdG9wLWRvd24gY2dyb3VwIHRyYXZlcnNhbC4KJiM0MzsJICovCiYjNDM7CWlmICghY3VycmVudF9pc19rc3dhcGQoKSkKJiM0MzsJCW1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChOVUxMLCBtZW1jZyk7CiYjNDM7CiAJaWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKE5VTEwsIG1lbWNnKSkKIAkJcmV0dXJuIE1FTUNHX0xSVV9ZT1VORzsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY5OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDkwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEFzc2Vzc21lbnQgZm9yIFRoaXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBjaGFuZ2VzIHRvdWNoIGBtZW1jb250cm9sLmhgLCBgbWVtY29udHJvbC5jYCwgYHBhZ2VfY291bnRlci5jYCwgYW5kIGB2bXNjYW4uY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHByaW1hcmlseSBkZWFsaW5nIHdpdGg6CgoqICAgQXJpdGhtZXRpYyBvdmVyZmxvdyBmaXhlcyBpbiBgcGFnZV9jb3VudGVyLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBlZmZlY3RpdmVfcHJvdGVjdGlvbmAgY2FsY3VsYXRpb24uIFRoaXMgdXNlcyBgbXVsX3U2NF91NjRfZGl2X3U2NGAgYW5kIGBtaW5gIHRvIGF2b2lkIHRob3NlIGlzc3Vlcy4KKiAgIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAsIGEgaGVscGVyIGZ1bmN0aW9uIHRvIHRyYXZlcnNlIHRoZSBtZW1vcnkgY2dyb3VwIGhpZXJhcmNoeSAoYW5jZXN0b3JzKSBhbmQgY2FsY3VsYXRlIHByb3RlY3Rpb24gdmFsdWVzLiBUaGlzIGlzIHJlbGV2YW50IHRvIE1HTFJVLCBnaXZlbiB0aGUgYENPTkZJR19MUlVfR0VOYCBkZXBlbmRlbmN5LgoqICAgVGhpcyBuZXcgaGVscGVyIGlzIGNhbGxlZCB3aXRoaW4gYHNocmlua19vbmVgIGluIGB2bXNjYW4uY2AsIGxpa2VseSBmb3IgZGlyZWN0IHJlY2xhaW1lcnMuCgpUaGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb246IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBJIG5lZWQgdG8gYXBwbHkgdGhlIEtNU0FOIGNyaXRlcmlhLiBSZW1lbWJlciwgS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAoc3RhY2ssIGhlYXAsIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4gVGhlIG1haW4gY3JpdGVyaWEgSSYjMzk7bSBsb29raW5nIGZvciBhcmU6CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UuCjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLgozLiAgQWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4KNC4gIEJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBieXRlcy4KCkxldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBwYXRjaCwgbGluZSBieSBsaW5lLCBhZ2FpbnN0IHRoZXNlIGNyaXRlcmlhOgoKKiAgICoqQ3JpdGVyaW9uIDEgKFVzZXJzcGFjZSBFeHBvc3VyZSk6KiogTm90aGluZyBoZXJlIHNlbmRzIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSwgc28gd2UmIzM5O3JlIGdvb2Qgb24gdGhhdCBmcm9udC4KKiAgICoqQ3JpdGVyaW9uIDIgKFVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzIGluIExvZ2ljKToqKiBOb3csIGxldCYjMzk7cyBkaWcgaW50byB0aGF0IGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgIGFuZCBgZWZmZWN0aXZlX3Byb3RlY3Rpb25gLiBJJiMzOTttIHNlZWluZyB2YXJpYWJsZXMgbGlrZSBgcmVjdXJzaXZlX3Byb3RlY3Rpb25gLCBgY2dgLCBgcm9vdF9sZXZlbGAsIGBpYCwgYW5kIGBjdXJgLiBCdXQgSSYjMzk7bSBjaGVja2luZywgYW5kIGl0IHNlZW1zIGFsbCB0aGVzZSB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGV5JiMzOTtyZSB1c2VkLiBFdmVyeXRoaW5nIGxvb2tzIHNhZmUgaGVyZSEgSW4gYGVmZmVjdGl2ZV9wcm90ZWN0aW9uYCwgdmFyaWFibGVzIGxpa2UgYHBhcmVudF91bmNsYWltZWRgLCBgcGFyZW50X3VucHJvdGVjdGVkYCwgYW5kIGB1bnByb3RlY3RlZGAgYXJlIGFsbCBqdXN0IGRpcmVjdCByZXN1bHRzIG9mIGFyaXRobWV0aWMgb3BlcmF0aW9ucywgc28gdGhlcmUmIzM5O3Mgbm8gcmlzay4KKiAgICoqQ3JpdGVyaW9uIDMgKENvbXBsZXggRGF0YSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb24pOioqIE5vIG5ldyBhbGxvY2F0aW9ucyBhcmUgaW4gdGhpcyBwYXRjaCwgc28gd2UgY2FuIGNoZWNrIHRoaXMgY3JpdGVyaW9uIG9mZi4KKiAgICoqQ3JpdGVyaW9uIDQgKFVuaW5pdGlhbGl6ZWQgQnVmZmVyIEFjY2Vzcyk6KiogVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgaXQmIzM5O3MgbWVzc2luZyB3aXRoIGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLgoKU28sIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGZpeGluZyBhcml0aG1ldGljIGlzc3VlcyBpbiBtZW1vcnkgY2dyb3VwIHByb3RlY3Rpb24gYW5kIGNvcnJlY3RseSBjYWxjdWxhdGluZyB2YWx1ZXMsIGVzcGVjaWFsbHkgZm9yIE1HTFJVLiBXZSYjMzk7dmUgYXNzZXNzZWQgdGhhdCBpdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYmFzZWQgb24gdGhlc2UgY2hhbmdlcyB0aGVtc2VsdmVzLiBXZSBuZWVkIHRvIGNoZWNrIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gIG9yIGFueXRoaW5nIGVsc2UgdGhpcyBwYXRjaCBoYXMgdG91Y2hlZCwgYnV0IGJhc2VkIG9uIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQsIEkmIzM5O2Qgc2F5IG5vIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeSAqZm9yIHRoaXMgcGF0Y2gqLiBXZSYjMzk7cmUgcHJvYmFibHkgZ29vZCB3aXRoIHRoZSBleGlzdGluZyBjb3ZlcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9jb3VudGVyLmM9MzU4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtNDUyLSAqL1xubW0vcGFnZV9jb3VudGVyLmM6NDUzOnZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXG5tbS9wYWdlX2NvdW50ZXIuYy00NTQtXHRcdFx0XHQgICAgICAgc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQzMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIFBhZ2UgQ291bnRlciBQcm90ZWN0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYG1tL3BhZ2VfY291bnRlci5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHByb3RlY3Rpb24gd2l0aGluIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLiBUaGlzIGFyZWEgaXMgY3J1Y2lhbCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVzb3VyY2UgYWNjb3VudGluZywgYW5kIGFueSBwb3RlbnRpYWwgZmxhd3MgaGVyZSBjb3VsZCBoYXZlIHNlcmlvdXMgcmFtaWZpY2F0aW9ucy4gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGEgY2xlYW4sIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiB0aGF0IGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgaXNzdWVzIHJlbGF0ZWQgdG8gY29uY3VycmVudCBhY2Nlc3MuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGFwcHJvYWNoZWQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2NvdW50ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDUwOlx0ICogV0FSTklORzogVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3RhdGVsZXNzISBJdCBjYW4gb25seSBiZSB1c2VkIGFzIHBhcnRcbiA0NTE6XHQgKiAgICAgICAgICBvZiBhIHRvcC1kb3duIHRyZWUgaXRlcmF0aW9uLCBub3QgZm9yIGlzb2xhdGVkIHF1ZXJpZXMuXG4gNDUyOlx0ICovXG4gNDUzOlx0dm9pZCBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IHBhZ2VfY291bnRlciAqcm9vdCxcbiA0NTQ6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxuIDQ1NTpcdFx0XHRcdFx0ICAgICAgIGJvb2wgcmVjdXJzaXZlX3Byb3RlY3Rpb24pXG4gNDU2Olx0e1xuIDQ1NzpcdFx0dW5zaWduZWQgbG9uZyB1c2FnZSwgcGFyZW50X3VzYWdlO1xuIDQ1ODpcdFx0c3RydWN0IHBhZ2VfY291bnRlciAqcGFyZW50ID0gY291bnRlci1cdTAwM2VwYXJlbnQ7XG4gNDU5Olx0XG4gNDYwOlx0XHQvKlxuIDQ2MTpcdFx0ICogRWZmZWN0aXZlIHZhbHVlcyBvZiB0aGUgcmVjbGFpbSB0YXJnZXRzIGFyZSBpZ25vcmVkIHNvIHRoZXlcbiA0NjI6XHRcdCAqIGNhbiBiZSBzdGFsZS4gSGF2ZSBhIGxvb2sgYXQgbWVtX2Nncm91cF9wcm90ZWN0aW9uIGZvciBtb3JlXG4gNDYzOlx0XHQgKiBkZXRhaWxzLlxuIDQ2NDpcdFx0ICogVE9ETzogY2FsY3VsYXRpb24gc2hvdWxkIGJlIG1vcmUgcm9idXN0IHNvIHRoYXQgd2UgZG8gbm90IG5lZWRcbiA0NjU6XHRcdCAqIHRoYXQgc3BlY2lhbCBjYXNpbmcuXG4gNDY2Olx0XHQgKi9cbiA0Njc6XHRcdGlmIChyb290ID09IGNvdW50ZXIpXG4gNDY4Olx0XHRcdHJldHVybjtcbiA0Njk6XHRcbiA0NzA6XHRcdHVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcik7XG4gNDcxOlx0XHRpZiAoIXVzYWdlKVxuIDQ3MjpcdFx0XHRyZXR1cm47XG4gNDczOlx0XG4gNDc0Olx0XHRpZiAocGFyZW50ID09IHJvb3QpIHtcbiA0NzU6XHRcdFx0Y291bnRlci1cdTAwM2VlbWluID0gUkVBRF9PTkNFKGNvdW50ZXItXHUwMDNlbWluKTtcbiA0NzY6XHRcdFx0Y291bnRlci1cdTAwM2VlbG93ID0gUkVBRF9PTkNFKGNvdW50ZXItXHUwMDNlbG93KTtcbiA0Nzc6XHRcdFx0cmV0dXJuO1xuIDQ3ODpcdFx0fVxuIDQ3OTpcdFxuIDQ4MDpcdFx0cGFyZW50X3VzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQocGFyZW50KTtcbiA0ODE6XHRcbiA0ODI6XHRcdFdSSVRFX09OQ0UoY291bnRlci1cdTAwM2VlbWluLCBlZmZlY3RpdmVfcHJvdGVjdGlvbih1c2FnZSwgcGFyZW50X3VzYWdlLFxuIDQ4MzpcdFx0XHRcdFJFQURfT05DRShjb3VudGVyLVx1MDAzZW1pbiksXG4gNDg0Olx0XHRcdFx0UkVBRF9PTkNFKHBhcmVudC1cdTAwM2VlbWluKSxcbiA0ODU6XHRcdFx0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnBhcmVudC1cdTAwM2VjaGlsZHJlbl9taW5fdXNhZ2UpLFxuIDQ4NjpcdFx0XHRcdHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKSk7XG4gNDg3Olx0XG4gNDg4Olx0XHRXUklURV9PTkNFKGNvdW50ZXItXHUwMDNlZWxvdywgZWZmZWN0aXZlX3Byb3RlY3Rpb24odXNhZ2UsIHBhcmVudF91c2FnZSxcbiA0ODk6XHRcdFx0XHRSRUFEX09OQ0UoY291bnRlci1cdTAwM2Vsb3cpLFxuIDQ5MDpcdFx0XHRcdFJFQURfT05DRShwYXJlbnQtXHUwMDNlZWxvdyksXG4gNDkxOlx0XHRcdFx0YXRvbWljX2xvbmdfcmVhZChcdTAwMjZwYXJlbnQtXHUwMDNlY2hpbGRyZW5fbG93X3VzYWdlKSxcbiA0OTI6XHRcdFx0XHRyZWN1cnNpdmVfcHJvdGVjdGlvbikpO1xuIDQ5MzpcdH1cbiA0OTQ6XHQjZW5kaWYgLyogQ09ORklHX01FTUNHIHx8IENPTkZJR19DR1JPVVBfRE1FTSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjU3CgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGlzIHByZXR0eSBjbGVhbi4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBrbm93biBhcml0aG1ldGljIGlzc3VlIGluIGBlZmZlY3RpdmVfcHJvdGVjdGlvbigpYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBwcmV2ZW50aW5nIDY0LWJpdCBpbnRlZ2VyIG92ZXJmbG93IGFuZCBkaXZpc2lvbiBlcnJvcnMsIHdoaWNoIG1ha2VzIHNlbnNlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGNvcmUgY2FsY3VsYXRpb24sIHNvIGl0JiMzOTtzIGdvb2QgdG8gYmUgbWV0aWN1bG91cyBoZXJlLiBUaGUgYWRkaXRpb24gb2YgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpYCBsb29rcyBsaWtlIGEgbmVjZXNzYXJ5IGNvbXBhbmlvbiBmdW5jdGlvbiB0byBlbnN1cmUgYWNjdXJhdGUgY2FsY3VsYXRpb25zIGR1cmluZyB0aGUgTUdMUlUtZHJpdmVuIGBzaHJpbmtfb25lKClgIGNhbGxzLiBFbnN1cmluZyB0aGlzIHRvcC1kb3duIGNhbGN1bGF0aW9uIGluIHRoZSBhbmNlc3RvciBwYXRoIGlzIGVzc2VudGlhbCBmb3IgTUdMUlUmIzM5O3MgY29uc2lzdGVuY3kuCgpEaWdnaW5nIGRlZXBlciwgdGhlcmUmIzM5O3Mgbm90aGluZyBjb25jZXJuaW5nIGp1bXBpbmcgb3V0IGF0IG1lIGluIHRlcm1zIG9mIG1lbW9yeSBzYWZldHkuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL2J1ZmZlcnMuIFRoZSBjb2RlIGxvb2tzIHNvdW5kIGluIHRoYXQgcmVzcGVjdC4gS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSB0aGUgcmlnaHQgdG9vbHMgZm9yIHRoZSBqb2IgaGVyZTsgbm8gbmVlZCB0byBicmluZyBpbiBLTVNBTiYjMzk7cyBoZWF2aWVyIGFydGlsbGVyeS4gSXQgYWxsIHNlZW1zIHByZXR0eSBsb3ctcmlzayBmcm9tIGEgbWVtb3J5LXNhZmV0eSBwZXJzcGVjdGl2ZS4KClRoZXJlZm9yZSwgYHNldC1yZXN1bHRzYCB3aXRoIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgYSBjb25jaXNlIGJ1dCBjbGVhciBleHBsYW5hdGlvbiBvZiB0aGUgb3ZlcmZsb3cvZGl2aXNpb24gZml4IGFuZCB0aGUgTUdMUlUgcHJvdGVjdGlvbiBwYXRoIGFkanVzdG1lbnQgc2hvdWxkIGJlIHRoZSB3YXkgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBpbnRlZ2VyIG92ZXJmbG93IC8gYXJpdGhtZXRpYyBoYW5kbGluZyBpbiBwYWdlX2NvdW50ZXIgZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb24gKG1tL3BhZ2VfY291bnRlci5jKSBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSB0byBjYWxjdWxhdGUgYW5jZXN0b3IgbWVtb3J5IGNncm91cCBwcm90ZWN0aW9uIGFsb25nIHRoZSBoaWVyYXJjaHkgcGF0aCBkdXJpbmcgTUdMUlUgcmVjbGFpbSAobW0vbWVtY29udHJvbC5jLCBtbS92bXNjYW4uYykuXG5cblRoZXNlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgdHJhbnNmZXJzLiBUaGUgYnVncyBhZGRyZXNzZWQgYW5kIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gdGhpcyBjb2RlIHBhdGggKHN1Y2ggYXMgZGl2aXNpb24gZXJyb3JzLCBoaWVyYXJjaHkgdHJhdmVyc2FsIGJ1Z3MsIG9yIHBvaW50ZXIgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgY2hlY2tzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBpbnRlZ2VyIG92ZXJmbG93IC8gYXJpdGhtZXRpYyBoYW5kbGluZyBpbiBwYWdlX2NvdW50ZXIgZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb24gKG1tL3BhZ2VfY291bnRlci5jKSBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSB0byBjYWxjdWxhdGUgYW5jZXN0b3IgbWVtb3J5IGNncm91cCBwcm90ZWN0aW9uIGFsb25nIHRoZSBoaWVyYXJjaHkgcGF0aCBkdXJpbmcgTUdMUlUgcmVjbGFpbSAobW0vbWVtY29udHJvbC5jLCBtbS92bXNjYW4uYykuXG5cblRoZXNlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgdHJhbnNmZXJzLiBUaGUgYnVncyBhZGRyZXNzZWQgYW5kIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gdGhpcyBjb2RlIHBhdGggKHN1Y2ggYXMgZGl2aXNpb24gZXJyb3JzLCBoaWVyYXJjaHkgdHJhdmVyc2FsIGJ1Z3MsIG9yIHBvaW50ZXIgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgY2hlY2tzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDc6NTguMzYyNTc0OTU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4MDIzNzEyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aFwiLFxuICAgIFwicGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uXCIsXG4gICAgXCJscnVfZ2VuX3Nocmlua19ub2RlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgaW50ZWdlciBvdmVyZmxvdyAvIGFyaXRobWV0aWMgaGFuZGxpbmcgaW4gcGFnZV9jb3VudGVyIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9uIChtbS9wYWdlX2NvdW50ZXIuYykgYW5kIGludHJvZHVjZXMgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgdG8gY2FsY3VsYXRlIGFuY2VzdG9yIG1lbW9yeSBjZ3JvdXAgcHJvdGVjdGlvbiBhbG9uZyB0aGUgaGllcmFyY2h5IHBhdGggZHVyaW5nIE1HTFJVIHJlY2xhaW0gKG1tL21lbWNvbnRyb2wuYywgbW0vdm1zY2FuLmMpLlxcblxcblRoZXNlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgdHJhbnNmZXJzLiBUaGUgYnVncyBhZGRyZXNzZWQgYW5kIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gdGhpcyBjb2RlIHBhdGggKHN1Y2ggYXMgZGl2aXNpb24gZXJyb3JzLCBoaWVyYXJjaHkgdHJhdmVyc2FsIGJ1Z3MsIG9yIHBvaW50ZXIgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgY2hlY2tzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGJ5IHVwZGF0aW5nIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9ucyBpbiBtbS9wYWdlX2NvdW50ZXIuYyB0byBwcmV2ZW50IGFyaXRobWV0aWMgb3ZlcmZsb3cgYW5kIGRpdmlzaW9uIGlzc3VlcywgaW50cm9kdWNpbmcgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgaW4gbW0vbWVtY29udHJvbC5jLCBhbmQgaG9va2luZyBpdCBpbnRvIHRoZSBNdWx0aS1HZW4gTFJVIHBhZ2UgcmVjbGFpbSBwYXRoIGluIG1tL3Ztc2Nhbi5jLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbWVtb3J5IHJlY2xhaW0gYW5kIGNncm91cCBhY2NvdW50aW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzo0Nzo1OC4zNjI1Nzk1MjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTY2NjMzMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzZTRmZmRhOGNhNjczODVkNGU0ZTQ1YTc5NWU1NDQ1OWVkMjk0OWQ3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMDc6NDc6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbmluZGV4IDRmNzIwNzkxYTMxYzkuLjQ2YmY3MjRjYWU3YWYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbkBAIC0xOTIxLDYgKzE5MjEsMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gfVxcbiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxuIFxcbisjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0xSVV9HRU4pXFxuK3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4re1xcbit9XFxuKyNlbmRpZlxcbitcXG4gI2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19aU1dBUClcXG4gYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpO1xcbiB2b2lkIG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgc2l6ZV90IHNpemUpO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCAzMDcyMDMzMDFhMmE1Li4xNDYwY2JhNTM1ODhlIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC01MjUzLDYgKzUyNTMsNTEgQEAgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbiBcXHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXFx1MDAyNnJvb3QtXFx1MDAzZW1lbW9yeSwgXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19MUlVfR0VOXFxuKy8qKlxcbisgKiBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGggLSBjb21wdXRlIHByb3RlY3Rpb24gYWxvbmcgYSBwYXRoXFxuKyAqIEByb290OiB0aGUgdG9wIGFuY2VzdG9yIG9mIHRoZSBzdWItdHJlZSBiZWluZyBjaGVja2VkIChOVUxMIGZvciByb290X21lbV9jZ3JvdXApXFxuKyAqIEBtZW1jZzogdGhlIHRhcmdldCBtZW1vcnkgY2dyb3VwXFxuKyAqXFxuKyAqIFdhbGsgdGhlIGFuY2VzdG9yIHBhdGggZnJvbSBAcm9vdCBkb3duIHRvIEBtZW1jZyBhbmQgY29tcHV0ZSB0aGUgZWZmZWN0aXZlXFxuKyAqIHByb3RlY3Rpb24gYXQgZWFjaCBsZXZlbC4gIFRoaXMgaXMgc2FmZSBmb3IgaXNvbGF0ZWQgcXVlcmllcyBiZWNhdXNlIGl0XFxuKyAqIGVuc3VyZXMgcGFyZW50cyBhcmUgY29tcHV0ZWQgYmVmb3JlIGNoaWxkcmVuLlxcbisgKi9cXG4rdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbit7XFxuK1xcdGJvb2wgcmVjdXJzaXZlX3Byb3RlY3Rpb24gPVxcbitcXHRcXHRjZ3JwX2RmbF9yb290LmZsYWdzIFxcdTAwMjYgQ0dSUF9ST09UX01FTU9SWV9SRUNVUlNJVkVfUFJPVDtcXG4rXFx0c3RydWN0IGNncm91cCAqY2c7XFxuK1xcdGludCByb290X2xldmVsLCBpO1xcbitcXG4rXFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCFyb290KVxcbitcXHRcXHRyb290ID0gcm9vdF9tZW1fY2dyb3VwO1xcbitcXG4rXFx0aWYgKG1lbWNnID09IHJvb3QpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJvb3RfbGV2ZWwgPSByb290LVxcdTAwM2Vjc3MuY2dyb3VwLVxcdTAwM2VsZXZlbDtcXG4rXFx0Y2cgPSBtZW1jZy1cXHUwMDNlY3NzLmNncm91cDtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0Zm9yIChpID0gcm9vdF9sZXZlbCArIDE7IGkgXFx1MDAzYz0gY2ctXFx1MDAzZWxldmVsOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKmN1cjtcXG4rXFxuK1xcdFxcdGN1ciA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY2dyb3VwX2NzcyhjZy1cXHUwMDNlYW5jZXN0b3JzW2ldLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMpKTtcXG4rXFx0XFx0aWYgKGN1cilcXG4rXFx0XFx0XFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFxcdTAwMjZyb290LVxcdTAwM2VtZW1vcnksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmN1ci1cXHUwMDNlbWVtb3J5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcXG4rXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rfVxcbisjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG4rXFxuIHN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gXFx0XFx0XFx0Z2ZwX3QgZ2ZwKVxcbiB7XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmNcXG5pbmRleCA0NTA1NDNmNGIzMThiLi45ODMyMjgwMzk0MWE3IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXFxuKysrIGIvbW0vcGFnZV9jb3VudGVyLmNcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VfY291bnRlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYXRvbWljLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21hdGg2NC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVnLmhcXHUwMDNlXFxuQEAgLTM3Niw3ICszNzcsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxcbiBcXHQgKiBvdGhlcndpc2UgZ2V0IGEgc21hbGxlciBjaHVuayB0aGFuIHdoYXQgdGhleSBjbGFpbWVkLlxcbiBcXHQgKi9cXG4gXFx0aWYgKHNpYmxpbmdzX3Byb3RlY3RlZCBcXHUwMDNlIHBhcmVudF9lZmZlY3RpdmUpXFxuLVxcdFxcdHJldHVybiBwcm90ZWN0ZWQgKiBwYXJlbnRfZWZmZWN0aXZlIC8gc2libGluZ3NfcHJvdGVjdGVkO1xcbitcXHRcXHRyZXR1cm4gbXVsX3U2NF91NjRfZGl2X3U2NChwcm90ZWN0ZWQsIHBhcmVudF9lZmZlY3RpdmUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHNpYmxpbmdzX3Byb3RlY3RlZCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBPaywgdXRpbGl6ZWQgcHJvdGVjdGlvbiBvZiBhbGwgY2hpbGRyZW4gaXMgd2l0aGluIHdoYXQgdGhlXFxuQEAgLTQxNywxMyArNDE5LDIwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsXFxuIFxcdGlmIChwYXJlbnRfZWZmZWN0aXZlIFxcdTAwM2Ugc2libGluZ3NfcHJvdGVjdGVkIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBwYXJlbnRfdXNhZ2UgXFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHVzYWdlIFxcdTAwM2UgcHJvdGVjdGVkKSB7XFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgdW5jbGFpbWVkO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBhcmVudF91bmNsYWltZWQsIHBhcmVudF91bnByb3RlY3RlZCwgdW5wcm90ZWN0ZWQ7XFxuIFxcbi1cXHRcXHR1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xcbi1cXHRcXHR1bmNsYWltZWQgKj0gdXNhZ2UgLSBwcm90ZWN0ZWQ7XFxuLVxcdFxcdHVuY2xhaW1lZCAvPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7XFxuK1xcdFxcdHBhcmVudF91bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xcbitcXHRcXHRwYXJlbnRfdW5wcm90ZWN0ZWQgPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7XFxuIFxcbi1cXHRcXHRlcCArPSB1bmNsYWltZWQ7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSB1c2FnZXMgYXJlbid0IHJlYWQgYXRvbWljYWxseSwgc28gYSBjaGlsZCBjYW4gdHJhbnNpZW50bHlcXG4rXFx0XFx0ICogYXBwZWFyIHRvIHVzZSBtb3JlIHRoYW4gaXRzIHBhcmVudCwgbWFraW5nIHRoZSByYXRpbyBleGNlZWQgMVxcbitcXHRcXHQgKiBhbmQgdGhlIHF1b3RpZW50IG92ZXJmbG93IDY0IGJpdHMgKCNERSBvbiB4ODYpLiAgQ2FwIGl0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dW5wcm90ZWN0ZWQgPSBtaW4odXNhZ2UgLSBwcm90ZWN0ZWQsIHBhcmVudF91bnByb3RlY3RlZCk7XFxuK1xcbitcXHRcXHRlcCArPSBtdWxfdTY0X3U2NF9kaXZfdTY0KHBhcmVudF91bmNsYWltZWQsIHVucHJvdGVjdGVkLFxcbitcXHRcXHRcXHRcXHRcXHQgIHBhcmVudF91bnByb3RlY3RlZCk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBlcDtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDQwZDNmMWI0OGE3NGMuLmZkNTUxNWZkNTE0MmQgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC01MTkzLDcgKzUxOTMsMTMgQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuIFxcbi1cXHQvKiBscnVfZ2VuX2FnZV9ub2RlKCkgY2FsbGVkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKSAqL1xcbitcXHQvKlxcbitcXHQgKiBGb3Iga3N3YXBkLCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKCkgaGFzIGFscmVhZHlcXG4rXFx0ICogYmVlbiBjYWxsZWQgZHVyaW5nIHRoZSB0b3AtZG93biBjZ3JvdXAgdHJhdmVyc2FsLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFjdXJyZW50X2lzX2tzd2FwZCgpKVxcbitcXHRcXHRtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoTlVMTCwgbWVtY2cpO1xcbitcXG4gXFx0aWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKE5VTEwsIG1lbWNnKSlcXG4gXFx0XFx0cmV0dXJuIE1FTUNHX0xSVV9ZT1VORztcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjAwLjEyMDI0MzM3MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjc4MzQ3NjE1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aFwiLFxuICAgIFwicGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uXCIsXG4gICAgXCJtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uXCIsXG4gICAgXCJscnVfZ2VuX3Nocmlua19ub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBieSB1cGRhdGluZyBlZmZlY3RpdmUgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbnMgaW4gbW0vcGFnZV9jb3VudGVyLmMgdG8gcHJldmVudCBhcml0aG1ldGljIG92ZXJmbG93IGFuZCBkaXZpc2lvbiBpc3N1ZXMsIGludHJvZHVjaW5nIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIGluIG1tL21lbWNvbnRyb2wuYywgYW5kIGhvb2tpbmcgaXQgaW50byB0aGUgTXVsdGktR2VuIExSVSBwYWdlIHJlY2xhaW0gcGF0aCBpbiBtbS92bXNjYW4uYy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIG1lbW9yeSByZWNsYWltIGFuZCBjZ3JvdXAgYWNjb3VudGluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZTRmZmRhOGNhNjczODVkNGU0ZTQ1YTc5NWU1NDQ1OWVkMjk0OWQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNzo0Nzo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDRmNzIwNzkxYTMxYzkuLjQ2YmY3MjRjYWU3YWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xOTIxLDYgKzE5MjEsMTYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0xSVV9HRU4pXG4rdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4rXHRcdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4rXHRcdFx0XHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4re1xuK31cbisjZW5kaWZcbitcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19aU1dBUClcbiBib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7XG4gdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDMwNzIwMzMwMWEyYTUuLjE0NjBjYmE1MzU4OGUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTUyNTMsNiArNTI1Myw1MSBAQCB2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4gXHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXHUwMDI2cm9vdC1cdTAwM2VtZW1vcnksIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cbisvKipcbisgKiBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGggLSBjb21wdXRlIHByb3RlY3Rpb24gYWxvbmcgYSBwYXRoXG4rICogQHJvb3Q6IHRoZSB0b3AgYW5jZXN0b3Igb2YgdGhlIHN1Yi10cmVlIGJlaW5nIGNoZWNrZWQgKE5VTEwgZm9yIHJvb3RfbWVtX2Nncm91cClcbisgKiBAbWVtY2c6IHRoZSB0YXJnZXQgbWVtb3J5IGNncm91cFxuKyAqXG4rICogV2FsayB0aGUgYW5jZXN0b3IgcGF0aCBmcm9tIEByb290IGRvd24gdG8gQG1lbWNnIGFuZCBjb21wdXRlIHRoZSBlZmZlY3RpdmVcbisgKiBwcm90ZWN0aW9uIGF0IGVhY2ggbGV2ZWwuICBUaGlzIGlzIHNhZmUgZm9yIGlzb2xhdGVkIHF1ZXJpZXMgYmVjYXVzZSBpdFxuKyAqIGVuc3VyZXMgcGFyZW50cyBhcmUgY29tcHV0ZWQgYmVmb3JlIGNoaWxkcmVuLlxuKyAqL1xuK3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbit7XG4rXHRib29sIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uID1cbitcdFx0Y2dycF9kZmxfcm9vdC5mbGFncyBcdTAwMjYgQ0dSUF9ST09UX01FTU9SWV9SRUNVUlNJVkVfUFJPVDtcbitcdHN0cnVjdCBjZ3JvdXAgKmNnO1xuK1x0aW50IHJvb3RfbGV2ZWwsIGk7XG4rXG4rXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIXJvb3QpXG4rXHRcdHJvb3QgPSByb290X21lbV9jZ3JvdXA7XG4rXG4rXHRpZiAobWVtY2cgPT0gcm9vdClcbitcdFx0cmV0dXJuO1xuK1xuK1x0cm9vdF9sZXZlbCA9IHJvb3QtXHUwMDNlY3NzLmNncm91cC1cdTAwM2VsZXZlbDtcbitcdGNnID0gbWVtY2ctXHUwMDNlY3NzLmNncm91cDtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGZvciAoaSA9IHJvb3RfbGV2ZWwgKyAxOyBpIFx1MDAzYz0gY2ctXHUwMDNlbGV2ZWw7IGkrKykge1xuK1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqY3VyO1xuK1xuK1x0XHRjdXIgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNncm91cF9jc3MoY2ctXHUwMDNlYW5jZXN0b3JzW2ldLFxuK1x0XHRcdFx0XHRcdCAgICAgXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzKSk7XG4rXHRcdGlmIChjdXIpXG4rXHRcdFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LFxuK1x0XHRcdFx0XHRcdFx0ICBcdTAwMjZjdXItXHUwMDNlbWVtb3J5LFxuK1x0XHRcdFx0XHRcdFx0ICByZWN1cnNpdmVfcHJvdGVjdGlvbik7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbit9XG4rI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4rXG4gc3RhdGljIGludCBjaGFyZ2VfbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdGdmcF90IGdmcClcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuY1xuaW5kZXggNDUwNTQzZjRiMzE4Yi4uOTgzMjI4MDM5NDFhNyAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXG4rKysgYi9tbS9wYWdlX2NvdW50ZXIuY1xuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9jb3VudGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWF0aDY0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuQEAgLTM3Niw3ICszNzcsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxuIFx0ICogb3RoZXJ3aXNlIGdldCBhIHNtYWxsZXIgY2h1bmsgdGhhbiB3aGF0IHRoZXkgY2xhaW1lZC5cbiBcdCAqL1xuIFx0aWYgKHNpYmxpbmdzX3Byb3RlY3RlZCBcdTAwM2UgcGFyZW50X2VmZmVjdGl2ZSlcbi1cdFx0cmV0dXJuIHByb3RlY3RlZCAqIHBhcmVudF9lZmZlY3RpdmUgLyBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4rXHRcdHJldHVybiBtdWxfdTY0X3U2NF9kaXZfdTY0KHByb3RlY3RlZCwgcGFyZW50X2VmZmVjdGl2ZSxcbitcdFx0XHRcdFx0ICAgc2libGluZ3NfcHJvdGVjdGVkKTtcbiBcbiBcdC8qXG4gXHQgKiBPaywgdXRpbGl6ZWQgcHJvdGVjdGlvbiBvZiBhbGwgY2hpbGRyZW4gaXMgd2l0aGluIHdoYXQgdGhlXG5AQCAtNDE3LDEzICs0MTksMjAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSxcbiBcdGlmIChwYXJlbnRfZWZmZWN0aXZlIFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDI2XHUwMDI2XG4gXHQgICAgcGFyZW50X3VzYWdlIFx1MDAzZSBzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDI2XHUwMDI2XG4gXHQgICAgdXNhZ2UgXHUwMDNlIHByb3RlY3RlZCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIHVuY2xhaW1lZDtcbitcdFx0dW5zaWduZWQgbG9uZyBwYXJlbnRfdW5jbGFpbWVkLCBwYXJlbnRfdW5wcm90ZWN0ZWQsIHVucHJvdGVjdGVkO1xuIFxuLVx0XHR1bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuLVx0XHR1bmNsYWltZWQgKj0gdXNhZ2UgLSBwcm90ZWN0ZWQ7XG4tXHRcdHVuY2xhaW1lZCAvPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4rXHRcdHBhcmVudF91bmNsYWltZWQgPSBwYXJlbnRfZWZmZWN0aXZlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuK1x0XHRwYXJlbnRfdW5wcm90ZWN0ZWQgPSBwYXJlbnRfdXNhZ2UgLSBzaWJsaW5nc19wcm90ZWN0ZWQ7XG4gXG4tXHRcdGVwICs9IHVuY2xhaW1lZDtcbitcdFx0LypcbitcdFx0ICogVGhlIHVzYWdlcyBhcmVuJ3QgcmVhZCBhdG9taWNhbGx5LCBzbyBhIGNoaWxkIGNhbiB0cmFuc2llbnRseVxuK1x0XHQgKiBhcHBlYXIgdG8gdXNlIG1vcmUgdGhhbiBpdHMgcGFyZW50LCBtYWtpbmcgdGhlIHJhdGlvIGV4Y2VlZCAxXG4rXHRcdCAqIGFuZCB0aGUgcXVvdGllbnQgb3ZlcmZsb3cgNjQgYml0cyAoI0RFIG9uIHg4NikuICBDYXAgaXQuXG4rXHRcdCAqL1xuK1x0XHR1bnByb3RlY3RlZCA9IG1pbih1c2FnZSAtIHByb3RlY3RlZCwgcGFyZW50X3VucHJvdGVjdGVkKTtcbitcbitcdFx0ZXAgKz0gbXVsX3U2NF91NjRfZGl2X3U2NChwYXJlbnRfdW5jbGFpbWVkLCB1bnByb3RlY3RlZCxcbitcdFx0XHRcdFx0ICBwYXJlbnRfdW5wcm90ZWN0ZWQpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGVwO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDQwZDNmMWI0OGE3NGMuLmZkNTUxNWZkNTE0MmQgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC01MTkzLDcgKzUxOTMsMTMgQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbiBcbi1cdC8qIGxydV9nZW5fYWdlX25vZGUoKSBjYWxsZWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpICovXG4rXHQvKlxuK1x0ICogRm9yIGtzd2FwZCwgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbigpIGhhcyBhbHJlYWR5XG4rXHQgKiBiZWVuIGNhbGxlZCBkdXJpbmcgdGhlIHRvcC1kb3duIGNncm91cCB0cmF2ZXJzYWwuXG4rXHQgKi9cbitcdGlmICghY3VycmVudF9pc19rc3dhcGQoKSlcbitcdFx0bWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKE5VTEwsIG1lbWNnKTtcbitcbiBcdGlmIChtZW1fY2dyb3VwX2JlbG93X21pbihOVUxMLCBtZW1jZykpXG4gXHRcdHJldHVybiBNRU1DR19MUlVfWU9VTkc7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzo0ODowMC4xMjAyNDUzNDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODEyMjE4NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyBhbmQgaWYgaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBzeXprYWxsZXIuIEZyb20gdGhlIGRpZmYsIGl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIHNldmVyYWwgZmlsZXM6IGBtZW1jb250cm9sLmhgLCBgbWVtY29udHJvbC5jYCwgYHBhZ2VfY291bnRlci5jYCwgYW5kIGB2bXNjYW4uY2AuIEl0IHNlZW1zIHRvIGJlIGZvY3VzZWQgb24gbWVtb3J5IGNncm91cHMsIHNwZWNpZmljYWxseSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9uIHdpdGhpbiB0aGUgbXVsdGktZ2VuIExSVSByZWNsYWltIHBhdGguIEkgc2VlIGEgbmV3IGZ1bmN0aW9uIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKWAgYmVpbmcgaW50cm9kdWNlZCwgd2hpY2ggdHJhdmVyc2VzIHRoZSBjZ3JvdXAgaGllcmFyY2h5IGFuZCBpbnRlcmFjdHMgd2l0aCBgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKClgLlxuXG5UaGUgYHBhZ2VfY291bnRlci5jYCBjaGFuZ2UgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUuIFdlIGhhdmUgYW4gb3ZlcmZsb3cgZml4IHVzaW5nIGBtdWxfdTY0X3U2NF9kaXZfdTY0YCBpbnN0ZWFkIG9mIGEgc2ltcGxlIGRpdmlzaW9uLCB3aGljaCBpcyBnb29kLiBUaGF0J3MgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyBmdXp6aW5nIHRlbmRzIHRvIGV4cG9zZS4gVGhlcmUncyBhbHNvIGEgcG90ZW50aWFsIGRpdmlkZS1ieS16ZXJvIG9yIG92ZXJmbG93IGZpeCBpbiB1bmNsYWltZWQgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbi4gVGhpcyBpcyBhIGNsZWFyIGluZGljYXRvciB0aGF0IGZ1enppbmcgY291bGQgYmUgYmVuZWZpY2lhbC5cblxuVGhlIGNoYW5nZSBpbiBgdm1zY2FuLmNgIHRoYXQgY2FsbHMgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpYCB3aXRoaW4gYHNocmlua19vbmUoKWAgZHVyaW5nIHJlY2xhaW0gaXMgYWxzbyBhIGtleSBhcmVhIHRvIGV4cGxvcmUuIFRoaXMgaW50ZWdyYXRlcyB0aGUgbmV3IHByb3RlY3Rpb24gcGF0aCBpbnRvIHRoZSBtZW1vcnkgcmVjbGFpbSBwcm9jZXNzLiBHaXZlbiB0aGF0IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXBzIGFyZSBjb3JlIGtlcm5lbCBmZWF0dXJlcywgYW5kIGl0IHNlZW1zIHRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIHRlc3RpbmcuIFRoZSBpbnRlcmFjdGlvbiB3aXRoIG11bHRpLWdlbiBMUlUgaXMgYWxzbyBwcm9taXNpbmcuXG5cblNvLCB5ZXMsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gVGhlIE1NIGNvcmUgbG9naWMgbW9kaWZpY2F0aW9ucywgY2dyb3VwIHByb3RlY3Rpb24gY2FsY3VsYXRpb25zLCBhbmQgcGFnZSByZWNsYWltIGFsbCBtYWtlIHRoaXMgYSBwcmltZSBjYW5kaWRhdGUuIE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc2VlIGlmIHN5emthbGxlciBjYW4gaGFuZGxlIHRoZSBgQ09ORklHX0xSVV9HRU5gIGFuZCBgQ09ORklHX01FTUNHYCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ4NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjA2LjkzMjQ2NjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzOTA1NDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzODc9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xMzk3LSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxMzk4OmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xMzk5LVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MDYtXFxubW0vS2NvbmZpZzoxNDA3OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MDgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTItXFxubW0vS2NvbmZpZzoxNDEzOmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDE0LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyMS1cXG5tbS9LY29uZmlnOjE0MjI6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDIzLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MDcuMDQ2Mzc3OTIxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2NTY5MzI5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBDT05GSUdfTFJVX0dFTiBhbmQgQ09ORklHX01FTUNHIERlcGVuZGVuY2llcyBpbiBtbS9LY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBtbS9LY29uZmlnYCBhcm91bmQgbGluZSAxMzk4LiBNeSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gdGhlIGRlcGVuZGVuY3kgY2hhaW4gZm9yIGBDT05GSUdfTFJVX0dFTmAgYW5kIGBDT05GSUdfTUVNQ0dgLiBVc2luZyBgcmVhZC1maWxlYCBpcyB0aGUgcmlnaHQgYXBwcm9hY2g7IGl0J2xsIGxldCBtZSBlZmZpY2llbnRseSBwYXJzZSB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgYW5kIGF2b2lkIGFueSB1bm5lY2Vzc2FyeSBkaXN0cmFjdGlvbnMuIEkgd2FudCB0byBzZWUgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBnYXRlIHRoZXNlIGZlYXR1cmVzLCBpZiB0aGV5IGhhdmUgYW55IG1hbmRhdG9yeSByZXF1aXJlbWVudHMsIGFuZCB0aGUgbG9naWMgdGhhdCBjb25uZWN0cyB0aGVtLCBhbGwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBtYXRyaXggYXQgaGFuZC4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGNydWNpYWwgZm9yIGFueSB3b3JrIHRoYXQgYWZmZWN0cyBlaXRoZXIgb3IgYm90aCBvZiB0aGVzZSBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjQxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MDkuNDEyMDc0NTYyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTM5NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM5NTpcXHRcXHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXFxuMTM5NjpcXHRcXG4xMzk3OlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTM5ODpcXHRjb25maWcgTFJVX0dFTlxcbjEzOTk6XFx0XFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4xNDAwOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTQwMTpcXHRcXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxuMTQwMjpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcXG4xNDAzOlxcdFxcdGhlbHBcXG4xNDA0OlxcdFxcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXFxuMTQwNTpcXHRcXHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cXG4xNDA2OlxcdFxcbjE0MDc6XFx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbjE0MDg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuMTQwOTpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDEwOlxcdFxcdGhlbHBcXG4xNDExOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxcbjE0MTI6XFx0XFxuMTQxMzpcXHRjb25maWcgTFJVX0dFTl9TVEFUU1xcbjE0MTQ6XFx0XFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbjE0MTU6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxNjpcXHRcXHRoZWxwXFxuMTQxNzpcXHRcXHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xcbjE0MTg6XFx0XFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxcbjE0MTk6XFx0XFxuMTQyMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxcbjE0MjE6XFx0XFxuMTQyMjpcXHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG4xNDIzOlxcdFxcdGRlZl9ib29sIHlcXG4xNDI0OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTiBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcXG4xNDI1OlxcdCMgfVxcbjE0MjY6XFx0XFxuMTQyNzpcXHRjb25maWcgTE9DS19NTV9BTkRfRklORF9WTUFcXG4xNDI4OlxcdFxcdGJvb2xcXG4xNDI5OlxcdFxcdGRlcGVuZHMgb24gIVNUQUNLX0dST1dTVVBcXG4xNDMwOlxcdFxcbjE0MzE6XFx0Y29uZmlnIElPTU1VX01NX0RBVEFcXG4xNDMyOlxcdFxcdGJvb2xcXG4xNDMzOlxcdFxcbjE0MzQ6XFx0Y29uZmlnIEVYRUNNRU1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MDkuNDEyMjQyNTUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM5NTY0MDc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIHRoZSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIGJlZm9yZSB3ZSBtb3ZlIHRvbyBmYXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UncmUgb24gc29saWQgZ3JvdW5kIHdpdGggbWVtb3J5IGNncm91cHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIG1ldGljdWxvdXNseSB2ZXJpZnkgdGhlIGBDT05GSUdfTUVNQ0dgIGRlZmluaXRpb24gd2l0aGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gSXQncyB0b28gZWFzeSB0byBtYWtlIGFzc3VtcHRpb25zLCBhbmQgYSBzdWJ0bGUgbWlzY29uZmlndXJhdGlvbiBjYW4gbGVhZCB0byBzb21lIHRydWx5IGJhZmZsaW5nIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUuIEknbSBnb2luZyB0byB0cmFjayBkb3duIHRoYXQgc3BlY2lmaWMgc3ltYm9sLCB0cmFjZSBpdHMgb3JpZ2lucyBhbmQgY3VycmVudCBzdGF0ZSwgYW5kIG1ha2UgY2VydGFpbiB0aGUgYnVpbGQgc3lzdGVtIGlzIGJlaGF2aW5nIGFzIGV4cGVjdGVkLlxuXG5CZXlvbmQgdGhhdCwgSSdtIGFscmVhZHkgbWVudGFsbHkgd2Fsa2luZyB0aHJvdWdoIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBgQ09ORklHX01FTUNHYCBhbG1vc3QgY2VydGFpbmx5IGhhcyBhIHNldCBvZiBwcmVyZXF1aXNpdGVzIOKAkyBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtdXN0IGJlIGVuYWJsZWQgZm9yIGl0IHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBtZXQsIG5vdCBqdXN0IGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIGJ1dCBhbHNvIGNvbnNpZGVyaW5nIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQgYW5kIGFueSBwb3RlbnRpYWwgYnVpbGQtdGltZSB2YXJpYXRpb25zLiBJ4oCZbGwgbWFrZSBhIHF1aWNrIHBhc3MgdG8gY29uZmlybSB0aGUgcHJlcmVxdWlzaXRlcywgbG9va2luZyBmb3IgYW55IHdlYWsgbGlua3MuIFdlIGFsbCBrbm93IGhvdyBpbnNpZGlvdXMgdGhvc2UgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGNhbiBiZS4gVGltZSB0byBkaWcgaW4gYW5kIGNvbmZpcm0hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NDQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjExLjgwNzg4NzgzOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTU5OTA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjg9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ny1cXG5pbml0L0tjb25maWc6MTA3ODpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3OS1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg2LVxcbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODgtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDAtXFxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDItXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MTEuODc5NDkyMTM2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ2MjQ3NjMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB3aGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHVudGFuZ2xpbmcgdGhpcyBjb25maWd1cmF0aW9uIGlzc3VlPyBNeSBpbnN0aW5jdHMgYXJlIHRlbGxpbmcgbWUgdG8gZ28gc3RyYWlnaHQgdG8gYGluaXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMDc4LiBUaGF0J3MgdXN1YWxseSB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IGluIHRoYXQgc2VjdGlvbiBoYXMgb2Z0ZW4gcHJvdmVuIGZydWl0ZnVsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBjZXJ0YWluIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGR1cmluZyBib290LiBJdOKAmXMgbGlrZWx5IGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmFjZSBkZXBlbmRlbmNpZXMgb3IgdW5kZXJzdGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIGZlYXR1cmUgZ2V0cyBpdHMgc2V0dGluZ3MuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTQ5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MTMuMzQxOTcxMTQxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA3NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA3NTpcXHRcXG4xMDc2OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwNzc6XFx0XFxuMTA3ODpcXHRjb25maWcgTUVNQ0dcXG4xMDc5OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODA6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODE6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDgyOlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDgzOlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwODQ6XFx0XFx0aGVscFxcbjEwODU6XFx0XFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXFxuMTA4NjpcXHRcXG4xMDg3OlxcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuMTA4ODpcXHRcXHRib29sXFxuMTA4OTpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5MDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5MTpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5MjpcXHRcXHRkZWZhdWx0IHlcXG4xMDkzOlxcdFxcbjEwOTQ6XFx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuMTA5NTpcXHRcXHRib29sXFxuMTA5NjpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5NzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5ODpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDk5OlxcdFxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzo0ODoxMy4zNDIxNjkyMTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzNTIwNjM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCB0aGUgcmlwcGxlIGVmZmVjdHMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIG1vZGlmaWVkIHN5bWJvbHM7IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLiBJJ20gc2VlaW5nIHRocmVlIGtleSBmdW5jdGlvbnM6IGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgIGZyb20gYG1tL21lbWNvbnRyb2wuY2AsIGFuZCB0aGVuIGJvdGggYGVmZmVjdGl2ZV9wcm90ZWN0aW9uYCBhbmQgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAgZnJvbSBgbW0vcGFnZV9jb3VudGVyLmNgIGFuZCBmaW5hbGx5IGBzaHJpbmtfb25lYCBmcm9tIGBtbS92bXNjYW4uY2AsIGxpa2VseSByZWxhdGluZyB0byB0aGUgbXVsdGktZ2VuIExSVSBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYGVmZmVjdGl2ZV9wcm90ZWN0aW9uYC4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGFyZWEgaXMgY3JpdGljYWwsIHNvIEknbGwgd2FudCB0byBzZWUgaG93IGl0J3MgZGVmaW5lZCB3aXRoaW4gYG1tL3BhZ2VfY291bnRlci5jYCBhcyBhIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBzZWUgaG93IHRoaXMgdGllcyBpbnRvIHRoZSByZXN0IG9mIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ5MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjE1LjM3NzM3NzcxNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxODYxOTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVmZmVjdGl2ZV9wcm90ZWN0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2NvdW50ZXIuYz0yOTM9aW50IHBhZ2VfY291bnRlcl9tZW1wYXJzZShjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKm1heCxcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jLTM1Ny0gKi9cXG5tbS9wYWdlX2NvdW50ZXIuYzozNTg6c3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSxcXG5tbS9wYWdlX2NvdW50ZXIuYy0zNTktXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHBhcmVudF91c2FnZSxcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jPTQ1Mz12b2lkIHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpyb290LFxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmMtNDgxLVxcbm1tL3BhZ2VfY291bnRlci5jOjQ4MjpcXHRXUklURV9PTkNFKGNvdW50ZXItXFx1MDAzZWVtaW4sIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVzYWdlLCBwYXJlbnRfdXNhZ2UsXFxubW0vcGFnZV9jb3VudGVyLmMtNDgzLVxcdFxcdFxcdFJFQURfT05DRShjb3VudGVyLVxcdTAwM2VtaW4pLFxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmMtNDg3LVxcbm1tL3BhZ2VfY291bnRlci5jOjQ4ODpcXHRXUklURV9PTkNFKGNvdW50ZXItXFx1MDAzZWVsb3csIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVzYWdlLCBwYXJlbnRfdXNhZ2UsXFxubW0vcGFnZV9jb3VudGVyLmMtNDg5LVxcdFxcdFxcdFJFQURfT05DRShjb3VudGVyLVxcdTAwM2Vsb3cpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzo0ODoxNS40NzkyNDY5NTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkwOTE3MzUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyB0aGUgU2NvcGUgb2YgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAqKlxuXG5Pa2F5LCBzbyBgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYCBpc24ndCBzdGF0aWMuIFRoYXQgbWVhbnMgaXQncyBlaXRoZXIgZXhwbGljaXRseSBleHBvcnRlZCBvciBhY2Nlc3NpYmxlIHRocm91Z2ggYSBoZWFkZXIgZmlsZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQncyBiZWluZyB1c2VkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIHJvbGUuIE15IG5leHQgc3RlcCBpcyB0byBlaXRoZXIgdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBjb2RlIHRvIGlkZW50aWZ5IGl0cyBjYWxsZXJzLCBvciBpbnZlc3RpZ2F0ZSB0aGUgaGVhZGVyIGZpbGVzIHRvIHNlZSB3aGVyZSBpdCdzIGRlY2xhcmVkIGFuZCBob3cgaXQncyBiZWluZyBhY2Nlc3NlZCBmcm9tIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIG92ZXJhbGwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDk5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MTguMzg4NDIzMzYyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Nzc1NTc0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01MjQxPXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjUyLVxcbm1tL21lbWNvbnRyb2wuYzo1MjUzOlxcdHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihcXHUwMDI2cm9vdC1cXHUwMDNlbWVtb3J5LCBcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xcbm1tL21lbWNvbnRyb2wuYy01MjU0LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjY2PXZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyOTItXFx0XFx0aWYgKGN1cilcXG5tbS9tZW1jb250cm9sLmM6NTI5MzpcXHRcXHRcXHRwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oXFx1MDAyNnJvb3QtXFx1MDAzZW1lbW9yeSxcXG5tbS9tZW1jb250cm9sLmMtNTI5NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZjdXItXFx1MDAzZW1lbW9yeSxcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jPTM1OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmMtNDQyLS8qKlxcbm1tL3BhZ2VfY291bnRlci5jOjQ0MzogKiBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24gLSBjaGVjayBpZiBtZW1vcnkgY29uc3VtcHRpb24gaXMgaW4gdGhlIG5vcm1hbCByYW5nZVxcbm1tL3BhZ2VfY291bnRlci5jLTQ0NC0gKiBAcm9vdDogdGhlIHRvcCBhbmNlc3RvciBvZiB0aGUgc3ViLXRyZWUgYmVpbmcgY2hlY2tlZFxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmMtNDUyLSAqL1xcbm1tL3BhZ2VfY291bnRlci5jOjQ1Mzp2b2lkIHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpyb290LFxcbm1tL3BhZ2VfY291bnRlci5jLTQ1NC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MTguNDc2MTgzNTA4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODA0MTkxMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHZtc2Nhbi5jIGFuZCB0aGUgc2hyaW5rX29uZSBGdW5jdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYG1tL3Ztc2Nhbi5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHdvcmtpbmdzIG9mIGBzaHJpbmtfb25lYC4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIHRoZSBwYWdlIHJlY2xhaW0gcHJvY2VzcywgYW5kIEkgd2FudCB0byByZS1leGFtaW5lIGhvdyBpdCdzIG1ha2luZyBkZWNpc2lvbnMgYWJvdXQgd2hpY2ggcGFnZXMgdG8gcG90ZW50aWFsbHkgZXZpY3QuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGJhbGFuY2VzIGZhY3RvcnMgbGlrZSBwYWdlIHVzYWdlLCBkaXJ0eSBzdGF0ZSwgYWNjZXNzIGZyZXF1ZW5jeSwgYW5kIHRoZSBvdmVyYWxsIHByZXNzdXJlIG9uIHRoZSBzeXN0ZW0uIE5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoZSByZWNsYWltIGFsZ29yaXRobSBldmFsdWF0ZXMgdGhvc2UgYXNwZWN0cy4gSSdsbCBiZSBsb29raW5nIHRvIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgdmFyaW91cyBMUlUgbGlzdHMgYW5kIHRoZSBsb2dpYyBiZWhpbmQgc2VsZWN0aW5nIHZpY3RpbXMgZm9yIHNjYW5uaW5nIGFuZCBldmljdGlvbi4gSSBtYXkgZXZlbiBjaGVjayBob3cgdGhlIE5VTUEgbG9jYWxpdHkgY29uc2lkZXJhdGlvbnMgZmFjdG9yIGludG8gdGhlIG92ZXJhbGwgZGVjaXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NTgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzo0ODoyMC44NTY2MDUwOTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTIwMzE3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01MTQzPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTg3LVxcbm1tL3Ztc2Nhbi5jOjUxODg6c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTE4OS17XFxuLS1cXG5tbS92bXNjYW4uYz01MjM1PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI3Ni1cXG5tbS92bXNjYW4uYzo1Mjc3OlxcdFxcdG9wID0gc2hyaW5rX29uZShscnV2ZWMsIHNjKTtcXG5tbS92bXNjYW4uYy01Mjc4LVxcbi0tXFxubW0vdm1zY2FuLmM9NTMyNj1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTM1Mi1cXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbm1tL3Ztc2Nhbi5jOjUzNTM6XFx0XFx0c2hyaW5rX29uZShcXHUwMDI2cGdkYXQtXFx1MDAzZV9fbHJ1dmVjLCBzYyk7XFxubW0vdm1zY2FuLmMtNTM1NC1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjIwLjk1NzgxMjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjgzOTg1MTM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBodW5jaCBpcyB0byBsb29rIGF0IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGNncm91cHMgYW5kIG11bHRpLWdlbiBMUlUuIFRoZSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBoYXMgbGVkIG1lIHRvIGV2YWx1YXRlIHNldmVyYWwgZnVuY3Rpb25zLiBJIG5lZWQgdG8gcGlucG9pbnQgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nIOKAkyB3aGljaCBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgYW5kIGhhdmUgZ29vZCBjb3ZlcmFnZS5cblxuRmlyc3QsIEkgY29uc2lkZXJlZCBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAsIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgLCBhbmQgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmAuICBUaGVzZSBzdG9vZCBvdXQuIERpdmluZyBkZWVwZXIsIEkgaWRlbnRpZmllZCB0aGVzZSBrZXkgXCJGb2N1c1N5bWJvbHNcIjpcblxuKiAgIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgOiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBpdCB3YXMgYWRkZWQgYnkgdGhlIHBhdGNoIGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBpcyBjYWxsZWQgYnkgYHNocmlua19vbmVgLiBJdCdzIGEgZGlyZWN0IGNvbm5lY3Rpb24gdG8gdGhlIGNvZGUgSSdtIGludGVyZXN0ZWQgaW4uXG4qICAgYHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbmA6ICBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQncyBtb2RpZmllZCBpbmRpcmVjdGx5LCBhZmZlY3RpbmcgdGhlIGBlZmZlY3RpdmVfcHJvdGVjdGlvbmAgY2FsY3VsYXRpb24sIGFuZCBpcywgaXRzZWxmLCBjYWxsZWQgYnkgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAgYW5kIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYC5cbiogICBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbmA6ICBJdCdzIGEgZGlyZWN0IGNhbGxlciBvZiBgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uYCwgbWFraW5nIGl0IGFub3RoZXIgY2VudHJhbCBwb2ludC5cbiogICBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAsIGBzaHJpbmtfbWFueWAsIGBzaHJpbmtfb25lYDogIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCBtdWx0aWdlbiBMUlUgcmVjbGFpbSBmdW5jdGlvbnMgYW5kIGFyZSBvYnZpb3VzbHkgcmVsZXZhbnQuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZ29vZCBjYW5kaWRhdGVzLiBBcmUgdGhleSB1YmlxdWl0b3VzPyBObywgdGhleSdyZSBub3QuIFRoZXkgYXJlIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGNncm91cCBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIG11bHRpLWdlbiBMUlUuICBUaGlzIG1ha2VzIHRoZW0gbW9yZSB0YXJnZXRlZCBhbmQgdGhlcmVmb3JlIHBvdGVudGlhbGx5IG1vcmUgZnJ1aXRmdWwgZm9yIGZ1enppbmcuXG5cbk5leHQsIHRoZSBjb25maWdzOiAgYE1FTUNHYCBpcyByZXF1aXJlZCBmb3IgdGhlIGNncm91cCBtZW1vcnkgY29udHJvbGxlciAoYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCwgYG1tL21lbWNvbnRyb2wuY2AsIGBtbS9wYWdlX2NvdW50ZXIuY2ApLCBhbmQgYExSVV9HRU5gIGlzIG5lZWRlZCBmb3IgdGhlIG11bHRpLWdlbiBMUlUgKGBtbS92bXNjYW4uY2AsIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgKS4gIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzeXN0ZW0gaXMgcHJvcGVybHkgY29uZmlndXJlZCB0byBhY3R1YWxseSBfdXNlXyB0aGVzZSBmZWF0dXJlcy5cblxuQSBmZXcgbW9yZSBjb25maWd1cmF0aW9ucyBuZWVkIGV4YW1pbmF0aW9uOiBgQ09ORklHX0xSVV9HRU5gIGRlcGVuZHMgb24gYE1NVWAsIGA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQYC4gV2hpbGUgdGhhdCBpcyBuZWNlc3NhcnkgdG8gaGF2ZSBgQ09ORklHX0xSVV9HRU5gIGVuYWJsZWQsIGl0IGlzIG5vdCBzb21ldGhpbmcgdGhhdCB3b3VsZCBhZmZlY3QgZnV6emluZy4gYENPTkZJR19NRU1DR2AgaXMgdW5kZXIgYGluaXQvS2NvbmZpZ2AuIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBtaWdodCBiZSBoZWxwZnVsIHRvIG1ha2Ugc3VyZSB0aGF0IExSVVxcX0dFTiBpcyBhY3RpdmUsIGJ1dCB0aGVzZSBhcmUgc2Vjb25kYXJ5IHRvIHRoZSBjb21waWxhdGlvbiBjb25maWcgZGVwZW5kZW5jaWVzLlxuXG5IZXJlJ3MgbXkgc3VtbWFyeTogIHRoaXMgaXMgXCJXb3J0aEZ1enppbmdcIiBiZWNhdXNlIHRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjZ3JvdXAgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbiBsb2dpYyBpbiBgbW0vcGFnZV9jb3VudGVyLmNgLCBhZGRpbmcgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpYCBpbiBgbW0vbWVtY29udHJvbC5jYCBhbmQgaW50ZWdyYXRpbmcgaXQgaW50byBtdWx0aS1nZW4gTFJVIHBhZ2UgcmVjbGFpbSBpbiBgbW0vdm1zY2FuLmNgLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhcmUgZnVsbHkgcmVhY2hhYmxlLiAgTXkga2V5IEZvY3VzU3ltYm9scyBhcmUgYG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aGAsIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLCBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbmAsIGFuZCBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAuICBJJ2xsIG5lZWQgdG8gZW5hYmxlIGBNRU1DR2AsIGBMUlVfR0VOYCwgYW5kIHBvdGVudGlhbGx5IGBMUlVfR0VOX0VOQUJMRURgIGZvciB0aGUgZnV6emluZyB0byBiZSBlZmZlY3RpdmUuXG5cbkxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIxMCwiT3V0cHV0VG9rZW5zIjoxNzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MjcuNzk3NjY2NjkzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MzMyOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoXCIsXG4gICAgXCJwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25cIixcbiAgICBcIm1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25cIixcbiAgICBcImxydV9nZW5fc2hyaW5rX25vZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGJ5IHVwZGF0aW5nIGVmZmVjdGl2ZSBwcm90ZWN0aW9uIGNhbGN1bGF0aW9ucyBpbiBtbS9wYWdlX2NvdW50ZXIuYyB0byBwcmV2ZW50IGFyaXRobWV0aWMgb3ZlcmZsb3cgYW5kIGRpdmlzaW9uIGlzc3VlcywgaW50cm9kdWNpbmcgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKCkgaW4gbW0vbWVtY29udHJvbC5jLCBhbmQgaG9va2luZyBpdCBpbnRvIHRoZSBNdWx0aS1HZW4gTFJVIHBhZ2UgcmVjbGFpbSBwYXRoIGluIG1tL3Ztc2Nhbi5jLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbWVtb3J5IHJlY2xhaW0gYW5kIGNncm91cCBhY2NvdW50aW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhcIixcbiAgICBcInBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvblwiLFxuICAgIFwibWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvblwiLFxuICAgIFwibHJ1X2dlbl9zaHJpbmtfbm9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYnkgdXBkYXRpbmcgZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb25zIGluIG1tL3BhZ2VfY291bnRlci5jIHRvIHByZXZlbnQgYXJpdGhtZXRpYyBvdmVyZmxvdyBhbmQgZGl2aXNpb24gaXNzdWVzLCBpbnRyb2R1Y2luZyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSBpbiBtbS9tZW1jb250cm9sLmMsIGFuZCBob29raW5nIGl0IGludG8gdGhlIE11bHRpLUdlbiBMUlUgcGFnZSByZWNsYWltIHBhdGggaW4gbW0vdm1zY2FuLmMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBtZW1vcnkgcmVjbGFpbSBhbmQgY2dyb3VwIGFjY291bnRpbmcgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjI3Ljk1NTAxMDIwOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMDk5MjY3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzo0ODoyNy45NTU3MDAwODhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxODIwOTIzMjM4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGludGVnZXIgb3ZlcmZsb3cgLyBhcml0aG1ldGljIGhhbmRsaW5nIGluIHBhZ2VfY291bnRlciBlZmZlY3RpdmUgcHJvdGVjdGlvbiBjYWxjdWxhdGlvbiAobW0vcGFnZV9jb3VudGVyLmMpIGFuZCBpbnRyb2R1Y2VzIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aCgpIHRvIGNhbGN1bGF0ZSBhbmNlc3RvciBtZW1vcnkgY2dyb3VwIHByb3RlY3Rpb24gYWxvbmcgdGhlIGhpZXJhcmNoeSBwYXRoIGR1cmluZyBNR0xSVSByZWNsYWltIChtbS9tZW1jb250cm9sLmMsIG1tL3Ztc2Nhbi5jKS5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3Nlcywgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IHRyYW5zZmVycy4gVGhlIGJ1Z3MgYWRkcmVzc2VkIGFuZCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGluIHRoaXMgY29kZSBwYXRoIChzdWNoIGFzIGRpdmlzaW9uIGVycm9ycywgaGllcmFyY2h5IHRyYXZlcnNhbCBidWdzLCBvciBwb2ludGVyIGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1aWxkIGNoZWNrcyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2U0ZmZkYThjYTY3Mzg1ZDRlNGU0NWE3OTVlNTQ0NTllZDI5NDlkN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDc6NDc6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA0ZjcyMDc5MWEzMWM5Li40NmJmNzI0Y2FlN2FmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTkyMSw2ICsxOTIxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gfVxuICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19MUlVfR0VOKVxuK3ZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuK1x0XHRcdFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3tcbit9XG4rI2VuZGlmXG4rXG4gI2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfWlNXQVApXG4gYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpO1xuIHZvaWQgb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAzMDcyMDMzMDFhMmE1Li4xNDYwY2JhNTM1ODhlIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC01MjUzLDYgKzUyNTMsNTEgQEAgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuIFx0cGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKFx1MDAyNnJvb3QtXHUwMDNlbWVtb3J5LCBcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19MUlVfR0VOXG4rLyoqXG4rICogbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoIC0gY29tcHV0ZSBwcm90ZWN0aW9uIGFsb25nIGEgcGF0aFxuKyAqIEByb290OiB0aGUgdG9wIGFuY2VzdG9yIG9mIHRoZSBzdWItdHJlZSBiZWluZyBjaGVja2VkIChOVUxMIGZvciByb290X21lbV9jZ3JvdXApXG4rICogQG1lbWNnOiB0aGUgdGFyZ2V0IG1lbW9yeSBjZ3JvdXBcbisgKlxuKyAqIFdhbGsgdGhlIGFuY2VzdG9yIHBhdGggZnJvbSBAcm9vdCBkb3duIHRvIEBtZW1jZyBhbmQgY29tcHV0ZSB0aGUgZWZmZWN0aXZlXG4rICogcHJvdGVjdGlvbiBhdCBlYWNoIGxldmVsLiAgVGhpcyBpcyBzYWZlIGZvciBpc29sYXRlZCBxdWVyaWVzIGJlY2F1c2UgaXRcbisgKiBlbnN1cmVzIHBhcmVudHMgYXJlIGNvbXB1dGVkIGJlZm9yZSBjaGlsZHJlbi5cbisgKi9cbit2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4re1xuK1x0Ym9vbCByZWN1cnNpdmVfcHJvdGVjdGlvbiA9XG4rXHRcdGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9NRU1PUllfUkVDVVJTSVZFX1BST1Q7XG4rXHRzdHJ1Y3QgY2dyb3VwICpjZztcbitcdGludCByb290X2xldmVsLCBpO1xuK1xuK1x0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKCFyb290KVxuK1x0XHRyb290ID0gcm9vdF9tZW1fY2dyb3VwO1xuK1xuK1x0aWYgKG1lbWNnID09IHJvb3QpXG4rXHRcdHJldHVybjtcbitcbitcdHJvb3RfbGV2ZWwgPSByb290LVx1MDAzZWNzcy5jZ3JvdXAtXHUwMDNlbGV2ZWw7XG4rXHRjZyA9IG1lbWNnLVx1MDAzZWNzcy5jZ3JvdXA7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRmb3IgKGkgPSByb290X2xldmVsICsgMTsgaSBcdTAwM2M9IGNnLVx1MDAzZWxldmVsOyBpKyspIHtcbitcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKmN1cjtcbitcbitcdFx0Y3VyID0gbWVtX2Nncm91cF9mcm9tX2NzcyhjZ3JvdXBfY3NzKGNnLVx1MDAzZWFuY2VzdG9yc1tpXSxcbitcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cykpO1xuK1x0XHRpZiAoY3VyKVxuK1x0XHRcdHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihcdTAwMjZyb290LVx1MDAzZW1lbW9yeSxcbitcdFx0XHRcdFx0XHRcdCAgXHUwMDI2Y3VyLVx1MDAzZW1lbW9yeSxcbitcdFx0XHRcdFx0XHRcdCAgcmVjdXJzaXZlX3Byb3RlY3Rpb24pO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rfVxuKyNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuK1xuIHN0YXRpYyBpbnQgY2hhcmdlX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRnZnBfdCBnZnApXG4ge1xuZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmNcbmluZGV4IDQ1MDU0M2Y0YjMxOGIuLjk4MzIyODAzOTQxYTcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2NvdW50ZXIuY1xuKysrIGIvbW0vcGFnZV9jb3VudGVyLmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VfY291bnRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21hdGg2NC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbkBAIC0zNzYsNyArMzc3LDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZmZWN0aXZlX3Byb3RlY3Rpb24odW5zaWduZWQgbG9uZyB1c2FnZSxcbiBcdCAqIG90aGVyd2lzZSBnZXQgYSBzbWFsbGVyIGNodW5rIHRoYW4gd2hhdCB0aGV5IGNsYWltZWQuXG4gXHQgKi9cbiBcdGlmIChzaWJsaW5nc19wcm90ZWN0ZWQgXHUwMDNlIHBhcmVudF9lZmZlY3RpdmUpXG4tXHRcdHJldHVybiBwcm90ZWN0ZWQgKiBwYXJlbnRfZWZmZWN0aXZlIC8gc2libGluZ3NfcHJvdGVjdGVkO1xuK1x0XHRyZXR1cm4gbXVsX3U2NF91NjRfZGl2X3U2NChwcm90ZWN0ZWQsIHBhcmVudF9lZmZlY3RpdmUsXG4rXHRcdFx0XHRcdCAgIHNpYmxpbmdzX3Byb3RlY3RlZCk7XG4gXG4gXHQvKlxuIFx0ICogT2ssIHV0aWxpemVkIHByb3RlY3Rpb24gb2YgYWxsIGNoaWxkcmVuIGlzIHdpdGhpbiB3aGF0IHRoZVxuQEAgLTQxNywxMyArNDE5LDIwIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVmZmVjdGl2ZV9wcm90ZWN0aW9uKHVuc2lnbmVkIGxvbmcgdXNhZ2UsXG4gXHRpZiAocGFyZW50X2VmZmVjdGl2ZSBcdTAwM2Ugc2libGluZ3NfcHJvdGVjdGVkIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHBhcmVudF91c2FnZSBcdTAwM2Ugc2libGluZ3NfcHJvdGVjdGVkIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHVzYWdlIFx1MDAzZSBwcm90ZWN0ZWQpIHtcbi1cdFx0dW5zaWduZWQgbG9uZyB1bmNsYWltZWQ7XG4rXHRcdHVuc2lnbmVkIGxvbmcgcGFyZW50X3VuY2xhaW1lZCwgcGFyZW50X3VucHJvdGVjdGVkLCB1bnByb3RlY3RlZDtcbiBcbi1cdFx0dW5jbGFpbWVkID0gcGFyZW50X2VmZmVjdGl2ZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDtcbi1cdFx0dW5jbGFpbWVkICo9IHVzYWdlIC0gcHJvdGVjdGVkO1xuLVx0XHR1bmNsYWltZWQgLz0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuK1x0XHRwYXJlbnRfdW5jbGFpbWVkID0gcGFyZW50X2VmZmVjdGl2ZSAtIHNpYmxpbmdzX3Byb3RlY3RlZDtcbitcdFx0cGFyZW50X3VucHJvdGVjdGVkID0gcGFyZW50X3VzYWdlIC0gc2libGluZ3NfcHJvdGVjdGVkO1xuIFxuLVx0XHRlcCArPSB1bmNsYWltZWQ7XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSB1c2FnZXMgYXJlbid0IHJlYWQgYXRvbWljYWxseSwgc28gYSBjaGlsZCBjYW4gdHJhbnNpZW50bHlcbitcdFx0ICogYXBwZWFyIHRvIHVzZSBtb3JlIHRoYW4gaXRzIHBhcmVudCwgbWFraW5nIHRoZSByYXRpbyBleGNlZWQgMVxuK1x0XHQgKiBhbmQgdGhlIHF1b3RpZW50IG92ZXJmbG93IDY0IGJpdHMgKCNERSBvbiB4ODYpLiAgQ2FwIGl0LlxuK1x0XHQgKi9cbitcdFx0dW5wcm90ZWN0ZWQgPSBtaW4odXNhZ2UgLSBwcm90ZWN0ZWQsIHBhcmVudF91bnByb3RlY3RlZCk7XG4rXG4rXHRcdGVwICs9IG11bF91NjRfdTY0X2Rpdl91NjQocGFyZW50X3VuY2xhaW1lZCwgdW5wcm90ZWN0ZWQsXG4rXHRcdFx0XHRcdCAgcGFyZW50X3VucHJvdGVjdGVkKTtcbiBcdH1cbiBcbiBcdHJldHVybiBlcDtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA0MGQzZjFiNDhhNzRjLi5mZDU1MTVmZDUxNDJkIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNTE5Myw3ICs1MTkzLDEzIEBAIHN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4gXG4tXHQvKiBscnVfZ2VuX2FnZV9ub2RlKCkgY2FsbGVkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKSAqL1xuK1x0LypcbitcdCAqIEZvciBrc3dhcGQsIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKSBoYXMgYWxyZWFkeVxuK1x0ICogYmVlbiBjYWxsZWQgZHVyaW5nIHRoZSB0b3AtZG93biBjZ3JvdXAgdHJhdmVyc2FsLlxuK1x0ICovXG4rXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpXG4rXHRcdG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb25fcGF0aChOVUxMLCBtZW1jZyk7XG4rXG4gXHRpZiAobWVtX2Nncm91cF9iZWxvd19taW4oTlVMTCwgbWVtY2cpKVxuIFx0XHRyZXR1cm4gTUVNQ0dfTFJVX1lPVU5HO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MjcuOTU1NzAxNjc4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg1MjcxOTM2OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBBc3Nlc3NtZW50IGZvciBUaGlzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIGNoYW5nZXMgdG91Y2ggYG1lbWNvbnRyb2wuaGAsIGBtZW1jb250cm9sLmNgLCBgcGFnZV9jb3VudGVyLmNgLCBhbmQgYHZtc2Nhbi5jYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBwcmltYXJpbHkgZGVhbGluZyB3aXRoOlxuXG4qICAgQXJpdGhtZXRpYyBvdmVyZmxvdyBmaXhlcyBpbiBgcGFnZV9jb3VudGVyLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBlZmZlY3RpdmVfcHJvdGVjdGlvbmAgY2FsY3VsYXRpb24uIFRoaXMgdXNlcyBgbXVsX3U2NF91NjRfZGl2X3U2NGAgYW5kIGBtaW5gIHRvIGF2b2lkIHRob3NlIGlzc3Vlcy5cbiogICBUaGUgaW50cm9kdWN0aW9uIG9mIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGhgLCBhIGhlbHBlciBmdW5jdGlvbiB0byB0cmF2ZXJzZSB0aGUgbWVtb3J5IGNncm91cCBoaWVyYXJjaHkgKGFuY2VzdG9ycykgYW5kIGNhbGN1bGF0ZSBwcm90ZWN0aW9uIHZhbHVlcy4gVGhpcyBpcyByZWxldmFudCB0byBNR0xSVSwgZ2l2ZW4gdGhlIGBDT05GSUdfTFJVX0dFTmAgZGVwZW5kZW5jeS5cbiogICBUaGlzIG5ldyBoZWxwZXIgaXMgY2FsbGVkIHdpdGhpbiBgc2hyaW5rX29uZWAgaW4gYHZtc2Nhbi5jYCwgbGlrZWx5IGZvciBkaXJlY3QgcmVjbGFpbWVycy5cblxuVGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uOiBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gSSBuZWVkIHRvIGFwcGx5IHRoZSBLTVNBTiBjcml0ZXJpYS4gUmVtZW1iZXIsIEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgKHN0YWNrLCBoZWFwLCBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuIFRoZSBtYWluIGNyaXRlcmlhIEknbSBsb29raW5nIGZvciBhcmU6XG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZS5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gIEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuXG40LiAgQm91bmRzIGNoZWNrcyBvciBsZW5ndGggbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzLlxuXG5MZXQncyBnbyB0aHJvdWdoIHRoZSBwYXRjaCwgbGluZSBieSBsaW5lLCBhZ2FpbnN0IHRoZXNlIGNyaXRlcmlhOlxuXG4qICAgKipDcml0ZXJpb24gMSAoVXNlcnNwYWNlIEV4cG9zdXJlKToqKiBOb3RoaW5nIGhlcmUgc2VuZHMga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlLCBzbyB3ZSdyZSBnb29kIG9uIHRoYXQgZnJvbnQuXG4qICAgKipDcml0ZXJpb24gMiAoVW5pbml0aWFsaXplZCBWYXJpYWJsZXMgaW4gTG9naWMpOioqIE5vdywgbGV0J3MgZGlnIGludG8gdGhhdCBgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbl9wYXRoYCBhbmQgYGVmZmVjdGl2ZV9wcm90ZWN0aW9uYC4gSSdtIHNlZWluZyB2YXJpYWJsZXMgbGlrZSBgcmVjdXJzaXZlX3Byb3RlY3Rpb25gLCBgY2dgLCBgcm9vdF9sZXZlbGAsIGBpYCwgYW5kIGBjdXJgLiBCdXQgSSdtIGNoZWNraW5nLCBhbmQgaXQgc2VlbXMgYWxsIHRoZXNlIHZhcmlhYmxlcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZXkncmUgdXNlZC4gRXZlcnl0aGluZyBsb29rcyBzYWZlIGhlcmUhIEluIGBlZmZlY3RpdmVfcHJvdGVjdGlvbmAsIHZhcmlhYmxlcyBsaWtlIGBwYXJlbnRfdW5jbGFpbWVkYCwgYHBhcmVudF91bnByb3RlY3RlZGAsIGFuZCBgdW5wcm90ZWN0ZWRgIGFyZSBhbGwganVzdCBkaXJlY3QgcmVzdWx0cyBvZiBhcml0aG1ldGljIG9wZXJhdGlvbnMsIHNvIHRoZXJlJ3Mgbm8gcmlzay5cbiogICAqKkNyaXRlcmlvbiAzIChDb21wbGV4IERhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uKToqKiBObyBuZXcgYWxsb2NhdGlvbnMgYXJlIGluIHRoaXMgcGF0Y2gsIHNvIHdlIGNhbiBjaGVjayB0aGlzIGNyaXRlcmlvbiBvZmYuXG4qICAgKipDcml0ZXJpb24gNCAoVW5pbml0aWFsaXplZCBCdWZmZXIgQWNjZXNzKToqKiBUaGlzIHBhdGNoIGRvZXNuJ3QgbG9vayBsaWtlIGl0J3MgbWVzc2luZyB3aXRoIGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLlxuXG5TbywgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gZml4aW5nIGFyaXRobWV0aWMgaXNzdWVzIGluIG1lbW9yeSBjZ3JvdXAgcHJvdGVjdGlvbiBhbmQgY29ycmVjdGx5IGNhbGN1bGF0aW5nIHZhbHVlcywgZXNwZWNpYWxseSBmb3IgTUdMUlUuIFdlJ3ZlIGFzc2Vzc2VkIHRoYXQgaXQgZG9lc24ndCBzZWVtIHRvIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYmFzZWQgb24gdGhlc2UgY2hhbmdlcyB0aGVtc2VsdmVzLiBXZSBuZWVkIHRvIGNoZWNrIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gIG9yIGFueXRoaW5nIGVsc2UgdGhpcyBwYXRjaCBoYXMgdG91Y2hlZCwgYnV0IGJhc2VkIG9uIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQsIEknZCBzYXkgbm8gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbmVjZXNzYXJ5ICpmb3IgdGhpcyBwYXRjaCouIFdlJ3JlIHByb2JhYmx5IGdvb2Qgd2l0aCB0aGUgZXhpc3RpbmcgY292ZXJhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzo0ODozNi40ODI4OTkwM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYzNjY3NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfY291bnRlci5jPTM1OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBlZmZlY3RpdmVfcHJvdGVjdGlvbih1bnNpZ25lZCBsb25nIHVzYWdlLFxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmMtNDUyLSAqL1xcbm1tL3BhZ2VfY291bnRlci5jOjQ1Mzp2b2lkIHBhZ2VfY291bnRlcl9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpyb290LFxcbm1tL3BhZ2VfY291bnRlci5jLTQ1NC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MzYuNTc5MjcyMjk1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MzAyMDA3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gUGFnZSBDb3VudGVyIFByb3RlY3Rpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBtbS9wYWdlX2NvdW50ZXIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5J3JlIGhhbmRsaW5nIHByb3RlY3Rpb24gd2l0aGluIGBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb25gLiBUaGlzIGFyZWEgaXMgY3J1Y2lhbCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmVzb3VyY2UgYWNjb3VudGluZywgYW5kIGFueSBwb3RlbnRpYWwgZmxhd3MgaGVyZSBjb3VsZCBoYXZlIHNlcmlvdXMgcmFtaWZpY2F0aW9ucy4gSSdtIGhvcGluZyB0byBzZWUgYSBjbGVhbiwgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIHRoYXQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBpc3N1ZXMgcmVsYXRlZCB0byBjb25jdXJyZW50IGFjY2Vzcy4gTGV0J3Mgc2VlIGhvdyB0aGV5J3ZlIGFwcHJvYWNoZWQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQzMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjM4LjMwOTQ3NjUyN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9jb3VudGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDUwOlxcdCAqIFdBUk5JTkc6IFRoaXMgZnVuY3Rpb24gaXMgbm90IHN0YXRlbGVzcyEgSXQgY2FuIG9ubHkgYmUgdXNlZCBhcyBwYXJ0XFxuIDQ1MTpcXHQgKiAgICAgICAgICBvZiBhIHRvcC1kb3duIHRyZWUgaXRlcmF0aW9uLCBub3QgZm9yIGlzb2xhdGVkIHF1ZXJpZXMuXFxuIDQ1MjpcXHQgKi9cXG4gNDUzOlxcdHZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXFxuIDQ1NDpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcXG4gNDU1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBib29sIHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKVxcbiA0NTY6XFx0e1xcbiA0NTc6XFx0XFx0dW5zaWduZWQgbG9uZyB1c2FnZSwgcGFyZW50X3VzYWdlO1xcbiA0NTg6XFx0XFx0c3RydWN0IHBhZ2VfY291bnRlciAqcGFyZW50ID0gY291bnRlci1cXHUwMDNlcGFyZW50O1xcbiA0NTk6XFx0XFxuIDQ2MDpcXHRcXHQvKlxcbiA0NjE6XFx0XFx0ICogRWZmZWN0aXZlIHZhbHVlcyBvZiB0aGUgcmVjbGFpbSB0YXJnZXRzIGFyZSBpZ25vcmVkIHNvIHRoZXlcXG4gNDYyOlxcdFxcdCAqIGNhbiBiZSBzdGFsZS4gSGF2ZSBhIGxvb2sgYXQgbWVtX2Nncm91cF9wcm90ZWN0aW9uIGZvciBtb3JlXFxuIDQ2MzpcXHRcXHQgKiBkZXRhaWxzLlxcbiA0NjQ6XFx0XFx0ICogVE9ETzogY2FsY3VsYXRpb24gc2hvdWxkIGJlIG1vcmUgcm9idXN0IHNvIHRoYXQgd2UgZG8gbm90IG5lZWRcXG4gNDY1OlxcdFxcdCAqIHRoYXQgc3BlY2lhbCBjYXNpbmcuXFxuIDQ2NjpcXHRcXHQgKi9cXG4gNDY3OlxcdFxcdGlmIChyb290ID09IGNvdW50ZXIpXFxuIDQ2ODpcXHRcXHRcXHRyZXR1cm47XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdFxcdHVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQoY291bnRlcik7XFxuIDQ3MTpcXHRcXHRpZiAoIXVzYWdlKVxcbiA0NzI6XFx0XFx0XFx0cmV0dXJuO1xcbiA0NzM6XFx0XFxuIDQ3NDpcXHRcXHRpZiAocGFyZW50ID09IHJvb3QpIHtcXG4gNDc1OlxcdFxcdFxcdGNvdW50ZXItXFx1MDAzZWVtaW4gPSBSRUFEX09OQ0UoY291bnRlci1cXHUwMDNlbWluKTtcXG4gNDc2OlxcdFxcdFxcdGNvdW50ZXItXFx1MDAzZWVsb3cgPSBSRUFEX09OQ0UoY291bnRlci1cXHUwMDNlbG93KTtcXG4gNDc3OlxcdFxcdFxcdHJldHVybjtcXG4gNDc4OlxcdFxcdH1cXG4gNDc5OlxcdFxcbiA0ODA6XFx0XFx0cGFyZW50X3VzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQocGFyZW50KTtcXG4gNDgxOlxcdFxcbiA0ODI6XFx0XFx0V1JJVEVfT05DRShjb3VudGVyLVxcdTAwM2VlbWluLCBlZmZlY3RpdmVfcHJvdGVjdGlvbih1c2FnZSwgcGFyZW50X3VzYWdlLFxcbiA0ODM6XFx0XFx0XFx0XFx0UkVBRF9PTkNFKGNvdW50ZXItXFx1MDAzZW1pbiksXFxuIDQ4NDpcXHRcXHRcXHRcXHRSRUFEX09OQ0UocGFyZW50LVxcdTAwM2VlbWluKSxcXG4gNDg1OlxcdFxcdFxcdFxcdGF0b21pY19sb25nX3JlYWQoXFx1MDAyNnBhcmVudC1cXHUwMDNlY2hpbGRyZW5fbWluX3VzYWdlKSxcXG4gNDg2OlxcdFxcdFxcdFxcdHJlY3Vyc2l2ZV9wcm90ZWN0aW9uKSk7XFxuIDQ4NzpcXHRcXG4gNDg4OlxcdFxcdFdSSVRFX09OQ0UoY291bnRlci1cXHUwMDNlZWxvdywgZWZmZWN0aXZlX3Byb3RlY3Rpb24odXNhZ2UsIHBhcmVudF91c2FnZSxcXG4gNDg5OlxcdFxcdFxcdFxcdFJFQURfT05DRShjb3VudGVyLVxcdTAwM2Vsb3cpLFxcbiA0OTA6XFx0XFx0XFx0XFx0UkVBRF9PTkNFKHBhcmVudC1cXHUwMDNlZWxvdyksXFxuIDQ5MTpcXHRcXHRcXHRcXHRhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZwYXJlbnQtXFx1MDAzZWNoaWxkcmVuX2xvd191c2FnZSksXFxuIDQ5MjpcXHRcXHRcXHRcXHRyZWN1cnNpdmVfcHJvdGVjdGlvbikpO1xcbiA0OTM6XFx0fVxcbiA0OTQ6XFx0I2VuZGlmIC8qIENPTkZJR19NRU1DRyB8fCBDT05GSUdfQ0dST1VQX0RNRU0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MzguMzA5NjQ0NjU3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4NTUyNjc0MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIHByZXR0eSBjbGVhbi4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBrbm93biBhcml0aG1ldGljIGlzc3VlIGluIGBlZmZlY3RpdmVfcHJvdGVjdGlvbigpYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBwcmV2ZW50aW5nIDY0LWJpdCBpbnRlZ2VyIG92ZXJmbG93IGFuZCBkaXZpc2lvbiBlcnJvcnMsIHdoaWNoIG1ha2VzIHNlbnNlLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgY29yZSBjYWxjdWxhdGlvbiwgc28gaXQncyBnb29kIHRvIGJlIG1ldGljdWxvdXMgaGVyZS4gVGhlIGFkZGl0aW9uIG9mIGBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKWAgbG9va3MgbGlrZSBhIG5lY2Vzc2FyeSBjb21wYW5pb24gZnVuY3Rpb24gdG8gZW5zdXJlIGFjY3VyYXRlIGNhbGN1bGF0aW9ucyBkdXJpbmcgdGhlIE1HTFJVLWRyaXZlbiBgc2hyaW5rX29uZSgpYCBjYWxscy4gRW5zdXJpbmcgdGhpcyB0b3AtZG93biBjYWxjdWxhdGlvbiBpbiB0aGUgYW5jZXN0b3IgcGF0aCBpcyBlc3NlbnRpYWwgZm9yIE1HTFJVJ3MgY29uc2lzdGVuY3kuXG5cbkRpZ2dpbmcgZGVlcGVyLCB0aGVyZSdzIG5vdGhpbmcgY29uY2VybmluZyBqdW1waW5nIG91dCBhdCBtZSBpbiB0ZXJtcyBvZiBtZW1vcnkgc2FmZXR5LiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdXNlci1zcGFjZSBjb3BpZXMsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9idWZmZXJzLiBUaGUgY29kZSBsb29rcyBzb3VuZCBpbiB0aGF0IHJlc3BlY3QuIEtBU0FOIGFuZCB0aGUgc3RhbmRhcmQgc2FuaXRpemVycyBhcmUgdGhlIHJpZ2h0IHRvb2xzIGZvciB0aGUgam9iIGhlcmU7IG5vIG5lZWQgdG8gYnJpbmcgaW4gS01TQU4ncyBoZWF2aWVyIGFydGlsbGVyeS4gSXQgYWxsIHNlZW1zIHByZXR0eSBsb3ctcmlzayBmcm9tIGEgbWVtb3J5LXNhZmV0eSBwZXJzcGVjdGl2ZS5cblxuVGhlcmVmb3JlLCBgc2V0LXJlc3VsdHNgIHdpdGggYE5lZWRzS01TQU49ZmFsc2VgIGFuZCBhIGNvbmNpc2UgYnV0IGNsZWFyIGV4cGxhbmF0aW9uIG9mIHRoZSBvdmVyZmxvdy9kaXZpc2lvbiBmaXggYW5kIHRoZSBNR0xSVSBwcm90ZWN0aW9uIHBhdGggYWRqdXN0bWVudCBzaG91bGQgYmUgdGhlIHdheSB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI1NywiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNzo0ODo0Ni4xNjQ5MTUwMDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpbnRlZ2VyIG92ZXJmbG93IC8gYXJpdGhtZXRpYyBoYW5kbGluZyBpbiBwYWdlX2NvdW50ZXIgZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb24gKG1tL3BhZ2VfY291bnRlci5jKSBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSB0byBjYWxjdWxhdGUgYW5jZXN0b3IgbWVtb3J5IGNncm91cCBwcm90ZWN0aW9uIGFsb25nIHRoZSBoaWVyYXJjaHkgcGF0aCBkdXJpbmcgTUdMUlUgcmVjbGFpbSAobW0vbWVtY29udHJvbC5jLCBtbS92bXNjYW4uYykuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSB0cmFuc2ZlcnMuIFRoZSBidWdzIGFkZHJlc3NlZCBhbmQgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBpbiB0aGlzIGNvZGUgcGF0aCAoc3VjaCBhcyBkaXZpc2lvbiBlcnJvcnMsIGhpZXJhcmNoeSB0cmF2ZXJzYWwgYnVncywgb3IgcG9pbnRlciBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWlsZCBjaGVja3MgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBpbnRlZ2VyIG92ZXJmbG93IC8gYXJpdGhtZXRpYyBoYW5kbGluZyBpbiBwYWdlX2NvdW50ZXIgZWZmZWN0aXZlIHByb3RlY3Rpb24gY2FsY3VsYXRpb24gKG1tL3BhZ2VfY291bnRlci5jKSBhbmQgaW50cm9kdWNlcyBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uX3BhdGgoKSB0byBjYWxjdWxhdGUgYW5jZXN0b3IgbWVtb3J5IGNncm91cCBwcm90ZWN0aW9uIGFsb25nIHRoZSBoaWVyYXJjaHkgcGF0aCBkdXJpbmcgTUdMUlUgcmVjbGFpbSAobW0vbWVtY29udHJvbC5jLCBtbS92bXNjYW4uYykuXFxuXFxuVGhlc2UgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSB0cmFuc2ZlcnMuIFRoZSBidWdzIGFkZHJlc3NlZCBhbmQgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBpbiB0aGlzIGNvZGUgcGF0aCAoc3VjaCBhcyBkaXZpc2lvbiBlcnJvcnMsIGhpZXJhcmNoeSB0cmF2ZXJzYWwgYnVncywgb3IgcG9pbnRlciBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWlsZCBjaGVja3MgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow99jqz[1] Phase: Succeeded StartedAt: 2026-09-07 07:48:58 +0000 UTC FinishedAt: 2026-09-07 07:48:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 07:48:58 +0000 UTC FinishedAt: 2026-09-07 07:48:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2] Phase: Succeeded StartedAt: 2026-09-07 07:48:58 +0000 UTC FinishedAt: 2026-09-07 11:31:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 07:48:58 +0000 UTC FinishedAt: 2026-09-07 11:31:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 07:48:58 +0000 UTC FinishedAt: 2026-09-07 07:49:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 07:48:58 +0000 UTC FinishedAt: 2026-09-07 07:49:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow99jqz/series-workflow99jqz-convert-artifact-2751396270/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 07:49:09 +0000 UTC FinishedAt: 2026-09-07 08:08:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 07:49:09 +0000 UTC FinishedAt: 2026-09-07 08:08:33 +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:*791bad83-7798-4373-bc72-d00a2051d147,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-workflow99jqz/series-workflow99jqz-convert-artifact-2751396270/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": "acf71018-16f3-4c29-9c77-6ecd1c7be27d", "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-workflow99jqz/series-workflow99jqz-build-action-84745492/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 07:49:09 +0000 UTC FinishedAt: 2026-09-07 08:08:22 +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:*791bad83-7798-4373-bc72-d00a2051d147,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-workflow99jqz/series-workflow99jqz-convert-artifact-2751396270/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": "acf71018-16f3-4c29-9c77-6ecd1c7be27d", "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-workflow99jqz/series-workflow99jqz-build-action-84745492/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 08:08:33 +0000 UTC FinishedAt: 2026-09-07 08:08:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 08:08:33 +0000 UTC FinishedAt: 2026-09-07 08:08:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 08:08:33 +0000 UTC FinishedAt: 2026-09-07 08:08:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 08:08:33 +0000 UTC FinishedAt: 2026-09-07 08:08:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow99jqz/series-workflow99jqz-convert-artifact-1441937569/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 08:08:43 +0000 UTC FinishedAt: 2026-09-07 08:10:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 08:08:43 +0000 UTC FinishedAt: 2026-09-07 08:10:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*acf71018-16f3-4c29-9c77-6ecd1c7be27d,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-workflow99jqz/series-workflow99jqz-build-action-84745492/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-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 08:10:45 +0000 UTC FinishedAt: 2026-09-07 08:10:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 08:10:45 +0000 UTC FinishedAt: 2026-09-07 08:10:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 08:10:45 +0000 UTC FinishedAt: 2026-09-07 08:26:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 08:10:45 +0000 UTC FinishedAt: 2026-09-07 08:26:48 +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:*791bad83-7798-4373-bc72-d00a2051d147,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-workflow99jqz/series-workflow99jqz-convert-artifact-1441937569/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": "20207dbc-1f60-4602-a329-370e7097a834", "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-workflow99jqz/series-workflow99jqz-build-action-3429655469/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 08:10:45 +0000 UTC FinishedAt: 2026-09-07 08:26:38 +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:*791bad83-7798-4373-bc72-d00a2051d147,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-workflow99jqz/series-workflow99jqz-convert-artifact-1441937569/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": "20207dbc-1f60-4602-a329-370e7097a834", "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-workflow99jqz/series-workflow99jqz-build-action-3429655469/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 08:26:48 +0000 UTC FinishedAt: 2026-09-07 08:26:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 08:26:48 +0000 UTC FinishedAt: 2026-09-07 08:26:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 08:26:48 +0000 UTC FinishedAt: 2026-09-07 08:28:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 08:26:48 +0000 UTC FinishedAt: 2026-09-07 08:28:32 +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:*20207dbc-1f60-4602-a329-370e7097a834,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-workflow99jqz/series-workflow99jqz-build-action-3429655469/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-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 08:28:42 +0000 UTC FinishedAt: 2026-09-07 11:31:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 08:28:42 +0000 UTC FinishedAt: 2026-09-07 11:31:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},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:*acf71018-16f3-4c29-9c77-6ecd1c7be27d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*20207dbc-1f60-4602-a329-370e7097a834,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-workflow99jqz/series-workflow99jqz-build-action-84745492/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-workflow99jqz/series-workflow99jqz-build-action-3429655469/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 08:28:42 +0000 UTC FinishedAt: 2026-09-07 08:28:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 08:28:42 +0000 UTC FinishedAt: 2026-09-07 08:28:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},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-workflow99jqz/series-workflow99jqz-convert-artifact-185567542/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 08:28:42 +0000 UTC FinishedAt: 2026-09-07 08:28:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 08:28:42 +0000 UTC FinishedAt: 2026-09-07 08:28:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 08:28:42 +0000 UTC FinishedAt: 2026-09-07 08:28:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 08:28:52 +0000 UTC FinishedAt: 2026-09-07 11:31:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99jqz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_calculate_protection_path","page_counter_calculate_protection","mem_cgroup_calculate_protection","lru_gen_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","LRU_GEN","LRU_GEN_ENABLED"],"series_id":"a2fd94e7-a138-464e-8021-bfe6abdad0f6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 08:28:52 +0000 UTC FinishedAt: 2026-09-07 11:31:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*acf71018-16f3-4c29-9c77-6ecd1c7be27d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*20207dbc-1f60-4602-a329-370e7097a834,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-workflow99jqz/series-workflow99jqz-build-action-84745492/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-workflow99jqz/series-workflow99jqz-build-action-3429655469/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-workflow99jqz/series-workflow99jqz-convert-artifact-185567542/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,}