Name: series-workflown6q5q Phase: Succeeded StartedAt: 2026-08-21 09:08:26 +0000 UTC FinishedAt: 2026-08-21 13:28:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[0] Phase: Succeeded StartedAt: 2026-08-21 09:08:26 +0000 UTC FinishedAt: 2026-08-21 09:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 09:08:26 +0000 UTC FinishedAt: 2026-08-21 09:46:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d19862d923b9a785ec27bc51c334a8d457a0dd03", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "BPF_LSM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d19862d923b9a785ec27bc51c334a8d457a0dd03", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "BPF_LSM" ], "series_id": "f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_prog_attach", "link_create", "link_update" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX0xTTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9wcm9nX2F0dGFjaCYjMzQ7LAogICAgJiMzNDtsaW5rX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtsaW5rX3VwZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBjYXBhYmlsaXR5IGFuZCBhdHRhY2ggdHlwZSBjaGVja3MgZm9yIEJQRiBwcm9ncmFtcyBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBJdCBtb3ZlcyB0aGUgYENBUF9ORVRfQURNSU5gIGNoZWNrIGZvciBgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCYCBpbnRvIGEgd3JhcHBlciBmdW5jdGlvbiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYCBhbmQgYWRkcyBhdHRhY2ggdHlwZSB2YWxpZGF0aW9uIGluIGBsaW5rX3VwZGF0ZWAgZm9yIGNncm91cCBsaW5rcy4gVGhlc2UgY2hhbmdlcyBvbmx5IGFmZmVjdCBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBwZXJtaXNzaW9ucyBhbmQgcHJvZ3JhbSB0eXBlIHZhbGlkYXRpb24uIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIG1hbmlwdWxhdGVkIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGluY29ycmVjdCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBsb2dpYyBlcnJvcnMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZXJtaXNzaW9uIGFuZCB0eXBlIGNoZWNraW5nIGxvZ2ljIGZvciBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIGFuZCB1cGRhdGluZyBCUEYgbGlua3MsIHNwZWNpZmljYWxseSBmb3IgY2dyb3VwIGFuZCBMU00gcHJvZ3JhbXMuIFRoaXMgYWZmZWN0cyB0aGUgYnBmKCkgc3lzY2FsbCBvcGVyYXRpb25zIEJQRl9QUk9HX0FUVEFDSCwgQlBGX0xJTktfQ1JFQVRFLCBhbmQgQlBGX0xJTktfVVBEQVRFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmVhMjdiMzU4MjY5NjA3NWFkNTA4NDBlMzQxYmVkNTJjNzExODQxNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA5OjQ0OjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbmluZGV4IDY4NzRiYTE0MjRhZjAuLmRmZWEzMzdmZjI1ZWEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC00NDgzLDEyICYjNDM7NDQ4Myw2IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19MT09LVVA6XG4gXHRcdHJldHVybiBhdHRhY2hfdHlwZSA9PSBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID8gMCA6IC1FSU5WQUw7XG4gXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQjpcbi1cdFx0aWYgKCFicGZfdG9rZW5fY2FwYWJsZShwcm9nLVx1MDAzZWF1eC1cdTAwM2V0b2tlbiwgQ0FQX05FVF9BRE1JTikpXG4tXHRcdFx0LyogY2ctc2tiIHByb2dzIGNhbiBiZSBsb2FkZWQgYnkgdW5wcml2IHVzZXIuXG4tXHRcdFx0ICogY2hlY2sgcGVybWlzc2lvbnMgYXQgYXR0YWNoIHRpbWUuXG4tXHRcdFx0ICovXG4tXHRcdFx0cmV0dXJuIC1FUEVSTTtcbi1cbiBcdFx0cHR5cGUgPSBhdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoYXR0YWNoX3R5cGUpO1xuIFx0XHRpZiAocHJvZy1cdTAwM2V0eXBlICE9IHB0eXBlKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTQ1NDIsNiAmIzQzOzQ1MzYsMTkgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2soY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuJiM0MztcdFx0XHRcdCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcbiYjNDM7e1xuJiM0MztcdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhYnBmX3Rva2VuX2NhcGFibGUocHJvZy1cdTAwM2VhdXgtXHUwMDNldG9rZW4sIENBUF9ORVRfQURNSU4pKVxuJiM0MztcdFx0LyogY2ctc2tiIHByb2dzIGNhbiBiZSBsb2FkZWQgYnkgdW5wcml2IHVzZXIuXG4mIzQzO1x0XHQgKiBjaGVjayBwZXJtaXNzaW9ucyBhdCBhdHRhY2ggdGltZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRhY2hfdHlwZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgaXNfY2dyb3VwX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxuIFx0XHRcdFx0Ym9vbCBjaGVja19hdHlwZSlcbiB7XG5AQCAtNDYwNiw3ICYjNDM7NDYxMyw3IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFx0aWYgKElTX0VSUihwcm9nKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocHJvZyk7XG4gXG4tXHRpZiAoYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csIGF0dHItXHUwMDNlYXR0YWNoX3R5cGUpKSB7XG4mIzQzO1x0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVjayhwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKSkge1xuIFx0XHRicGZfcHJvZ19wdXQocHJvZyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTU4MDUsOCAmIzQzOzU4MTIsNyBAQCBzdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcbiBcdGlmIChJU19FUlIocHJvZykpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByb2cpO1xuIFxuLVx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csXG4tXHRcdFx0XHRcdFx0YXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrKHByb2csIGF0dHItXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXQ7XG4gXG5AQCAtNTkzMSw2ICYjNDM7NTkzNyw3IEBAIHN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEwsICpuZXdfcHJvZztcbiBcdHN0cnVjdCBicGZfbGluayAqbGluaztcbiYjNDM7XHRlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZTtcbiBcdHUzMiBmbGFncztcbiBcdGludCByZXQ7XG4gXG5AQCAtNTk2OCw2ICYjNDM7NTk3NSwyMiBAQCBzdGF0aWMgaW50IGxpbmtfdXBkYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFx0XHRnb3RvIG91dF9wdXRfcHJvZ3M7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKGxpbmstXHUwMDNldHlwZSA9PSBCUEZfTElOS19UWVBFX0NHUk9VUCkge1xuJiM0MztcdFx0YXR5cGUgPSBsaW5rLVx1MDAzZWF0dGFjaF90eXBlO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEJQRl9MU01fTUFDIGFuZCBCUEZfTFNNX0NHUk9VUCBzaGFyZSBCUEZfUFJPR19UWVBFX0xTTSwgc29cbiYjNDM7XHRcdCAqIHRoZSBoZWxwZXImIzM5O3MgZGVmYXVsdCBwcm9nLXR5cGUgY2hlY2sgY2Fubm90IGRpc3Rpbmd1aXNoIHRoZW0uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChuZXdfcHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIG5ld19wcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlICE9IGF0eXBlKVxuJiM0MztcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUobmV3X3Byb2csXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRhdHlwZSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF9wdXRfcHJvZ3M7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZylcbiBcdFx0cmV0ID0gbGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX3Byb2cobGluaywgbmV3X3Byb2csIG9sZF9wcm9nKTtcbiBcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOTo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2xpbmtfY3JlYXRlJiMzNDssCiAgICAmIzM0O2xpbmtfdXBkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZXJtaXNzaW9uIGFuZCB0eXBlIGNoZWNraW5nIGxvZ2ljIGZvciBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIGFuZCB1cGRhdGluZyBCUEYgbGlua3MsIHNwZWNpZmljYWxseSBmb3IgY2dyb3VwIGFuZCBMU00gcHJvZ3JhbXMuIFRoaXMgYWZmZWN0cyB0aGUgYnBmKCkgc3lzY2FsbCBvcGVyYXRpb25zIEJQRl9QUk9HX0FUVEFDSCwgQlBGX0xJTktfQ1JFQVRFLCBhbmQgQlBGX0xJTktfVVBEQVRFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmVhMjdiMzU4MjY5NjA3NWFkNTA4NDBlMzQxYmVkNTJjNzExODQxNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDA5OjQ0OjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCA2ODc0YmExNDI0YWYwLi5kZmVhMzM3ZmYyNWVhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwpAQCAtNDQ4MywxMiAmIzQzOzQ0ODMsNiBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiAJY2FzZSBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUDoKIAkJcmV0dXJuIGF0dGFjaF90eXBlID09IHByb2ctJmd0O2V4cGVjdGVkX2F0dGFjaF90eXBlID8gMCA6IC1FSU5WQUw7CiAJY2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0I6Ci0JCWlmICghYnBmX3Rva2VuX2NhcGFibGUocHJvZy0mZ3Q7YXV4LSZndDt0b2tlbiwgQ0FQX05FVF9BRE1JTikpCi0JCQkvKiBjZy1za2IgcHJvZ3MgY2FuIGJlIGxvYWRlZCBieSB1bnByaXYgdXNlci4KLQkJCSAqIGNoZWNrIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLgotCQkJICovCi0JCQlyZXR1cm4gLUVQRVJNOwotCiAJCXB0eXBlID0gYXR0YWNoX3R5cGVfdG9fcHJvZ190eXBlKGF0dGFjaF90eXBlKTsKIAkJaWYgKHByb2ctJmd0O3R5cGUgIT0gcHR5cGUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ1NDIsNiAmIzQzOzQ1MzYsMTkgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLAogCX0KIH0KIAomIzQzO3N0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywKJiM0MzsJCQkJIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKQomIzQzO3sKJiM0MzsJaWYgKHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCICZhbXA7JmFtcDsKJiM0MzsJICAgICFicGZfdG9rZW5fY2FwYWJsZShwcm9nLSZndDthdXgtJmd0O3Rva2VuLCBDQVBfTkVUX0FETUlOKSkKJiM0MzsJCS8qIGNnLXNrYiBwcm9ncyBjYW4gYmUgbG9hZGVkIGJ5IHVucHJpdiB1c2VyLgomIzQzOwkJICogY2hlY2sgcGVybWlzc2lvbnMgYXQgYXR0YWNoIHRpbWUuCiYjNDM7CQkgKi8KJiM0MzsJCXJldHVybiAtRVBFUk07CiYjNDM7CiYjNDM7CXJldHVybiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0YWNoX3R5cGUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGlzX2Nncm91cF9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZSwKIAkJCQlib29sIGNoZWNrX2F0eXBlKQogewpAQCAtNDYwNiw3ICYjNDM7NDYxMyw3IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKQogCWlmIChJU19FUlIocHJvZykpCiAJCXJldHVybiBQVFJfRVJSKHByb2cpOwogCi0JaWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRyLSZndDthdHRhY2hfdHlwZSkpIHsKJiM0MzsJaWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVjayhwcm9nLCBhdHRyLSZndDthdHRhY2hfdHlwZSkpIHsKIAkJYnBmX3Byb2dfcHV0KHByb2cpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01ODA1LDggJiM0Mzs1ODEyLDcgQEAgc3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpCiAJaWYgKElTX0VSUihwcm9nKSkKIAkJcmV0dXJuIFBUUl9FUlIocHJvZyk7CiAKLQlyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywKLQkJCQkJCWF0dHItJmd0O2xpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrKHByb2csIGF0dHItJmd0O2xpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIApAQCAtNTkzMSw2ICYjNDM7NTkzNyw3IEBAIHN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpCiB7CiAJc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEwsICpuZXdfcHJvZzsKIAlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CiYjNDM7CWVudW0gYnBmX2F0dGFjaF90eXBlIGF0eXBlOwogCXUzMiBmbGFnczsKIAlpbnQgcmV0OwogCkBAIC01OTY4LDYgJiM0Mzs1OTc1LDIyIEBAIHN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpCiAJCWdvdG8gb3V0X3B1dF9wcm9nczsKIAl9CiAKJiM0MzsJaWYgKGxpbmstJmd0O3R5cGUgPT0gQlBGX0xJTktfVFlQRV9DR1JPVVApIHsKJiM0MzsJCWF0eXBlID0gbGluay0mZ3Q7YXR0YWNoX3R5cGU7CiYjNDM7CQkvKgomIzQzOwkJICogQlBGX0xTTV9NQUMgYW5kIEJQRl9MU01fQ0dST1VQIHNoYXJlIEJQRl9QUk9HX1RZUEVfTFNNLCBzbwomIzQzOwkJICogdGhlIGhlbHBlciYjMzk7cyBkZWZhdWx0IHByb2ctdHlwZSBjaGVjayBjYW5ub3QgZGlzdGluZ3Vpc2ggdGhlbS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG5ld19wcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNICZhbXA7JmFtcDsKJiM0MzsJCSAgICBuZXdfcHJvZy0mZ3Q7ZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gYXR5cGUpCiYjNDM7CQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUobmV3X3Byb2csCiYjNDM7CQkJCQkJCQlhdHlwZSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gb3V0X3B1dF9wcm9nczsKJiM0MzsJfQomIzQzOwogCWlmIChsaW5rLSZndDtvcHMtJmd0O3VwZGF0ZV9wcm9nKQogCQlyZXQgPSBsaW5rLSZndDtvcHMtJmd0O3VwZGF0ZV9wcm9nKGxpbmssIG5ld19wcm9nLCBvbGRfcHJvZyk7CiAJZWxzZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTU5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIGFuZCBpdCBsb29rcyBsaWtlIGEgcmVmYWN0b3JpbmcgYW5kIGEgY291cGxlIG9mIGNvbmRpdGlvbmFsIHVwZGF0ZXMgd2l0aGluIHRoZSBCUEYgYXR0YWNoIGFuZCBsaW5rIGxvZ2ljLiBUaGUgbWFpbiB0aHJ1c3QgaXMgbW92aW5nIGEgc3BlY2lmaWMgcGVybWlzc2lvbiBjaGVjayBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgb3V0IG9mIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGFuZCBpbnRvIGEgbmV3IGZ1bmN0aW9uLCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYC4gVGhpcyBzdWdnZXN0cyBhbiBhdHRlbXB0IHRvIHN0cmVhbWxpbmUgdGhlIHBlcm1pc3Npb24gY2hlY2tpbmcgcHJvY2VzcyBhbmQgcG90ZW50aWFsbHkgbWFrZSBpdCBtb3JlIHJldXNhYmxlLiAgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoYXQsIGJ1dCBpdCBzZWVtcyBzb3VuZCBvbiB0aGUgc3VyZmFjZS4KClRoZSBrZXkgY2hhbmdlIEkgc2VlIGlzIGluIGBsaW5rX3VwZGF0ZWAuIFRoZXkmIzM5O3ZlIGFkZGVkIGEgY2hlY2sgc3BlY2lmaWNhbGx5IGZvciBgQlBGX0xJTktfVFlQRV9DR1JPVVBgLiBOb3csIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIGxpa2UgaXQgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGUgbmV3IHByb2dyYW0gYXR0YWNoZWQgaXMgb2YgdHlwZSBgQlBGX1BST0dfVFlQRV9MU01gLiBUaGUgY29tbWVudCBpcyBjcnVjaWFsOyBpdCBleHBsaWNpdGx5IGFkZHJlc3NlcyB0aGUgc2hhcmVkIHByb2dyYW0gdHlwZSBiZXR3ZWVuIGBCUEZfTFNNX01BQ2AgYW5kIGBCUEZfTFNNX0NHUk9VUGAuICBUaGlzIGlzIGEgcHJldHR5IHR5cGljYWwgQlBGIHNpdHVhdGlvbi4gVGhleSBhcmUgcmVseWluZyBvbiB0aGUgYXR0YWNoIHR5cGUgdG8gZGlmZmVyZW50aWF0ZSB0aGUga2luZCBvZiBMU00gcHJvZ3JhbSBpbiB0aGF0IGNhc2UsIGJ1dCB0aGUgZGVmYXVsdCBjaGVja3Mgd291bGQgbm90IGRvIHRoYXQuIE5vdywgaWYgdGhlIGV4cGVjdGVkIGF0dGFjaCB0eXBlIG9mIHRoZSBuZXcgcHJvZ3JhbSBkb2VzbiYjMzk7dCBtYXRjaCB0aGUgYXR0YWNoIHR5cGUgb2YgdGhlIGxpbmssIGl0IHRocm93cyBhbiBgRUlOVkFMYCBlcnJvci4gSWYgdGhlcmUmIzM5O3Mgbm8gbWlzbWF0Y2gsIGl0IGZhbGxzIGJhY2sgdG8gdGhlIG9sZCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCBmdW5jdGlvbi4gIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlIGluIHRoZSBsaW5rIHVwZGF0ZSBwcm9jZWR1cmUsIGFuZCB0aGF0JiMzOTtzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLgoKR2l2ZW4gdGhpcyBtYW5pcHVsYXRpb24gb2YgdGhlIGxpbmsgdXBkYXRlIGxvZ2ljLCB0aGUgY2hhbmdlIGlzIHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoaXMgZnVuY3Rpb24gYW5kIGFueSBvdGhlciBhcmVhcyB0aGF0IGludGVyYWN0IHdpdGggaXQuCgpJJiMzOTtsbCBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMgdG8gZW5zdXJlIHRoZSBmdXp6aW5nIGlzIHRob3JvdWdoOiBCUEYgaXMgZW5hYmxlZCB2aWEgYENPTkZJR19CUEZfU1lTQ0FMTGAsIENHUk9VUCBCUEYgbmVlZHMgYENPTkZJR19DR1JPVVBfQlBGYCBhbmQgTFNNIEJQRiBuZWVkcyBgQ09ORklHX0JQRl9MU01gLiBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJlbGV2YW50IGNvbmZpZ3Mgc2V0IHRvIGFsbG93IHRob3JvdWdoIHRlc3Rpbmcgb2YgYWxsIHJlbGF0ZWQgY29kZSBwYXRocy4KCkkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGxpbmtfdXBkYXRlYCBpcyBjYWxsZWQgaW4gdGhlIGBfX3N5c19icGZgIHN5c3RlbSBjYWxsIHdoZW4gdGhlIGNvbW1hbmQgaXMgYEJQRl9MSU5LX1VQREFURWAuIEkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIEkgdmVyaWZ5IHRoYXQgYGJwZl9wcm9nX2F0dGFjaGAgaXMgdXNlZCBieSB0aGUgYEJQRl9QUk9HX0FUVEFDSGAgY29tbWFuZCBhbmQgYGxpbmtfY3JlYXRlYCBpcyB1c2VkIGJ5IGBCUEZfTElOS19DUkVBVEVgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgZmxvdyBpcyBhcyBleHBlY3RlZC4gVGhpcyB3aWxsIGJlIHRoZSBiYXNpcyBvZiBteSBmdXp6aW5nIGVmZm9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgU3Vic3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgd2hpY2ggYWx3YXlzIHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgcmVmYWN0b3JpbmcgdGhlIGF0dGFjaG1lbnQgY2hlY2tzLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIHB1bGxpbmcgdGhlIGBDQVBfTkVUX0FETUlOYCByZXF1aXJlbWVudCBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgb3V0IG9mIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGFuZCBpbnRvIGEgbmV3IGZ1bmN0aW9uLCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYC4gVGhhdCYjMzk7cyBjbGVhbmVyOyBjb25zb2xpZGF0aW5nIHRob3NlIHBlcm1pc3Npb24gY2hlY2tzIG1ha2VzIHNlbnNlLiBUaGV5JiMzOTtyZSBhbHNvIHVwZGF0aW5nIGBsaW5rX2NyZWF0ZWAgYW5kIGBsaW5rX3VwZGF0ZWAgdG8gdXNlIHRoZSBuZXcgY2hlY2suIEkmIzM5O20gd29uZGVyaW5nIHdoeSB0aGV5JiMzOTt2ZSBtb3ZlZCB0aGUgZnVuY3Rpb24gYW5kIG5vdCBqdXN0IGFkZGVkIGEgbmV3IGNoZWNrPwoKQWxyaWdodCwgc28gdGhlIGZ1bmN0aW9uYWwgaW1wYWN0IGlzIG9uIGF0dGFjaG1lbnQgaW4gYGJwZl9wcm9nX2F0dGFjaGAsIGBsaW5rX2NyZWF0ZWAsIGFuZCBgbGlua191cGRhdGVgLiBUaGUgcHJpbWFyeSBjb25maWcgdGhhdCYjMzk7cyByZWxldmFudCBoZXJlIGlzIGBCUEZfU1lTQ0FMTGAsIG9mIGNvdXJzZS4gTGV0JiMzOTtzIHNlZS4uLiBsZXQgbWUgZG91YmxlLWNoZWNrIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncy4gSXQgbG9va3MgbGlrZSBgQlBGX1NZU0NBTExgIGlzIHRoZSBtYWluIG9uZS4gV2FpdCBhIG1pbnV0ZS4uLiBgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBDR1JPVVBfQlBGYC4gTGV0IG1lIG1ha2UgYSBtZW50YWwgbm90ZSB0byBjaGVjayB0aGUgYENHUk9VUF9CUEZgIGNvbmZpZzsgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgYXdhcmUgb2YgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDR1JPVVBfQlBGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMzQ1PWNvbmZpZyBDR1JPVVBfUEVSRlxuLS1cbmluaXQvS2NvbmZpZy0xMzU1LVxuaW5pdC9LY29uZmlnOjEzNTY6Y29uZmlnIENHUk9VUF9CUEZcbmluaXQvS2NvbmZpZy0xMzU3LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDkxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIHdoaWNoIGlzIHJpZ2h0IHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyBhbmQgbWFuaXB1bGF0aW5nIGxpbmtzLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBhdHRhY2ggYW5kIGxpbmsgbG9naWMgaXMgZ2V0dGluZyBzb21lIGF0dGVudGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgcmVmYWN0b3Jpbmcgb2YgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWAgaW50byBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYCwgYW5kIHRoZSBzdWJzZXF1ZW50IHVwZGF0ZXMgdG8gYGJwZl9wcm9nX2F0dGFjaGAsIGBsaW5rX2NyZWF0ZWAsIGFuZCB0aGUgYWRkaXRpb24gb2YgYSBgQlBGX0xJTktfVFlQRV9DR1JPVVBgIGNoZWNrIGluIGBsaW5rX3VwZGF0ZWAsIHNjcmVhbXMgJiMzNDtwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGZ1enppbmcuJiMzNDsgVGhpcyBpcyBwcmltZSByZWFsIGVzdGF0ZSBmb3IgZXhwbG9pdGF0aW9uIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGZsYXdzLgoKR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLCBJJiMzOTtkIHNheSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdG8ga2VlcCBhbiBleWUgb24gYXJlIGBCUEZfU1lTQ0FMTGAgKG9idmlvdXNseSkgYW5kIGBDR1JPVVBfQlBGYC4gSSYjMzk7bGwgd2FudCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQgaW4gYW55IHRlc3QgZW52aXJvbm1lbnRzLgoKTXkgaW5pdGlhbCBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgYGJwZl9wcm9nX2F0dGFjaGAsIGBsaW5rX2NyZWF0ZWAsIGFuZCBgbGlua191cGRhdGVgLiBUaG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGFwcGVhciB0byBiZSBkaXJlY3RseSBtb2RpZmllZCBieSB0aGlzIHBhdGNoLCBzbyB0aGV5IGFyZSB0aGUgb25lcyBJJiMzOTtsbCB0YXJnZXQgZmlyc3QuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGBicGZfcHJvZ19hdHRhY2hgIGlzICpzdGF0aWMqPyBPa2F5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2NvcGUgYW5kIGNhbGwgc2l0ZXMuIElmIGl0ICppcyogc3RhdGljLCBteSBhcHByb2FjaCBtaWdodCBuZWVkIGEgbWlub3IgYWRqdXN0bWVudCwgYnV0IGl0IHNob3VsZG4mIzM5O3QgY2hhbmdlIHRoZSBvdmVyYWxsIGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NDM5OD1hdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDQ3My1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ0NzQ6c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDQ3NS1cdFx0XHRcdFx0ICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NTM4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDUzOTpzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVjayhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NTQwLVx0XHRcdFx0IGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ1NDgtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NTQ5Olx0cmV0dXJuIGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRhY2hfdHlwZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NTUwLX1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00NTUyPXN0YXRpYyBib29sIGlzX2Nncm91cF9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NTg1LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDU4NjpzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ1ODcte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2MTUtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NjE2Olx0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVjayhwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKSkge1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNDYxNy1cdFx0YnBmX3Byb2dfcHV0KHByb2cpO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2MjEtXHRpZiAoaXNfY2dyb3VwX3Byb2dfdHlwZShwdHlwZSwgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSwgdHJ1ZSkpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ2MjI6XHRcdHJldCA9IGNncm91cF9icGZfcHJvZ19hdHRhY2goYXR0ciwgcHR5cGUsIHByb2cpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNDYyMy1cdFx0Z290byBvdXQ7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDYzNC1cdGNhc2UgQlBGX1BST0dfVFlQRV9GTE9XX0RJU1NFQ1RPUjpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ2MzU6XHRcdHJldCA9IG5ldG5zX2JwZl9wcm9nX2F0dGFjaChhdHRyLCBwcm9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2MzYtXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU4MDA9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTgxNC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4MTU6XHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2socHJvZywgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODE2LVx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01OTM2PXN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk4Ny1cdFx0ZWxzZVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk4ODpcdFx0XHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUobmV3X3Byb2csXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTg5LVx0XHRcdFx0XHRcdFx0XHRhdHlwZSk7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjMyNj1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM5OC1cdGNhc2UgQlBGX1BST0dfQVRUQUNIOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjM5OTpcdFx0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKFx1MDAyNmF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQwMC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ2NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDY0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZm9jdXNlZCBvbiBCUEYgc3lzY2FsbHMsIHNwZWNpZmljYWxseSBpbXBhY3RpbmcgaG93IEJQRiBwcm9ncmFtcyBhcmUgYXR0YWNoZWQsIHdpdGggYSBmb2N1cyBvbiBjZ3JvdXBzIGFuZCBMU00uIEkgc2VlIGl0IG1vZGlmaWVzIHNldmVyYWwga2V5IGZ1bmN0aW9ucyB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYDogYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWAsIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tgLCBgYnBmX3Byb2dfYXR0YWNoYCwgYGxpbmtfY3JlYXRlYCwgYW5kIGBsaW5rX3VwZGF0ZWAuCgpXaGF0JiMzOTtzIGhhcHBlbmluZyBpcyB0aGF0IHRoZSBjYXBhYmlsaXR5IGNoZWNrIGZvciBgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCYCBpcyBiZWluZyBtb3ZlZCBvdXQgb2YgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWAgYW5kIGludG8gYSBuZXcgZnVuY3Rpb24sIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tgLiBUaGlzIG5ldyBmdW5jdGlvbiBpcyB0aGVuIHVzZWQgd2l0aGluIGBicGZfcHJvZ19hdHRhY2hgIGFuZCBgbGlua19jcmVhdGVgLiBBIGtleSBtb2RpZmljYXRpb24gaXMgd2l0aGluIGBsaW5rX3VwZGF0ZWAgd2hlcmUgdGhlcmUmIzM5O3MgYSBjaGVjayBmb3IgYGxpbmstJmd0O3R5cGUgPT0gQlBGX0xJTktfVFlQRV9DR1JPVVBgLCBmb2xsb3dlZCBieSBhIGNhbGwgdG8gYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWAgYW5kIHNvbWUgc3BlY2lmaWMgbG9naWMgZm9yIGBCUEZfUFJPR19UWVBFX0xTTWAuCgpUaGlzIGlzIGludGVyZXN0aW5nLCBhbmQgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIGZ1enppbmc7IHRoZSBjaGFuZ2VzIGhlcmUgdG91Y2ggY3JpdGljYWwgcGF0aHMgZm9yIEJQRiBwcm9ncmFtIGF0dGFjaG1lbnQuIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiBob3cgdGhlc2UgYWx0ZXJhdGlvbnMgaW1wYWN0IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgQlBGIHByb2dyYW0gdHlwZXMgYW5kIGF0dGFjaG1lbnQgcG9pbnRzLgoKRnJvbSBhIHN5bWJvbCBwZXJzcGVjdGl2ZSwgbXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIGBicGZfcHJvZ19hdHRhY2hgLCBgbGlua19jcmVhdGVgLCBhbmQgYGxpbmtfdXBkYXRlYC4KCkNvbmZpZ3VyYXRpb24gd2lzZSwgdGhlIHBhdGNoIHdpbGwgbmVlZCB0byBiZSB0ZXN0ZWQgd2l0aCBgQlBGX1NZU0NBTExgIGFuZCBgQ0dST1VQX0JQRmAgZW5hYmxlZC4gSSBhbHNvIG5lZWQgdG8gYmUgc3VyZSB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9uIGBCUEZfTFNNYCwgc2luY2UgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIG9uIExTTSwgc28gSSYjMzk7bGwgYWRkIGBCUEZfTFNNYCB0byB0aGUgY29uZmlncyBqdXN0IHRvIGJlIHNhZmUuCgpTcGVjaWZpY2FsbHksIHRoYXQgYml0IG9mIGNvZGUgaW4gYGxpbmtfdXBkYXRlYCBpcyBpbXBvcnRhbnQ6CgpgYGBjCglpZiAobGluay0mZ3Q7dHlwZSA9PSBCUEZfTElOS19UWVBFX0NHUk9VUCkgewoJCWF0eXBlID0gbGluay0mZ3Q7YXR0YWNoX3R5cGU7CgkJLyoKCQkgKiBCUEZfTFNNX01BQyBhbmQgQlBGX0xTTV9DR1JPVVAgc2hhcmUgQlBGX1BST0dfVFlQRV9MU00sIHNvCgkJICogdGhlIGhlbHBlciYjMzk7cyBkZWZhdWx0IHByb2ctdHlwZSBjaGVjayBjYW5ub3QgZGlzdGluZ3Vpc2ggdGhlbS4KCQkgKi8KCQlpZiAobmV3X3Byb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00gJmFtcDsmYW1wOwoJCSAgICBuZXdfcHJvZy0mZ3Q7ZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gYXR5cGUpCgkJCXJldCA9IC1FSU5WQUw7CgkJZWxzZQoJCQlyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUobmV3X3Byb2csCgkJCQkJCQkJYXR5cGUpOwoJCWlmIChyZXQpCgkJCWdvdG8gb3V0X3B1dF9wcm9nczsKCX0KYGBgCgpUaGlzIGlzIHdoZXJlIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIHRoZSBwb3RlbnRpYWwgYW1iaWd1aXR5IGJldHdlZW4gYEJQRl9MU01fTUFDYCBhbmQgYEJQRl9MU01fQ0dST1VQYCBwcm9ncmFtcyB3aGljaCBib3RoIGhhdmUgdGhlIHNhbWUgcHJvZ3JhbSB0eXBlLiBUaGF0IG5lZWRzIGNhcmVmdWwgYXR0ZW50aW9uIGR1cmluZyB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0xTTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9OTA9c291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctOTEtXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cbmtlcm5lbC9icGYvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzEKCQkJCQkJCW91dHB1dDogMTM1CgkJCQkJCQl0aG91Z2h0czogOTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFN5c2NhbGwgTW9kaWZpY2F0aW9uIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIEJQRiBzeXNjYWxsIGltcGxlbWVudGF0aW9uIOKAkyBzcGVjaWZpY2FsbHksIGl0JiMzOTtzIHJlb3JnYW5pemluZyB0aGUgcGVybWlzc2lvbiBhbmQgdHlwZSBjaGVja3MgcmVsYXRlZCB0byBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIGFuZCB1cGRhdGluZyBCUEYgbGlua3MuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gaW1wYWN0IGlzIG9uIGBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0JgIHByb2dyYW1zIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGBDQVBfTkVUX0FETUlOYCwgYXMgd2VsbCBhcyBzb21lIHNwZWNpYWwgY29uc2lkZXJhdGlvbnMgZm9yIGBCUEZfUFJPR19UWVBFX0xTTWAuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIG1vdmluZyB0aGUgY2hlY2tzIHRoYXQgd2VyZSBwcmV2aW91c2x5IGluIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGludG8gYSBuZXcgZnVuY3Rpb24gY2FsbGVkIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tgLiBUaGlzIG5ldyBmdW5jdGlvbiBpcyB0aGVuIGxldmVyYWdlZCBpbiBgYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGxpbmtfY3JlYXRlYC4gQ3JpdGljYWxseSwgYGxpbmtfdXBkYXRlYCBhbHNvIHNlZXMgYSBjaGFuZ2U7IGl0IG5vdyBpbmNsdWRlcyBhIGNoZWNrIGZvciBgbGluay0mZ3Q7dHlwZSA9PSBCUEZfTElOS19UWVBFX0NHUk9VUGAgYW5kIGNhbGxzIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGFsb25nIHdpdGggdGhlIHNwZWNpYWwgTFNNIGNoZWNrLiBUaGlzIHNpZ25pZmljYW50bHkgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiBgQlBGX0xJTktfVVBEQVRFYCBzcGVjaWZpY2FsbHkgZm9yIGNncm91cCBsaW5rcy4KCkNvbnNpZGVyaW5nIHRoaXMsIHRoZSBgYnBmX3Byb2dfYXR0YWNoYCwgYGxpbmtfY3JlYXRlYCwgYW5kIGBsaW5rX3VwZGF0ZWAgb3BlcmF0aW9ucyB0aHJvdWdoIHRoZSBgYnBmKClgIHN5c2NhbGwgYXJlIHRoZSBmb2NhbCBwb2ludHMuIFNpbmNlIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaXQgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBgbGlua191cGRhdGVgIGlzIHJlYWNoZWQgdmlhIHRoZSBgYnBmKEJQRl9MSU5LX1VQREFURSwgLi4uKWAgc3lzY2FsbCBwYXRoLCBgYnBmX3Byb2dfYXR0YWNoYCB2aWEgYGJwZihCUEZfUFJPR19BVFRBQ0gsIC4uLilgIGFuZCBgbGlua19jcmVhdGVgIHZpYSBgYnBmKEJQRl9MSU5LX0NSRUFURSwgLi4uKWAuCgpJIG5lZWQgdG8gY29uZmlybSByZWFjaGFiaWxpdHkuIE9rLCBpdCBsb29rcyBsaWtlIGBsaW5rX3VwZGF0ZWAgaXMgc3RhdGljIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGJ1dCBjYWxsZWQgZnJvbSBgX19zeXNfYnBmYC4gQW5kIGBfX3N5c19icGZgIGlzIHN0YXRpYyB0b28sIHRoZSBhY3R1YWwgc3lzY2FsbCBpcyBgc3lzX2JwZmAuIFNvLCB3aGlsZSBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIHBhcnQgb2YgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBCUEYgc3lzY2FsbCBvcGVyYXRpb25zIGFuZCBsaWtlbHkgbm90IGlubGluZWQgZGVzcGl0ZSBiZWluZyBhIHJlbGF0aXZlbHkgbGFyZ2UgZnVuY3Rpb24uIFRoaXMgc2FtZSBsb2dpYyB3b3VsZCBhcHBseSB0byB0aGUgb3RoZXIgZnVuY3Rpb25zLgoKVGhlcmVmb3JlLCB0aGUgbW9zdCBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOgoKKiAgIGBicGZfcHJvZ19hdHRhY2hgCiogICBgbGlua19jcmVhdGVgCiogICBgbGlua191cGRhdGVgCgpJJiMzOTtsbCBpbmNsdWRlIGBfX3N5c19icGZgIGFuZCBgc3lzX2JwZmAganVzdCBpbiBjYXNlLCBidXQgdGhlIHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIHRoZSBmdW5jdGlvbnMgaW1wbGVtZW50aW5nIHRoZSBCUEYgb3BlcmF0aW9ucy4KClRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlOiBgQlBGX1NZU0NBTExgLCBgQ0dST1VQX0JQRmAsIGFuZCBgQlBGX0xTTWAuCgpJbiBzdW1tYXJ5LCB0aGlzIHBhdGNoJiMzOTtzIGltcGFjdCBvbiB0aGVzZSBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBwZXJtaXNzaW9ucyBhbmQgY2dyb3VwIHByb2dyYW1zLCBtYWtlcyB0aGlzIGEgcHJvbWlzaW5nIHRhcmdldCBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX0xTTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9wcm9nX2F0dGFjaCYjMzQ7LAogICAgJiMzNDtsaW5rX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtsaW5rX3VwZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGVybWlzc2lvbiBhbmQgdHlwZSBjaGVja2luZyBsb2dpYyBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyBhbmQgdXBkYXRpbmcgQlBGIGxpbmtzLCBzcGVjaWZpY2FsbHkgZm9yIGNncm91cCBhbmQgTFNNIHByb2dyYW1zLiBUaGlzIGFmZmVjdHMgdGhlIGJwZigpIHN5c2NhbGwgb3BlcmF0aW9ucyBCUEZfUFJPR19BVFRBQ0gsIEJQRl9MSU5LX0NSRUFURSwgYW5kIEJQRl9MSU5LX1VQREFURS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2xpbmtfY3JlYXRlJiMzNDssCiAgICAmIzM0O2xpbmtfdXBkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZXJtaXNzaW9uIGFuZCB0eXBlIGNoZWNraW5nIGxvZ2ljIGZvciBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIGFuZCB1cGRhdGluZyBCUEYgbGlua3MsIHNwZWNpZmljYWxseSBmb3IgY2dyb3VwIGFuZCBMU00gcHJvZ3JhbXMuIFRoaXMgYWZmZWN0cyB0aGUgYnBmKCkgc3lzY2FsbCBvcGVyYXRpb25zIEJQRl9QUk9HX0FUVEFDSCwgQlBGX0xJTktfQ1JFQVRFLCBhbmQgQlBGX0xJTktfVVBEQVRFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOTo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBjYXBhYmlsaXR5IGFuZCBhdHRhY2ggdHlwZSBjaGVja3MgZm9yIEJQRiBwcm9ncmFtcyBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBJdCBtb3ZlcyB0aGUgYENBUF9ORVRfQURNSU5gIGNoZWNrIGZvciBgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCYCBpbnRvIGEgd3JhcHBlciBmdW5jdGlvbiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYCBhbmQgYWRkcyBhdHRhY2ggdHlwZSB2YWxpZGF0aW9uIGluIGBsaW5rX3VwZGF0ZWAgZm9yIGNncm91cCBsaW5rcy4gVGhlc2UgY2hhbmdlcyBvbmx5IGFmZmVjdCBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBwZXJtaXNzaW9ucyBhbmQgcHJvZ3JhbSB0eXBlIHZhbGlkYXRpb24uIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIG1hbmlwdWxhdGVkIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGluY29ycmVjdCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBsb2dpYyBlcnJvcnMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJlYTI3YjM1ODI2OTYwNzVhZDUwODQwZTM0MWJlZDUyYzcxMTg0MTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwOTo0NDo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmMKaW5kZXggNjg3NGJhMTQyNGFmMC4uZGZlYTMzN2ZmMjVlYSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zeXNjYWxsLmMKQEAgLTQ0ODMsMTIgJiM0Mzs0NDgzLDYgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLAogCWNhc2UgQlBGX1BST0dfVFlQRV9TS19MT09LVVA6CiAJCXJldHVybiBhdHRhY2hfdHlwZSA9PSBwcm9nLSZndDtleHBlY3RlZF9hdHRhY2hfdHlwZSA/IDAgOiAtRUlOVkFMOwogCWNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCOgotCQlpZiAoIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctJmd0O2F1eC0mZ3Q7dG9rZW4sIENBUF9ORVRfQURNSU4pKQotCQkJLyogY2ctc2tiIHByb2dzIGNhbiBiZSBsb2FkZWQgYnkgdW5wcml2IHVzZXIuCi0JCQkgKiBjaGVjayBwZXJtaXNzaW9ucyBhdCBhdHRhY2ggdGltZS4KLQkJCSAqLwotCQkJcmV0dXJuIC1FUEVSTTsKLQogCQlwdHlwZSA9IGF0dGFjaF90eXBlX3RvX3Byb2dfdHlwZShhdHRhY2hfdHlwZSk7CiAJCWlmIChwcm9nLSZndDt0eXBlICE9IHB0eXBlKQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC00NTQyLDYgJiM0Mzs0NTM2LDE5IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywKIAl9CiB9CiAKJiM0MztzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVjayhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiYjNDM7CQkJCSBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSkKJiM0Mzt7CiYjNDM7CWlmIChwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiAmYW1wOyZhbXA7CiYjNDM7CSAgICAhYnBmX3Rva2VuX2NhcGFibGUocHJvZy0mZ3Q7YXV4LSZndDt0b2tlbiwgQ0FQX05FVF9BRE1JTikpCiYjNDM7CQkvKiBjZy1za2IgcHJvZ3MgY2FuIGJlIGxvYWRlZCBieSB1bnByaXYgdXNlci4KJiM0MzsJCSAqIGNoZWNrIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwomIzQzOwlyZXR1cm4gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csIGF0dGFjaF90eXBlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBpc19jZ3JvdXBfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR5cGUsCiAJCQkJYm9vbCBjaGVja19hdHlwZSkKIHsKQEAgLTQ2MDYsNyAmIzQzOzQ2MTMsNyBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cikKIAlpZiAoSVNfRVJSKHByb2cpKQogCQlyZXR1cm4gUFRSX0VSUihwcm9nKTsKIAotCWlmIChicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0ci0mZ3Q7YXR0YWNoX3R5cGUpKSB7CiYjNDM7CWlmIChicGZfcHJvZ19hdHRhY2hfY2hlY2socHJvZywgYXR0ci0mZ3Q7YXR0YWNoX3R5cGUpKSB7CiAJCWJwZl9wcm9nX3B1dChwcm9nKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTgwNSw4ICYjNDM7NTgxMiw3IEBAIHN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKQogCWlmIChJU19FUlIocHJvZykpCiAJCXJldHVybiBQVFJfRVJSKHByb2cpOwogCi0JcmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csCi0JCQkJCQlhdHRyLSZndDtsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7CiYjNDM7CXJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVjayhwcm9nLCBhdHRyLSZndDtsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKQEAgLTU5MzEsNiAmIzQzOzU5MzcsNyBAQCBzdGF0aWMgaW50IGxpbmtfdXBkYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyKQogewogCXN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cgPSBOVUxMLCAqbmV3X3Byb2c7CiAJc3RydWN0IGJwZl9saW5rICpsaW5rOwomIzQzOwllbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZTsKIAl1MzIgZmxhZ3M7CiAJaW50IHJldDsKIApAQCAtNTk2OCw2ICYjNDM7NTk3NSwyMiBAQCBzdGF0aWMgaW50IGxpbmtfdXBkYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyKQogCQlnb3RvIG91dF9wdXRfcHJvZ3M7CiAJfQogCiYjNDM7CWlmIChsaW5rLSZndDt0eXBlID09IEJQRl9MSU5LX1RZUEVfQ0dST1VQKSB7CiYjNDM7CQlhdHlwZSA9IGxpbmstJmd0O2F0dGFjaF90eXBlOwomIzQzOwkJLyoKJiM0MzsJCSAqIEJQRl9MU01fTUFDIGFuZCBCUEZfTFNNX0NHUk9VUCBzaGFyZSBCUEZfUFJPR19UWVBFX0xTTSwgc28KJiM0MzsJCSAqIHRoZSBoZWxwZXImIzM5O3MgZGVmYXVsdCBwcm9nLXR5cGUgY2hlY2sgY2Fubm90IGRpc3Rpbmd1aXNoIHRoZW0uCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChuZXdfcHJvZy0mZ3Q7dHlwZSA9PSBCUEZfUFJPR19UWVBFX0xTTSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbmV3X3Byb2ctJmd0O2V4cGVjdGVkX2F0dGFjaF90eXBlICE9IGF0eXBlKQomIzQzOwkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQllbHNlCiYjNDM7CQkJcmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKG5ld19wcm9nLAomIzQzOwkJCQkJCQkJYXR5cGUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIG91dF9wdXRfcHJvZ3M7CiYjNDM7CX0KJiM0MzsKIAlpZiAobGluay0mZ3Q7b3BzLSZndDt1cGRhdGVfcHJvZykKIAkJcmV0ID0gbGluay0mZ3Q7b3BzLSZndDt1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpOwogCWVsc2UKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTYKCQkJCQkJCW91dHB1dDogMTg5CgkJCQkJCQl0aG91Z2h0czogNTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IHByb2JhYmx5IGRvZXNuJiMzOTt0LCBidXQgbGV0JiMzOTtzIGJlIHRob3JvdWdoLgoKVGhlIGNoYW5nZXMgYXJlIGFsbCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBhbmQgaXQmIzM5O3MgbW9zdGx5IGFib3V0IHJlZmFjdG9yaW5nIGhvdyB0aGUga2VybmVsIGNoZWNrcyBCUEYgcHJvZ3JhbSBjYXBhYmlsaXRpZXMgYW5kIGF0dGFjaG1lbnQgdHlwZXMuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIG1vdmVzIHRoZSBgQ0FQX05FVF9BRE1JTmAgY2hlY2sgZm9yIGBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0JgIGludG8gdGhpcyBuZXcgYGJwZl9wcm9nX2F0dGFjaF9jaGVja2AgZnVuY3Rpb24uIEl0IGFsc28gdXBkYXRlcyBleGlzdGluZyBmdW5jdGlvbnMsIGBicGZfcHJvZ19hdHRhY2hgIGFuZCBgbGlua19jcmVhdGVgLCB0byB1c2UgdGhpcyBuZXcgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWAsIHdoaWNoIGlzIHN0aWxsIHVzZWQgaW4gYGxpbmtfdXBkYXRlYCBidXQgb25seSBpZiB0aGUgbGluayB0eXBlIGlzIGBCUEZfTElOS19UWVBFX0NHUk9VUGAuCgpNeSBwcmltYXJ5IGNvbmNlcm4gaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IG5ldyBvcHBvcnR1bml0aWVzIGZvciByZWFkaW5nIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCB0aGF0JiMzOTtzIHRoZSBrZXkuIEkgc2VlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgbm8gZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBubyBjaGFuZ2VzIHRvIGhvdyBib3VuZHMgb3IgbGVuZ3RocyBhcmUgY2hlY2tlZCB0aGF0IGNvdWxkIGxlYWQgdG8gdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIGFsbW9zdCBlbnRpcmVseSBjb250cm9sIGZsb3cuIEl0JiMzOTtzIHBlcm1pc3Npb24gY2hlY2tpbmcgYW5kIHZhbGlkYXRpb24gbG9naWMuCgpUaGVyZWZvcmUsIHRoZSBsaWtlbGlob29kIG9mIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgYW4gKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiByaXNrIGlzIGVmZmVjdGl2ZWx5IHplcm8uIFJlZ3VsYXIgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgZXJyb3JzIHRoYXQgbWlnaHQgY3JlZXAgaW4sIGFuZCB0aG9zZSBhcmUgd2hhdCB3ZSB3b3VsZCBleHBlY3QgdG8gc2VlIGluIGEgcGF0Y2ggbGlrZSB0aGlzLgoKU28sIEkmIzM5O20gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIEkmIzM5O2xsIGRldGFpbCB0aGlzIHJlYXNvbmluZyBpbiB0aGUgY29tbWl0IG1lc3NhZ2UuIFRoZSBwYXRjaCByZWZhY3RvcnMgY2FwYWJpbGl0eSBhbmQgYXR0YWNoIHR5cGUgY2hlY2tzIGZvciBCUEYgcHJvZ3JhbXMgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgYW5kIHRoZXNlIGNoYW5nZXMgZm9jdXMgc29sZWx5IG9uIGNvbnRyb2wgZmxvdyByZWdhcmRpbmcgcGVybWlzc2lvbnMgYW5kIHByb2dyYW0gdHlwZSB2YWxpZGF0aW9uLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBtYW5pcHVsYXRlZCBpbiBhbnkgd2F5IHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBzYW5pdGl6ZXJzIHNob3VsZCBiZSBzdWZmaWNpZW50LiBJIGFtIG5vdCBzZWVpbmcgYSBuZWVkIGZvciBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGNhcGFiaWxpdHkgYW5kIGF0dGFjaCB0eXBlIGNoZWNrcyBmb3IgQlBGIHByb2dyYW1zIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIEl0IG1vdmVzIHRoZSBgQ0FQX05FVF9BRE1JTmAgY2hlY2sgZm9yIGBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0JgIGludG8gYSB3cmFwcGVyIGZ1bmN0aW9uIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tgIGFuZCBhZGRzIGF0dGFjaCB0eXBlIHZhbGlkYXRpb24gaW4gYGxpbmtfdXBkYXRlYCBmb3IgY2dyb3VwIGxpbmtzLiBUaGVzZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGNvbnRyb2wgZmxvdyByZWxhdGVkIHRvIHBlcm1pc3Npb25zIGFuZCBwcm9ncmFtIHR5cGUgdmFsaWRhdGlvbi4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgbWFuaXB1bGF0ZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgaW5jb3JyZWN0IHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGxvZ2ljIGVycm9ycykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBjYXBhYmlsaXR5IGFuZCBhdHRhY2ggdHlwZSBjaGVja3MgZm9yIEJQRiBwcm9ncmFtcyBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBJdCBtb3ZlcyB0aGUgYENBUF9ORVRfQURNSU5gIGNoZWNrIGZvciBgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCYCBpbnRvIGEgd3JhcHBlciBmdW5jdGlvbiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYCBhbmQgYWRkcyBhdHRhY2ggdHlwZSB2YWxpZGF0aW9uIGluIGBsaW5rX3VwZGF0ZWAgZm9yIGNncm91cCBsaW5rcy4gVGhlc2UgY2hhbmdlcyBvbmx5IGFmZmVjdCBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBwZXJtaXNzaW9ucyBhbmQgcHJvZ3JhbSB0eXBlIHZhbGlkYXRpb24uIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIG1hbmlwdWxhdGVkIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGluY29ycmVjdCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBsb2dpYyBlcnJvcnMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjQ1OjAwLjIxNTI5NTQyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjAxMzAxMTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX0xTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9wcm9nX2F0dGFjaFwiLFxuICAgIFwibGlua19jcmVhdGVcIixcbiAgICBcImxpbmtfdXBkYXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgY2FwYWJpbGl0eSBhbmQgYXR0YWNoIHR5cGUgY2hlY2tzIGZvciBCUEYgcHJvZ3JhbXMgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gSXQgbW92ZXMgdGhlIGBDQVBfTkVUX0FETUlOYCBjaGVjayBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgaW50byBhIHdyYXBwZXIgZnVuY3Rpb24gYGJwZl9wcm9nX2F0dGFjaF9jaGVja2AgYW5kIGFkZHMgYXR0YWNoIHR5cGUgdmFsaWRhdGlvbiBpbiBgbGlua191cGRhdGVgIGZvciBjZ3JvdXAgbGlua3MuIFRoZXNlIGNoYW5nZXMgb25seSBhZmZlY3QgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gcGVybWlzc2lvbnMgYW5kIHByb2dyYW0gdHlwZSB2YWxpZGF0aW9uLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBtYW5pcHVsYXRlZCBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBpbmNvcnJlY3QgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgbG9naWMgZXJyb3JzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZXJtaXNzaW9uIGFuZCB0eXBlIGNoZWNraW5nIGxvZ2ljIGZvciBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIGFuZCB1cGRhdGluZyBCUEYgbGlua3MsIHNwZWNpZmljYWxseSBmb3IgY2dyb3VwIGFuZCBMU00gcHJvZ3JhbXMuIFRoaXMgYWZmZWN0cyB0aGUgYnBmKCkgc3lzY2FsbCBvcGVyYXRpb25zIEJQRl9QUk9HX0FUVEFDSCwgQlBGX0xJTktfQ1JFQVRFLCBhbmQgQlBGX0xJTktfVVBEQVRFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTo0NTowMC4yMTUzMDMwNTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODg4NDYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJlYTI3YjM1ODI2OTYwNzVhZDUwODQwZTM0MWJlZDUyYzcxMTg0MTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDk6NDQ6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbmluZGV4IDY4NzRiYTE0MjRhZjAuLmRmZWEzMzdmZjI1ZWEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbkBAIC00NDgzLDEyICs0NDgzLDYgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbiBcXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOlxcbiBcXHRcXHRyZXR1cm4gYXR0YWNoX3R5cGUgPT0gcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPyAwIDogLUVJTlZBTDtcXG4gXFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0I6XFxuLVxcdFxcdGlmICghYnBmX3Rva2VuX2NhcGFibGUocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2V0b2tlbiwgQ0FQX05FVF9BRE1JTikpXFxuLVxcdFxcdFxcdC8qIGNnLXNrYiBwcm9ncyBjYW4gYmUgbG9hZGVkIGJ5IHVucHJpdiB1c2VyLlxcbi1cXHRcXHRcXHQgKiBjaGVjayBwZXJtaXNzaW9ucyBhdCBhdHRhY2ggdGltZS5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuLVxcbiBcXHRcXHRwdHlwZSA9IGF0dGFjaF90eXBlX3RvX3Byb2dfdHlwZShhdHRhY2hfdHlwZSk7XFxuIFxcdFxcdGlmIChwcm9nLVxcdTAwM2V0eXBlICE9IHB0eXBlKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtNDU0Miw2ICs0NTM2LDE5IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVjayhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuK1xcdFxcdFxcdFxcdCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcXG4re1xcbitcXHRpZiAocHJvZy1cXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFicGZfdG9rZW5fY2FwYWJsZShwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXRva2VuLCBDQVBfTkVUX0FETUlOKSlcXG4rXFx0XFx0LyogY2ctc2tiIHByb2dzIGNhbiBiZSBsb2FkZWQgYnkgdW5wcml2IHVzZXIuXFxuK1xcdFxcdCAqIGNoZWNrIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFxuK1xcdHJldHVybiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0YWNoX3R5cGUpO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBpc19jZ3JvdXBfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR5cGUsXFxuIFxcdFxcdFxcdFxcdGJvb2wgY2hlY2tfYXR5cGUpXFxuIHtcXG5AQCAtNDYwNiw3ICs0NjEzLDcgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuIFxcdGlmIChJU19FUlIocHJvZykpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKHByb2cpO1xcbiBcXG4tXFx0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRyLVxcdTAwM2VhdHRhY2hfdHlwZSkpIHtcXG4rXFx0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVjayhwcm9nLCBhdHRyLVxcdTAwM2VhdHRhY2hfdHlwZSkpIHtcXG4gXFx0XFx0YnBmX3Byb2dfcHV0KHByb2cpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbkBAIC01ODA1LDggKzU4MTIsNyBAQCBzdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcXG4gXFx0aWYgKElTX0VSUihwcm9nKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIocHJvZyk7XFxuIFxcbi1cXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0YXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xcbitcXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2socHJvZywgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuQEAgLTU5MzEsNiArNTkzNyw3IEBAIHN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEwsICpuZXdfcHJvZztcXG4gXFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbitcXHRlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZTtcXG4gXFx0dTMyIGZsYWdzO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG5AQCAtNTk2OCw2ICs1OTc1LDIyIEBAIHN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuIFxcdFxcdGdvdG8gb3V0X3B1dF9wcm9ncztcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKGxpbmstXFx1MDAzZXR5cGUgPT0gQlBGX0xJTktfVFlQRV9DR1JPVVApIHtcXG4rXFx0XFx0YXR5cGUgPSBsaW5rLVxcdTAwM2VhdHRhY2hfdHlwZTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQlBGX0xTTV9NQUMgYW5kIEJQRl9MU01fQ0dST1VQIHNoYXJlIEJQRl9QUk9HX1RZUEVfTFNNLCBzb1xcbitcXHRcXHQgKiB0aGUgaGVscGVyJ3MgZGVmYXVsdCBwcm9nLXR5cGUgY2hlY2sgY2Fubm90IGRpc3Rpbmd1aXNoIHRoZW0uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobmV3X3Byb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIG5ld19wcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBhdHlwZSlcXG4rXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUobmV3X3Byb2csXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGF0eXBlKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X3Byb2dzO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAobGluay1cXHUwMDNlb3BzLVxcdTAwM2V1cGRhdGVfcHJvZylcXG4gXFx0XFx0cmV0ID0gbGluay1cXHUwMDNlb3BzLVxcdTAwM2V1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpO1xcbiBcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjQ1OjAwLjY5NDk0Nzc1M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkxNzY0NzcwMTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfYXR0YWNoXCIsXG4gICAgXCJsaW5rX2NyZWF0ZVwiLFxuICAgIFwibGlua191cGRhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGVybWlzc2lvbiBhbmQgdHlwZSBjaGVja2luZyBsb2dpYyBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyBhbmQgdXBkYXRpbmcgQlBGIGxpbmtzLCBzcGVjaWZpY2FsbHkgZm9yIGNncm91cCBhbmQgTFNNIHByb2dyYW1zLiBUaGlzIGFmZmVjdHMgdGhlIGJwZigpIHN5c2NhbGwgb3BlcmF0aW9ucyBCUEZfUFJPR19BVFRBQ0gsIEJQRl9MSU5LX0NSRUFURSwgYW5kIEJQRl9MSU5LX1VQREFURS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmVhMjdiMzU4MjY5NjA3NWFkNTA4NDBlMzQxYmVkNTJjNzExODQxNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA5OjQ0OjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggNjg3NGJhMTQyNGFmMC4uZGZlYTMzN2ZmMjVlYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuQEAgLTQ0ODMsMTIgKzQ0ODMsNiBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOlxuIFx0XHRyZXR1cm4gYXR0YWNoX3R5cGUgPT0gcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA/IDAgOiAtRUlOVkFMO1xuIFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0I6XG4tXHRcdGlmICghYnBmX3Rva2VuX2NhcGFibGUocHJvZy1cdTAwM2VhdXgtXHUwMDNldG9rZW4sIENBUF9ORVRfQURNSU4pKVxuLVx0XHRcdC8qIGNnLXNrYiBwcm9ncyBjYW4gYmUgbG9hZGVkIGJ5IHVucHJpdiB1c2VyLlxuLVx0XHRcdCAqIGNoZWNrIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLlxuLVx0XHRcdCAqL1xuLVx0XHRcdHJldHVybiAtRVBFUk07XG4tXG4gXHRcdHB0eXBlID0gYXR0YWNoX3R5cGVfdG9fcHJvZ190eXBlKGF0dGFjaF90eXBlKTtcbiBcdFx0aWYgKHByb2ctXHUwMDNldHlwZSAhPSBwdHlwZSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC00NTQyLDYgKzQ1MzYsMTkgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuIFx0fVxuIH1cbiBcbitzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVjayhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4rXHRcdFx0XHQgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXG4re1xuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXHUwMDNlYXV4LVx1MDAzZXRva2VuLCBDQVBfTkVUX0FETUlOKSlcbitcdFx0LyogY2ctc2tiIHByb2dzIGNhbiBiZSBsb2FkZWQgYnkgdW5wcml2IHVzZXIuXG4rXHRcdCAqIGNoZWNrIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLlxuK1x0XHQgKi9cbitcdFx0cmV0dXJuIC1FUEVSTTtcbitcbitcdHJldHVybiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0YWNoX3R5cGUpO1xuK31cbitcbiBzdGF0aWMgYm9vbCBpc19jZ3JvdXBfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR5cGUsXG4gXHRcdFx0XHRib29sIGNoZWNrX2F0eXBlKVxuIHtcbkBAIC00NjA2LDcgKzQ2MTMsNyBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdGlmIChJU19FUlIocHJvZykpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByb2cpO1xuIFxuLVx0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKSkge1xuK1x0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVjayhwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKSkge1xuIFx0XHRicGZfcHJvZ19wdXQocHJvZyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTU4MDUsOCArNTgxMiw3IEBAIHN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxuIFx0aWYgKElTX0VSUihwcm9nKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocHJvZyk7XG4gXG4tXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZyxcbi1cdFx0XHRcdFx0XHRhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbitcdHJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVjayhwcm9nLCBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTU5MzEsNiArNTkzNyw3IEBAIHN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEwsICpuZXdfcHJvZztcbiBcdHN0cnVjdCBicGZfbGluayAqbGluaztcbitcdGVudW0gYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuIFx0dTMyIGZsYWdzO1xuIFx0aW50IHJldDtcbiBcbkBAIC01OTY4LDYgKzU5NzUsMjIgQEAgc3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdFx0Z290byBvdXRfcHV0X3Byb2dzO1xuIFx0fVxuIFxuK1x0aWYgKGxpbmstXHUwMDNldHlwZSA9PSBCUEZfTElOS19UWVBFX0NHUk9VUCkge1xuK1x0XHRhdHlwZSA9IGxpbmstXHUwMDNlYXR0YWNoX3R5cGU7XG4rXHRcdC8qXG4rXHRcdCAqIEJQRl9MU01fTUFDIGFuZCBCUEZfTFNNX0NHUk9VUCBzaGFyZSBCUEZfUFJPR19UWVBFX0xTTSwgc29cbitcdFx0ICogdGhlIGhlbHBlcidzIGRlZmF1bHQgcHJvZy10eXBlIGNoZWNrIGNhbm5vdCBkaXN0aW5ndWlzaCB0aGVtLlxuK1x0XHQgKi9cbitcdFx0aWYgKG5ld19wcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBuZXdfcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBhdHlwZSlcbitcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRlbHNlXG4rXHRcdFx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKG5ld19wcm9nLFxuK1x0XHRcdFx0XHRcdFx0XHRhdHlwZSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBvdXRfcHV0X3Byb2dzO1xuK1x0fVxuK1xuIFx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZXVwZGF0ZV9wcm9nKVxuIFx0XHRyZXQgPSBsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpO1xuIFx0ZWxzZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6NDU6MDAuNjk0OTQ5MzQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTczODk5NzQzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBhbmQgaXQgbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nIGFuZCBhIGNvdXBsZSBvZiBjb25kaXRpb25hbCB1cGRhdGVzIHdpdGhpbiB0aGUgQlBGIGF0dGFjaCBhbmQgbGluayBsb2dpYy4gVGhlIG1haW4gdGhydXN0IGlzIG1vdmluZyBhIHNwZWNpZmljIHBlcm1pc3Npb24gY2hlY2sgZm9yIGBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0JgIG91dCBvZiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCBhbmQgaW50byBhIG5ldyBmdW5jdGlvbiwgYGJwZl9wcm9nX2F0dGFjaF9jaGVja2AuIFRoaXMgc3VnZ2VzdHMgYW4gYXR0ZW1wdCB0byBzdHJlYW1saW5lIHRoZSBwZXJtaXNzaW9uIGNoZWNraW5nIHByb2Nlc3MgYW5kIHBvdGVudGlhbGx5IG1ha2UgaXQgbW9yZSByZXVzYWJsZS4gIEkgbmVlZCB0byBkaWcgaW50byB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGF0LCBidXQgaXQgc2VlbXMgc291bmQgb24gdGhlIHN1cmZhY2UuXG5cblRoZSBrZXkgY2hhbmdlIEkgc2VlIGlzIGluIGBsaW5rX3VwZGF0ZWAuIFRoZXkndmUgYWRkZWQgYSBjaGVjayBzcGVjaWZpY2FsbHkgZm9yIGBCUEZfTElOS19UWVBFX0NHUk9VUGAuIE5vdywgdGhpcyBpcyBpbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSBpdCBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHRoZSBuZXcgcHJvZ3JhbSBhdHRhY2hlZCBpcyBvZiB0eXBlIGBCUEZfUFJPR19UWVBFX0xTTWAuIFRoZSBjb21tZW50IGlzIGNydWNpYWw7IGl0IGV4cGxpY2l0bHkgYWRkcmVzc2VzIHRoZSBzaGFyZWQgcHJvZ3JhbSB0eXBlIGJldHdlZW4gYEJQRl9MU01fTUFDYCBhbmQgYEJQRl9MU01fQ0dST1VQYC4gIFRoaXMgaXMgYSBwcmV0dHkgdHlwaWNhbCBCUEYgc2l0dWF0aW9uLiBUaGV5IGFyZSByZWx5aW5nIG9uIHRoZSBhdHRhY2ggdHlwZSB0byBkaWZmZXJlbnRpYXRlIHRoZSBraW5kIG9mIExTTSBwcm9ncmFtIGluIHRoYXQgY2FzZSwgYnV0IHRoZSBkZWZhdWx0IGNoZWNrcyB3b3VsZCBub3QgZG8gdGhhdC4gTm93LCBpZiB0aGUgZXhwZWN0ZWQgYXR0YWNoIHR5cGUgb2YgdGhlIG5ldyBwcm9ncmFtIGRvZXNuJ3QgbWF0Y2ggdGhlIGF0dGFjaCB0eXBlIG9mIHRoZSBsaW5rLCBpdCB0aHJvd3MgYW4gYEVJTlZBTGAgZXJyb3IuIElmIHRoZXJlJ3Mgbm8gbWlzbWF0Y2gsIGl0IGZhbGxzIGJhY2sgdG8gdGhlIG9sZCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCBmdW5jdGlvbi4gIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlIGluIHRoZSBsaW5rIHVwZGF0ZSBwcm9jZWR1cmUsIGFuZCB0aGF0J3Mgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuXG5cbkdpdmVuIHRoaXMgbWFuaXB1bGF0aW9uIG9mIHRoZSBsaW5rIHVwZGF0ZSBsb2dpYywgdGhlIGNoYW5nZSBpcyB3b3J0aCBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoaXMgZnVuY3Rpb24gYW5kIGFueSBvdGhlciBhcmVhcyB0aGF0IGludGVyYWN0IHdpdGggaXQuXG5cbkknbGwgY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zIHRvIGVuc3VyZSB0aGUgZnV6emluZyBpcyB0aG9yb3VnaDogQlBGIGlzIGVuYWJsZWQgdmlhIGBDT05GSUdfQlBGX1NZU0NBTExgLCBDR1JPVVAgQlBGIG5lZWRzIGBDT05GSUdfQ0dST1VQX0JQRmAgYW5kIExTTSBCUEYgbmVlZHMgYENPTkZJR19CUEZfTFNNYC4gSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJlbGV2YW50IGNvbmZpZ3Mgc2V0IHRvIGFsbG93IHRob3JvdWdoIHRlc3Rpbmcgb2YgYWxsIHJlbGF0ZWQgY29kZSBwYXRocy5cblxuSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGBsaW5rX3VwZGF0ZWAgaXMgY2FsbGVkIGluIHRoZSBgX19zeXNfYnBmYCBzeXN0ZW0gY2FsbCB3aGVuIHRoZSBjb21tYW5kIGlzIGBCUEZfTElOS19VUERBVEVgLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIEkgdmVyaWZ5IHRoYXQgYGJwZl9wcm9nX2F0dGFjaGAgaXMgdXNlZCBieSB0aGUgYEJQRl9QUk9HX0FUVEFDSGAgY29tbWFuZCBhbmQgYGxpbmtfY3JlYXRlYCBpcyB1c2VkIGJ5IGBCUEZfTElOS19DUkVBVEVgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgZmxvdyBpcyBhcyBleHBlY3RlZC4gVGhpcyB3aWxsIGJlIHRoZSBiYXNpcyBvZiBteSBmdXp6aW5nIGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTo0NToxOC4wODQ5MjYwODZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4ODU5ODYwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTo0NToxOS43NzM1MzE0NjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzkxNzA5NjAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgU3Vic3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCB3aGljaCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0LiBJdCBsb29rcyBsaWtlIHdlJ3JlIHJlZmFjdG9yaW5nIHRoZSBhdHRhY2htZW50IGNoZWNrcy4gU3BlY2lmaWNhbGx5LCB0aGV5J3JlIHB1bGxpbmcgdGhlIGBDQVBfTkVUX0FETUlOYCByZXF1aXJlbWVudCBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgb3V0IG9mIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGFuZCBpbnRvIGEgbmV3IGZ1bmN0aW9uLCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYC4gVGhhdCdzIGNsZWFuZXI7IGNvbnNvbGlkYXRpbmcgdGhvc2UgcGVybWlzc2lvbiBjaGVja3MgbWFrZXMgc2Vuc2UuIFRoZXkncmUgYWxzbyB1cGRhdGluZyBgbGlua19jcmVhdGVgIGFuZCBgbGlua191cGRhdGVgIHRvIHVzZSB0aGUgbmV3IGNoZWNrLiBJJ20gd29uZGVyaW5nIHdoeSB0aGV5J3ZlIG1vdmVkIHRoZSBmdW5jdGlvbiBhbmQgbm90IGp1c3QgYWRkZWQgYSBuZXcgY2hlY2s/XG5cbkFscmlnaHQsIHNvIHRoZSBmdW5jdGlvbmFsIGltcGFjdCBpcyBvbiBhdHRhY2htZW50IGluIGBicGZfcHJvZ19hdHRhY2hgLCBgbGlua19jcmVhdGVgLCBhbmQgYGxpbmtfdXBkYXRlYC4gVGhlIHByaW1hcnkgY29uZmlnIHRoYXQncyByZWxldmFudCBoZXJlIGlzIGBCUEZfU1lTQ0FMTGAsIG9mIGNvdXJzZS4gTGV0J3Mgc2VlLi4uIGxldCBtZSBkb3VibGUtY2hlY2sgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzLiBJdCBsb29rcyBsaWtlIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG1haW4gb25lLiBXYWl0IGEgbWludXRlLi4uIGBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0JgIGhhcyBhIGRlcGVuZGVuY3kgb24gYENHUk9VUF9CUEZgLiBMZXQgbWUgbWFrZSBhIG1lbnRhbCBub3RlIHRvIGNoZWNrIHRoZSBgQ0dST1VQX0JQRmAgY29uZmlnOyBpdCdzIGFsd2F5cyBnb29kIHRvIGJlIGF3YXJlIG9mIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTo0NTozMy42OTA2M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkxNDA3OTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDR1JPVVBfQlBGXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMzQ1PWNvbmZpZyBDR1JPVVBfUEVSRlxcbi0tXFxuaW5pdC9LY29uZmlnLTEzNTUtXFxuaW5pdC9LY29uZmlnOjEzNTY6Y29uZmlnIENHUk9VUF9CUEZcXG5pbml0L0tjb25maWctMTM1Ny1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjQ1OjM1LjM4MjA0MzY1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0ODI4MjU1MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgd2hpY2ggaXMgcmlnaHQgd2hlcmUgSSdkIGV4cGVjdCB0byBzZWUgY2hhbmdlcyByZWxhdGVkIHRvIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgYW5kIG1hbmlwdWxhdGluZyBsaW5rcy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgYXR0YWNoIGFuZCBsaW5rIGxvZ2ljIGlzIGdldHRpbmcgc29tZSBhdHRlbnRpb24uIFNwZWNpZmljYWxseSwgdGhlIHJlZmFjdG9yaW5nIG9mIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGludG8gYGJwZl9wcm9nX2F0dGFjaF9jaGVja2AsIGFuZCB0aGUgc3Vic2VxdWVudCB1cGRhdGVzIHRvIGBicGZfcHJvZ19hdHRhY2hgLCBgbGlua19jcmVhdGVgLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGEgYEJQRl9MSU5LX1RZUEVfQ0dST1VQYCBjaGVjayBpbiBgbGlua191cGRhdGVgLCBzY3JlYW1zIFwicG90ZW50aWFsIGZvciBpbnRlcmVzdGluZyBmdXp6aW5nLlwiIFRoaXMgaXMgcHJpbWUgcmVhbCBlc3RhdGUgZm9yIGV4cGxvaXRhdGlvbiBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBmbGF3cy5cblxuR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLCBJJ2Qgc2F5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0byBrZWVwIGFuIGV5ZSBvbiBhcmUgYEJQRl9TWVNDQUxMYCAob2J2aW91c2x5KSBhbmQgYENHUk9VUF9CUEZgLiBJJ2xsIHdhbnQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBlbmFibGVkIGluIGFueSB0ZXN0IGVudmlyb25tZW50cy5cblxuTXkgaW5pdGlhbCBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgYGJwZl9wcm9nX2F0dGFjaGAsIGBsaW5rX2NyZWF0ZWAsIGFuZCBgbGlua191cGRhdGVgLiBUaG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGFwcGVhciB0byBiZSBkaXJlY3RseSBtb2RpZmllZCBieSB0aGlzIHBhdGNoLCBzbyB0aGV5IGFyZSB0aGUgb25lcyBJJ2xsIHRhcmdldCBmaXJzdC5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiBgYnBmX3Byb2dfYXR0YWNoYCBpcyAqc3RhdGljKj8gT2theSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2NvcGUgYW5kIGNhbGwgc2l0ZXMuIElmIGl0ICppcyogc3RhdGljLCBteSBhcHByb2FjaCBtaWdodCBuZWVkIGEgbWlub3IgYWRqdXN0bWVudCwgYnV0IGl0IHNob3VsZG4ndCBjaGFuZ2UgdGhlIG92ZXJhbGwgZnV6emluZyBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA5MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTo0NTo1MC4yMTAzMDA5NjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNTYwNDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz00Mzk4PWF0dGFjaF90eXBlX3RvX3Byb2dfdHlwZShlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ0NzMtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDQ3NDpzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDQ3NS1cXHRcXHRcXHRcXHRcXHQgICAgIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDUzOC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NTM5OnN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NTQwLVxcdFxcdFxcdFxcdCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ1NDgtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDU0OTpcXHRyZXR1cm4gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csIGF0dGFjaF90eXBlKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NTUwLX1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQ1NTI9c3RhdGljIGJvb2wgaXNfY2dyb3VwX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDU4NS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NTg2OnN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ1ODcte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDYxNS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NjE2OlxcdGlmIChicGZfcHJvZ19hdHRhY2hfY2hlY2socHJvZywgYXR0ci1cXHUwMDNlYXR0YWNoX3R5cGUpKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDYxNy1cXHRcXHRicGZfcHJvZ19wdXQocHJvZyk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjIxLVxcdGlmIChpc19jZ3JvdXBfcHJvZ190eXBlKHB0eXBlLCBwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSwgdHJ1ZSkpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NjIyOlxcdFxcdHJldCA9IGNncm91cF9icGZfcHJvZ19hdHRhY2goYXR0ciwgcHR5cGUsIHByb2cpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2MjMtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjM0LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9GTE9XX0RJU1NFQ1RPUjpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NjM1OlxcdFxcdHJldCA9IG5ldG5zX2JwZl9wcm9nX2F0dGFjaChhdHRyLCBwcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjM2LVxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTgwMD1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4MTQtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTgxNTpcXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2socHJvZywgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4MTYtXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU5MzY9c3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5ODctXFx0XFx0ZWxzZVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5ODg6XFx0XFx0XFx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKG5ld19wcm9nLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5ODktXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0YXR5cGUpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjMyNj1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mzk4LVxcdGNhc2UgQlBGX1BST0dfQVRUQUNIOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzOTk6XFx0XFx0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKFxcdTAwMjZhdHRyKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDAwLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTo0NTo1MC42ODA4NjYzMDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzA0MTYzNTUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmb2N1c2VkIG9uIEJQRiBzeXNjYWxscywgc3BlY2lmaWNhbGx5IGltcGFjdGluZyBob3cgQlBGIHByb2dyYW1zIGFyZSBhdHRhY2hlZCwgd2l0aCBhIGZvY3VzIG9uIGNncm91cHMgYW5kIExTTS4gSSBzZWUgaXQgbW9kaWZpZXMgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgOiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCwgYGJwZl9wcm9nX2F0dGFjaF9jaGVja2AsIGBicGZfcHJvZ19hdHRhY2hgLCBgbGlua19jcmVhdGVgLCBhbmQgYGxpbmtfdXBkYXRlYC5cblxuV2hhdCdzIGhhcHBlbmluZyBpcyB0aGF0IHRoZSBjYXBhYmlsaXR5IGNoZWNrIGZvciBgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCYCBpcyBiZWluZyBtb3ZlZCBvdXQgb2YgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWAgYW5kIGludG8gYSBuZXcgZnVuY3Rpb24sIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tgLiBUaGlzIG5ldyBmdW5jdGlvbiBpcyB0aGVuIHVzZWQgd2l0aGluIGBicGZfcHJvZ19hdHRhY2hgIGFuZCBgbGlua19jcmVhdGVgLiBBIGtleSBtb2RpZmljYXRpb24gaXMgd2l0aGluIGBsaW5rX3VwZGF0ZWAgd2hlcmUgdGhlcmUncyBhIGNoZWNrIGZvciBgbGluay1cdTAwM2V0eXBlID09IEJQRl9MSU5LX1RZUEVfQ0dST1VQYCwgZm9sbG93ZWQgYnkgYSBjYWxsIHRvIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGFuZCBzb21lIHNwZWNpZmljIGxvZ2ljIGZvciBgQlBGX1BST0dfVFlQRV9MU01gLlxuXG5UaGlzIGlzIGludGVyZXN0aW5nLCBhbmQgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIGZ1enppbmc7IHRoZSBjaGFuZ2VzIGhlcmUgdG91Y2ggY3JpdGljYWwgcGF0aHMgZm9yIEJQRiBwcm9ncmFtIGF0dGFjaG1lbnQuIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiBob3cgdGhlc2UgYWx0ZXJhdGlvbnMgaW1wYWN0IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgQlBGIHByb2dyYW0gdHlwZXMgYW5kIGF0dGFjaG1lbnQgcG9pbnRzLlxuXG5Gcm9tIGEgc3ltYm9sIHBlcnNwZWN0aXZlLCBteSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gYGJwZl9wcm9nX2F0dGFjaGAsIGBsaW5rX2NyZWF0ZWAsIGFuZCBgbGlua191cGRhdGVgLlxuXG5Db25maWd1cmF0aW9uIHdpc2UsIHRoZSBwYXRjaCB3aWxsIG5lZWQgdG8gYmUgdGVzdGVkIHdpdGggYEJQRl9TWVNDQUxMYCBhbmQgYENHUk9VUF9CUEZgIGVuYWJsZWQuIEkgYWxzbyBuZWVkIHRvIGJlIHN1cmUgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvbiBgQlBGX0xTTWAsIHNpbmNlIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBvbiBMU00sIHNvIEknbGwgYWRkIGBCUEZfTFNNYCB0byB0aGUgY29uZmlncyBqdXN0IHRvIGJlIHNhZmUuXG5cblNwZWNpZmljYWxseSwgdGhhdCBiaXQgb2YgY29kZSBpbiBgbGlua191cGRhdGVgIGlzIGltcG9ydGFudDpcblxuYGBgY1xuXHRpZiAobGluay1cdTAwM2V0eXBlID09IEJQRl9MSU5LX1RZUEVfQ0dST1VQKSB7XG5cdFx0YXR5cGUgPSBsaW5rLVx1MDAzZWF0dGFjaF90eXBlO1xuXHRcdC8qXG5cdFx0ICogQlBGX0xTTV9NQUMgYW5kIEJQRl9MU01fQ0dST1VQIHNoYXJlIEJQRl9QUk9HX1RZUEVfTFNNLCBzb1xuXHRcdCAqIHRoZSBoZWxwZXIncyBkZWZhdWx0IHByb2ctdHlwZSBjaGVjayBjYW5ub3QgZGlzdGluZ3Vpc2ggdGhlbS5cblx0XHQgKi9cblx0XHRpZiAobmV3X3Byb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0xTTSBcdTAwMjZcdTAwMjZcblx0XHQgICAgbmV3X3Byb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gYXR5cGUpXG5cdFx0XHRyZXQgPSAtRUlOVkFMO1xuXHRcdGVsc2Vcblx0XHRcdHJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShuZXdfcHJvZyxcblx0XHRcdFx0XHRcdFx0XHRhdHlwZSk7XG5cdFx0aWYgKHJldClcblx0XHRcdGdvdG8gb3V0X3B1dF9wcm9ncztcblx0fVxuYGBgXG5cblRoaXMgaXMgd2hlcmUgdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgdGhlIHBvdGVudGlhbCBhbWJpZ3VpdHkgYmV0d2VlbiBgQlBGX0xTTV9NQUNgIGFuZCBgQlBGX0xTTV9DR1JPVVBgIHByb2dyYW1zIHdoaWNoIGJvdGggaGF2ZSB0aGUgc2FtZSBwcm9ncmFtIHR5cGUuIFRoYXQgbmVlZHMgY2FyZWZ1bCBhdHRlbnRpb24gZHVyaW5nIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6NDY6MDcuNzIyNTA0NjM4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU2MjYzMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfTFNNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXFxcImtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTo0NjowOS4yNzg3NzU1OTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMxMDY2NDI4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgU3lzY2FsbCBNb2RpZmljYXRpb24gZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIEJQRiBzeXNjYWxsIGltcGxlbWVudGF0aW9uIOKAkyBzcGVjaWZpY2FsbHksIGl0J3MgcmVvcmdhbml6aW5nIHRoZSBwZXJtaXNzaW9uIGFuZCB0eXBlIGNoZWNrcyByZWxhdGVkIHRvIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgYW5kIHVwZGF0aW5nIEJQRiBsaW5rcy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBpbXBhY3QgaXMgb24gYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgcHJvZ3JhbXMgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggYENBUF9ORVRfQURNSU5gLCBhcyB3ZWxsIGFzIHNvbWUgc3BlY2lhbCBjb25zaWRlcmF0aW9ucyBmb3IgYEJQRl9QUk9HX1RZUEVfTFNNYC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBtb3ZpbmcgdGhlIGNoZWNrcyB0aGF0IHdlcmUgcHJldmlvdXNseSBpbiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCBpbnRvIGEgbmV3IGZ1bmN0aW9uIGNhbGxlZCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYC4gVGhpcyBuZXcgZnVuY3Rpb24gaXMgdGhlbiBsZXZlcmFnZWQgaW4gYGJwZl9wcm9nX2F0dGFjaGAgYW5kIGBsaW5rX2NyZWF0ZWAuIENyaXRpY2FsbHksIGBsaW5rX3VwZGF0ZWAgYWxzbyBzZWVzIGEgY2hhbmdlOyBpdCBub3cgaW5jbHVkZXMgYSBjaGVjayBmb3IgYGxpbmstXHUwMDNldHlwZSA9PSBCUEZfTElOS19UWVBFX0NHUk9VUGAgYW5kIGNhbGxzIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGFsb25nIHdpdGggdGhlIHNwZWNpYWwgTFNNIGNoZWNrLiBUaGlzIHNpZ25pZmljYW50bHkgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiBgQlBGX0xJTktfVVBEQVRFYCBzcGVjaWZpY2FsbHkgZm9yIGNncm91cCBsaW5rcy5cblxuQ29uc2lkZXJpbmcgdGhpcywgdGhlIGBicGZfcHJvZ19hdHRhY2hgLCBgbGlua19jcmVhdGVgLCBhbmQgYGxpbmtfdXBkYXRlYCBvcGVyYXRpb25zIHRocm91Z2ggdGhlIGBicGYoKWAgc3lzY2FsbCBhcmUgdGhlIGZvY2FsIHBvaW50cy4gU2luY2UgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBpdCBpcyBkZWZpbml0ZWx5IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIGBsaW5rX3VwZGF0ZWAgaXMgcmVhY2hlZCB2aWEgdGhlIGBicGYoQlBGX0xJTktfVVBEQVRFLCAuLi4pYCBzeXNjYWxsIHBhdGgsIGBicGZfcHJvZ19hdHRhY2hgIHZpYSBgYnBmKEJQRl9QUk9HX0FUVEFDSCwgLi4uKWAgYW5kIGBsaW5rX2NyZWF0ZWAgdmlhIGBicGYoQlBGX0xJTktfQ1JFQVRFLCAuLi4pYC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gcmVhY2hhYmlsaXR5LiBPaywgaXQgbG9va3MgbGlrZSBgbGlua191cGRhdGVgIGlzIHN0YXRpYyB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBidXQgY2FsbGVkIGZyb20gYF9fc3lzX2JwZmAuIEFuZCBgX19zeXNfYnBmYCBpcyBzdGF0aWMgdG9vLCB0aGUgYWN0dWFsIHN5c2NhbGwgaXMgYHN5c19icGZgLiBTbywgd2hpbGUgaXQncyBzdGF0aWMsIGl0J3MgcGFydCBvZiB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIEJQRiBzeXNjYWxsIG9wZXJhdGlvbnMgYW5kIGxpa2VseSBub3QgaW5saW5lZCBkZXNwaXRlIGJlaW5nIGEgcmVsYXRpdmVseSBsYXJnZSBmdW5jdGlvbi4gVGhpcyBzYW1lIGxvZ2ljIHdvdWxkIGFwcGx5IHRvIHRoZSBvdGhlciBmdW5jdGlvbnMuXG5cblRoZXJlZm9yZSwgdGhlIG1vc3QgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZTpcblxuKiAgIGBicGZfcHJvZ19hdHRhY2hgXG4qICAgYGxpbmtfY3JlYXRlYFxuKiAgIGBsaW5rX3VwZGF0ZWBcblxuSSdsbCBpbmNsdWRlIGBfX3N5c19icGZgIGFuZCBgc3lzX2JwZmAganVzdCBpbiBjYXNlLCBidXQgdGhlIHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIHRoZSBmdW5jdGlvbnMgaW1wbGVtZW50aW5nIHRoZSBCUEYgb3BlcmF0aW9ucy5cblxuVGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmU6IGBCUEZfU1lTQ0FMTGAsIGBDR1JPVVBfQlBGYCwgYW5kIGBCUEZfTFNNYC5cblxuSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCdzIGltcGFjdCBvbiB0aGVzZSBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBwZXJtaXNzaW9ucyBhbmQgY2dyb3VwIHByb2dyYW1zLCBtYWtlcyB0aGlzIGEgcHJvbWlzaW5nIHRhcmdldCBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIzMSwiT3V0cHV0VG9rZW5zIjoxMzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6NDY6MzIuMzg1NDIxMDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDI5NDI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIkJQRl9MU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19hdHRhY2hcIixcbiAgICBcImxpbmtfY3JlYXRlXCIsXG4gICAgXCJsaW5rX3VwZGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZXJtaXNzaW9uIGFuZCB0eXBlIGNoZWNraW5nIGxvZ2ljIGZvciBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIGFuZCB1cGRhdGluZyBCUEYgbGlua3MsIHNwZWNpZmljYWxseSBmb3IgY2dyb3VwIGFuZCBMU00gcHJvZ3JhbXMuIFRoaXMgYWZmZWN0cyB0aGUgYnBmKCkgc3lzY2FsbCBvcGVyYXRpb25zIEJQRl9QUk9HX0FUVEFDSCwgQlBGX0xJTktfQ1JFQVRFLCBhbmQgQlBGX0xJTktfVVBEQVRFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfYXR0YWNoXCIsXG4gICAgXCJsaW5rX2NyZWF0ZVwiLFxuICAgIFwibGlua191cGRhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGVybWlzc2lvbiBhbmQgdHlwZSBjaGVja2luZyBsb2dpYyBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyBhbmQgdXBkYXRpbmcgQlBGIGxpbmtzLCBzcGVjaWZpY2FsbHkgZm9yIGNncm91cCBhbmQgTFNNIHByb2dyYW1zLiBUaGlzIGFmZmVjdHMgdGhlIGJwZigpIHN5c2NhbGwgb3BlcmF0aW9ucyBCUEZfUFJPR19BVFRBQ0gsIEJQRl9MSU5LX0NSRUFURSwgYW5kIEJQRl9MSU5LX1VQREFURS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6NDY6MzIuNDU5NzIwOTM4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzY4NTczOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6NDY6MzIuNDYwMTY0NzE3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk3NjgxMjY1NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBjYXBhYmlsaXR5IGFuZCBhdHRhY2ggdHlwZSBjaGVja3MgZm9yIEJQRiBwcm9ncmFtcyBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBJdCBtb3ZlcyB0aGUgYENBUF9ORVRfQURNSU5gIGNoZWNrIGZvciBgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCYCBpbnRvIGEgd3JhcHBlciBmdW5jdGlvbiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYCBhbmQgYWRkcyBhdHRhY2ggdHlwZSB2YWxpZGF0aW9uIGluIGBsaW5rX3VwZGF0ZWAgZm9yIGNncm91cCBsaW5rcy4gVGhlc2UgY2hhbmdlcyBvbmx5IGFmZmVjdCBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBwZXJtaXNzaW9ucyBhbmQgcHJvZ3JhbSB0eXBlIHZhbGlkYXRpb24uIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIG1hbmlwdWxhdGVkIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGluY29ycmVjdCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBsb2dpYyBlcnJvcnMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmVhMjdiMzU4MjY5NjA3NWFkNTA4NDBlMzQxYmVkNTJjNzExODQxNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA5OjQ0OjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggNjg3NGJhMTQyNGFmMC4uZGZlYTMzN2ZmMjVlYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuQEAgLTQ0ODMsMTIgKzQ0ODMsNiBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOlxuIFx0XHRyZXR1cm4gYXR0YWNoX3R5cGUgPT0gcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA/IDAgOiAtRUlOVkFMO1xuIFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0I6XG4tXHRcdGlmICghYnBmX3Rva2VuX2NhcGFibGUocHJvZy1cdTAwM2VhdXgtXHUwMDNldG9rZW4sIENBUF9ORVRfQURNSU4pKVxuLVx0XHRcdC8qIGNnLXNrYiBwcm9ncyBjYW4gYmUgbG9hZGVkIGJ5IHVucHJpdiB1c2VyLlxuLVx0XHRcdCAqIGNoZWNrIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLlxuLVx0XHRcdCAqL1xuLVx0XHRcdHJldHVybiAtRVBFUk07XG4tXG4gXHRcdHB0eXBlID0gYXR0YWNoX3R5cGVfdG9fcHJvZ190eXBlKGF0dGFjaF90eXBlKTtcbiBcdFx0aWYgKHByb2ctXHUwMDNldHlwZSAhPSBwdHlwZSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC00NTQyLDYgKzQ1MzYsMTkgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuIFx0fVxuIH1cbiBcbitzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVjayhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4rXHRcdFx0XHQgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXG4re1xuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXHUwMDNlYXV4LVx1MDAzZXRva2VuLCBDQVBfTkVUX0FETUlOKSlcbitcdFx0LyogY2ctc2tiIHByb2dzIGNhbiBiZSBsb2FkZWQgYnkgdW5wcml2IHVzZXIuXG4rXHRcdCAqIGNoZWNrIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLlxuK1x0XHQgKi9cbitcdFx0cmV0dXJuIC1FUEVSTTtcbitcbitcdHJldHVybiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0YWNoX3R5cGUpO1xuK31cbitcbiBzdGF0aWMgYm9vbCBpc19jZ3JvdXBfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR5cGUsXG4gXHRcdFx0XHRib29sIGNoZWNrX2F0eXBlKVxuIHtcbkBAIC00NjA2LDcgKzQ2MTMsNyBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdGlmIChJU19FUlIocHJvZykpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByb2cpO1xuIFxuLVx0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKSkge1xuK1x0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVjayhwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKSkge1xuIFx0XHRicGZfcHJvZ19wdXQocHJvZyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTU4MDUsOCArNTgxMiw3IEBAIHN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxuIFx0aWYgKElTX0VSUihwcm9nKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocHJvZyk7XG4gXG4tXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZyxcbi1cdFx0XHRcdFx0XHRhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbitcdHJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVjayhwcm9nLCBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTU5MzEsNiArNTkzNyw3IEBAIHN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEwsICpuZXdfcHJvZztcbiBcdHN0cnVjdCBicGZfbGluayAqbGluaztcbitcdGVudW0gYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuIFx0dTMyIGZsYWdzO1xuIFx0aW50IHJldDtcbiBcbkBAIC01OTY4LDYgKzU5NzUsMjIgQEAgc3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdFx0Z290byBvdXRfcHV0X3Byb2dzO1xuIFx0fVxuIFxuK1x0aWYgKGxpbmstXHUwMDNldHlwZSA9PSBCUEZfTElOS19UWVBFX0NHUk9VUCkge1xuK1x0XHRhdHlwZSA9IGxpbmstXHUwMDNlYXR0YWNoX3R5cGU7XG4rXHRcdC8qXG4rXHRcdCAqIEJQRl9MU01fTUFDIGFuZCBCUEZfTFNNX0NHUk9VUCBzaGFyZSBCUEZfUFJPR19UWVBFX0xTTSwgc29cbitcdFx0ICogdGhlIGhlbHBlcidzIGRlZmF1bHQgcHJvZy10eXBlIGNoZWNrIGNhbm5vdCBkaXN0aW5ndWlzaCB0aGVtLlxuK1x0XHQgKi9cbitcdFx0aWYgKG5ld19wcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBuZXdfcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBhdHlwZSlcbitcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRlbHNlXG4rXHRcdFx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKG5ld19wcm9nLFxuK1x0XHRcdFx0XHRcdFx0XHRhdHlwZSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBvdXRfcHV0X3Byb2dzO1xuK1x0fVxuK1xuIFx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZXVwZGF0ZV9wcm9nKVxuIFx0XHRyZXQgPSBsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpO1xuIFx0ZWxzZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6NDY6MzIuNDYwMTY2NDY4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3NjgxMDI3OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IHByb2JhYmx5IGRvZXNuJ3QsIGJ1dCBsZXQncyBiZSB0aG9yb3VnaC5cblxuVGhlIGNoYW5nZXMgYXJlIGFsbCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBhbmQgaXQncyBtb3N0bHkgYWJvdXQgcmVmYWN0b3JpbmcgaG93IHRoZSBrZXJuZWwgY2hlY2tzIEJQRiBwcm9ncmFtIGNhcGFiaWxpdGllcyBhbmQgYXR0YWNobWVudCB0eXBlcy4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggbW92ZXMgdGhlIGBDQVBfTkVUX0FETUlOYCBjaGVjayBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgaW50byB0aGlzIG5ldyBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYCBmdW5jdGlvbi4gSXQgYWxzbyB1cGRhdGVzIGV4aXN0aW5nIGZ1bmN0aW9ucywgYGJwZl9wcm9nX2F0dGFjaGAgYW5kIGBsaW5rX2NyZWF0ZWAsIHRvIHVzZSB0aGlzIG5ldyBmdW5jdGlvbiBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCwgd2hpY2ggaXMgc3RpbGwgdXNlZCBpbiBgbGlua191cGRhdGVgIGJ1dCBvbmx5IGlmIHRoZSBsaW5rIHR5cGUgaXMgYEJQRl9MSU5LX1RZUEVfQ0dST1VQYC5cblxuTXkgcHJpbWFyeSBjb25jZXJuIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBuZXcgb3Bwb3J0dW5pdGllcyBmb3IgcmVhZGluZyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgdGhhdCdzIHRoZSBrZXkuIEkgc2VlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgbm8gZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBubyBjaGFuZ2VzIHRvIGhvdyBib3VuZHMgb3IgbGVuZ3RocyBhcmUgY2hlY2tlZCB0aGF0IGNvdWxkIGxlYWQgdG8gdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIGFsbW9zdCBlbnRpcmVseSBjb250cm9sIGZsb3cuIEl0J3MgcGVybWlzc2lvbiBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiBsb2dpYy5cblxuVGhlcmVmb3JlLCB0aGUgbGlrZWxpaG9vZCBvZiB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGFuICp1bmluaXRpYWxpemVkIG1lbW9yeSogcmlzayBpcyBlZmZlY3RpdmVseSB6ZXJvLiBSZWd1bGFyIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyB0aGF0IG1pZ2h0IGNyZWVwIGluLCBhbmQgdGhvc2UgYXJlIHdoYXQgd2Ugd291bGQgZXhwZWN0IHRvIHNlZSBpbiBhIHBhdGNoIGxpa2UgdGhpcy5cblxuU28sIEknbSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgSSdsbCBkZXRhaWwgdGhpcyByZWFzb25pbmcgaW4gdGhlIGNvbW1pdCBtZXNzYWdlLiBUaGUgcGF0Y2ggcmVmYWN0b3JzIGNhcGFiaWxpdHkgYW5kIGF0dGFjaCB0eXBlIGNoZWNrcyBmb3IgQlBGIHByb2dyYW1zIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIGFuZCB0aGVzZSBjaGFuZ2VzIGZvY3VzIHNvbGVseSBvbiBjb250cm9sIGZsb3cgcmVnYXJkaW5nIHBlcm1pc3Npb25zIGFuZCBwcm9ncmFtIHR5cGUgdmFsaWRhdGlvbi4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgbWFuaXB1bGF0ZWQgaW4gYW55IHdheSB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgc2FuaXRpemVycyBzaG91bGQgYmUgc3VmZmljaWVudC4gSSBhbSBub3Qgc2VlaW5nIGEgbmVlZCBmb3IgS01TQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTYsIk91dHB1dFRva2VucyI6MTg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6NDY6NDIuMjI4MjcxOTQ2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgY2FwYWJpbGl0eSBhbmQgYXR0YWNoIHR5cGUgY2hlY2tzIGZvciBCUEYgcHJvZ3JhbXMgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gSXQgbW92ZXMgdGhlIGBDQVBfTkVUX0FETUlOYCBjaGVjayBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgaW50byBhIHdyYXBwZXIgZnVuY3Rpb24gYGJwZl9wcm9nX2F0dGFjaF9jaGVja2AgYW5kIGFkZHMgYXR0YWNoIHR5cGUgdmFsaWRhdGlvbiBpbiBgbGlua191cGRhdGVgIGZvciBjZ3JvdXAgbGlua3MuIFRoZXNlIGNoYW5nZXMgb25seSBhZmZlY3QgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gcGVybWlzc2lvbnMgYW5kIHByb2dyYW0gdHlwZSB2YWxpZGF0aW9uLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBtYW5pcHVsYXRlZCBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBpbmNvcnJlY3QgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgbG9naWMgZXJyb3JzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBjYXBhYmlsaXR5IGFuZCBhdHRhY2ggdHlwZSBjaGVja3MgZm9yIEJQRiBwcm9ncmFtcyBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBJdCBtb3ZlcyB0aGUgYENBUF9ORVRfQURNSU5gIGNoZWNrIGZvciBgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCYCBpbnRvIGEgd3JhcHBlciBmdW5jdGlvbiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYCBhbmQgYWRkcyBhdHRhY2ggdHlwZSB2YWxpZGF0aW9uIGluIGBsaW5rX3VwZGF0ZWAgZm9yIGNncm91cCBsaW5rcy4gVGhlc2UgY2hhbmdlcyBvbmx5IGFmZmVjdCBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBwZXJtaXNzaW9ucyBhbmQgcHJvZ3JhbSB0eXBlIHZhbGlkYXRpb24uIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIG1hbmlwdWxhdGVkIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGluY29ycmVjdCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBsb2dpYyBlcnJvcnMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflown6q5q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 09:08:26 +0000 UTC FinishedAt: 2026-08-21 09:46:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d19862d923b9a785ec27bc51c334a8d457a0dd03", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "BPF_LSM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d19862d923b9a785ec27bc51c334a8d457a0dd03", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "CGROUP_BPF", "BPF_LSM" ], "series_id": "f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_prog_attach", "link_create", "link_update" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX0xTTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9wcm9nX2F0dGFjaCYjMzQ7LAogICAgJiMzNDtsaW5rX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtsaW5rX3VwZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBjYXBhYmlsaXR5IGFuZCBhdHRhY2ggdHlwZSBjaGVja3MgZm9yIEJQRiBwcm9ncmFtcyBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBJdCBtb3ZlcyB0aGUgYENBUF9ORVRfQURNSU5gIGNoZWNrIGZvciBgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCYCBpbnRvIGEgd3JhcHBlciBmdW5jdGlvbiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYCBhbmQgYWRkcyBhdHRhY2ggdHlwZSB2YWxpZGF0aW9uIGluIGBsaW5rX3VwZGF0ZWAgZm9yIGNncm91cCBsaW5rcy4gVGhlc2UgY2hhbmdlcyBvbmx5IGFmZmVjdCBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBwZXJtaXNzaW9ucyBhbmQgcHJvZ3JhbSB0eXBlIHZhbGlkYXRpb24uIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIG1hbmlwdWxhdGVkIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGluY29ycmVjdCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBsb2dpYyBlcnJvcnMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZXJtaXNzaW9uIGFuZCB0eXBlIGNoZWNraW5nIGxvZ2ljIGZvciBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIGFuZCB1cGRhdGluZyBCUEYgbGlua3MsIHNwZWNpZmljYWxseSBmb3IgY2dyb3VwIGFuZCBMU00gcHJvZ3JhbXMuIFRoaXMgYWZmZWN0cyB0aGUgYnBmKCkgc3lzY2FsbCBvcGVyYXRpb25zIEJQRl9QUk9HX0FUVEFDSCwgQlBGX0xJTktfQ1JFQVRFLCBhbmQgQlBGX0xJTktfVVBEQVRFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmVhMjdiMzU4MjY5NjA3NWFkNTA4NDBlMzQxYmVkNTJjNzExODQxNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA5OjQ0OjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbmluZGV4IDY4NzRiYTE0MjRhZjAuLmRmZWEzMzdmZjI1ZWEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC00NDgzLDEyICYjNDM7NDQ4Myw2IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcdGNhc2UgQlBGX1BST0dfVFlQRV9TS19MT09LVVA6XG4gXHRcdHJldHVybiBhdHRhY2hfdHlwZSA9PSBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID8gMCA6IC1FSU5WQUw7XG4gXHRjYXNlIEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQjpcbi1cdFx0aWYgKCFicGZfdG9rZW5fY2FwYWJsZShwcm9nLVx1MDAzZWF1eC1cdTAwM2V0b2tlbiwgQ0FQX05FVF9BRE1JTikpXG4tXHRcdFx0LyogY2ctc2tiIHByb2dzIGNhbiBiZSBsb2FkZWQgYnkgdW5wcml2IHVzZXIuXG4tXHRcdFx0ICogY2hlY2sgcGVybWlzc2lvbnMgYXQgYXR0YWNoIHRpbWUuXG4tXHRcdFx0ICovXG4tXHRcdFx0cmV0dXJuIC1FUEVSTTtcbi1cbiBcdFx0cHR5cGUgPSBhdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoYXR0YWNoX3R5cGUpO1xuIFx0XHRpZiAocHJvZy1cdTAwM2V0eXBlICE9IHB0eXBlKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTQ1NDIsNiAmIzQzOzQ1MzYsMTkgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2soY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuJiM0MztcdFx0XHRcdCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcbiYjNDM7e1xuJiM0MztcdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhYnBmX3Rva2VuX2NhcGFibGUocHJvZy1cdTAwM2VhdXgtXHUwMDNldG9rZW4sIENBUF9ORVRfQURNSU4pKVxuJiM0MztcdFx0LyogY2ctc2tiIHByb2dzIGNhbiBiZSBsb2FkZWQgYnkgdW5wcml2IHVzZXIuXG4mIzQzO1x0XHQgKiBjaGVjayBwZXJtaXNzaW9ucyBhdCBhdHRhY2ggdGltZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRhY2hfdHlwZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgaXNfY2dyb3VwX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxuIFx0XHRcdFx0Ym9vbCBjaGVja19hdHlwZSlcbiB7XG5AQCAtNDYwNiw3ICYjNDM7NDYxMyw3IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFx0aWYgKElTX0VSUihwcm9nKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocHJvZyk7XG4gXG4tXHRpZiAoYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csIGF0dHItXHUwMDNlYXR0YWNoX3R5cGUpKSB7XG4mIzQzO1x0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVjayhwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKSkge1xuIFx0XHRicGZfcHJvZ19wdXQocHJvZyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTU4MDUsOCAmIzQzOzU4MTIsNyBAQCBzdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcbiBcdGlmIChJU19FUlIocHJvZykpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByb2cpO1xuIFxuLVx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csXG4tXHRcdFx0XHRcdFx0YXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrKHByb2csIGF0dHItXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXQ7XG4gXG5AQCAtNTkzMSw2ICYjNDM7NTkzNyw3IEBAIHN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEwsICpuZXdfcHJvZztcbiBcdHN0cnVjdCBicGZfbGluayAqbGluaztcbiYjNDM7XHRlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZTtcbiBcdHUzMiBmbGFncztcbiBcdGludCByZXQ7XG4gXG5AQCAtNTk2OCw2ICYjNDM7NTk3NSwyMiBAQCBzdGF0aWMgaW50IGxpbmtfdXBkYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFx0XHRnb3RvIG91dF9wdXRfcHJvZ3M7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKGxpbmstXHUwMDNldHlwZSA9PSBCUEZfTElOS19UWVBFX0NHUk9VUCkge1xuJiM0MztcdFx0YXR5cGUgPSBsaW5rLVx1MDAzZWF0dGFjaF90eXBlO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEJQRl9MU01fTUFDIGFuZCBCUEZfTFNNX0NHUk9VUCBzaGFyZSBCUEZfUFJPR19UWVBFX0xTTSwgc29cbiYjNDM7XHRcdCAqIHRoZSBoZWxwZXImIzM5O3MgZGVmYXVsdCBwcm9nLXR5cGUgY2hlY2sgY2Fubm90IGRpc3Rpbmd1aXNoIHRoZW0uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChuZXdfcHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIG5ld19wcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlICE9IGF0eXBlKVxuJiM0MztcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUobmV3X3Byb2csXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRhdHlwZSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF9wdXRfcHJvZ3M7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZylcbiBcdFx0cmV0ID0gbGluay1cdTAwM2VvcHMtXHUwMDNldXBkYXRlX3Byb2cobGluaywgbmV3X3Byb2csIG9sZF9wcm9nKTtcbiBcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOTo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2xpbmtfY3JlYXRlJiMzNDssCiAgICAmIzM0O2xpbmtfdXBkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZXJtaXNzaW9uIGFuZCB0eXBlIGNoZWNraW5nIGxvZ2ljIGZvciBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIGFuZCB1cGRhdGluZyBCUEYgbGlua3MsIHNwZWNpZmljYWxseSBmb3IgY2dyb3VwIGFuZCBMU00gcHJvZ3JhbXMuIFRoaXMgYWZmZWN0cyB0aGUgYnBmKCkgc3lzY2FsbCBvcGVyYXRpb25zIEJQRl9QUk9HX0FUVEFDSCwgQlBGX0xJTktfQ1JFQVRFLCBhbmQgQlBGX0xJTktfVVBEQVRFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmVhMjdiMzU4MjY5NjA3NWFkNTA4NDBlMzQxYmVkNTJjNzExODQxNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDA5OjQ0OjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCA2ODc0YmExNDI0YWYwLi5kZmVhMzM3ZmYyNWVhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwpAQCAtNDQ4MywxMiAmIzQzOzQ0ODMsNiBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiAJY2FzZSBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUDoKIAkJcmV0dXJuIGF0dGFjaF90eXBlID09IHByb2ctJmd0O2V4cGVjdGVkX2F0dGFjaF90eXBlID8gMCA6IC1FSU5WQUw7CiAJY2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0I6Ci0JCWlmICghYnBmX3Rva2VuX2NhcGFibGUocHJvZy0mZ3Q7YXV4LSZndDt0b2tlbiwgQ0FQX05FVF9BRE1JTikpCi0JCQkvKiBjZy1za2IgcHJvZ3MgY2FuIGJlIGxvYWRlZCBieSB1bnByaXYgdXNlci4KLQkJCSAqIGNoZWNrIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLgotCQkJICovCi0JCQlyZXR1cm4gLUVQRVJNOwotCiAJCXB0eXBlID0gYXR0YWNoX3R5cGVfdG9fcHJvZ190eXBlKGF0dGFjaF90eXBlKTsKIAkJaWYgKHByb2ctJmd0O3R5cGUgIT0gcHR5cGUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ1NDIsNiAmIzQzOzQ1MzYsMTkgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLAogCX0KIH0KIAomIzQzO3N0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywKJiM0MzsJCQkJIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKQomIzQzO3sKJiM0MzsJaWYgKHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCICZhbXA7JmFtcDsKJiM0MzsJICAgICFicGZfdG9rZW5fY2FwYWJsZShwcm9nLSZndDthdXgtJmd0O3Rva2VuLCBDQVBfTkVUX0FETUlOKSkKJiM0MzsJCS8qIGNnLXNrYiBwcm9ncyBjYW4gYmUgbG9hZGVkIGJ5IHVucHJpdiB1c2VyLgomIzQzOwkJICogY2hlY2sgcGVybWlzc2lvbnMgYXQgYXR0YWNoIHRpbWUuCiYjNDM7CQkgKi8KJiM0MzsJCXJldHVybiAtRVBFUk07CiYjNDM7CiYjNDM7CXJldHVybiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0YWNoX3R5cGUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGlzX2Nncm91cF9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZSwKIAkJCQlib29sIGNoZWNrX2F0eXBlKQogewpAQCAtNDYwNiw3ICYjNDM7NDYxMyw3IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKQogCWlmIChJU19FUlIocHJvZykpCiAJCXJldHVybiBQVFJfRVJSKHByb2cpOwogCi0JaWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRyLSZndDthdHRhY2hfdHlwZSkpIHsKJiM0MzsJaWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVjayhwcm9nLCBhdHRyLSZndDthdHRhY2hfdHlwZSkpIHsKIAkJYnBmX3Byb2dfcHV0KHByb2cpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01ODA1LDggJiM0Mzs1ODEyLDcgQEAgc3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpCiAJaWYgKElTX0VSUihwcm9nKSkKIAkJcmV0dXJuIFBUUl9FUlIocHJvZyk7CiAKLQlyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywKLQkJCQkJCWF0dHItJmd0O2xpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrKHByb2csIGF0dHItJmd0O2xpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIApAQCAtNTkzMSw2ICYjNDM7NTkzNyw3IEBAIHN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpCiB7CiAJc3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEwsICpuZXdfcHJvZzsKIAlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CiYjNDM7CWVudW0gYnBmX2F0dGFjaF90eXBlIGF0eXBlOwogCXUzMiBmbGFnczsKIAlpbnQgcmV0OwogCkBAIC01OTY4LDYgJiM0Mzs1OTc1LDIyIEBAIHN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpCiAJCWdvdG8gb3V0X3B1dF9wcm9nczsKIAl9CiAKJiM0MzsJaWYgKGxpbmstJmd0O3R5cGUgPT0gQlBGX0xJTktfVFlQRV9DR1JPVVApIHsKJiM0MzsJCWF0eXBlID0gbGluay0mZ3Q7YXR0YWNoX3R5cGU7CiYjNDM7CQkvKgomIzQzOwkJICogQlBGX0xTTV9NQUMgYW5kIEJQRl9MU01fQ0dST1VQIHNoYXJlIEJQRl9QUk9HX1RZUEVfTFNNLCBzbwomIzQzOwkJICogdGhlIGhlbHBlciYjMzk7cyBkZWZhdWx0IHByb2ctdHlwZSBjaGVjayBjYW5ub3QgZGlzdGluZ3Vpc2ggdGhlbS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG5ld19wcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNICZhbXA7JmFtcDsKJiM0MzsJCSAgICBuZXdfcHJvZy0mZ3Q7ZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gYXR5cGUpCiYjNDM7CQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUobmV3X3Byb2csCiYjNDM7CQkJCQkJCQlhdHlwZSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gb3V0X3B1dF9wcm9nczsKJiM0MzsJfQomIzQzOwogCWlmIChsaW5rLSZndDtvcHMtJmd0O3VwZGF0ZV9wcm9nKQogCQlyZXQgPSBsaW5rLSZndDtvcHMtJmd0O3VwZGF0ZV9wcm9nKGxpbmssIG5ld19wcm9nLCBvbGRfcHJvZyk7CiAJZWxzZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTU5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIGFuZCBpdCBsb29rcyBsaWtlIGEgcmVmYWN0b3JpbmcgYW5kIGEgY291cGxlIG9mIGNvbmRpdGlvbmFsIHVwZGF0ZXMgd2l0aGluIHRoZSBCUEYgYXR0YWNoIGFuZCBsaW5rIGxvZ2ljLiBUaGUgbWFpbiB0aHJ1c3QgaXMgbW92aW5nIGEgc3BlY2lmaWMgcGVybWlzc2lvbiBjaGVjayBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgb3V0IG9mIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGFuZCBpbnRvIGEgbmV3IGZ1bmN0aW9uLCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYC4gVGhpcyBzdWdnZXN0cyBhbiBhdHRlbXB0IHRvIHN0cmVhbWxpbmUgdGhlIHBlcm1pc3Npb24gY2hlY2tpbmcgcHJvY2VzcyBhbmQgcG90ZW50aWFsbHkgbWFrZSBpdCBtb3JlIHJldXNhYmxlLiAgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoYXQsIGJ1dCBpdCBzZWVtcyBzb3VuZCBvbiB0aGUgc3VyZmFjZS4KClRoZSBrZXkgY2hhbmdlIEkgc2VlIGlzIGluIGBsaW5rX3VwZGF0ZWAuIFRoZXkmIzM5O3ZlIGFkZGVkIGEgY2hlY2sgc3BlY2lmaWNhbGx5IGZvciBgQlBGX0xJTktfVFlQRV9DR1JPVVBgLiBOb3csIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIGxpa2UgaXQgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGUgbmV3IHByb2dyYW0gYXR0YWNoZWQgaXMgb2YgdHlwZSBgQlBGX1BST0dfVFlQRV9MU01gLiBUaGUgY29tbWVudCBpcyBjcnVjaWFsOyBpdCBleHBsaWNpdGx5IGFkZHJlc3NlcyB0aGUgc2hhcmVkIHByb2dyYW0gdHlwZSBiZXR3ZWVuIGBCUEZfTFNNX01BQ2AgYW5kIGBCUEZfTFNNX0NHUk9VUGAuICBUaGlzIGlzIGEgcHJldHR5IHR5cGljYWwgQlBGIHNpdHVhdGlvbi4gVGhleSBhcmUgcmVseWluZyBvbiB0aGUgYXR0YWNoIHR5cGUgdG8gZGlmZmVyZW50aWF0ZSB0aGUga2luZCBvZiBMU00gcHJvZ3JhbSBpbiB0aGF0IGNhc2UsIGJ1dCB0aGUgZGVmYXVsdCBjaGVja3Mgd291bGQgbm90IGRvIHRoYXQuIE5vdywgaWYgdGhlIGV4cGVjdGVkIGF0dGFjaCB0eXBlIG9mIHRoZSBuZXcgcHJvZ3JhbSBkb2VzbiYjMzk7dCBtYXRjaCB0aGUgYXR0YWNoIHR5cGUgb2YgdGhlIGxpbmssIGl0IHRocm93cyBhbiBgRUlOVkFMYCBlcnJvci4gSWYgdGhlcmUmIzM5O3Mgbm8gbWlzbWF0Y2gsIGl0IGZhbGxzIGJhY2sgdG8gdGhlIG9sZCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCBmdW5jdGlvbi4gIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlIGluIHRoZSBsaW5rIHVwZGF0ZSBwcm9jZWR1cmUsIGFuZCB0aGF0JiMzOTtzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLgoKR2l2ZW4gdGhpcyBtYW5pcHVsYXRpb24gb2YgdGhlIGxpbmsgdXBkYXRlIGxvZ2ljLCB0aGUgY2hhbmdlIGlzIHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoaXMgZnVuY3Rpb24gYW5kIGFueSBvdGhlciBhcmVhcyB0aGF0IGludGVyYWN0IHdpdGggaXQuCgpJJiMzOTtsbCBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMgdG8gZW5zdXJlIHRoZSBmdXp6aW5nIGlzIHRob3JvdWdoOiBCUEYgaXMgZW5hYmxlZCB2aWEgYENPTkZJR19CUEZfU1lTQ0FMTGAsIENHUk9VUCBCUEYgbmVlZHMgYENPTkZJR19DR1JPVVBfQlBGYCBhbmQgTFNNIEJQRiBuZWVkcyBgQ09ORklHX0JQRl9MU01gLiBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJlbGV2YW50IGNvbmZpZ3Mgc2V0IHRvIGFsbG93IHRob3JvdWdoIHRlc3Rpbmcgb2YgYWxsIHJlbGF0ZWQgY29kZSBwYXRocy4KCkkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGxpbmtfdXBkYXRlYCBpcyBjYWxsZWQgaW4gdGhlIGBfX3N5c19icGZgIHN5c3RlbSBjYWxsIHdoZW4gdGhlIGNvbW1hbmQgaXMgYEJQRl9MSU5LX1VQREFURWAuIEkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIEkgdmVyaWZ5IHRoYXQgYGJwZl9wcm9nX2F0dGFjaGAgaXMgdXNlZCBieSB0aGUgYEJQRl9QUk9HX0FUVEFDSGAgY29tbWFuZCBhbmQgYGxpbmtfY3JlYXRlYCBpcyB1c2VkIGJ5IGBCUEZfTElOS19DUkVBVEVgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgZmxvdyBpcyBhcyBleHBlY3RlZC4gVGhpcyB3aWxsIGJlIHRoZSBiYXNpcyBvZiBteSBmdXp6aW5nIGVmZm9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgU3Vic3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgd2hpY2ggYWx3YXlzIHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgcmVmYWN0b3JpbmcgdGhlIGF0dGFjaG1lbnQgY2hlY2tzLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIHB1bGxpbmcgdGhlIGBDQVBfTkVUX0FETUlOYCByZXF1aXJlbWVudCBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgb3V0IG9mIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGFuZCBpbnRvIGEgbmV3IGZ1bmN0aW9uLCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYC4gVGhhdCYjMzk7cyBjbGVhbmVyOyBjb25zb2xpZGF0aW5nIHRob3NlIHBlcm1pc3Npb24gY2hlY2tzIG1ha2VzIHNlbnNlLiBUaGV5JiMzOTtyZSBhbHNvIHVwZGF0aW5nIGBsaW5rX2NyZWF0ZWAgYW5kIGBsaW5rX3VwZGF0ZWAgdG8gdXNlIHRoZSBuZXcgY2hlY2suIEkmIzM5O20gd29uZGVyaW5nIHdoeSB0aGV5JiMzOTt2ZSBtb3ZlZCB0aGUgZnVuY3Rpb24gYW5kIG5vdCBqdXN0IGFkZGVkIGEgbmV3IGNoZWNrPwoKQWxyaWdodCwgc28gdGhlIGZ1bmN0aW9uYWwgaW1wYWN0IGlzIG9uIGF0dGFjaG1lbnQgaW4gYGJwZl9wcm9nX2F0dGFjaGAsIGBsaW5rX2NyZWF0ZWAsIGFuZCBgbGlua191cGRhdGVgLiBUaGUgcHJpbWFyeSBjb25maWcgdGhhdCYjMzk7cyByZWxldmFudCBoZXJlIGlzIGBCUEZfU1lTQ0FMTGAsIG9mIGNvdXJzZS4gTGV0JiMzOTtzIHNlZS4uLiBsZXQgbWUgZG91YmxlLWNoZWNrIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncy4gSXQgbG9va3MgbGlrZSBgQlBGX1NZU0NBTExgIGlzIHRoZSBtYWluIG9uZS4gV2FpdCBhIG1pbnV0ZS4uLiBgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBDR1JPVVBfQlBGYC4gTGV0IG1lIG1ha2UgYSBtZW50YWwgbm90ZSB0byBjaGVjayB0aGUgYENHUk9VUF9CUEZgIGNvbmZpZzsgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gYmUgYXdhcmUgb2YgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDR1JPVVBfQlBGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMzQ1PWNvbmZpZyBDR1JPVVBfUEVSRlxuLS1cbmluaXQvS2NvbmZpZy0xMzU1LVxuaW5pdC9LY29uZmlnOjEzNTY6Y29uZmlnIENHUk9VUF9CUEZcbmluaXQvS2NvbmZpZy0xMzU3LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDkxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIHdoaWNoIGlzIHJpZ2h0IHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyBhbmQgbWFuaXB1bGF0aW5nIGxpbmtzLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBhdHRhY2ggYW5kIGxpbmsgbG9naWMgaXMgZ2V0dGluZyBzb21lIGF0dGVudGlvbi4gU3BlY2lmaWNhbGx5LCB0aGUgcmVmYWN0b3Jpbmcgb2YgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWAgaW50byBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYCwgYW5kIHRoZSBzdWJzZXF1ZW50IHVwZGF0ZXMgdG8gYGJwZl9wcm9nX2F0dGFjaGAsIGBsaW5rX2NyZWF0ZWAsIGFuZCB0aGUgYWRkaXRpb24gb2YgYSBgQlBGX0xJTktfVFlQRV9DR1JPVVBgIGNoZWNrIGluIGBsaW5rX3VwZGF0ZWAsIHNjcmVhbXMgJiMzNDtwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGZ1enppbmcuJiMzNDsgVGhpcyBpcyBwcmltZSByZWFsIGVzdGF0ZSBmb3IgZXhwbG9pdGF0aW9uIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGZsYXdzLgoKR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLCBJJiMzOTtkIHNheSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdG8ga2VlcCBhbiBleWUgb24gYXJlIGBCUEZfU1lTQ0FMTGAgKG9idmlvdXNseSkgYW5kIGBDR1JPVVBfQlBGYC4gSSYjMzk7bGwgd2FudCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQgaW4gYW55IHRlc3QgZW52aXJvbm1lbnRzLgoKTXkgaW5pdGlhbCBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgYGJwZl9wcm9nX2F0dGFjaGAsIGBsaW5rX2NyZWF0ZWAsIGFuZCBgbGlua191cGRhdGVgLiBUaG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGFwcGVhciB0byBiZSBkaXJlY3RseSBtb2RpZmllZCBieSB0aGlzIHBhdGNoLCBzbyB0aGV5IGFyZSB0aGUgb25lcyBJJiMzOTtsbCB0YXJnZXQgZmlyc3QuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIGBicGZfcHJvZ19hdHRhY2hgIGlzICpzdGF0aWMqPyBPa2F5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2NvcGUgYW5kIGNhbGwgc2l0ZXMuIElmIGl0ICppcyogc3RhdGljLCBteSBhcHByb2FjaCBtaWdodCBuZWVkIGEgbWlub3IgYWRqdXN0bWVudCwgYnV0IGl0IHNob3VsZG4mIzM5O3QgY2hhbmdlIHRoZSBvdmVyYWxsIGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NDM5OD1hdHRhY2hfdHlwZV90b19wcm9nX3R5cGUoZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDQ3My1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ0NzQ6c3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDQ3NS1cdFx0XHRcdFx0ICAgICBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NTM4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDUzOTpzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVjayhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NTQwLVx0XHRcdFx0IGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ1NDgtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NTQ5Olx0cmV0dXJuIGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRhY2hfdHlwZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NTUwLX1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz00NTUyPXN0YXRpYyBib29sIGlzX2Nncm91cF9wcm9nX3R5cGUoZW51bSBicGZfcHJvZ190eXBlIHB0eXBlLCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NTg1LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDU4NjpzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ1ODcte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2MTUtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NjE2Olx0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVjayhwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKSkge1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNDYxNy1cdFx0YnBmX3Byb2dfcHV0KHByb2cpO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2MjEtXHRpZiAoaXNfY2dyb3VwX3Byb2dfdHlwZShwdHlwZSwgcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSwgdHJ1ZSkpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ2MjI6XHRcdHJldCA9IGNncm91cF9icGZfcHJvZ19hdHRhY2goYXR0ciwgcHR5cGUsIHByb2cpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNDYyMy1cdFx0Z290byBvdXQ7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDYzNC1cdGNhc2UgQlBGX1BST0dfVFlQRV9GTE9XX0RJU1NFQ1RPUjpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ2MzU6XHRcdHJldCA9IG5ldG5zX2JwZl9wcm9nX2F0dGFjaChhdHRyLCBwcm9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2MzYtXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU4MDA9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTgxNC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4MTU6XHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2socHJvZywgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODE2LVx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01OTM2PXN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk4Ny1cdFx0ZWxzZVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk4ODpcdFx0XHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUobmV3X3Byb2csXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTg5LVx0XHRcdFx0XHRcdFx0XHRhdHlwZSk7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjMyNj1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM5OC1cdGNhc2UgQlBGX1BST0dfQVRUQUNIOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjM5OTpcdFx0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKFx1MDAyNmF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQwMC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ2NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDY0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZm9jdXNlZCBvbiBCUEYgc3lzY2FsbHMsIHNwZWNpZmljYWxseSBpbXBhY3RpbmcgaG93IEJQRiBwcm9ncmFtcyBhcmUgYXR0YWNoZWQsIHdpdGggYSBmb2N1cyBvbiBjZ3JvdXBzIGFuZCBMU00uIEkgc2VlIGl0IG1vZGlmaWVzIHNldmVyYWwga2V5IGZ1bmN0aW9ucyB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYDogYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWAsIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tgLCBgYnBmX3Byb2dfYXR0YWNoYCwgYGxpbmtfY3JlYXRlYCwgYW5kIGBsaW5rX3VwZGF0ZWAuCgpXaGF0JiMzOTtzIGhhcHBlbmluZyBpcyB0aGF0IHRoZSBjYXBhYmlsaXR5IGNoZWNrIGZvciBgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCYCBpcyBiZWluZyBtb3ZlZCBvdXQgb2YgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWAgYW5kIGludG8gYSBuZXcgZnVuY3Rpb24sIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tgLiBUaGlzIG5ldyBmdW5jdGlvbiBpcyB0aGVuIHVzZWQgd2l0aGluIGBicGZfcHJvZ19hdHRhY2hgIGFuZCBgbGlua19jcmVhdGVgLiBBIGtleSBtb2RpZmljYXRpb24gaXMgd2l0aGluIGBsaW5rX3VwZGF0ZWAgd2hlcmUgdGhlcmUmIzM5O3MgYSBjaGVjayBmb3IgYGxpbmstJmd0O3R5cGUgPT0gQlBGX0xJTktfVFlQRV9DR1JPVVBgLCBmb2xsb3dlZCBieSBhIGNhbGwgdG8gYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWAgYW5kIHNvbWUgc3BlY2lmaWMgbG9naWMgZm9yIGBCUEZfUFJPR19UWVBFX0xTTWAuCgpUaGlzIGlzIGludGVyZXN0aW5nLCBhbmQgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIGZ1enppbmc7IHRoZSBjaGFuZ2VzIGhlcmUgdG91Y2ggY3JpdGljYWwgcGF0aHMgZm9yIEJQRiBwcm9ncmFtIGF0dGFjaG1lbnQuIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiBob3cgdGhlc2UgYWx0ZXJhdGlvbnMgaW1wYWN0IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgQlBGIHByb2dyYW0gdHlwZXMgYW5kIGF0dGFjaG1lbnQgcG9pbnRzLgoKRnJvbSBhIHN5bWJvbCBwZXJzcGVjdGl2ZSwgbXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIGBicGZfcHJvZ19hdHRhY2hgLCBgbGlua19jcmVhdGVgLCBhbmQgYGxpbmtfdXBkYXRlYC4KCkNvbmZpZ3VyYXRpb24gd2lzZSwgdGhlIHBhdGNoIHdpbGwgbmVlZCB0byBiZSB0ZXN0ZWQgd2l0aCBgQlBGX1NZU0NBTExgIGFuZCBgQ0dST1VQX0JQRmAgZW5hYmxlZC4gSSBhbHNvIG5lZWQgdG8gYmUgc3VyZSB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9uIGBCUEZfTFNNYCwgc2luY2UgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIG9uIExTTSwgc28gSSYjMzk7bGwgYWRkIGBCUEZfTFNNYCB0byB0aGUgY29uZmlncyBqdXN0IHRvIGJlIHNhZmUuCgpTcGVjaWZpY2FsbHksIHRoYXQgYml0IG9mIGNvZGUgaW4gYGxpbmtfdXBkYXRlYCBpcyBpbXBvcnRhbnQ6CgpgYGBjCglpZiAobGluay0mZ3Q7dHlwZSA9PSBCUEZfTElOS19UWVBFX0NHUk9VUCkgewoJCWF0eXBlID0gbGluay0mZ3Q7YXR0YWNoX3R5cGU7CgkJLyoKCQkgKiBCUEZfTFNNX01BQyBhbmQgQlBGX0xTTV9DR1JPVVAgc2hhcmUgQlBGX1BST0dfVFlQRV9MU00sIHNvCgkJICogdGhlIGhlbHBlciYjMzk7cyBkZWZhdWx0IHByb2ctdHlwZSBjaGVjayBjYW5ub3QgZGlzdGluZ3Vpc2ggdGhlbS4KCQkgKi8KCQlpZiAobmV3X3Byb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00gJmFtcDsmYW1wOwoJCSAgICBuZXdfcHJvZy0mZ3Q7ZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gYXR5cGUpCgkJCXJldCA9IC1FSU5WQUw7CgkJZWxzZQoJCQlyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUobmV3X3Byb2csCgkJCQkJCQkJYXR5cGUpOwoJCWlmIChyZXQpCgkJCWdvdG8gb3V0X3B1dF9wcm9nczsKCX0KYGBgCgpUaGlzIGlzIHdoZXJlIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIHRoZSBwb3RlbnRpYWwgYW1iaWd1aXR5IGJldHdlZW4gYEJQRl9MU01fTUFDYCBhbmQgYEJQRl9MU01fQ0dST1VQYCBwcm9ncmFtcyB3aGljaCBib3RoIGhhdmUgdGhlIHNhbWUgcHJvZ3JhbSB0eXBlLiBUaGF0IG5lZWRzIGNhcmVmdWwgYXR0ZW50aW9uIGR1cmluZyB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0xTTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9OTA9c291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctOTEtXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cbmtlcm5lbC9icGYvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzEKCQkJCQkJCW91dHB1dDogMTM1CgkJCQkJCQl0aG91Z2h0czogOTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFN5c2NhbGwgTW9kaWZpY2F0aW9uIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIEJQRiBzeXNjYWxsIGltcGxlbWVudGF0aW9uIOKAkyBzcGVjaWZpY2FsbHksIGl0JiMzOTtzIHJlb3JnYW5pemluZyB0aGUgcGVybWlzc2lvbiBhbmQgdHlwZSBjaGVja3MgcmVsYXRlZCB0byBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIGFuZCB1cGRhdGluZyBCUEYgbGlua3MuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gaW1wYWN0IGlzIG9uIGBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0JgIHByb2dyYW1zIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGBDQVBfTkVUX0FETUlOYCwgYXMgd2VsbCBhcyBzb21lIHNwZWNpYWwgY29uc2lkZXJhdGlvbnMgZm9yIGBCUEZfUFJPR19UWVBFX0xTTWAuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIG1vdmluZyB0aGUgY2hlY2tzIHRoYXQgd2VyZSBwcmV2aW91c2x5IGluIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGludG8gYSBuZXcgZnVuY3Rpb24gY2FsbGVkIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tgLiBUaGlzIG5ldyBmdW5jdGlvbiBpcyB0aGVuIGxldmVyYWdlZCBpbiBgYnBmX3Byb2dfYXR0YWNoYCBhbmQgYGxpbmtfY3JlYXRlYC4gQ3JpdGljYWxseSwgYGxpbmtfdXBkYXRlYCBhbHNvIHNlZXMgYSBjaGFuZ2U7IGl0IG5vdyBpbmNsdWRlcyBhIGNoZWNrIGZvciBgbGluay0mZ3Q7dHlwZSA9PSBCUEZfTElOS19UWVBFX0NHUk9VUGAgYW5kIGNhbGxzIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGFsb25nIHdpdGggdGhlIHNwZWNpYWwgTFNNIGNoZWNrLiBUaGlzIHNpZ25pZmljYW50bHkgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiBgQlBGX0xJTktfVVBEQVRFYCBzcGVjaWZpY2FsbHkgZm9yIGNncm91cCBsaW5rcy4KCkNvbnNpZGVyaW5nIHRoaXMsIHRoZSBgYnBmX3Byb2dfYXR0YWNoYCwgYGxpbmtfY3JlYXRlYCwgYW5kIGBsaW5rX3VwZGF0ZWAgb3BlcmF0aW9ucyB0aHJvdWdoIHRoZSBgYnBmKClgIHN5c2NhbGwgYXJlIHRoZSBmb2NhbCBwb2ludHMuIFNpbmNlIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaXQgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBgbGlua191cGRhdGVgIGlzIHJlYWNoZWQgdmlhIHRoZSBgYnBmKEJQRl9MSU5LX1VQREFURSwgLi4uKWAgc3lzY2FsbCBwYXRoLCBgYnBmX3Byb2dfYXR0YWNoYCB2aWEgYGJwZihCUEZfUFJPR19BVFRBQ0gsIC4uLilgIGFuZCBgbGlua19jcmVhdGVgIHZpYSBgYnBmKEJQRl9MSU5LX0NSRUFURSwgLi4uKWAuCgpJIG5lZWQgdG8gY29uZmlybSByZWFjaGFiaWxpdHkuIE9rLCBpdCBsb29rcyBsaWtlIGBsaW5rX3VwZGF0ZWAgaXMgc3RhdGljIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGJ1dCBjYWxsZWQgZnJvbSBgX19zeXNfYnBmYC4gQW5kIGBfX3N5c19icGZgIGlzIHN0YXRpYyB0b28sIHRoZSBhY3R1YWwgc3lzY2FsbCBpcyBgc3lzX2JwZmAuIFNvLCB3aGlsZSBpdCYjMzk7cyBzdGF0aWMsIGl0JiMzOTtzIHBhcnQgb2YgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBCUEYgc3lzY2FsbCBvcGVyYXRpb25zIGFuZCBsaWtlbHkgbm90IGlubGluZWQgZGVzcGl0ZSBiZWluZyBhIHJlbGF0aXZlbHkgbGFyZ2UgZnVuY3Rpb24uIFRoaXMgc2FtZSBsb2dpYyB3b3VsZCBhcHBseSB0byB0aGUgb3RoZXIgZnVuY3Rpb25zLgoKVGhlcmVmb3JlLCB0aGUgbW9zdCBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOgoKKiAgIGBicGZfcHJvZ19hdHRhY2hgCiogICBgbGlua19jcmVhdGVgCiogICBgbGlua191cGRhdGVgCgpJJiMzOTtsbCBpbmNsdWRlIGBfX3N5c19icGZgIGFuZCBgc3lzX2JwZmAganVzdCBpbiBjYXNlLCBidXQgdGhlIHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIHRoZSBmdW5jdGlvbnMgaW1wbGVtZW50aW5nIHRoZSBCUEYgb3BlcmF0aW9ucy4KClRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlOiBgQlBGX1NZU0NBTExgLCBgQ0dST1VQX0JQRmAsIGFuZCBgQlBGX0xTTWAuCgpJbiBzdW1tYXJ5LCB0aGlzIHBhdGNoJiMzOTtzIGltcGFjdCBvbiB0aGVzZSBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBwZXJtaXNzaW9ucyBhbmQgY2dyb3VwIHByb2dyYW1zLCBtYWtlcyB0aGlzIGEgcHJvbWlzaW5nIHRhcmdldCBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OywKICAgICYjMzQ7QlBGX0xTTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9wcm9nX2F0dGFjaCYjMzQ7LAogICAgJiMzNDtsaW5rX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtsaW5rX3VwZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGVybWlzc2lvbiBhbmQgdHlwZSBjaGVja2luZyBsb2dpYyBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyBhbmQgdXBkYXRpbmcgQlBGIGxpbmtzLCBzcGVjaWZpY2FsbHkgZm9yIGNncm91cCBhbmQgTFNNIHByb2dyYW1zLiBUaGlzIGFmZmVjdHMgdGhlIGJwZigpIHN5c2NhbGwgb3BlcmF0aW9ucyBCUEZfUFJPR19BVFRBQ0gsIEJQRl9MSU5LX0NSRUFURSwgYW5kIEJQRl9MSU5LX1VQREFURS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7Q0dST1VQX0JQRiYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2xpbmtfY3JlYXRlJiMzNDssCiAgICAmIzM0O2xpbmtfdXBkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZXJtaXNzaW9uIGFuZCB0eXBlIGNoZWNraW5nIGxvZ2ljIGZvciBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIGFuZCB1cGRhdGluZyBCUEYgbGlua3MsIHNwZWNpZmljYWxseSBmb3IgY2dyb3VwIGFuZCBMU00gcHJvZ3JhbXMuIFRoaXMgYWZmZWN0cyB0aGUgYnBmKCkgc3lzY2FsbCBvcGVyYXRpb25zIEJQRl9QUk9HX0FUVEFDSCwgQlBGX0xJTktfQ1JFQVRFLCBhbmQgQlBGX0xJTktfVVBEQVRFLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwOTo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBjYXBhYmlsaXR5IGFuZCBhdHRhY2ggdHlwZSBjaGVja3MgZm9yIEJQRiBwcm9ncmFtcyBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBJdCBtb3ZlcyB0aGUgYENBUF9ORVRfQURNSU5gIGNoZWNrIGZvciBgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCYCBpbnRvIGEgd3JhcHBlciBmdW5jdGlvbiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYCBhbmQgYWRkcyBhdHRhY2ggdHlwZSB2YWxpZGF0aW9uIGluIGBsaW5rX3VwZGF0ZWAgZm9yIGNncm91cCBsaW5rcy4gVGhlc2UgY2hhbmdlcyBvbmx5IGFmZmVjdCBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBwZXJtaXNzaW9ucyBhbmQgcHJvZ3JhbSB0eXBlIHZhbGlkYXRpb24uIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIG1hbmlwdWxhdGVkIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGluY29ycmVjdCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBsb2dpYyBlcnJvcnMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJlYTI3YjM1ODI2OTYwNzVhZDUwODQwZTM0MWJlZDUyYzcxMTg0MTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwOTo0NDo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmMKaW5kZXggNjg3NGJhMTQyNGFmMC4uZGZlYTMzN2ZmMjVlYSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zeXNjYWxsLmMKQEAgLTQ0ODMsMTIgJiM0Mzs0NDgzLDYgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLAogCWNhc2UgQlBGX1BST0dfVFlQRV9TS19MT09LVVA6CiAJCXJldHVybiBhdHRhY2hfdHlwZSA9PSBwcm9nLSZndDtleHBlY3RlZF9hdHRhY2hfdHlwZSA/IDAgOiAtRUlOVkFMOwogCWNhc2UgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCOgotCQlpZiAoIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctJmd0O2F1eC0mZ3Q7dG9rZW4sIENBUF9ORVRfQURNSU4pKQotCQkJLyogY2ctc2tiIHByb2dzIGNhbiBiZSBsb2FkZWQgYnkgdW5wcml2IHVzZXIuCi0JCQkgKiBjaGVjayBwZXJtaXNzaW9ucyBhdCBhdHRhY2ggdGltZS4KLQkJCSAqLwotCQkJcmV0dXJuIC1FUEVSTTsKLQogCQlwdHlwZSA9IGF0dGFjaF90eXBlX3RvX3Byb2dfdHlwZShhdHRhY2hfdHlwZSk7CiAJCWlmIChwcm9nLSZndDt0eXBlICE9IHB0eXBlKQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC00NTQyLDYgJiM0Mzs0NTM2LDE5IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywKIAl9CiB9CiAKJiM0MztzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVjayhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiYjNDM7CQkJCSBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSkKJiM0Mzt7CiYjNDM7CWlmIChwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQiAmYW1wOyZhbXA7CiYjNDM7CSAgICAhYnBmX3Rva2VuX2NhcGFibGUocHJvZy0mZ3Q7YXV4LSZndDt0b2tlbiwgQ0FQX05FVF9BRE1JTikpCiYjNDM7CQkvKiBjZy1za2IgcHJvZ3MgY2FuIGJlIGxvYWRlZCBieSB1bnByaXYgdXNlci4KJiM0MzsJCSAqIGNoZWNrIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwomIzQzOwlyZXR1cm4gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csIGF0dGFjaF90eXBlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBpc19jZ3JvdXBfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR5cGUsCiAJCQkJYm9vbCBjaGVja19hdHlwZSkKIHsKQEAgLTQ2MDYsNyAmIzQzOzQ2MTMsNyBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cikKIAlpZiAoSVNfRVJSKHByb2cpKQogCQlyZXR1cm4gUFRSX0VSUihwcm9nKTsKIAotCWlmIChicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0ci0mZ3Q7YXR0YWNoX3R5cGUpKSB7CiYjNDM7CWlmIChicGZfcHJvZ19hdHRhY2hfY2hlY2socHJvZywgYXR0ci0mZ3Q7YXR0YWNoX3R5cGUpKSB7CiAJCWJwZl9wcm9nX3B1dChwcm9nKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTgwNSw4ICYjNDM7NTgxMiw3IEBAIHN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKQogCWlmIChJU19FUlIocHJvZykpCiAJCXJldHVybiBQVFJfRVJSKHByb2cpOwogCi0JcmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csCi0JCQkJCQlhdHRyLSZndDtsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7CiYjNDM7CXJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVjayhwcm9nLCBhdHRyLSZndDtsaW5rX2NyZWF0ZS5hdHRhY2hfdHlwZSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKQEAgLTU5MzEsNiAmIzQzOzU5MzcsNyBAQCBzdGF0aWMgaW50IGxpbmtfdXBkYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyKQogewogCXN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cgPSBOVUxMLCAqbmV3X3Byb2c7CiAJc3RydWN0IGJwZl9saW5rICpsaW5rOwomIzQzOwllbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZTsKIAl1MzIgZmxhZ3M7CiAJaW50IHJldDsKIApAQCAtNTk2OCw2ICYjNDM7NTk3NSwyMiBAQCBzdGF0aWMgaW50IGxpbmtfdXBkYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyKQogCQlnb3RvIG91dF9wdXRfcHJvZ3M7CiAJfQogCiYjNDM7CWlmIChsaW5rLSZndDt0eXBlID09IEJQRl9MSU5LX1RZUEVfQ0dST1VQKSB7CiYjNDM7CQlhdHlwZSA9IGxpbmstJmd0O2F0dGFjaF90eXBlOwomIzQzOwkJLyoKJiM0MzsJCSAqIEJQRl9MU01fTUFDIGFuZCBCUEZfTFNNX0NHUk9VUCBzaGFyZSBCUEZfUFJPR19UWVBFX0xTTSwgc28KJiM0MzsJCSAqIHRoZSBoZWxwZXImIzM5O3MgZGVmYXVsdCBwcm9nLXR5cGUgY2hlY2sgY2Fubm90IGRpc3Rpbmd1aXNoIHRoZW0uCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChuZXdfcHJvZy0mZ3Q7dHlwZSA9PSBCUEZfUFJPR19UWVBFX0xTTSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbmV3X3Byb2ctJmd0O2V4cGVjdGVkX2F0dGFjaF90eXBlICE9IGF0eXBlKQomIzQzOwkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQllbHNlCiYjNDM7CQkJcmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKG5ld19wcm9nLAomIzQzOwkJCQkJCQkJYXR5cGUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIG91dF9wdXRfcHJvZ3M7CiYjNDM7CX0KJiM0MzsKIAlpZiAobGluay0mZ3Q7b3BzLSZndDt1cGRhdGVfcHJvZykKIAkJcmV0ID0gbGluay0mZ3Q7b3BzLSZndDt1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpOwogCWVsc2UKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTYKCQkJCQkJCW91dHB1dDogMTg5CgkJCQkJCQl0aG91Z2h0czogNTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IHByb2JhYmx5IGRvZXNuJiMzOTt0LCBidXQgbGV0JiMzOTtzIGJlIHRob3JvdWdoLgoKVGhlIGNoYW5nZXMgYXJlIGFsbCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBhbmQgaXQmIzM5O3MgbW9zdGx5IGFib3V0IHJlZmFjdG9yaW5nIGhvdyB0aGUga2VybmVsIGNoZWNrcyBCUEYgcHJvZ3JhbSBjYXBhYmlsaXRpZXMgYW5kIGF0dGFjaG1lbnQgdHlwZXMuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIG1vdmVzIHRoZSBgQ0FQX05FVF9BRE1JTmAgY2hlY2sgZm9yIGBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0JgIGludG8gdGhpcyBuZXcgYGJwZl9wcm9nX2F0dGFjaF9jaGVja2AgZnVuY3Rpb24uIEl0IGFsc28gdXBkYXRlcyBleGlzdGluZyBmdW5jdGlvbnMsIGBicGZfcHJvZ19hdHRhY2hgIGFuZCBgbGlua19jcmVhdGVgLCB0byB1c2UgdGhpcyBuZXcgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWAsIHdoaWNoIGlzIHN0aWxsIHVzZWQgaW4gYGxpbmtfdXBkYXRlYCBidXQgb25seSBpZiB0aGUgbGluayB0eXBlIGlzIGBCUEZfTElOS19UWVBFX0NHUk9VUGAuCgpNeSBwcmltYXJ5IGNvbmNlcm4gaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IG5ldyBvcHBvcnR1bml0aWVzIGZvciByZWFkaW5nIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCB0aGF0JiMzOTtzIHRoZSBrZXkuIEkgc2VlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgbm8gZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBubyBjaGFuZ2VzIHRvIGhvdyBib3VuZHMgb3IgbGVuZ3RocyBhcmUgY2hlY2tlZCB0aGF0IGNvdWxkIGxlYWQgdG8gdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIGFsbW9zdCBlbnRpcmVseSBjb250cm9sIGZsb3cuIEl0JiMzOTtzIHBlcm1pc3Npb24gY2hlY2tpbmcgYW5kIHZhbGlkYXRpb24gbG9naWMuCgpUaGVyZWZvcmUsIHRoZSBsaWtlbGlob29kIG9mIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgYW4gKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiByaXNrIGlzIGVmZmVjdGl2ZWx5IHplcm8uIFJlZ3VsYXIgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgZXJyb3JzIHRoYXQgbWlnaHQgY3JlZXAgaW4sIGFuZCB0aG9zZSBhcmUgd2hhdCB3ZSB3b3VsZCBleHBlY3QgdG8gc2VlIGluIGEgcGF0Y2ggbGlrZSB0aGlzLgoKU28sIEkmIzM5O20gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgYW5kIEkmIzM5O2xsIGRldGFpbCB0aGlzIHJlYXNvbmluZyBpbiB0aGUgY29tbWl0IG1lc3NhZ2UuIFRoZSBwYXRjaCByZWZhY3RvcnMgY2FwYWJpbGl0eSBhbmQgYXR0YWNoIHR5cGUgY2hlY2tzIGZvciBCUEYgcHJvZ3JhbXMgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgYW5kIHRoZXNlIGNoYW5nZXMgZm9jdXMgc29sZWx5IG9uIGNvbnRyb2wgZmxvdyByZWdhcmRpbmcgcGVybWlzc2lvbnMgYW5kIHByb2dyYW0gdHlwZSB2YWxpZGF0aW9uLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBtYW5pcHVsYXRlZCBpbiBhbnkgd2F5IHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBzYW5pdGl6ZXJzIHNob3VsZCBiZSBzdWZmaWNpZW50LiBJIGFtIG5vdCBzZWVpbmcgYSBuZWVkIGZvciBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGNhcGFiaWxpdHkgYW5kIGF0dGFjaCB0eXBlIGNoZWNrcyBmb3IgQlBGIHByb2dyYW1zIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIEl0IG1vdmVzIHRoZSBgQ0FQX05FVF9BRE1JTmAgY2hlY2sgZm9yIGBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0JgIGludG8gYSB3cmFwcGVyIGZ1bmN0aW9uIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tgIGFuZCBhZGRzIGF0dGFjaCB0eXBlIHZhbGlkYXRpb24gaW4gYGxpbmtfdXBkYXRlYCBmb3IgY2dyb3VwIGxpbmtzLiBUaGVzZSBjaGFuZ2VzIG9ubHkgYWZmZWN0IGNvbnRyb2wgZmxvdyByZWxhdGVkIHRvIHBlcm1pc3Npb25zIGFuZCBwcm9ncmFtIHR5cGUgdmFsaWRhdGlvbi4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgbWFuaXB1bGF0ZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgaW5jb3JyZWN0IHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGxvZ2ljIGVycm9ycykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBjYXBhYmlsaXR5IGFuZCBhdHRhY2ggdHlwZSBjaGVja3MgZm9yIEJQRiBwcm9ncmFtcyBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBJdCBtb3ZlcyB0aGUgYENBUF9ORVRfQURNSU5gIGNoZWNrIGZvciBgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCYCBpbnRvIGEgd3JhcHBlciBmdW5jdGlvbiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYCBhbmQgYWRkcyBhdHRhY2ggdHlwZSB2YWxpZGF0aW9uIGluIGBsaW5rX3VwZGF0ZWAgZm9yIGNncm91cCBsaW5rcy4gVGhlc2UgY2hhbmdlcyBvbmx5IGFmZmVjdCBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBwZXJtaXNzaW9ucyBhbmQgcHJvZ3JhbSB0eXBlIHZhbGlkYXRpb24uIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIG1hbmlwdWxhdGVkIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGluY29ycmVjdCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBsb2dpYyBlcnJvcnMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjQ1OjAwLjIxNTI5NTQyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjAxMzAxMTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQ0dST1VQX0JQRlwiLFxuICAgIFwiQlBGX0xTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9wcm9nX2F0dGFjaFwiLFxuICAgIFwibGlua19jcmVhdGVcIixcbiAgICBcImxpbmtfdXBkYXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgY2FwYWJpbGl0eSBhbmQgYXR0YWNoIHR5cGUgY2hlY2tzIGZvciBCUEYgcHJvZ3JhbXMgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gSXQgbW92ZXMgdGhlIGBDQVBfTkVUX0FETUlOYCBjaGVjayBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgaW50byBhIHdyYXBwZXIgZnVuY3Rpb24gYGJwZl9wcm9nX2F0dGFjaF9jaGVja2AgYW5kIGFkZHMgYXR0YWNoIHR5cGUgdmFsaWRhdGlvbiBpbiBgbGlua191cGRhdGVgIGZvciBjZ3JvdXAgbGlua3MuIFRoZXNlIGNoYW5nZXMgb25seSBhZmZlY3QgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gcGVybWlzc2lvbnMgYW5kIHByb2dyYW0gdHlwZSB2YWxpZGF0aW9uLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBtYW5pcHVsYXRlZCBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBpbmNvcnJlY3QgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgbG9naWMgZXJyb3JzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZXJtaXNzaW9uIGFuZCB0eXBlIGNoZWNraW5nIGxvZ2ljIGZvciBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIGFuZCB1cGRhdGluZyBCUEYgbGlua3MsIHNwZWNpZmljYWxseSBmb3IgY2dyb3VwIGFuZCBMU00gcHJvZ3JhbXMuIFRoaXMgYWZmZWN0cyB0aGUgYnBmKCkgc3lzY2FsbCBvcGVyYXRpb25zIEJQRl9QUk9HX0FUVEFDSCwgQlBGX0xJTktfQ1JFQVRFLCBhbmQgQlBGX0xJTktfVVBEQVRFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTo0NTowMC4yMTUzMDMwNTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODg4NDYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJlYTI3YjM1ODI2OTYwNzVhZDUwODQwZTM0MWJlZDUyYzcxMTg0MTVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDk6NDQ6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbmluZGV4IDY4NzRiYTE0MjRhZjAuLmRmZWEzMzdmZjI1ZWEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbkBAIC00NDgzLDEyICs0NDgzLDYgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbiBcXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOlxcbiBcXHRcXHRyZXR1cm4gYXR0YWNoX3R5cGUgPT0gcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPyAwIDogLUVJTlZBTDtcXG4gXFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0I6XFxuLVxcdFxcdGlmICghYnBmX3Rva2VuX2NhcGFibGUocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2V0b2tlbiwgQ0FQX05FVF9BRE1JTikpXFxuLVxcdFxcdFxcdC8qIGNnLXNrYiBwcm9ncyBjYW4gYmUgbG9hZGVkIGJ5IHVucHJpdiB1c2VyLlxcbi1cXHRcXHRcXHQgKiBjaGVjayBwZXJtaXNzaW9ucyBhdCBhdHRhY2ggdGltZS5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuLVxcbiBcXHRcXHRwdHlwZSA9IGF0dGFjaF90eXBlX3RvX3Byb2dfdHlwZShhdHRhY2hfdHlwZSk7XFxuIFxcdFxcdGlmIChwcm9nLVxcdTAwM2V0eXBlICE9IHB0eXBlKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtNDU0Miw2ICs0NTM2LDE5IEBAIHN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVjayhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuK1xcdFxcdFxcdFxcdCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcXG4re1xcbitcXHRpZiAocHJvZy1cXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFicGZfdG9rZW5fY2FwYWJsZShwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXRva2VuLCBDQVBfTkVUX0FETUlOKSlcXG4rXFx0XFx0LyogY2ctc2tiIHByb2dzIGNhbiBiZSBsb2FkZWQgYnkgdW5wcml2IHVzZXIuXFxuK1xcdFxcdCAqIGNoZWNrIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFxuK1xcdHJldHVybiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0YWNoX3R5cGUpO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBpc19jZ3JvdXBfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR5cGUsXFxuIFxcdFxcdFxcdFxcdGJvb2wgY2hlY2tfYXR5cGUpXFxuIHtcXG5AQCAtNDYwNiw3ICs0NjEzLDcgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuIFxcdGlmIChJU19FUlIocHJvZykpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKHByb2cpO1xcbiBcXG4tXFx0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRyLVxcdTAwM2VhdHRhY2hfdHlwZSkpIHtcXG4rXFx0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVjayhwcm9nLCBhdHRyLVxcdTAwM2VhdHRhY2hfdHlwZSkpIHtcXG4gXFx0XFx0YnBmX3Byb2dfcHV0KHByb2cpO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbkBAIC01ODA1LDggKzU4MTIsNyBAQCBzdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcXG4gXFx0aWYgKElTX0VSUihwcm9nKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIocHJvZyk7XFxuIFxcbi1cXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0YXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xcbitcXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2socHJvZywgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuQEAgLTU5MzEsNiArNTkzNyw3IEBAIHN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEwsICpuZXdfcHJvZztcXG4gXFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbitcXHRlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHlwZTtcXG4gXFx0dTMyIGZsYWdzO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG5AQCAtNTk2OCw2ICs1OTc1LDIyIEBAIHN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuIFxcdFxcdGdvdG8gb3V0X3B1dF9wcm9ncztcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKGxpbmstXFx1MDAzZXR5cGUgPT0gQlBGX0xJTktfVFlQRV9DR1JPVVApIHtcXG4rXFx0XFx0YXR5cGUgPSBsaW5rLVxcdTAwM2VhdHRhY2hfdHlwZTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQlBGX0xTTV9NQUMgYW5kIEJQRl9MU01fQ0dST1VQIHNoYXJlIEJQRl9QUk9HX1RZUEVfTFNNLCBzb1xcbitcXHRcXHQgKiB0aGUgaGVscGVyJ3MgZGVmYXVsdCBwcm9nLXR5cGUgY2hlY2sgY2Fubm90IGRpc3Rpbmd1aXNoIHRoZW0uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobmV3X3Byb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIG5ld19wcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBhdHlwZSlcXG4rXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUobmV3X3Byb2csXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGF0eXBlKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X3Byb2dzO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAobGluay1cXHUwMDNlb3BzLVxcdTAwM2V1cGRhdGVfcHJvZylcXG4gXFx0XFx0cmV0ID0gbGluay1cXHUwMDNlb3BzLVxcdTAwM2V1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpO1xcbiBcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjQ1OjAwLjY5NDk0Nzc1M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkxNzY0NzcwMTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfYXR0YWNoXCIsXG4gICAgXCJsaW5rX2NyZWF0ZVwiLFxuICAgIFwibGlua191cGRhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGVybWlzc2lvbiBhbmQgdHlwZSBjaGVja2luZyBsb2dpYyBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyBhbmQgdXBkYXRpbmcgQlBGIGxpbmtzLCBzcGVjaWZpY2FsbHkgZm9yIGNncm91cCBhbmQgTFNNIHByb2dyYW1zLiBUaGlzIGFmZmVjdHMgdGhlIGJwZigpIHN5c2NhbGwgb3BlcmF0aW9ucyBCUEZfUFJPR19BVFRBQ0gsIEJQRl9MSU5LX0NSRUFURSwgYW5kIEJQRl9MSU5LX1VQREFURS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmVhMjdiMzU4MjY5NjA3NWFkNTA4NDBlMzQxYmVkNTJjNzExODQxNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA5OjQ0OjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggNjg3NGJhMTQyNGFmMC4uZGZlYTMzN2ZmMjVlYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuQEAgLTQ0ODMsMTIgKzQ0ODMsNiBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOlxuIFx0XHRyZXR1cm4gYXR0YWNoX3R5cGUgPT0gcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA/IDAgOiAtRUlOVkFMO1xuIFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0I6XG4tXHRcdGlmICghYnBmX3Rva2VuX2NhcGFibGUocHJvZy1cdTAwM2VhdXgtXHUwMDNldG9rZW4sIENBUF9ORVRfQURNSU4pKVxuLVx0XHRcdC8qIGNnLXNrYiBwcm9ncyBjYW4gYmUgbG9hZGVkIGJ5IHVucHJpdiB1c2VyLlxuLVx0XHRcdCAqIGNoZWNrIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLlxuLVx0XHRcdCAqL1xuLVx0XHRcdHJldHVybiAtRVBFUk07XG4tXG4gXHRcdHB0eXBlID0gYXR0YWNoX3R5cGVfdG9fcHJvZ190eXBlKGF0dGFjaF90eXBlKTtcbiBcdFx0aWYgKHByb2ctXHUwMDNldHlwZSAhPSBwdHlwZSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC00NTQyLDYgKzQ1MzYsMTkgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuIFx0fVxuIH1cbiBcbitzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVjayhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4rXHRcdFx0XHQgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXG4re1xuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXHUwMDNlYXV4LVx1MDAzZXRva2VuLCBDQVBfTkVUX0FETUlOKSlcbitcdFx0LyogY2ctc2tiIHByb2dzIGNhbiBiZSBsb2FkZWQgYnkgdW5wcml2IHVzZXIuXG4rXHRcdCAqIGNoZWNrIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLlxuK1x0XHQgKi9cbitcdFx0cmV0dXJuIC1FUEVSTTtcbitcbitcdHJldHVybiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0YWNoX3R5cGUpO1xuK31cbitcbiBzdGF0aWMgYm9vbCBpc19jZ3JvdXBfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR5cGUsXG4gXHRcdFx0XHRib29sIGNoZWNrX2F0eXBlKVxuIHtcbkBAIC00NjA2LDcgKzQ2MTMsNyBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdGlmIChJU19FUlIocHJvZykpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByb2cpO1xuIFxuLVx0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKSkge1xuK1x0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVjayhwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKSkge1xuIFx0XHRicGZfcHJvZ19wdXQocHJvZyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTU4MDUsOCArNTgxMiw3IEBAIHN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxuIFx0aWYgKElTX0VSUihwcm9nKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocHJvZyk7XG4gXG4tXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZyxcbi1cdFx0XHRcdFx0XHRhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbitcdHJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVjayhwcm9nLCBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTU5MzEsNiArNTkzNyw3IEBAIHN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEwsICpuZXdfcHJvZztcbiBcdHN0cnVjdCBicGZfbGluayAqbGluaztcbitcdGVudW0gYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuIFx0dTMyIGZsYWdzO1xuIFx0aW50IHJldDtcbiBcbkBAIC01OTY4LDYgKzU5NzUsMjIgQEAgc3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdFx0Z290byBvdXRfcHV0X3Byb2dzO1xuIFx0fVxuIFxuK1x0aWYgKGxpbmstXHUwMDNldHlwZSA9PSBCUEZfTElOS19UWVBFX0NHUk9VUCkge1xuK1x0XHRhdHlwZSA9IGxpbmstXHUwMDNlYXR0YWNoX3R5cGU7XG4rXHRcdC8qXG4rXHRcdCAqIEJQRl9MU01fTUFDIGFuZCBCUEZfTFNNX0NHUk9VUCBzaGFyZSBCUEZfUFJPR19UWVBFX0xTTSwgc29cbitcdFx0ICogdGhlIGhlbHBlcidzIGRlZmF1bHQgcHJvZy10eXBlIGNoZWNrIGNhbm5vdCBkaXN0aW5ndWlzaCB0aGVtLlxuK1x0XHQgKi9cbitcdFx0aWYgKG5ld19wcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBuZXdfcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBhdHlwZSlcbitcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRlbHNlXG4rXHRcdFx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKG5ld19wcm9nLFxuK1x0XHRcdFx0XHRcdFx0XHRhdHlwZSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBvdXRfcHV0X3Byb2dzO1xuK1x0fVxuK1xuIFx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZXVwZGF0ZV9wcm9nKVxuIFx0XHRyZXQgPSBsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpO1xuIFx0ZWxzZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6NDU6MDAuNjk0OTQ5MzQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTczODk5NzQzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBhbmQgaXQgbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nIGFuZCBhIGNvdXBsZSBvZiBjb25kaXRpb25hbCB1cGRhdGVzIHdpdGhpbiB0aGUgQlBGIGF0dGFjaCBhbmQgbGluayBsb2dpYy4gVGhlIG1haW4gdGhydXN0IGlzIG1vdmluZyBhIHNwZWNpZmljIHBlcm1pc3Npb24gY2hlY2sgZm9yIGBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0JgIG91dCBvZiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCBhbmQgaW50byBhIG5ldyBmdW5jdGlvbiwgYGJwZl9wcm9nX2F0dGFjaF9jaGVja2AuIFRoaXMgc3VnZ2VzdHMgYW4gYXR0ZW1wdCB0byBzdHJlYW1saW5lIHRoZSBwZXJtaXNzaW9uIGNoZWNraW5nIHByb2Nlc3MgYW5kIHBvdGVudGlhbGx5IG1ha2UgaXQgbW9yZSByZXVzYWJsZS4gIEkgbmVlZCB0byBkaWcgaW50byB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGF0LCBidXQgaXQgc2VlbXMgc291bmQgb24gdGhlIHN1cmZhY2UuXG5cblRoZSBrZXkgY2hhbmdlIEkgc2VlIGlzIGluIGBsaW5rX3VwZGF0ZWAuIFRoZXkndmUgYWRkZWQgYSBjaGVjayBzcGVjaWZpY2FsbHkgZm9yIGBCUEZfTElOS19UWVBFX0NHUk9VUGAuIE5vdywgdGhpcyBpcyBpbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSBpdCBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHRoZSBuZXcgcHJvZ3JhbSBhdHRhY2hlZCBpcyBvZiB0eXBlIGBCUEZfUFJPR19UWVBFX0xTTWAuIFRoZSBjb21tZW50IGlzIGNydWNpYWw7IGl0IGV4cGxpY2l0bHkgYWRkcmVzc2VzIHRoZSBzaGFyZWQgcHJvZ3JhbSB0eXBlIGJldHdlZW4gYEJQRl9MU01fTUFDYCBhbmQgYEJQRl9MU01fQ0dST1VQYC4gIFRoaXMgaXMgYSBwcmV0dHkgdHlwaWNhbCBCUEYgc2l0dWF0aW9uLiBUaGV5IGFyZSByZWx5aW5nIG9uIHRoZSBhdHRhY2ggdHlwZSB0byBkaWZmZXJlbnRpYXRlIHRoZSBraW5kIG9mIExTTSBwcm9ncmFtIGluIHRoYXQgY2FzZSwgYnV0IHRoZSBkZWZhdWx0IGNoZWNrcyB3b3VsZCBub3QgZG8gdGhhdC4gTm93LCBpZiB0aGUgZXhwZWN0ZWQgYXR0YWNoIHR5cGUgb2YgdGhlIG5ldyBwcm9ncmFtIGRvZXNuJ3QgbWF0Y2ggdGhlIGF0dGFjaCB0eXBlIG9mIHRoZSBsaW5rLCBpdCB0aHJvd3MgYW4gYEVJTlZBTGAgZXJyb3IuIElmIHRoZXJlJ3Mgbm8gbWlzbWF0Y2gsIGl0IGZhbGxzIGJhY2sgdG8gdGhlIG9sZCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCBmdW5jdGlvbi4gIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlIGluIHRoZSBsaW5rIHVwZGF0ZSBwcm9jZWR1cmUsIGFuZCB0aGF0J3Mgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuXG5cbkdpdmVuIHRoaXMgbWFuaXB1bGF0aW9uIG9mIHRoZSBsaW5rIHVwZGF0ZSBsb2dpYywgdGhlIGNoYW5nZSBpcyB3b3J0aCBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoaXMgZnVuY3Rpb24gYW5kIGFueSBvdGhlciBhcmVhcyB0aGF0IGludGVyYWN0IHdpdGggaXQuXG5cbkknbGwgY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zIHRvIGVuc3VyZSB0aGUgZnV6emluZyBpcyB0aG9yb3VnaDogQlBGIGlzIGVuYWJsZWQgdmlhIGBDT05GSUdfQlBGX1NZU0NBTExgLCBDR1JPVVAgQlBGIG5lZWRzIGBDT05GSUdfQ0dST1VQX0JQRmAgYW5kIExTTSBCUEYgbmVlZHMgYENPTkZJR19CUEZfTFNNYC4gSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJlbGV2YW50IGNvbmZpZ3Mgc2V0IHRvIGFsbG93IHRob3JvdWdoIHRlc3Rpbmcgb2YgYWxsIHJlbGF0ZWQgY29kZSBwYXRocy5cblxuSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGBsaW5rX3VwZGF0ZWAgaXMgY2FsbGVkIGluIHRoZSBgX19zeXNfYnBmYCBzeXN0ZW0gY2FsbCB3aGVuIHRoZSBjb21tYW5kIGlzIGBCUEZfTElOS19VUERBVEVgLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIEkgdmVyaWZ5IHRoYXQgYGJwZl9wcm9nX2F0dGFjaGAgaXMgdXNlZCBieSB0aGUgYEJQRl9QUk9HX0FUVEFDSGAgY29tbWFuZCBhbmQgYGxpbmtfY3JlYXRlYCBpcyB1c2VkIGJ5IGBCUEZfTElOS19DUkVBVEVgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgZmxvdyBpcyBhcyBleHBlY3RlZC4gVGhpcyB3aWxsIGJlIHRoZSBiYXNpcyBvZiBteSBmdXp6aW5nIGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTo0NToxOC4wODQ5MjYwODZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4ODU5ODYwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTo0NToxOS43NzM1MzE0NjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzkxNzA5NjAwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgU3Vic3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCB3aGljaCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0LiBJdCBsb29rcyBsaWtlIHdlJ3JlIHJlZmFjdG9yaW5nIHRoZSBhdHRhY2htZW50IGNoZWNrcy4gU3BlY2lmaWNhbGx5LCB0aGV5J3JlIHB1bGxpbmcgdGhlIGBDQVBfTkVUX0FETUlOYCByZXF1aXJlbWVudCBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgb3V0IG9mIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGFuZCBpbnRvIGEgbmV3IGZ1bmN0aW9uLCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYC4gVGhhdCdzIGNsZWFuZXI7IGNvbnNvbGlkYXRpbmcgdGhvc2UgcGVybWlzc2lvbiBjaGVja3MgbWFrZXMgc2Vuc2UuIFRoZXkncmUgYWxzbyB1cGRhdGluZyBgbGlua19jcmVhdGVgIGFuZCBgbGlua191cGRhdGVgIHRvIHVzZSB0aGUgbmV3IGNoZWNrLiBJJ20gd29uZGVyaW5nIHdoeSB0aGV5J3ZlIG1vdmVkIHRoZSBmdW5jdGlvbiBhbmQgbm90IGp1c3QgYWRkZWQgYSBuZXcgY2hlY2s/XG5cbkFscmlnaHQsIHNvIHRoZSBmdW5jdGlvbmFsIGltcGFjdCBpcyBvbiBhdHRhY2htZW50IGluIGBicGZfcHJvZ19hdHRhY2hgLCBgbGlua19jcmVhdGVgLCBhbmQgYGxpbmtfdXBkYXRlYC4gVGhlIHByaW1hcnkgY29uZmlnIHRoYXQncyByZWxldmFudCBoZXJlIGlzIGBCUEZfU1lTQ0FMTGAsIG9mIGNvdXJzZS4gTGV0J3Mgc2VlLi4uIGxldCBtZSBkb3VibGUtY2hlY2sgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzLiBJdCBsb29rcyBsaWtlIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG1haW4gb25lLiBXYWl0IGEgbWludXRlLi4uIGBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0JgIGhhcyBhIGRlcGVuZGVuY3kgb24gYENHUk9VUF9CUEZgLiBMZXQgbWUgbWFrZSBhIG1lbnRhbCBub3RlIHRvIGNoZWNrIHRoZSBgQ0dST1VQX0JQRmAgY29uZmlnOyBpdCdzIGFsd2F5cyBnb29kIHRvIGJlIGF3YXJlIG9mIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY2MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTo0NTozMy42OTA2M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkxNDA3OTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDR1JPVVBfQlBGXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMzQ1PWNvbmZpZyBDR1JPVVBfUEVSRlxcbi0tXFxuaW5pdC9LY29uZmlnLTEzNTUtXFxuaW5pdC9LY29uZmlnOjEzNTY6Y29uZmlnIENHUk9VUF9CUEZcXG5pbml0L0tjb25maWctMTM1Ny1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA5OjQ1OjM1LjM4MjA0MzY1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0ODI4MjU1MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgd2hpY2ggaXMgcmlnaHQgd2hlcmUgSSdkIGV4cGVjdCB0byBzZWUgY2hhbmdlcyByZWxhdGVkIHRvIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgYW5kIG1hbmlwdWxhdGluZyBsaW5rcy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgYXR0YWNoIGFuZCBsaW5rIGxvZ2ljIGlzIGdldHRpbmcgc29tZSBhdHRlbnRpb24uIFNwZWNpZmljYWxseSwgdGhlIHJlZmFjdG9yaW5nIG9mIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGludG8gYGJwZl9wcm9nX2F0dGFjaF9jaGVja2AsIGFuZCB0aGUgc3Vic2VxdWVudCB1cGRhdGVzIHRvIGBicGZfcHJvZ19hdHRhY2hgLCBgbGlua19jcmVhdGVgLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGEgYEJQRl9MSU5LX1RZUEVfQ0dST1VQYCBjaGVjayBpbiBgbGlua191cGRhdGVgLCBzY3JlYW1zIFwicG90ZW50aWFsIGZvciBpbnRlcmVzdGluZyBmdXp6aW5nLlwiIFRoaXMgaXMgcHJpbWUgcmVhbCBlc3RhdGUgZm9yIGV4cGxvaXRhdGlvbiBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBmbGF3cy5cblxuR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLCBJJ2Qgc2F5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0byBrZWVwIGFuIGV5ZSBvbiBhcmUgYEJQRl9TWVNDQUxMYCAob2J2aW91c2x5KSBhbmQgYENHUk9VUF9CUEZgLiBJJ2xsIHdhbnQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBlbmFibGVkIGluIGFueSB0ZXN0IGVudmlyb25tZW50cy5cblxuTXkgaW5pdGlhbCBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgYGJwZl9wcm9nX2F0dGFjaGAsIGBsaW5rX2NyZWF0ZWAsIGFuZCBgbGlua191cGRhdGVgLiBUaG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGFwcGVhciB0byBiZSBkaXJlY3RseSBtb2RpZmllZCBieSB0aGlzIHBhdGNoLCBzbyB0aGV5IGFyZSB0aGUgb25lcyBJJ2xsIHRhcmdldCBmaXJzdC5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiBgYnBmX3Byb2dfYXR0YWNoYCBpcyAqc3RhdGljKj8gT2theSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2NvcGUgYW5kIGNhbGwgc2l0ZXMuIElmIGl0ICppcyogc3RhdGljLCBteSBhcHByb2FjaCBtaWdodCBuZWVkIGEgbWlub3IgYWRqdXN0bWVudCwgYnV0IGl0IHNob3VsZG4ndCBjaGFuZ2UgdGhlIG92ZXJhbGwgZnV6emluZyBzdHJhdGVneS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA5MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTo0NTo1MC4yMTAzMDA5NjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNTYwNDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz00Mzk4PWF0dGFjaF90eXBlX3RvX3Byb2dfdHlwZShlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ0NzMtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDQ3NDpzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDQ3NS1cXHRcXHRcXHRcXHRcXHQgICAgIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDUzOC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NTM5OnN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoX2NoZWNrKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NTQwLVxcdFxcdFxcdFxcdCBlbnVtIGJwZl9hdHRhY2hfdHlwZSBhdHRhY2hfdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ1NDgtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDU0OTpcXHRyZXR1cm4gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKHByb2csIGF0dGFjaF90eXBlKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NTUwLX1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTQ1NTI9c3RhdGljIGJvb2wgaXNfY2dyb3VwX3Byb2dfdHlwZShlbnVtIGJwZl9wcm9nX3R5cGUgcHR5cGUsIGVudW0gYnBmX2F0dGFjaF90eXBlIGF0eXBlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDU4NS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NTg2OnN0YXRpYyBpbnQgYnBmX3Byb2dfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ1ODcte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDYxNS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NjE2OlxcdGlmIChicGZfcHJvZ19hdHRhY2hfY2hlY2socHJvZywgYXR0ci1cXHUwMDNlYXR0YWNoX3R5cGUpKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDYxNy1cXHRcXHRicGZfcHJvZ19wdXQocHJvZyk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjIxLVxcdGlmIChpc19jZ3JvdXBfcHJvZ190eXBlKHB0eXBlLCBwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSwgdHJ1ZSkpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NjIyOlxcdFxcdHJldCA9IGNncm91cF9icGZfcHJvZ19hdHRhY2goYXR0ciwgcHR5cGUsIHByb2cpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTQ2MjMtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjM0LVxcdGNhc2UgQlBGX1BST0dfVFlQRV9GTE9XX0RJU1NFQ1RPUjpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo0NjM1OlxcdFxcdHJldCA9IG5ldG5zX2JwZl9wcm9nX2F0dGFjaChhdHRyLCBwcm9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NjM2LVxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTgwMD1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4MTQtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTgxNTpcXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2socHJvZywgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuYXR0YWNoX3R5cGUpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4MTYtXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU5MzY9c3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5ODctXFx0XFx0ZWxzZVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5ODg6XFx0XFx0XFx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKG5ld19wcm9nLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5ODktXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0YXR5cGUpO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjMyNj1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mzk4LVxcdGNhc2UgQlBGX1BST0dfQVRUQUNIOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzOTk6XFx0XFx0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKFxcdTAwMjZhdHRyKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDAwLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTo0NTo1MC42ODA4NjYzMDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzA0MTYzNTUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmb2N1c2VkIG9uIEJQRiBzeXNjYWxscywgc3BlY2lmaWNhbGx5IGltcGFjdGluZyBob3cgQlBGIHByb2dyYW1zIGFyZSBhdHRhY2hlZCwgd2l0aCBhIGZvY3VzIG9uIGNncm91cHMgYW5kIExTTS4gSSBzZWUgaXQgbW9kaWZpZXMgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgOiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCwgYGJwZl9wcm9nX2F0dGFjaF9jaGVja2AsIGBicGZfcHJvZ19hdHRhY2hgLCBgbGlua19jcmVhdGVgLCBhbmQgYGxpbmtfdXBkYXRlYC5cblxuV2hhdCdzIGhhcHBlbmluZyBpcyB0aGF0IHRoZSBjYXBhYmlsaXR5IGNoZWNrIGZvciBgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCYCBpcyBiZWluZyBtb3ZlZCBvdXQgb2YgYGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZWAgYW5kIGludG8gYSBuZXcgZnVuY3Rpb24sIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tgLiBUaGlzIG5ldyBmdW5jdGlvbiBpcyB0aGVuIHVzZWQgd2l0aGluIGBicGZfcHJvZ19hdHRhY2hgIGFuZCBgbGlua19jcmVhdGVgLiBBIGtleSBtb2RpZmljYXRpb24gaXMgd2l0aGluIGBsaW5rX3VwZGF0ZWAgd2hlcmUgdGhlcmUncyBhIGNoZWNrIGZvciBgbGluay1cdTAwM2V0eXBlID09IEJQRl9MSU5LX1RZUEVfQ0dST1VQYCwgZm9sbG93ZWQgYnkgYSBjYWxsIHRvIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGFuZCBzb21lIHNwZWNpZmljIGxvZ2ljIGZvciBgQlBGX1BST0dfVFlQRV9MU01gLlxuXG5UaGlzIGlzIGludGVyZXN0aW5nLCBhbmQgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIGZ1enppbmc7IHRoZSBjaGFuZ2VzIGhlcmUgdG91Y2ggY3JpdGljYWwgcGF0aHMgZm9yIEJQRiBwcm9ncmFtIGF0dGFjaG1lbnQuIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiBob3cgdGhlc2UgYWx0ZXJhdGlvbnMgaW1wYWN0IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgQlBGIHByb2dyYW0gdHlwZXMgYW5kIGF0dGFjaG1lbnQgcG9pbnRzLlxuXG5Gcm9tIGEgc3ltYm9sIHBlcnNwZWN0aXZlLCBteSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gYGJwZl9wcm9nX2F0dGFjaGAsIGBsaW5rX2NyZWF0ZWAsIGFuZCBgbGlua191cGRhdGVgLlxuXG5Db25maWd1cmF0aW9uIHdpc2UsIHRoZSBwYXRjaCB3aWxsIG5lZWQgdG8gYmUgdGVzdGVkIHdpdGggYEJQRl9TWVNDQUxMYCBhbmQgYENHUk9VUF9CUEZgIGVuYWJsZWQuIEkgYWxzbyBuZWVkIHRvIGJlIHN1cmUgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvbiBgQlBGX0xTTWAsIHNpbmNlIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBvbiBMU00sIHNvIEknbGwgYWRkIGBCUEZfTFNNYCB0byB0aGUgY29uZmlncyBqdXN0IHRvIGJlIHNhZmUuXG5cblNwZWNpZmljYWxseSwgdGhhdCBiaXQgb2YgY29kZSBpbiBgbGlua191cGRhdGVgIGlzIGltcG9ydGFudDpcblxuYGBgY1xuXHRpZiAobGluay1cdTAwM2V0eXBlID09IEJQRl9MSU5LX1RZUEVfQ0dST1VQKSB7XG5cdFx0YXR5cGUgPSBsaW5rLVx1MDAzZWF0dGFjaF90eXBlO1xuXHRcdC8qXG5cdFx0ICogQlBGX0xTTV9NQUMgYW5kIEJQRl9MU01fQ0dST1VQIHNoYXJlIEJQRl9QUk9HX1RZUEVfTFNNLCBzb1xuXHRcdCAqIHRoZSBoZWxwZXIncyBkZWZhdWx0IHByb2ctdHlwZSBjaGVjayBjYW5ub3QgZGlzdGluZ3Vpc2ggdGhlbS5cblx0XHQgKi9cblx0XHRpZiAobmV3X3Byb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0xTTSBcdTAwMjZcdTAwMjZcblx0XHQgICAgbmV3X3Byb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgIT0gYXR5cGUpXG5cdFx0XHRyZXQgPSAtRUlOVkFMO1xuXHRcdGVsc2Vcblx0XHRcdHJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShuZXdfcHJvZyxcblx0XHRcdFx0XHRcdFx0XHRhdHlwZSk7XG5cdFx0aWYgKHJldClcblx0XHRcdGdvdG8gb3V0X3B1dF9wcm9ncztcblx0fVxuYGBgXG5cblRoaXMgaXMgd2hlcmUgdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgdGhlIHBvdGVudGlhbCBhbWJpZ3VpdHkgYmV0d2VlbiBgQlBGX0xTTV9NQUNgIGFuZCBgQlBGX0xTTV9DR1JPVVBgIHByb2dyYW1zIHdoaWNoIGJvdGggaGF2ZSB0aGUgc2FtZSBwcm9ncmFtIHR5cGUuIFRoYXQgbmVlZHMgY2FyZWZ1bCBhdHRlbnRpb24gZHVyaW5nIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6NDY6MDcuNzIyNTA0NjM4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU2MjYzMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfTFNNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXFxcImtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwOTo0NjowOS4yNzg3NzU1OTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMxMDY2NDI4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgU3lzY2FsbCBNb2RpZmljYXRpb24gZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIEJQRiBzeXNjYWxsIGltcGxlbWVudGF0aW9uIOKAkyBzcGVjaWZpY2FsbHksIGl0J3MgcmVvcmdhbml6aW5nIHRoZSBwZXJtaXNzaW9uIGFuZCB0eXBlIGNoZWNrcyByZWxhdGVkIHRvIGF0dGFjaGluZyBCUEYgcHJvZ3JhbXMgYW5kIHVwZGF0aW5nIEJQRiBsaW5rcy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBpbXBhY3QgaXMgb24gYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgcHJvZ3JhbXMgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggYENBUF9ORVRfQURNSU5gLCBhcyB3ZWxsIGFzIHNvbWUgc3BlY2lhbCBjb25zaWRlcmF0aW9ucyBmb3IgYEJQRl9QUk9HX1RZUEVfTFNNYC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBtb3ZpbmcgdGhlIGNoZWNrcyB0aGF0IHdlcmUgcHJldmlvdXNseSBpbiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCBpbnRvIGEgbmV3IGZ1bmN0aW9uIGNhbGxlZCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYC4gVGhpcyBuZXcgZnVuY3Rpb24gaXMgdGhlbiBsZXZlcmFnZWQgaW4gYGJwZl9wcm9nX2F0dGFjaGAgYW5kIGBsaW5rX2NyZWF0ZWAuIENyaXRpY2FsbHksIGBsaW5rX3VwZGF0ZWAgYWxzbyBzZWVzIGEgY2hhbmdlOyBpdCBub3cgaW5jbHVkZXMgYSBjaGVjayBmb3IgYGxpbmstXHUwMDNldHlwZSA9PSBCUEZfTElOS19UWVBFX0NHUk9VUGAgYW5kIGNhbGxzIGBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGVgIGFsb25nIHdpdGggdGhlIHNwZWNpYWwgTFNNIGNoZWNrLiBUaGlzIHNpZ25pZmljYW50bHkgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiBgQlBGX0xJTktfVVBEQVRFYCBzcGVjaWZpY2FsbHkgZm9yIGNncm91cCBsaW5rcy5cblxuQ29uc2lkZXJpbmcgdGhpcywgdGhlIGBicGZfcHJvZ19hdHRhY2hgLCBgbGlua19jcmVhdGVgLCBhbmQgYGxpbmtfdXBkYXRlYCBvcGVyYXRpb25zIHRocm91Z2ggdGhlIGBicGYoKWAgc3lzY2FsbCBhcmUgdGhlIGZvY2FsIHBvaW50cy4gU2luY2UgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBpdCBpcyBkZWZpbml0ZWx5IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIGBsaW5rX3VwZGF0ZWAgaXMgcmVhY2hlZCB2aWEgdGhlIGBicGYoQlBGX0xJTktfVVBEQVRFLCAuLi4pYCBzeXNjYWxsIHBhdGgsIGBicGZfcHJvZ19hdHRhY2hgIHZpYSBgYnBmKEJQRl9QUk9HX0FUVEFDSCwgLi4uKWAgYW5kIGBsaW5rX2NyZWF0ZWAgdmlhIGBicGYoQlBGX0xJTktfQ1JFQVRFLCAuLi4pYC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gcmVhY2hhYmlsaXR5LiBPaywgaXQgbG9va3MgbGlrZSBgbGlua191cGRhdGVgIGlzIHN0YXRpYyB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBidXQgY2FsbGVkIGZyb20gYF9fc3lzX2JwZmAuIEFuZCBgX19zeXNfYnBmYCBpcyBzdGF0aWMgdG9vLCB0aGUgYWN0dWFsIHN5c2NhbGwgaXMgYHN5c19icGZgLiBTbywgd2hpbGUgaXQncyBzdGF0aWMsIGl0J3MgcGFydCBvZiB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIEJQRiBzeXNjYWxsIG9wZXJhdGlvbnMgYW5kIGxpa2VseSBub3QgaW5saW5lZCBkZXNwaXRlIGJlaW5nIGEgcmVsYXRpdmVseSBsYXJnZSBmdW5jdGlvbi4gVGhpcyBzYW1lIGxvZ2ljIHdvdWxkIGFwcGx5IHRvIHRoZSBvdGhlciBmdW5jdGlvbnMuXG5cblRoZXJlZm9yZSwgdGhlIG1vc3QgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZTpcblxuKiAgIGBicGZfcHJvZ19hdHRhY2hgXG4qICAgYGxpbmtfY3JlYXRlYFxuKiAgIGBsaW5rX3VwZGF0ZWBcblxuSSdsbCBpbmNsdWRlIGBfX3N5c19icGZgIGFuZCBgc3lzX2JwZmAganVzdCBpbiBjYXNlLCBidXQgdGhlIHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIHRoZSBmdW5jdGlvbnMgaW1wbGVtZW50aW5nIHRoZSBCUEYgb3BlcmF0aW9ucy5cblxuVGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmU6IGBCUEZfU1lTQ0FMTGAsIGBDR1JPVVBfQlBGYCwgYW5kIGBCUEZfTFNNYC5cblxuSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCdzIGltcGFjdCBvbiB0aGVzZSBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBwZXJtaXNzaW9ucyBhbmQgY2dyb3VwIHByb2dyYW1zLCBtYWtlcyB0aGlzIGEgcHJvbWlzaW5nIHRhcmdldCBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIzMSwiT3V0cHV0VG9rZW5zIjoxMzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6NDY6MzIuMzg1NDIxMDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDI5NDI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkNHUk9VUF9CUEZcIixcbiAgICBcIkJQRl9MU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ19hdHRhY2hcIixcbiAgICBcImxpbmtfY3JlYXRlXCIsXG4gICAgXCJsaW5rX3VwZGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZXJtaXNzaW9uIGFuZCB0eXBlIGNoZWNraW5nIGxvZ2ljIGZvciBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIGFuZCB1cGRhdGluZyBCUEYgbGlua3MsIHNwZWNpZmljYWxseSBmb3IgY2dyb3VwIGFuZCBMU00gcHJvZ3JhbXMuIFRoaXMgYWZmZWN0cyB0aGUgYnBmKCkgc3lzY2FsbCBvcGVyYXRpb25zIEJQRl9QUk9HX0FUVEFDSCwgQlBGX0xJTktfQ1JFQVRFLCBhbmQgQlBGX0xJTktfVVBEQVRFLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJDR1JPVVBfQlBGXCIsXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfYXR0YWNoXCIsXG4gICAgXCJsaW5rX2NyZWF0ZVwiLFxuICAgIFwibGlua191cGRhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGVybWlzc2lvbiBhbmQgdHlwZSBjaGVja2luZyBsb2dpYyBmb3IgYXR0YWNoaW5nIEJQRiBwcm9ncmFtcyBhbmQgdXBkYXRpbmcgQlBGIGxpbmtzLCBzcGVjaWZpY2FsbHkgZm9yIGNncm91cCBhbmQgTFNNIHByb2dyYW1zLiBUaGlzIGFmZmVjdHMgdGhlIGJwZigpIHN5c2NhbGwgb3BlcmF0aW9ucyBCUEZfUFJPR19BVFRBQ0gsIEJQRl9MSU5LX0NSRUFURSwgYW5kIEJQRl9MSU5LX1VQREFURS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6NDY6MzIuNDU5NzIwOTM4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzY4NTczOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6NDY6MzIuNDYwMTY0NzE3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk3NjgxMjY1NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBjYXBhYmlsaXR5IGFuZCBhdHRhY2ggdHlwZSBjaGVja3MgZm9yIEJQRiBwcm9ncmFtcyBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBJdCBtb3ZlcyB0aGUgYENBUF9ORVRfQURNSU5gIGNoZWNrIGZvciBgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCYCBpbnRvIGEgd3JhcHBlciBmdW5jdGlvbiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYCBhbmQgYWRkcyBhdHRhY2ggdHlwZSB2YWxpZGF0aW9uIGluIGBsaW5rX3VwZGF0ZWAgZm9yIGNncm91cCBsaW5rcy4gVGhlc2UgY2hhbmdlcyBvbmx5IGFmZmVjdCBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBwZXJtaXNzaW9ucyBhbmQgcHJvZ3JhbSB0eXBlIHZhbGlkYXRpb24uIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIG1hbmlwdWxhdGVkIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGluY29ycmVjdCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBsb2dpYyBlcnJvcnMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmVhMjdiMzU4MjY5NjA3NWFkNTA4NDBlMzQxYmVkNTJjNzExODQxNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA5OjQ0OjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggNjg3NGJhMTQyNGFmMC4uZGZlYTMzN2ZmMjVlYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuQEAgLTQ0ODMsMTIgKzQ0ODMsNiBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHRjYXNlIEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQOlxuIFx0XHRyZXR1cm4gYXR0YWNoX3R5cGUgPT0gcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA/IDAgOiAtRUlOVkFMO1xuIFx0Y2FzZSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0I6XG4tXHRcdGlmICghYnBmX3Rva2VuX2NhcGFibGUocHJvZy1cdTAwM2VhdXgtXHUwMDNldG9rZW4sIENBUF9ORVRfQURNSU4pKVxuLVx0XHRcdC8qIGNnLXNrYiBwcm9ncyBjYW4gYmUgbG9hZGVkIGJ5IHVucHJpdiB1c2VyLlxuLVx0XHRcdCAqIGNoZWNrIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLlxuLVx0XHRcdCAqL1xuLVx0XHRcdHJldHVybiAtRVBFUk07XG4tXG4gXHRcdHB0eXBlID0gYXR0YWNoX3R5cGVfdG9fcHJvZ190eXBlKGF0dGFjaF90eXBlKTtcbiBcdFx0aWYgKHByb2ctXHUwMDNldHlwZSAhPSBwdHlwZSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC00NTQyLDYgKzQ1MzYsMTkgQEAgc3RhdGljIGludCBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuIFx0fVxuIH1cbiBcbitzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaF9jaGVjayhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4rXHRcdFx0XHQgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUpXG4re1xuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0NHUk9VUF9TS0IgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWJwZl90b2tlbl9jYXBhYmxlKHByb2ctXHUwMDNlYXV4LVx1MDAzZXRva2VuLCBDQVBfTkVUX0FETUlOKSlcbitcdFx0LyogY2ctc2tiIHByb2dzIGNhbiBiZSBsb2FkZWQgYnkgdW5wcml2IHVzZXIuXG4rXHRcdCAqIGNoZWNrIHBlcm1pc3Npb25zIGF0IGF0dGFjaCB0aW1lLlxuK1x0XHQgKi9cbitcdFx0cmV0dXJuIC1FUEVSTTtcbitcbitcdHJldHVybiBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZywgYXR0YWNoX3R5cGUpO1xuK31cbitcbiBzdGF0aWMgYm9vbCBpc19jZ3JvdXBfcHJvZ190eXBlKGVudW0gYnBmX3Byb2dfdHlwZSBwdHlwZSwgZW51bSBicGZfYXR0YWNoX3R5cGUgYXR5cGUsXG4gXHRcdFx0XHRib29sIGNoZWNrX2F0eXBlKVxuIHtcbkBAIC00NjA2LDcgKzQ2MTMsNyBAQCBzdGF0aWMgaW50IGJwZl9wcm9nX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdGlmIChJU19FUlIocHJvZykpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByb2cpO1xuIFxuLVx0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVja19hdHRhY2hfdHlwZShwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKSkge1xuK1x0aWYgKGJwZl9wcm9nX2F0dGFjaF9jaGVjayhwcm9nLCBhdHRyLVx1MDAzZWF0dGFjaF90eXBlKSkge1xuIFx0XHRicGZfcHJvZ19wdXQocHJvZyk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTU4MDUsOCArNTgxMiw3IEBAIHN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxuIFx0aWYgKElTX0VSUihwcm9nKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocHJvZyk7XG4gXG4tXHRyZXQgPSBicGZfcHJvZ19hdHRhY2hfY2hlY2tfYXR0YWNoX3R5cGUocHJvZyxcbi1cdFx0XHRcdFx0XHRhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbitcdHJldCA9IGJwZl9wcm9nX2F0dGFjaF9jaGVjayhwcm9nLCBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLmF0dGFjaF90eXBlKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTU5MzEsNiArNTkzNyw3IEBAIHN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpvbGRfcHJvZyA9IE5VTEwsICpuZXdfcHJvZztcbiBcdHN0cnVjdCBicGZfbGluayAqbGluaztcbitcdGVudW0gYnBmX2F0dGFjaF90eXBlIGF0eXBlO1xuIFx0dTMyIGZsYWdzO1xuIFx0aW50IHJldDtcbiBcbkBAIC01OTY4LDYgKzU5NzUsMjIgQEAgc3RhdGljIGludCBsaW5rX3VwZGF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdFx0Z290byBvdXRfcHV0X3Byb2dzO1xuIFx0fVxuIFxuK1x0aWYgKGxpbmstXHUwMDNldHlwZSA9PSBCUEZfTElOS19UWVBFX0NHUk9VUCkge1xuK1x0XHRhdHlwZSA9IGxpbmstXHUwMDNlYXR0YWNoX3R5cGU7XG4rXHRcdC8qXG4rXHRcdCAqIEJQRl9MU01fTUFDIGFuZCBCUEZfTFNNX0NHUk9VUCBzaGFyZSBCUEZfUFJPR19UWVBFX0xTTSwgc29cbitcdFx0ICogdGhlIGhlbHBlcidzIGRlZmF1bHQgcHJvZy10eXBlIGNoZWNrIGNhbm5vdCBkaXN0aW5ndWlzaCB0aGVtLlxuK1x0XHQgKi9cbitcdFx0aWYgKG5ld19wcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBuZXdfcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSAhPSBhdHlwZSlcbitcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRlbHNlXG4rXHRcdFx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlKG5ld19wcm9nLFxuK1x0XHRcdFx0XHRcdFx0XHRhdHlwZSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBvdXRfcHV0X3Byb2dzO1xuK1x0fVxuK1xuIFx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZXVwZGF0ZV9wcm9nKVxuIFx0XHRyZXQgPSBsaW5rLVx1MDAzZW9wcy1cdTAwM2V1cGRhdGVfcHJvZyhsaW5rLCBuZXdfcHJvZywgb2xkX3Byb2cpO1xuIFx0ZWxzZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6NDY6MzIuNDYwMTY2NDY4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3NjgxMDI3OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBydW4uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IHByb2JhYmx5IGRvZXNuJ3QsIGJ1dCBsZXQncyBiZSB0aG9yb3VnaC5cblxuVGhlIGNoYW5nZXMgYXJlIGFsbCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBhbmQgaXQncyBtb3N0bHkgYWJvdXQgcmVmYWN0b3JpbmcgaG93IHRoZSBrZXJuZWwgY2hlY2tzIEJQRiBwcm9ncmFtIGNhcGFiaWxpdGllcyBhbmQgYXR0YWNobWVudCB0eXBlcy4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggbW92ZXMgdGhlIGBDQVBfTkVUX0FETUlOYCBjaGVjayBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgaW50byB0aGlzIG5ldyBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYCBmdW5jdGlvbi4gSXQgYWxzbyB1cGRhdGVzIGV4aXN0aW5nIGZ1bmN0aW9ucywgYGJwZl9wcm9nX2F0dGFjaGAgYW5kIGBsaW5rX2NyZWF0ZWAsIHRvIHVzZSB0aGlzIG5ldyBmdW5jdGlvbiBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrX2F0dGFjaF90eXBlYCwgd2hpY2ggaXMgc3RpbGwgdXNlZCBpbiBgbGlua191cGRhdGVgIGJ1dCBvbmx5IGlmIHRoZSBsaW5rIHR5cGUgaXMgYEJQRl9MSU5LX1RZUEVfQ0dST1VQYC5cblxuTXkgcHJpbWFyeSBjb25jZXJuIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBuZXcgb3Bwb3J0dW5pdGllcyBmb3IgcmVhZGluZyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgdGhhdCdzIHRoZSBrZXkuIEkgc2VlIG5vIG5ldyBhbGxvY2F0aW9ucyBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcywgbm8gZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEsIGFuZCBubyBjaGFuZ2VzIHRvIGhvdyBib3VuZHMgb3IgbGVuZ3RocyBhcmUgY2hlY2tlZCB0aGF0IGNvdWxkIGxlYWQgdG8gdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIGFsbW9zdCBlbnRpcmVseSBjb250cm9sIGZsb3cuIEl0J3MgcGVybWlzc2lvbiBjaGVja2luZyBhbmQgdmFsaWRhdGlvbiBsb2dpYy5cblxuVGhlcmVmb3JlLCB0aGUgbGlrZWxpaG9vZCBvZiB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGFuICp1bmluaXRpYWxpemVkIG1lbW9yeSogcmlzayBpcyBlZmZlY3RpdmVseSB6ZXJvLiBSZWd1bGFyIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyB0aGF0IG1pZ2h0IGNyZWVwIGluLCBhbmQgdGhvc2UgYXJlIHdoYXQgd2Ugd291bGQgZXhwZWN0IHRvIHNlZSBpbiBhIHBhdGNoIGxpa2UgdGhpcy5cblxuU28sIEknbSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgSSdsbCBkZXRhaWwgdGhpcyByZWFzb25pbmcgaW4gdGhlIGNvbW1pdCBtZXNzYWdlLiBUaGUgcGF0Y2ggcmVmYWN0b3JzIGNhcGFiaWxpdHkgYW5kIGF0dGFjaCB0eXBlIGNoZWNrcyBmb3IgQlBGIHByb2dyYW1zIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIGFuZCB0aGVzZSBjaGFuZ2VzIGZvY3VzIHNvbGVseSBvbiBjb250cm9sIGZsb3cgcmVnYXJkaW5nIHBlcm1pc3Npb25zIGFuZCBwcm9ncmFtIHR5cGUgdmFsaWRhdGlvbi4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgbWFuaXB1bGF0ZWQgaW4gYW55IHdheSB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgc2FuaXRpemVycyBzaG91bGQgYmUgc3VmZmljaWVudC4gSSBhbSBub3Qgc2VlaW5nIGEgbmVlZCBmb3IgS01TQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTYsIk91dHB1dFRva2VucyI6MTg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDk6NDY6NDIuMjI4MjcxOTQ2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgY2FwYWJpbGl0eSBhbmQgYXR0YWNoIHR5cGUgY2hlY2tzIGZvciBCUEYgcHJvZ3JhbXMgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gSXQgbW92ZXMgdGhlIGBDQVBfTkVUX0FETUlOYCBjaGVjayBmb3IgYEJQRl9QUk9HX1RZUEVfQ0dST1VQX1NLQmAgaW50byBhIHdyYXBwZXIgZnVuY3Rpb24gYGJwZl9wcm9nX2F0dGFjaF9jaGVja2AgYW5kIGFkZHMgYXR0YWNoIHR5cGUgdmFsaWRhdGlvbiBpbiBgbGlua191cGRhdGVgIGZvciBjZ3JvdXAgbGlua3MuIFRoZXNlIGNoYW5nZXMgb25seSBhZmZlY3QgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gcGVybWlzc2lvbnMgYW5kIHByb2dyYW0gdHlwZSB2YWxpZGF0aW9uLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBtYW5pcHVsYXRlZCBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBpbmNvcnJlY3QgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgbG9naWMgZXJyb3JzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBjYXBhYmlsaXR5IGFuZCBhdHRhY2ggdHlwZSBjaGVja3MgZm9yIEJQRiBwcm9ncmFtcyBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBJdCBtb3ZlcyB0aGUgYENBUF9ORVRfQURNSU5gIGNoZWNrIGZvciBgQlBGX1BST0dfVFlQRV9DR1JPVVBfU0tCYCBpbnRvIGEgd3JhcHBlciBmdW5jdGlvbiBgYnBmX3Byb2dfYXR0YWNoX2NoZWNrYCBhbmQgYWRkcyBhdHRhY2ggdHlwZSB2YWxpZGF0aW9uIGluIGBsaW5rX3VwZGF0ZWAgZm9yIGNncm91cCBsaW5rcy4gVGhlc2UgY2hhbmdlcyBvbmx5IGFmZmVjdCBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBwZXJtaXNzaW9ucyBhbmQgcHJvZ3JhbSB0eXBlIHZhbGlkYXRpb24uIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIG1hbmlwdWxhdGVkIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGluY29ycmVjdCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBsb2dpYyBlcnJvcnMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflown6q5q[1] Phase: Succeeded StartedAt: 2026-08-21 09:46:53 +0000 UTC FinishedAt: 2026-08-21 09:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 09:46:53 +0000 UTC FinishedAt: 2026-08-21 09:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2] Phase: Succeeded StartedAt: 2026-08-21 09:46:53 +0000 UTC FinishedAt: 2026-08-21 13:28:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-21 09:46:53 +0000 UTC FinishedAt: 2026-08-21 13:28:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-21 09:46:53 +0000 UTC FinishedAt: 2026-08-21 09:47:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-21 09:46:53 +0000 UTC FinishedAt: 2026-08-21 09:46:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown6q5q/series-workflown6q5q-convert-artifact-4099416442/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-21 09:47:03 +0000 UTC FinishedAt: 2026-08-21 10:04:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-21 09:47:03 +0000 UTC FinishedAt: 2026-08-21 10:04:15 +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:*dcd11419-9131-4889-9370-ab619a724ef3,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-workflown6q5q/series-workflown6q5q-convert-artifact-4099416442/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": "d2359641-ba8c-4d7d-bb57-5675955bbe49", "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-workflown6q5q/series-workflown6q5q-build-action-2139222568/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-21 09:47:03 +0000 UTC FinishedAt: 2026-08-21 10:04:05 +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:*dcd11419-9131-4889-9370-ab619a724ef3,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-workflown6q5q/series-workflown6q5q-convert-artifact-4099416442/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": "d2359641-ba8c-4d7d-bb57-5675955bbe49", "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-workflown6q5q/series-workflown6q5q-build-action-2139222568/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-21 10:04:15 +0000 UTC FinishedAt: 2026-08-21 10:04:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-21 10:04:15 +0000 UTC FinishedAt: 2026-08-21 10:04:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-21 10:04:15 +0000 UTC FinishedAt: 2026-08-21 10:04:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-21 10:04:15 +0000 UTC FinishedAt: 2026-08-21 10:04:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown6q5q/series-workflown6q5q-convert-artifact-2748800213/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-21 10:04:25 +0000 UTC FinishedAt: 2026-08-21 10:06:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-21 10:04:25 +0000 UTC FinishedAt: 2026-08-21 10:06:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d2359641-ba8c-4d7d-bb57-5675955bbe49,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-workflown6q5q/series-workflown6q5q-build-action-2139222568/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-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-21 10:06:37 +0000 UTC FinishedAt: 2026-08-21 10:06:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-21 10:06:37 +0000 UTC FinishedAt: 2026-08-21 10:06:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-21 10:06:37 +0000 UTC FinishedAt: 2026-08-21 10:23:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-21 10:06:37 +0000 UTC FinishedAt: 2026-08-21 10:23:34 +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:*dcd11419-9131-4889-9370-ab619a724ef3,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-workflown6q5q/series-workflown6q5q-convert-artifact-2748800213/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": "cd911e04-47c9-4f5f-83fc-3f81e065f50b", "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-workflown6q5q/series-workflown6q5q-build-action-29916769/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-21 10:06:37 +0000 UTC FinishedAt: 2026-08-21 10:23:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dcd11419-9131-4889-9370-ab619a724ef3,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-workflown6q5q/series-workflown6q5q-convert-artifact-2748800213/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": "cd911e04-47c9-4f5f-83fc-3f81e065f50b", "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-workflown6q5q/series-workflown6q5q-build-action-29916769/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-21 10:23:34 +0000 UTC FinishedAt: 2026-08-21 10:23:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-21 10:23:34 +0000 UTC FinishedAt: 2026-08-21 10:23:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-21 10:23:34 +0000 UTC FinishedAt: 2026-08-21 10:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-21 10:23:34 +0000 UTC FinishedAt: 2026-08-21 10:25:30 +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:*cd911e04-47c9-4f5f-83fc-3f81e065f50b,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-workflown6q5q/series-workflown6q5q-build-action-29916769/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-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-21 10:25:40 +0000 UTC FinishedAt: 2026-08-21 13:28:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-21 10:25:40 +0000 UTC FinishedAt: 2026-08-21 13:28:34 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*d2359641-ba8c-4d7d-bb57-5675955bbe49,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cd911e04-47c9-4f5f-83fc-3f81e065f50b,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-workflown6q5q/series-workflown6q5q-build-action-2139222568/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-workflown6q5q/series-workflown6q5q-build-action-29916769/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-21 10:25:40 +0000 UTC FinishedAt: 2026-08-21 10:25:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-21 10:25:40 +0000 UTC FinishedAt: 2026-08-21 10:25:44 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown6q5q/series-workflown6q5q-convert-artifact-3258058170/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-21 10:25:40 +0000 UTC FinishedAt: 2026-08-21 10:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-21 10:25:40 +0000 UTC FinishedAt: 2026-08-21 10:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-21 10:25:40 +0000 UTC FinishedAt: 2026-08-21 10:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-21 10:25:50 +0000 UTC FinishedAt: 2026-08-21 13:28:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_prog_attach","link_create","link_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d19862d923b9a785ec27bc51c334a8d457a0dd03","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","CGROUP_BPF","BPF_LSM"],"series_id":"f6f07b26-7c8d-4d9a-ab9e-fd72ab4805ef","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-21 10:25:50 +0000 UTC FinishedAt: 2026-08-21 13:28:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d2359641-ba8c-4d7d-bb57-5675955bbe49,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cd911e04-47c9-4f5f-83fc-3f81e065f50b,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-workflown6q5q/series-workflown6q5q-build-action-2139222568/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-workflown6q5q/series-workflown6q5q-build-action-29916769/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-workflown6q5q/series-workflown6q5q-convert-artifact-3258058170/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,}