Name: series-workflowtgpfd Phase: Succeeded StartedAt: 2026-08-27 11:28:45 +0000 UTC FinishedAt: 2026-08-27 15:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[0] Phase: Succeeded StartedAt: 2026-08-27 11:28:45 +0000 UTC FinishedAt: 2026-08-27 12:05:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 11:28:45 +0000 UTC FinishedAt: 2026-08-27 12:05:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "f967455fb2a5a2079b9eb5823e9ccf359174bf9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "f967455fb2a5a2079b9eb5823e9ccf359174bf9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "8854ceb5-7d0e-4716-a5a1-ba2fcacb4631" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tipc_nametbl_publish", "tipc_nametbl_withdraw", "tipc_sk_bind" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX25hbWV0YmxfcHVibGlzaCYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWV0Ymxfd2l0aGRyYXcmIzM0OywKICAgICYjMzQ7dGlwY19za19iaW5kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjb3VudGluZyBsb2NhbCBwdWJsaWNhdGlvbnMgaW4gdGhlIFRJUEMgbmFtZSB0YWJsZSB0byBleGNsdWRlIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgKFRJUENfTk9ERV9TVEFURSwgVElQQ19MSU5LX1NUQVRFLCBUSVBDX1RPUF9TUlYpIGFuZCByZXNlcnZlcyBvbmUgZW50cnkgZm9yIHRoZSBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZS4gVGhpcyBpcyBwdXJlbHkgYSByZXNvdXJjZSBsaW1pdCBhbmQgY291bnRpbmcgbG9naWMgY2hhbmdlIHRvIHByZXZlbnQgdXNlciBwdWJsaWNhdGlvbnMgZnJvbSBleGhhdXN0aW5nIHRoZSBsaW1pdCBhbmQgYmxvY2tpbmcgcHJvdG9jb2wgc2VydmljZSB0eXBlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGludGVyYWN0aW9ucyB3aXRoIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcHVibGljYXRpb24gbGltaXQgbG9naWMgaW4gVElQQyB0byBlbnN1cmUgcHJvdG9jb2wgc2VydmljZSB0eXBlcyAoVElQQ19OT0RFX1NUQVRFLCBUSVBDX0xJTktfU1RBVEUsIFRJUENfVE9QX1NSVikgY2FuIGJ5cGFzcyB0aGUgdXNlciBwdWJsaWNhdGlvbiBsaW1pdC4gVGhpcyBhZmZlY3RzIHRoZSBjb3JlIFRJUEMgbmFtZSB0YWJsZSBtYW5hZ2VtZW50IGFuZCBpcyByZWFjaGFibGUgdmlhIFRJUEMgc29ja2V0IGJpbmQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMTo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZmZmNmNjFlMWE2NmQ0M2IzMzhlMTZmN2NhNTA2OTc5ODUyYTQ2ZGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxMTo1OToyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLjZmZGEzNmFiMTc2NjkgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xuQEAgLTc2MywyMSAmIzQzOzc2Myw0MCBAQCBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFx0XHRcdFx0XHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KVxuIHtcbiBcdHN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpO1xuJiM0MztcdHUzMiBtYXhfdXNlcl9wdWIgPSBUSVBDX01BWF9QVUJMIC0gMTtcbiBcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuJiM0MztcdGJvb2wgcHJvdG9jb2xfdHlwZSA9IGZhbHNlO1xuIFx0dTMyIHJjX2Rlc3RzO1xuIFxuJiM0MztcdGlmICh1YS1cdTAwM2Vzci50eXBlID09IFRJUENfTk9ERV9TVEFURSB8fCB1YS1cdTAwM2Vzci50eXBlID09IFRJUENfTElOS19TVEFURSB8fFxuJiM0MztcdCAgICB1YS1cdTAwM2Vzci50eXBlID09IFRJUENfVE9QX1NSVilcbiYjNDM7XHRcdHByb3RvY29sX3R5cGUgPSB0cnVlO1xuJiM0MztcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuJiM0MztcdGlmIChwcm90b2NvbF90eXBlKVxuJiM0MztcdFx0Z290byBpbnNlcnQ7XG4gXG4tXHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IFRJUENfTUFYX1BVQkwpIHtcbi1cdFx0cHJfd2FybihcJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcXG5cJiMzNDssIFRJUENfTUFYX1BVQkwpO1xuJiM0MztcdC8qIFJlc2VydmUgb25lIGVudHJ5IGZvciBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZSBiZWNhdXNlIGl0IGhhcyBjbHVzdGVyXG4mIzQzO1x0ICogc2NvcGUgYW5kIGl0IGlzIGRpc3RyaWJ1dGVkIGluIGJ1bGsuIFNvLCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdXNlciYjMzk7c1xuJiM0MztcdCAqIHB1YmxpY2F0aW9ucyBpcyAoVElQQ19NQVhfUFVCTCAtIDEpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IFx1MDAzZT0gbWF4X3VzZXJfcHViKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O0JpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxcblwmIzM0OywgbWF4X3VzZXJfcHViKTtcbiBcdFx0Z290byBleGl0O1xuIFx0fVxuIFxuJiM0MztpbnNlcnQ6XG4gXHRwID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpO1xuIFx0aWYgKHApIHtcbi1cdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHQvKiBOb3QgY291bnQgbm9kZSBzdGF0ZSwgbGluayBzdGF0ZSBhbmQgdG9wb2xvZ3kgc2VydmVyIHR5cGVzXG4mIzQzO1x0XHQgKiBzbyB0aGF0IG1heGltdW0gbnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBkb2VzIG5vdCBwcmV2ZW50XG4mIzQzO1x0XHQgKiBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIGZyb20gYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgbmFtZVxuJiM0MztcdFx0ICogdGFibGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICghcHJvdG9jb2xfdHlwZSlcbiYjNDM7XHRcdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCYjNDM7JiM0Mzs7XG4gXHRcdHNrYiA9IHRpcGNfbmFtZWRfcHVibGlzaChuZXQsIHApO1xuIFx0fVxuIFx0cmNfZGVzdHMgPSBudC1cdTAwM2VyY19kZXN0cztcbkBAIC04MTAsNyAmIzQzOzgyOSwxMCBAQCB2b2lkIHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcbiBcdHAgPSB0aXBjX25hbWV0YmxfcmVtb3ZlX3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4gXHRpZiAocCkge1xuLVx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50LS07XG4mIzQzO1x0XHRpZiAocC1cdTAwM2Vzci50eXBlICE9IFRJUENfTk9ERV9TVEFURSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBwLVx1MDAzZXNyLnR5cGUgIT0gVElQQ19MSU5LX1NUQVRFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHAtXHUwMDNlc3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpXG4mIzQzO1x0XHRcdG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQtLTtcbiBcdFx0c2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHApO1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnAtXHUwMDNlYmluZGluZ19zb2NrKTtcbiBcdFx0a2ZyZWVfcmN1KHAsIHJjdSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX25hbWV0YmxfcHVibGlzaCYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWV0Ymxfd2l0aGRyYXcmIzM0OywKICAgICYjMzQ7dGlwY19za19iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwdWJsaWNhdGlvbiBsaW1pdCBsb2dpYyBpbiBUSVBDIHRvIGVuc3VyZSBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIChUSVBDX05PREVfU1RBVEUsIFRJUENfTElOS19TVEFURSwgVElQQ19UT1BfU1JWKSBjYW4gYnlwYXNzIHRoZSB1c2VyIHB1YmxpY2F0aW9uIGxpbWl0LiBUaGlzIGFmZmVjdHMgdGhlIGNvcmUgVElQQyBuYW1lIHRhYmxlIG1hbmFnZW1lbnQgYW5kIGlzIHJlYWNoYWJsZSB2aWEgVElQQyBzb2NrZXQgYmluZCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmZmY2Y2MWUxYTY2ZDQzYjMzOGUxNmY3Y2E1MDY5Nzk4NTJhNDZkZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDExOjU5OjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV90YWJsZS5jIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jCmluZGV4IDI1M2M3MmQxMzY2ZWIuLjZmZGEzNmFiMTc2NjkgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmMKQEAgLTc2MywyMSAmIzQzOzc2Myw0MCBAQCBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAogCQkJCQkgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KQogewogCXN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpOwomIzQzOwl1MzIgbWF4X3VzZXJfcHViID0gVElQQ19NQVhfUFVCTCAtIDE7CiAJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKJiM0MzsJYm9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7CiAJdTMyIHJjX2Rlc3RzOwogCiYjNDM7CWlmICh1YS0mZ3Q7c3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgfHwgdWEtJmd0O3NyLnR5cGUgPT0gVElQQ19MSU5LX1NUQVRFIHx8CiYjNDM7CSAgICB1YS0mZ3Q7c3IudHlwZSA9PSBUSVBDX1RPUF9TUlYpCiYjNDM7CQlwcm90b2NvbF90eXBlID0gdHJ1ZTsKJiM0MzsKIAlzcGluX2xvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKJiM0MzsJaWYgKHByb3RvY29sX3R5cGUpCiYjNDM7CQlnb3RvIGluc2VydDsKIAotCWlmIChudC0mZ3Q7bG9jYWxfcHVibF9jb3VudCAmZ3Q7PSBUSVBDX01BWF9QVUJMKSB7Ci0JCXByX3dhcm4oJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcbiYjMzQ7LCBUSVBDX01BWF9QVUJMKTsKJiM0MzsJLyogUmVzZXJ2ZSBvbmUgZW50cnkgZm9yIG5vZGUgc3RhdGUgc2VydmljZSB0eXBlIGJlY2F1c2UgaXQgaGFzIGNsdXN0ZXIKJiM0MzsJICogc2NvcGUgYW5kIGl0IGlzIGRpc3RyaWJ1dGVkIGluIGJ1bGsuIFNvLCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdXNlciYjMzk7cwomIzQzOwkgKiBwdWJsaWNhdGlvbnMgaXMgKFRJUENfTUFYX1BVQkwgLSAxKS4KJiM0MzsJICovCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfcHVibF9jb3VudCAmZ3Q7PSBtYXhfdXNlcl9wdWIpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcbiYjMzQ7LCBtYXhfdXNlcl9wdWIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCiYjNDM7aW5zZXJ0OgogCXAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSk7CiAJaWYgKHApIHsKLQkJbnQtJmd0O2xvY2FsX3B1YmxfY291bnQmIzQzOyYjNDM7OwomIzQzOwkJLyogTm90IGNvdW50IG5vZGUgc3RhdGUsIGxpbmsgc3RhdGUgYW5kIHRvcG9sb2d5IHNlcnZlciB0eXBlcwomIzQzOwkJICogc28gdGhhdCBtYXhpbXVtIG50LSZndDtsb2NhbF9wdWJsX2NvdW50IGRvZXMgbm90IHByZXZlbnQKJiM0MzsJCSAqIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgZnJvbSBiZWluZyBpbnNlcnRlZCBpbnRvIHRoZSBuYW1lCiYjNDM7CQkgKiB0YWJsZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFwcm90b2NvbF90eXBlKQomIzQzOwkJCW50LSZndDtsb2NhbF9wdWJsX2NvdW50JiM0MzsmIzQzOzsKIAkJc2tiID0gdGlwY19uYW1lZF9wdWJsaXNoKG5ldCwgcCk7CiAJfQogCXJjX2Rlc3RzID0gbnQtJmd0O3JjX2Rlc3RzOwpAQCAtODEwLDcgJiM0Mzs4MjksMTAgQEAgdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAKIAlwID0gdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpOwogCWlmIChwKSB7Ci0JCW50LSZndDtsb2NhbF9wdWJsX2NvdW50LS07CiYjNDM7CQlpZiAocC0mZ3Q7c3IudHlwZSAhPSBUSVBDX05PREVfU1RBVEUgJmFtcDsmYW1wOwomIzQzOwkJICAgIHAtJmd0O3NyLnR5cGUgIT0gVElQQ19MSU5LX1NUQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICBwLSZndDtzci50eXBlICE9IFRJUENfVE9QX1NSVikKJiM0MzsJCQludC0mZ3Q7bG9jYWxfcHVibF9jb3VudC0tOwogCQlza2IgPSB0aXBjX25hbWVkX3dpdGhkcmF3KG5ldCwgcCk7CiAJCWxpc3RfZGVsX2luaXQoJmFtcDtwLSZndDtiaW5kaW5nX3NvY2spOwogCQlrZnJlZV9yY3UocCwgcmN1KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVElQQyBOYW1lIFRhYmxlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3RpcGMvbmFtZV90YWJsZS5jYC4gSXQmIzM5O3MgdG91Y2hpbmcgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZXRibF93aXRoZHJhd2AsIHdoaWNoIGltbWVkaWF0ZWx5IGdldHMgbXkgYXR0ZW50aW9uIGJlY2F1c2UgYW55dGhpbmcgZGVhbGluZyB3aXRoIG5hbWUgc2VydmljZXMsIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JrIHByb3RvY29sLCBpcyBhIHBvdGVudGlhbCBob3RiZWQgZm9yIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSByZWxheGluZyB0aGUgcHVibGljYXRpb24gbGltaXRzLCBzcGVjaWZpY2FsbHkgZm9yIGNlcnRhaW4gdHlwZXM6IGBUSVBDX05PREVfU1RBVEVgLCBgVElQQ19MSU5LX1NUQVRFYCwgYW5kIGBUSVBDX1RPUF9TUlZgLiBCeSBub3QgY291bnRpbmcgdGhlc2UgdG93YXJkcyB0aGUgYGxvY2FsX3B1YmxfY291bnRgIGFuZCBsZXR0aW5nIHRoZW0gYnlwYXNzIGBtYXhfdXNlcl9wdWJgLCB0aGUgZGV2ZWxvcGVycyBjbGVhcmx5IGhhZCBhIHNwZWNpZmljIHBlcmZvcm1hbmNlIG9yIGZ1bmN0aW9uYWwgbmVlZCBpbiBtaW5kLiBCdXQgdGhhdCBhbHNvIHJhaXNlcyBhIGZsYWcgZm9yIHBvdGVudGlhbCBhYnVzZS4KCkZpcnN0LCBJIHNob3VsZCBjb25maXJtIHRoZSBUSVBDIGNvbmZpZzogTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19USVBDYCBpcyBlbmFibGVkLgoKTmV4dCwgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgYW5kIGZ1enphYmxlLiBHaXZlbiB0aGF0IFRJUEMgaXMgYSBuZXR3b3JrIHByb3RvY29sLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGB0aXBjX25hbWV0YmxfcHVibGlzaGAgYW5kIGB0aXBjX25hbWV0Ymxfd2l0aGRyYXdgIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggc29ja2V0IG9wZXJhdGlvbnMsIGxpa2VseSBgYmluZGAgb3Igc2ltaWxhci4gU2luY2UgaXQmIzM5O3MgYSBuZXR3b3JrIHByb3RvY29sLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBzb2NrZXQgQVBJLiBUaGF0IG1ha2VzIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZyBhbmQgY2FyZWZ1bCBhdWRpdGluZy4gV2UgY2FuIGRlZmluaXRlbHkgaGl0IHRoZXNlIGZ1bmN0aW9ucy4KCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byBgbmV0L3RpcGMvbmFtZV90YWJsZS5jYCBhbmQgZmlndXJlIG91dCB0aGUgZXhhY3QgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMsIGFuZCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBwb3RlbnRpYWwgZmxhd3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19uYW1ldGJsX3B1Ymxpc2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvbmFtZV90YWJsZS5jPTczMj12b2lkIHRpcGNfbmFtZXRibF9idWlsZF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2dyb3VwICpncnAsXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTc1OS1cbm5ldC90aXBjL25hbWVfdGFibGUuYzo3NjA6LyogdGlwY19uYW1ldGJsX3B1Ymxpc2ggLSBhZGQgc2VydmljZSBiaW5kaW5nIHRvIG5hbWUgdGFibGVcbm5ldC90aXBjL25hbWVfdGFibGUuYy03NjEtICovXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6NzYyOnN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtNzYzLVx0XHRcdFx0XHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KVxuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuaD0xMjY9dm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxubmV0L3RpcGMvbmFtZV90YWJsZS5oLTEyNy1cdFx0XHQgICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEpO1xubmV0L3RpcGMvbmFtZV90YWJsZS5oOjEyODpzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxubmV0L3RpcGMvbmFtZV90YWJsZS5oLTEyOS1cdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7XG4tLVxubmV0L3RpcGMvbmV0LmM9MTI2PXN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4tLVxubmV0L3RpcGMvbmV0LmMtMTQwLVx0dGlwY19tb25fcmVpbml0X3NlbGYobmV0KTtcbm5ldC90aXBjL25ldC5jOjE0MTpcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBhZGRyKTtcbm5ldC90aXBjL25ldC5jLTE0Mi19XG4tLVxubmV0L3RpcGMvbm9kZS5jPTM5Nj1zdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4tLVxubmV0L3RpcGMvbm9kZS5jLTQzMS1cdFx0dGlwY19tb25fcGVlcl91cChuZXQsIG5vZGUsIGJlYXJlcl9pZCk7XG5uZXQvdGlwYy9ub2RlLmM6NDMyOlx0XHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmKTtcbm5ldC90aXBjL25vZGUuYy00MzMtXHR9XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjkwNz1zdGF0aWMgaW50IHRpcGNfc2tfcHVibGlzaChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTIxLVx0c2thZGRyLm5vZGUgPSB0aXBjX293bl9hZGRyKG5ldCk7XG5uZXQvdGlwYy9zb2NrZXQuYzoyOTIyOlx0cCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsIFx1MDAyNnNrYWRkciwga2V5KTtcbm5ldC90aXBjL3NvY2tldC5jLTI5MjMtXHRpZiAodW5saWtlbHkoIXApKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5ODIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUSVBDIE5hbWUgVGFibGUgUHVibGljYXRpb24gYW5kIFdpdGhkcmF3YWwgUHJvY2Vzc2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBnZXRzIGNhbGxlZCBmcm9tIGB0aXBjX3NrX3B1Ymxpc2hgLCB3aGljaCBpdHNlbGYgaXMgaW52b2tlZCBieSBgdGlwY19iaW5kYC4gQW5kIG9uIHRoZSB3aXRoZHJhd2FsIHNpZGUsIGB0aXBjX25hbWV0Ymxfd2l0aGRyYXdgIGlzIGNhbGxlZCBmcm9tIGB0aXBjX3NrX3dpdGhkcmF3YCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGVpdGhlciBieSBgdGlwY19yZWxlYXNlYCBvciwgaW50ZXJlc3RpbmdseSwgYWxzbyBieSBgdGlwY19iaW5kYCB3aGVuIGEgc29ja2V0IGlzIGJlaW5nIHVuYm91bmQuCgpUaGlzIHF1aWNrbHkgdGVsbHMgbWUgdGhhdCBgdGlwY19za19wdWJsaXNoYCBhbmQgYHRpcGNfc2tfd2l0aGRyYXdgIGFyZSBsaWtlbHkga2V5IGFyZWFzIHRvIGxvb2sgYXQsIGFzIHRoZXkgZm9ybSB0aGUgY29yZSBvZiB0aGUgcHVibGljYXRpb24gYW5kIHdpdGhkcmF3YWwgb3BlcmF0aW9ucy4gSG93ZXZlciwgYmVjYXVzZSBgdGlwY19iaW5kYCBpcyBmdW5kYW1lbnRhbCB0byBib3RoLCBhbmQgcmVzcG9uc2libGUgZm9yIGVpdGhlciBwdWJsaXNoaW5nIG9yIHdpdGhkcmF3aW5nLCBgdGlwY19iaW5kYCBpdHNlbGYgbWlnaHQgYmUgdGhlIGJldHRlciBlbnRyeSBwb2ludCB0byBleGFtaW5lIHRoZSB3aG9sZSBwcm9jZXNzLiBJIHRoaW5rIGNoZWNraW5nIG91dCB0aGUgbG9naWMgd2l0aGluIGB0aXBjX2JpbmRgIHdvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBhbmQgcG90ZW50aWFsIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX2JpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmM9NjI2PXN0YXRpYyBpbnQgdGlwY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtNjYxLS8qKlxubmV0L3RpcGMvc29ja2V0LmM6NjYyOiAqIF9fdGlwY19iaW5kIC0gYXNzb2NpYXRlIG9yIGRpc2Fzc29jaWF0ZSBUSVBDIG5hbWUocykgd2l0aCBhIHNvY2tldFxubmV0L3RpcGMvc29ja2V0LmMtNjYzLSAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtNjc1LSAqL1xubmV0L3RpcGMvc29ja2V0LmM6Njc2OnN0YXRpYyBpbnQgX190aXBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpza2FkZHIsIGludCBhbGVuKVxubmV0L3RpcGMvc29ja2V0LmMtNjc3LXtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz03MDU9aW50IHRpcGNfc2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNrYWRkciwgaW50IGFsZW4pXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtNzA5LVx0bG9ja19zb2NrKHNvY2stXHUwMDNlc2spO1xubmV0L3RpcGMvc29ja2V0LmM6NzEwOlx0cmVzID0gX190aXBjX2JpbmQoc29jaywgc2thZGRyLCBhbGVuKTtcbm5ldC90aXBjL3NvY2tldC5jLTcxMS1cdHJlbGVhc2Vfc29jayhzb2NrLVx1MDAzZXNrKTtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy03MTQtXG5uZXQvdGlwYy9zb2NrZXQuYzo3MTU6c3RhdGljIGludCB0aXBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNrYWRkciwgaW50IGFsZW4pXG5uZXQvdGlwYy9zb2NrZXQuYy03MTYte1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTMzNTk9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcyA9IHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzYyLVx0LnJlbGVhc2VcdD0gdGlwY19yZWxlYXNlLFxubmV0L3RpcGMvc29ja2V0LmM6MzM2MzpcdC5iaW5kXHRcdD0gdGlwY19iaW5kLFxubmV0L3RpcGMvc29ja2V0LmMtMzM2NC1cdC5jb25uZWN0XHQ9IHRpcGNfY29ubmVjdCxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHMgPSB7XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzM4Mi1cdC5yZWxlYXNlXHQ9IHRpcGNfcmVsZWFzZSxcbm5ldC90aXBjL3NvY2tldC5jOjMzODM6XHQuYmluZFx0XHQ9IHRpcGNfYmluZCxcbm5ldC90aXBjL3NvY2tldC5jLTMzODQtXHQuY29ubmVjdFx0PSB0aXBjX2Nvbm5lY3QsXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzM5OT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzdHJlYW1fb3BzID0ge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTM0MDItXHQucmVsZWFzZVx0PSB0aXBjX3JlbGVhc2UsXG5uZXQvdGlwYy9zb2NrZXQuYzozNDAzOlx0LmJpbmRcdFx0PSB0aXBjX2JpbmQsXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDA0LVx0LmNvbm5lY3RcdD0gdGlwY19jb25uZWN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMzQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gVElQQyBGdW5jdGlvbiBTeW1ib2xzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIFRJUEMgbW9kdWxlLiBgdGlwY19iaW5kYCBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24sIGEgZ29vZCBmb2N1cyBzeW1ib2wuIFRoZW4sIGxldCYjMzk7cyBhZGQgYHRpcGNfc2tfcHVibGlzaGAgYW5kIGB0aXBjX3NrX3dpdGhkcmF3YCB0byB0aGUgbGlzdCBvZiByZWxldmFudCBmdW5jdGlvbnMuIFdhaXQgYSBzZWNvbmQsIHRob3VnaC4uLiBJIHRoaW5rIGB0aXBjX3NrX3B1Ymxpc2hgIGlzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBicm9hZGVyIHV0aWxpdHkgZm9yIHdoYXQgSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lLiBMZXQmIzM5O3Mgc2VlLi4uIG1heWJlIGB0aXBjX25hbWV0YmxfcHVibGlzaGAgYW5kIGB0aXBjX25hbWV0Ymxfd2l0aGRyYXdgIHdvdWxkIGJlIGJldHRlciBjYW5kaWRhdGVzIHRvIGV4YW1pbmUuIFRob3NlIG1pZ2h0IGJlIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBub24tc3RhdGljLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIGFuZCBkaWcgaW50byBgbmV0L3RpcGMvbmFtZV90YWJsZS5jYCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfbmFtZXRibF93aXRoZHJhdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9uYW1lX3RhYmxlLmM9NzYyPXN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTgxMi0vKipcbm5ldC90aXBjL25hbWVfdGFibGUuYzo4MTM6ICogdGlwY19uYW1ldGJsX3dpdGhkcmF3IC0gd2l0aGRyYXcgYSBzZXJ2aWNlIGJpbmRpbmdcbm5ldC90aXBjL25hbWVfdGFibGUuYy04MTQtICogQG5ldDogbmV0d29yayBuYW1lc3BhY2Vcbi0tXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODE4LSAqL1xubmV0L3RpcGMvbmFtZV90YWJsZS5jOjgxOTp2b2lkIHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbm5ldC90aXBjL25hbWVfdGFibGUuYy04MjAtXHRcdFx0ICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KVxuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuaD0xMjg9c3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbm5ldC90aXBjL25hbWVfdGFibGUuaC0xMjktXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpO1xubmV0L3RpcGMvbmFtZV90YWJsZS5oOjEzMDp2b2lkIHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbm5ldC90aXBjL25hbWVfdGFibGUuaC0xMzEtXHRcdFx0ICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcbi0tXG5uZXQvdGlwYy9ub2RlLmM9Mzk2PXN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcbi0tXG5uZXQvdGlwYy9ub2RlLmMtNDM1LVx0XHR0aXBjX21vbl9wZWVyX2Rvd24obmV0LCBub2RlLCBiZWFyZXJfaWQpO1xubmV0L3RpcGMvbm9kZS5jOjQzNjpcdFx0dGlwY19uYW1ldGJsX3dpdGhkcmF3KG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBzay5yZWYpO1xubmV0L3RpcGMvbm9kZS5jLTQzNy1cdH1cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yOTMyPXN0YXRpYyBpbnQgdGlwY19za193aXRoZHJhdyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTQyLVx0XHRcdFx0ICAgcC1cdTAwM2Vzci50eXBlLCBwLVx1MDAzZXNyLmxvd2VyLCBwLVx1MDAzZXNyLnVwcGVyKTtcbm5ldC90aXBjL3NvY2tldC5jOjI5NDM6XHRcdFx0dGlwY19uYW1ldGJsX3dpdGhkcmF3KG5ldCwgXHUwMDI2X3VhLCBcdTAwMjZwLVx1MDAzZXNrLCBwLVx1MDAzZWtleSk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yOTQ0LVx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI5NTQtXHRcdFx0YnJlYWs7XG5uZXQvdGlwYy9zb2NrZXQuYzoyOTU1Olx0XHR0aXBjX25hbWV0Ymxfd2l0aGRyYXcobmV0LCB1YSwgXHUwMDI2cC1cdTAwM2VzaywgcC1cdTAwM2VrZXkpO1xubmV0L3RpcGMvc29ja2V0LmMtMjk1Ni1cdFx0cmMgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNjYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRm9jdXNpbmcgb24gS2V5IFRJUEMgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZWxlbWVudHMgb2YgdGhpcyBUSVBDIGNvZGUuIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWV0Ymxfd2l0aGRyYXdgLCBhbmQgYHRpcGNfYmluZGAg4oCTIHRob3NlIGFyZSBnb29kLCBub24tc3RhdGljIGZ1bmN0aW9uIHN5bWJvbHMgdG8gZm9jdXMgb24uIFRoZXkgaW1tZWRpYXRlbHkganVtcCBvdXQgYXMgaW1wb3J0YW50LiAgVGhleSYjMzk7cmUgZGVmaW5pdGVseSB3b3J0aCBmdXJ0aGVyIGludmVzdGlnYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyB0aGUgY29kZSYjMzk7cyBkYXRhIGZsb3cuCgpOZXh0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgVElQQyBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBSaWdodCwgaXQmIzM5O3MgYFRJUENgLiBJJiMzOTtsbCBvcGVuIGBuZXQvdGlwYy9LY29uZmlnYCB0byBzZWUgaG93IGl0JiMzOTtzIHNldCB1cCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoaXMgd2hvbGUgVElQQyBzdGFjayBpcyBpbnRlbmRlZCB0byBiZSBjb25maWd1cmVkIGFuZCB1c2VkLCBwcm92aWRpbmcgY29udGV4dCBmb3IgaG93IHRoZXNlIGZ1bmN0aW9ucyBJJiMzOTt2ZSBqdXN0IGlkZW50aWZpZWQgYXJlIGJyb3VnaHQgaW50byBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVElQQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9LY29uZmlnLTUtXG5uZXQvdGlwYy9LY29uZmlnOjY6bWVudWNvbmZpZyBUSVBDXG5uZXQvdGlwYy9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtUaGUgVElQQyBQcm90b2NvbFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctMjMtXG5uZXQvdGlwYy9LY29uZmlnOjI0OmNvbmZpZyBUSVBDX01FRElBX0lCXG5uZXQvdGlwYy9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtJbmZpbmlCYW5kIG1lZGlhIHR5cGUgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctMjktXHQgIElQLW92ZXItSW5maW5pQmFuZCBkZXZpY2VzLlxubmV0L3RpcGMvS2NvbmZpZzozMDpjb25maWcgVElQQ19NRURJQV9VRFBcbm5ldC90aXBjL0tjb25maWctMzEtXHRib29sIFwmIzM0O0lQL1VEUCBtZWRpYSB0eXBlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTM3LVxubmV0L3RpcGMvS2NvbmZpZzozODpjb25maWcgVElQQ19DUllQVE9cbm5ldC90aXBjL0tjb25maWctMzktXHRib29sIFwmIzM0O1RJUEMgZW5jcnlwdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3RpcGMvS2NvbmZpZy01Mi1cbm5ldC90aXBjL0tjb25maWc6NTM6Y29uZmlnIFRJUENfRElBR1xubmV0L3RpcGMvS2NvbmZpZy01NC1cdHRyaXN0YXRlIFwmIzM0O1RJUEM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRJUEMgUGF0Y2gqKgoKT2theSwgc28gdGhlIGNvbmZpZyBpbiBxdWVzdGlvbiBpcyBgVElQQ2AsIGFuZCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSB0aGUgYFRJUENfTUFYX1BVQkxgIGxpbWl0IGNvdWxkIGluYWR2ZXJ0ZW50bHkgYmxvY2sgdGhlIGluc2VydGlvbiBvZiBjcnVjaWFsIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgaW50byB0aGUgbmFtZSB0YWJsZS4gVGhpbmtpbmcgdGhyb3VnaCB0aGlzLCBpdCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuCgpNeSByZWFzb25pbmc/IFdlbGwsIHRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSB0d2Vha3MgdGhlIHB1YmxpY2F0aW9uIGxpbWl0IGxvZ2ljIHdpdGhpbiB0aGUgVElQQyBzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgZW5zdXJpbmcgdGhhdCBjb3JlIHByb3RvY29sIHNlcnZpY2UgdHlwZXMsIGxpa2UgYFRJUENfTk9ERV9TVEFURWAsIGBUSVBDX0xJTktfU1RBVEVgLCBhbmQgYFRJUENfVE9QX1NSVmAsIGNhbiBieXBhc3MgdXNlci1kZWZpbmVkIHB1YmxpY2F0aW9uIGxpbWl0cy4gVGhpcyBoaXRzIGRpcmVjdGx5IGF0IHRoZSBoZWFydCBvZiBUSVBDJiMzOTtzIG5hbWUgdGFibGUgbWFuYWdlbWVudC4gSXQmIzM5O3MgbGlrZWx5IHJlYWNoYWJsZSB0aHJvdWdoIFRJUEMgc29ja2V0IGJpbmQgb3BlcmF0aW9ucyB3aGljaCBtYWtlcyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLgoKVG8gYmUgcHJlY2lzZSwgdGhlIGtleSBzeW1ib2xzIHRoYXQgc3ByaW5nIHRvIG1pbmQgYXJlIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWV0Ymxfd2l0aGRyYXdgLCBhbmQgb2YgY291cnNlIGB0aXBjX2JpbmRgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhpcyBsb2dpYy4gV2UmIzM5O2xsIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIEZpbmFsbHksIHdlIGNvbmZpcm0gdGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNldCB0byBgVElQQ2AuCgpOb3csIGJlZm9yZSB3ZSBnbyBhbnkgZnVydGhlciwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYFRJUENgIGl0c2VsZiBkb2VzbiYjMzk7dCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgY29tcGxpY2F0ZSB0aGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3RpcGMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFRJUEMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIFRJUENcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBUSVBDIFByb3RvY29sXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgVGhlIFRyYW5zcGFyZW50IEludGVyIFByb2Nlc3MgQ29tbXVuaWNhdGlvbiAoVElQQykgcHJvdG9jb2wgaXNcbiAgMTE6XHRcdCAgc3BlY2lhbGx5IGRlc2lnbmVkIGZvciBpbnRyYSBjbHVzdGVyIGNvbW11bmljYXRpb24uIFRoaXMgcHJvdG9jb2xcbiAgMTI6XHRcdCAgb3JpZ2luYXRlcyBmcm9tIEVyaWNzc29uIHdoZXJlIGl0IGhhcyBiZWVuIHVzZWQgaW4gY2FycmllciBncmFkZVxuICAxMzpcdFx0ICBjbHVzdGVyIGFwcGxpY2F0aW9ucyBmb3IgbWFueSB5ZWFycy5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgVElQQywgc2VlIGh0dHA6Ly90aXBjLnNvdXJjZWZvcmdlLm5ldC5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgVGhpcyBwcm90b2NvbCBzdXBwb3J0IGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlICggPSBjb2RlIHdoaWNoXG4gIDE4Olx0XHQgIGNhbiBiZSBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3VcbiAgMTk6XHRcdCAgd2FudCkuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGlwYy4gSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdFxuICAyMDpcdFx0ICBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMucnN0XHUwMDNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDQ0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRJUEMgRGVwZW5kZW5jeSBhbmQgRnVuY3Rpb24gRXhwbG9yYXRpb24qKgoKT2theSwgc28gYFRJUENgIHJlbGllcyBvbiBgSU5FVGAuICBBbmQgc2luY2UgYElORVRgIGlzIGFsd2F5cyBlbmFibGVkIGluIHRoZSB0eXBpY2FsIGtlcm5lbCBjb25maWd1cmF0aW9ucywgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gSSBjYW4gcmVhc29uYWJseSBhc3N1bWUgdGhhdCBgVElQQ2AgaXMgc3VmZmljaWVudCBpbiB0aGlzIHJlZ2FyZCBhbmQgSSB3b24mIzM5O3QgaGF2ZSB0byB3b3JyeSBhYm91dCBgSU5FVGAgYmVpbmcgdGhlIG1pc3NpbmcgcGllY2UgaGVyZS4KCkJ1dCBJIHNob3VsZCBjaGVjayBmb3IgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1heSBiZSBwZXJ0aW5lbnQuIExldCYjMzk7cyBsb29rIGF0IHdoYXQmIzM5O3MgYXZhaWxhYmxlLiBIbW0sIHRoZXJlJiMzOTtzIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGFuZCBgdGlwY19uYW1ldGJsX3dpdGhkcmF3YCwgYW5kIHRoZW4gYHRpcGNfYmluZGAuCgpJIHdvbmRlciwgYXJlIHRoZXJlICptb3JlKj8gQWgsIGhlcmUgd2UgZ28sIGB0aXBjX3NrX2JpbmRgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgY2FsbHMgYF9fdGlwY19iaW5kYCwgd2hpY2ggaW4gdHVybiwgY2FsbHMgYHRpcGNfYmluZGAuIFdhaXQgYSBtaW51dGUuLi4gaXNuJiMzOTt0IGB0aXBjX2JpbmRgIHRoZSBiaW5kIGZ1bmN0aW9uIGZvciB0aGUgYHByb3RvX29wc2A/IFllcywgaXQgaXMuIEkgbmVlZCB0byByZS1leGFtaW5lIHRoYXQgYHRpcGNfYmluZGAgZnVuY3Rpb24gbW9yZSBjbG9zZWx5LCBhbmQgZW5zdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55dGhpbmcgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfYmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYz02MjY9c3RhdGljIGludCB0aXBjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy02NjEtLyoqXG5uZXQvdGlwYy9zb2NrZXQuYzo2NjI6ICogX190aXBjX2JpbmQgLSBhc3NvY2lhdGUgb3IgZGlzYXNzb2NpYXRlIFRJUEMgbmFtZShzKSB3aXRoIGEgc29ja2V0XG5uZXQvdGlwYy9zb2NrZXQuYy02NjMtICogQHNvY2s6IHNvY2tldCBzdHJ1Y3R1cmVcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy02NzUtICovXG5uZXQvdGlwYy9zb2NrZXQuYzo2NzY6c3RhdGljIGludCBfX3RpcGNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNrYWRkciwgaW50IGFsZW4pXG5uZXQvdGlwYy9zb2NrZXQuYy02Nzcte1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTcwNT1pbnQgdGlwY19za19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2thZGRyLCBpbnQgYWxlbilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy03MDktXHRsb2NrX3NvY2soc29jay1cdTAwM2Vzayk7XG5uZXQvdGlwYy9zb2NrZXQuYzo3MTA6XHRyZXMgPSBfX3RpcGNfYmluZChzb2NrLCBza2FkZHIsIGFsZW4pO1xubmV0L3RpcGMvc29ja2V0LmMtNzExLVx0cmVsZWFzZV9zb2NrKHNvY2stXHUwMDNlc2spO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTcxNC1cbm5ldC90aXBjL3NvY2tldC5jOjcxNTpzdGF0aWMgaW50IHRpcGNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqc2thZGRyLCBpbnQgYWxlbilcbm5ldC90aXBjL3NvY2tldC5jLTcxNi17XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzM1OT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtc2dfb3BzID0ge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTMzNjItXHQucmVsZWFzZVx0PSB0aXBjX3JlbGVhc2UsXG5uZXQvdGlwYy9zb2NrZXQuYzozMzYzOlx0LmJpbmRcdFx0PSB0aXBjX2JpbmQsXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzY0LVx0LmNvbm5lY3RcdD0gdGlwY19jb25uZWN0LFxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTMzNzk9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcyA9IHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzgyLVx0LnJlbGVhc2VcdD0gdGlwY19yZWxlYXNlLFxubmV0L3RpcGMvc29ja2V0LmM6MzM4MzpcdC5iaW5kXHRcdD0gdGlwY19iaW5kLFxubmV0L3RpcGMvc29ja2V0LmMtMzM4NC1cdC5jb25uZWN0XHQ9IHRpcGNfY29ubmVjdCxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzk5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHN0cmVhbV9vcHMgPSB7XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzQwMi1cdC5yZWxlYXNlXHQ9IHRpcGNfcmVsZWFzZSxcbm5ldC90aXBjL3NvY2tldC5jOjM0MDM6XHQuYmluZFx0XHQ9IHRpcGNfYmluZCxcbm5ldC90aXBjL3NvY2tldC5jLTM0MDQtXHQuY29ubmVjdFx0PSB0aXBjX2Nvbm5lY3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzIG15c2VsZjoKCioqRXhhbWluaW5nIFRJUEMgQmluZGluZyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIFRJUEMgYmluZGluZyBmdW5jdGlvbnMuIGB0aXBjX2JpbmRgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEJ1dCBob2xkIG9uIGEgc2Vjb25k4oCmIGlmIGl0JiMzOTtzIHN0YXRpYywgaG93IGlzIGl0IGdldHRpbmcgY2FsbGVkPyBBaCwgcmlnaHQuIEl0JiMzOTtzIGFzc2lnbmVkIHRvIHRoZSBgcHJvdG9fb3BzYCBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgdGlwY19za19iaW5kYCB3aGljaCBpcyBleHBvcnRlZCBhbmQgdGh1cyBub24tc3RhdGljLCBhbmQgdGhpcyBzdGF0aWMgYHRpcGNfYmluZGAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1YnRsZSBpbnRlcmFjdGlvbnMgb3IgY29uZmxpY3RzIEkmIzM5O20gbWlzc2luZy4gTGV0JiMzOTtzIGRpZyBpbnRvIGJvdGggYW5kIHNlZSB3aGF0IHRoZXkgYXJlIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgdGlwY19za19iaW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTY3Nj1zdGF0aWMgaW50IF9fdGlwY19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2thZGRyLCBpbnQgYWxlbilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy03MDQtXG5uZXQvdGlwYy9zb2NrZXQuYzo3MDU6aW50IHRpcGNfc2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNrYWRkciwgaW50IGFsZW4pXG5uZXQvdGlwYy9zb2NrZXQuYy03MDYte1xuLS1cbm5ldC90aXBjL3NvY2tldC5oPTc2PWJvb2wgdGlwY19za19vdmVybGltaXQyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5uZXQvdGlwYy9zb2NrZXQuaDo3NzppbnQgdGlwY19za19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2thZGRyLCBpbnQgYWxlbik7XG5uZXQvdGlwYy9zb2NrZXQuaC03OC1pbnQgdHNrX3NldF9pbXBvcnRhbmNlKHN0cnVjdCBzb2NrICpzaywgaW50IGltcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMDIKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqQW5hbHl6aW5nIFN5bWJvbCBWaXNpYmlsaXR5IGluIHRoZSBUSVBDIEtlcm5lbCBNb2R1bGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIFRJUEMga2VybmVsIGZ1bmN0aW9ucywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZWlyIHZpc2liaWxpdHkuIGB0aXBjX3NrX2JpbmRgLi4uIHRoYXQgb25lJiMzOTtzIG5vbi1zdGF0aWMuIFJpZ2h0LiBBbmQgdGhlbiwgSSBzZWUgdGhhdCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIGFuZCBgdGlwY19uYW1ldGJsX3dpdGhkcmF3YCBhcmUgYWxzbyBub24tc3RhdGljLiBUaGVyZWZvcmUsIHRoZXNlIHRocmVlIGZ1bmN0aW9ucyBhcmUgdGhlIG9uZXMgSSByZWFsbHkgbmVlZCB0byBmb2N1cyBvbiwgYW5kIEkmIzM5O20gZ29pbmcgdG8gY2FsbCB0aGVzZSBteSAqRm9jdXNTeW1ib2xzKjogYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgYHRpcGNfbmFtZXRibF93aXRoZHJhd2AsIGFuZCBgdGlwY19za19iaW5kYC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHN5bWJvbHMgYXJlIGV4cG9zZWQgYW5kIHVzZWQgdGhyb3VnaG91dCB0aGUga2VybmVsLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZXNlIGFuZCB0aGVuIGNvbnNpZGVyIHRoZWlyIGltcGFjdCB3aGVuIEkgZXhhbWluZSB0aGUgd2lkZXIgY29kZWJhc2UuIEkmIzM5O2xsIGNhbGwgdGhpcyByZXN1bHQgc2V0IEkgaGF2ZSBoZXJlICYjMzk7c2V0LXJlc3VsdHMmIzM5Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX25hbWV0YmxfcHVibGlzaCYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWV0Ymxfd2l0aGRyYXcmIzM0OywKICAgICYjMzQ7dGlwY19za19iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwdWJsaWNhdGlvbiBsaW1pdCBsb2dpYyBpbiBUSVBDIHRvIGVuc3VyZSBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIChUSVBDX05PREVfU1RBVEUsIFRJUENfTElOS19TVEFURSwgVElQQ19UT1BfU1JWKSBjYW4gYnlwYXNzIHRoZSB1c2VyIHB1YmxpY2F0aW9uIGxpbWl0LiBUaGlzIGFmZmVjdHMgdGhlIGNvcmUgVElQQyBuYW1lIHRhYmxlIG1hbmFnZW1lbnQgYW5kIGlzIHJlYWNoYWJsZSB2aWEgVElQQyBzb2NrZXQgYmluZCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19uYW1ldGJsX3B1Ymxpc2gmIzM0OywKICAgICYjMzQ7dGlwY19uYW1ldGJsX3dpdGhkcmF3JiMzNDssCiAgICAmIzM0O3RpcGNfc2tfYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcHVibGljYXRpb24gbGltaXQgbG9naWMgaW4gVElQQyB0byBlbnN1cmUgcHJvdG9jb2wgc2VydmljZSB0eXBlcyAoVElQQ19OT0RFX1NUQVRFLCBUSVBDX0xJTktfU1RBVEUsIFRJUENfVE9QX1NSVikgY2FuIGJ5cGFzcyB0aGUgdXNlciBwdWJsaWNhdGlvbiBsaW1pdC4gVGhpcyBhZmZlY3RzIHRoZSBjb3JlIFRJUEMgbmFtZSB0YWJsZSBtYW5hZ2VtZW50IGFuZCBpcyByZWFjaGFibGUgdmlhIFRJUEMgc29ja2V0IGJpbmQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGNvdW50aW5nIGxvY2FsIHB1YmxpY2F0aW9ucyBpbiB0aGUgVElQQyBuYW1lIHRhYmxlIHRvIGV4Y2x1ZGUgcHJvdG9jb2wgc2VydmljZSB0eXBlcyAoVElQQ19OT0RFX1NUQVRFLCBUSVBDX0xJTktfU1RBVEUsIFRJUENfVE9QX1NSVikgYW5kIHJlc2VydmVzIG9uZSBlbnRyeSBmb3IgdGhlIG5vZGUgc3RhdGUgc2VydmljZSB0eXBlLiBUaGlzIGlzIHB1cmVseSBhIHJlc291cmNlIGxpbWl0IGFuZCBjb3VudGluZyBsb2dpYyBjaGFuZ2UgdG8gcHJldmVudCB1c2VyIHB1YmxpY2F0aW9ucyBmcm9tIGV4aGF1c3RpbmcgdGhlIGxpbWl0IGFuZCBibG9ja2luZyBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgaW50ZXJhY3Rpb25zIHdpdGggdXNlciBzcGFjZSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZmZmNmNjFlMWE2NmQ0M2IzMzhlMTZmN2NhNTA2OTc5ODUyYTQ2ZGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAxMTo1OToyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuYwppbmRleCAyNTNjNzJkMTM2NmViLi42ZmRhMzZhYjE3NjY5IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jCkBAIC03NjMsMjEgJiM0Mzs3NjMsNDAgQEAgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIAkJCQkJIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSkKIHsKIAlzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTsKJiM0MzsJdTMyIG1heF91c2VyX3B1YiA9IFRJUENfTUFYX1BVQkwgLSAxOwogCXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwogCXN0cnVjdCBwdWJsaWNhdGlvbiAqcCA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiYjNDM7CWJvb2wgcHJvdG9jb2xfdHlwZSA9IGZhbHNlOwogCXUzMiByY19kZXN0czsKIAomIzQzOwlpZiAodWEtJmd0O3NyLnR5cGUgPT0gVElQQ19OT0RFX1NUQVRFIHx8IHVhLSZndDtzci50eXBlID09IFRJUENfTElOS19TVEFURSB8fAomIzQzOwkgICAgdWEtJmd0O3NyLnR5cGUgPT0gVElQQ19UT1BfU1JWKQomIzQzOwkJcHJvdG9jb2xfdHlwZSA9IHRydWU7CiYjNDM7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiYjNDM7CWlmIChwcm90b2NvbF90eXBlKQomIzQzOwkJZ290byBpbnNlcnQ7CiAKLQlpZiAobnQtJmd0O2xvY2FsX3B1YmxfY291bnQgJmd0Oz0gVElQQ19NQVhfUFVCTCkgewotCQlwcl93YXJuKCYjMzQ7QmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXG4mIzM0OywgVElQQ19NQVhfUFVCTCk7CiYjNDM7CS8qIFJlc2VydmUgb25lIGVudHJ5IGZvciBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZSBiZWNhdXNlIGl0IGhhcyBjbHVzdGVyCiYjNDM7CSAqIHNjb3BlIGFuZCBpdCBpcyBkaXN0cmlidXRlZCBpbiBidWxrLiBTbywgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXImIzM5O3MKJiM0MzsJICogcHVibGljYXRpb25zIGlzIChUSVBDX01BWF9QVUJMIC0gMSkuCiYjNDM7CSAqLwomIzQzOwlpZiAobnQtJmd0O2xvY2FsX3B1YmxfY291bnQgJmd0Oz0gbWF4X3VzZXJfcHViKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7QmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXG4mIzM0OywgbWF4X3VzZXJfcHViKTsKIAkJZ290byBleGl0OwogCX0KIAomIzQzO2luc2VydDoKIAlwID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpOwogCWlmIChwKSB7Ci0JCW50LSZndDtsb2NhbF9wdWJsX2NvdW50JiM0MzsmIzQzOzsKJiM0MzsJCS8qIE5vdCBjb3VudCBub2RlIHN0YXRlLCBsaW5rIHN0YXRlIGFuZCB0b3BvbG9neSBzZXJ2ZXIgdHlwZXMKJiM0MzsJCSAqIHNvIHRoYXQgbWF4aW11bSBudC0mZ3Q7bG9jYWxfcHVibF9jb3VudCBkb2VzIG5vdCBwcmV2ZW50CiYjNDM7CQkgKiBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIGZyb20gYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgbmFtZQomIzQzOwkJICogdGFibGUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghcHJvdG9jb2xfdHlwZSkKJiM0MzsJCQludC0mZ3Q7bG9jYWxfcHVibF9jb3VudCYjNDM7JiM0Mzs7CiAJCXNrYiA9IHRpcGNfbmFtZWRfcHVibGlzaChuZXQsIHApOwogCX0KIAlyY19kZXN0cyA9IG50LSZndDtyY19kZXN0czsKQEAgLTgxMCw3ICYjNDM7ODI5LDEwIEBAIHZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAogCiAJcCA9IHRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChuZXQsIHVhLCBzaywga2V5KTsKIAlpZiAocCkgewotCQludC0mZ3Q7bG9jYWxfcHVibF9jb3VudC0tOwomIzQzOwkJaWYgKHAtJmd0O3NyLnR5cGUgIT0gVElQQ19OT0RFX1NUQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICBwLSZndDtzci50eXBlICE9IFRJUENfTElOS19TVEFURSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcC0mZ3Q7c3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpCiYjNDM7CQkJbnQtJmd0O2xvY2FsX3B1YmxfY291bnQtLTsKIAkJc2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHApOwogCQlsaXN0X2RlbF9pbml0KCZhbXA7cC0mZ3Q7YmluZGluZ19zb2NrKTsKIAkJa2ZyZWVfcmN1KHAsIHJjdSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ5CgkJCQkJCQlvdXRwdXQ6IDE1MQoJCQkJCQkJdGhvdWdodHM6IDc1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUSVBDIE5hbWUgVGFibGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZXRibF93aXRoZHJhd2AgaW4gYG5ldC90aXBjL25hbWVfdGFibGUuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBmb2N1c2VkIG9uIGhvdyB3ZSBjb3VudCBsb2NhbCBwdWJsaWNhdGlvbnMsIHNwZWNpZmljYWxseSBgbnQtJmd0O2xvY2FsX3B1YmxfY291bnRgLiBUaGUgaW50ZW50IGhlcmUgaXMgdG8gKmV4Y2x1ZGUqIGNlcnRhaW4gcHJvdG9jb2wgdHlwZXMg4oCTIGBUSVBDX05PREVfU1RBVEVgLCBgVElQQ19MSU5LX1NUQVRFYCwgYW5kIGBUSVBDX1RPUF9TUlZgIOKAkyBmcm9tIHRoYXQgY291bnQuIFRoaXMgaXMgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLgoKVGhlIGNvZGUgbm93IGNoZWNrcyBpZiB0aGUgcHVibGljYXRpb24gdHlwZSBpcyBvbmUgb2YgdGhvc2UgcHJvdG9jb2wgdHlwZXMsIGFuZCBpZiBpdCBpcywgdGhlIGNvdW50IGlzICpub3QqIGluY3JlbWVudGVkLiBBbHNvLCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgaW1wYWN0LCB0aGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWF4aW11bSBsaW1pdCBmb3IgdXNlciBwdWJsaWNhdGlvbnMgdG8gYFRJUENfTUFYX1BVQkwgLSAxYC4gVGhlIGNvbW1lbnQgbWFrZXMgaXQgdmVyeSBjbGVhciB0aGF0IHRoaXMgaXMgYmVpbmcgZG9uZSB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgbm9kZSBzdGF0ZSBzZXJ2aWNlIHR5cGUsIHdoaWNoIGlzIGNsdXN0ZXItc2NvcGVkIGFuZCBkaXN0cmlidXRlZCBpbiBidWxrLgoKVGhlIG9yaWdpbmFsIGNvZGUgY2hlY2tlZCBgaWYgKG50LSZndDtsb2NhbF9wdWJsX2NvdW50ICZndDs9IFRJUENfTUFYX1BVQkwpYCBhbmQgd291bGQgZXJyb3Igb3V0IGlmIGl0IHJlYWNoZWQgdGhlIGxpbWl0LiBUaGUgbW9kaWZpZWQgY29kZSBub3cgaGFzIGBpZiAobnQtJmd0O2xvY2FsX3B1YmxfY291bnQgJmd0Oz0gbWF4X3VzZXJfcHViKWAsIHdoZXJlIGBtYXhfdXNlcl9wdWJgIGlzIGBUSVBDX01BWF9QVUJMIC0gMWAuIFRoZSBpbXBvcnRhbnQgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHRoZXNlIGNoYW5nZXMgcHJldmVudCBhIERvUyBvciByZXNvdXJjZSBleGhhdXN0aW9uIHNjZW5hcmlvLCB3aGVyZSB1c2VyIHB1YmxpY2F0aW9ucyBjb3VsZCBwcmV2ZW50IGNyaXRpY2FsIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgZnJvbSBiZWluZyBpbnNlcnRlZC4KCkZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3MuIFRoaXMgcGF0Y2ggaXMgcHVyZWx5IGxvZ2ljLWRyaXZlbjsgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGludGVyYWN0aW9ucyB3aXRoIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBhbHNvIGF2b2lkcyBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoaXMgaXMgYWxsIGFib3V0IGFkanVzdGluZyByZXNvdXJjZSBsaW1pdHMuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBjb3JlIHRvb2xzIGFyZSBhZGVxdWF0ZSBoZXJlLgoKVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LCBhcyB0aGlzIGlzbiYjMzk7dCB0b3VjaGluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMganVzdCByZXNvdXJjZSBtYW5hZ2VtZW50LiAqKk5lZWRzS01TQU49ZmFsc2UqKiBpcyB0aGUgY29ycmVjdCBjYWxsIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY291bnRpbmcgbG9jYWwgcHVibGljYXRpb25zIGluIHRoZSBUSVBDIG5hbWUgdGFibGUgdG8gZXhjbHVkZSBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIChUSVBDX05PREVfU1RBVEUsIFRJUENfTElOS19TVEFURSwgVElQQ19UT1BfU1JWKSBhbmQgcmVzZXJ2ZXMgb25lIGVudHJ5IGZvciB0aGUgbm9kZSBzdGF0ZSBzZXJ2aWNlIHR5cGUuIFRoaXMgaXMgcHVyZWx5IGEgcmVzb3VyY2UgbGltaXQgYW5kIGNvdW50aW5nIGxvZ2ljIGNoYW5nZSB0byBwcmV2ZW50IHVzZXIgcHVibGljYXRpb25zIGZyb20gZXhoYXVzdGluZyB0aGUgbGltaXQgYW5kIGJsb2NraW5nIHByb3RvY29sIHNlcnZpY2UgdHlwZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY291bnRpbmcgbG9jYWwgcHVibGljYXRpb25zIGluIHRoZSBUSVBDIG5hbWUgdGFibGUgdG8gZXhjbHVkZSBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIChUSVBDX05PREVfU1RBVEUsIFRJUENfTElOS19TVEFURSwgVElQQ19UT1BfU1JWKSBhbmQgcmVzZXJ2ZXMgb25lIGVudHJ5IGZvciB0aGUgbm9kZSBzdGF0ZSBzZXJ2aWNlIHR5cGUuIFRoaXMgaXMgcHVyZWx5IGEgcmVzb3VyY2UgbGltaXQgYW5kIGNvdW50aW5nIGxvZ2ljIGNoYW5nZSB0byBwcmV2ZW50IHVzZXIgcHVibGljYXRpb25zIGZyb20gZXhoYXVzdGluZyB0aGUgbGltaXQgYW5kIGJsb2NraW5nIHByb3RvY29sIHNlcnZpY2UgdHlwZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTE6NTk6MjkuNDA1MDI2ODYxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI2NjY3MjY2OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX25hbWV0YmxfcHVibGlzaFwiLFxuICAgIFwidGlwY19uYW1ldGJsX3dpdGhkcmF3XCIsXG4gICAgXCJ0aXBjX3NrX2JpbmRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY291bnRpbmcgbG9jYWwgcHVibGljYXRpb25zIGluIHRoZSBUSVBDIG5hbWUgdGFibGUgdG8gZXhjbHVkZSBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIChUSVBDX05PREVfU1RBVEUsIFRJUENfTElOS19TVEFURSwgVElQQ19UT1BfU1JWKSBhbmQgcmVzZXJ2ZXMgb25lIGVudHJ5IGZvciB0aGUgbm9kZSBzdGF0ZSBzZXJ2aWNlIHR5cGUuIFRoaXMgaXMgcHVyZWx5IGEgcmVzb3VyY2UgbGltaXQgYW5kIGNvdW50aW5nIGxvZ2ljIGNoYW5nZSB0byBwcmV2ZW50IHVzZXIgcHVibGljYXRpb25zIGZyb20gZXhoYXVzdGluZyB0aGUgbGltaXQgYW5kIGJsb2NraW5nIHByb3RvY29sIHNlcnZpY2UgdHlwZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcHVibGljYXRpb24gbGltaXQgbG9naWMgaW4gVElQQyB0byBlbnN1cmUgcHJvdG9jb2wgc2VydmljZSB0eXBlcyAoVElQQ19OT0RFX1NUQVRFLCBUSVBDX0xJTktfU1RBVEUsIFRJUENfVE9QX1NSVikgY2FuIGJ5cGFzcyB0aGUgdXNlciBwdWJsaWNhdGlvbiBsaW1pdC4gVGhpcyBhZmZlY3RzIHRoZSBjb3JlIFRJUEMgbmFtZSB0YWJsZSBtYW5hZ2VtZW50IGFuZCBpcyByZWFjaGFibGUgdmlhIFRJUEMgc29ja2V0IGJpbmQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTE6NTk6MjkuNDA1MDMxMzkyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTE5MjE3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmZmZjZjYxZTFhNjZkNDNiMzM4ZTE2ZjdjYTUwNjk3OTg1MmE0NmRlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDI3IDExOjU5OjI4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLjZmZGEzNmFiMTc2NjkgMTAwNjQ0XFxuLS0tIGEvbmV0L3RpcGMvbmFtZV90YWJsZS5jXFxuKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jXFxuQEAgLTc2MywyMSArNzYzLDQwIEBAIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpXFxuIHtcXG4gXFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XFxuK1xcdHUzMiBtYXhfdXNlcl9wdWIgPSBUSVBDX01BWF9QVUJMIC0gMTtcXG4gXFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XFxuIFxcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbitcXHRib29sIHByb3RvY29sX3R5cGUgPSBmYWxzZTtcXG4gXFx0dTMyIHJjX2Rlc3RzO1xcbiBcXG4rXFx0aWYgKHVhLVxcdTAwM2Vzci50eXBlID09IFRJUENfTk9ERV9TVEFURSB8fCB1YS1cXHUwMDNlc3IudHlwZSA9PSBUSVBDX0xJTktfU1RBVEUgfHxcXG4rXFx0ICAgIHVhLVxcdTAwM2Vzci50eXBlID09IFRJUENfVE9QX1NSVilcXG4rXFx0XFx0cHJvdG9jb2xfdHlwZSA9IHRydWU7XFxuK1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRuLVxcdTAwM2VuYW1ldGJsX2xvY2spO1xcbitcXHRpZiAocHJvdG9jb2xfdHlwZSlcXG4rXFx0XFx0Z290byBpbnNlcnQ7XFxuIFxcbi1cXHRpZiAobnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQgXFx1MDAzZT0gVElQQ19NQVhfUFVCTCkge1xcbi1cXHRcXHRwcl93YXJuKFxcXCJCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcXFxcblxcXCIsIFRJUENfTUFYX1BVQkwpO1xcbitcXHQvKiBSZXNlcnZlIG9uZSBlbnRyeSBmb3Igbm9kZSBzdGF0ZSBzZXJ2aWNlIHR5cGUgYmVjYXVzZSBpdCBoYXMgY2x1c3RlclxcbitcXHQgKiBzY29wZSBhbmQgaXQgaXMgZGlzdHJpYnV0ZWQgaW4gYnVsay4gU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VyJ3NcXG4rXFx0ICogcHVibGljYXRpb25zIGlzIChUSVBDX01BWF9QVUJMIC0gMSkuXFxuK1xcdCAqL1xcbitcXHRpZiAobnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQgXFx1MDAzZT0gbWF4X3VzZXJfcHViKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIkJpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxcXFxuXFxcIiwgbWF4X3VzZXJfcHViKTtcXG4gXFx0XFx0Z290byBleGl0O1xcbiBcXHR9XFxuIFxcbitpbnNlcnQ6XFxuIFxcdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XFxuIFxcdGlmIChwKSB7XFxuLVxcdFxcdG50LVxcdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XFxuK1xcdFxcdC8qIE5vdCBjb3VudCBub2RlIHN0YXRlLCBsaW5rIHN0YXRlIGFuZCB0b3BvbG9neSBzZXJ2ZXIgdHlwZXNcXG4rXFx0XFx0ICogc28gdGhhdCBtYXhpbXVtIG50LVxcdTAwM2Vsb2NhbF9wdWJsX2NvdW50IGRvZXMgbm90IHByZXZlbnRcXG4rXFx0XFx0ICogcHJvdG9jb2wgc2VydmljZSB0eXBlcyBmcm9tIGJlaW5nIGluc2VydGVkIGludG8gdGhlIG5hbWVcXG4rXFx0XFx0ICogdGFibGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIXByb3RvY29sX3R5cGUpXFxuK1xcdFxcdFxcdG50LVxcdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XFxuIFxcdFxcdHNrYiA9IHRpcGNfbmFtZWRfcHVibGlzaChuZXQsIHApO1xcbiBcXHR9XFxuIFxcdHJjX2Rlc3RzID0gbnQtXFx1MDAzZXJjX2Rlc3RzO1xcbkBAIC04MTAsNyArODI5LDEwIEBAIHZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxcbiBcXG4gXFx0cCA9IHRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChuZXQsIHVhLCBzaywga2V5KTtcXG4gXFx0aWYgKHApIHtcXG4tXFx0XFx0bnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQtLTtcXG4rXFx0XFx0aWYgKHAtXFx1MDAzZXNyLnR5cGUgIT0gVElQQ19OT0RFX1NUQVRFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBwLVxcdTAwM2Vzci50eXBlICE9IFRJUENfTElOS19TVEFURSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcC1cXHUwMDNlc3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpXFxuK1xcdFxcdFxcdG50LVxcdTAwM2Vsb2NhbF9wdWJsX2NvdW50LS07XFxuIFxcdFxcdHNrYiA9IHRpcGNfbmFtZWRfd2l0aGRyYXcobmV0LCBwKTtcXG4gXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cC1cXHUwMDNlYmluZGluZ19zb2NrKTtcXG4gXFx0XFx0a2ZyZWVfcmN1KHAsIHJjdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDExOjU5OjI5LjgxNzY3ODk0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMxNTY1OTc3Nzg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUSVBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGlwY19uYW1ldGJsX3B1Ymxpc2hcIixcbiAgICBcInRpcGNfbmFtZXRibF93aXRoZHJhd1wiLFxuICAgIFwidGlwY19za19iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHB1YmxpY2F0aW9uIGxpbWl0IGxvZ2ljIGluIFRJUEMgdG8gZW5zdXJlIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgKFRJUENfTk9ERV9TVEFURSwgVElQQ19MSU5LX1NUQVRFLCBUSVBDX1RPUF9TUlYpIGNhbiBieXBhc3MgdGhlIHVzZXIgcHVibGljYXRpb24gbGltaXQuIFRoaXMgYWZmZWN0cyB0aGUgY29yZSBUSVBDIG5hbWUgdGFibGUgbWFuYWdlbWVudCBhbmQgaXMgcmVhY2hhYmxlIHZpYSBUSVBDIHNvY2tldCBiaW5kIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZmZmNmNjFlMWE2NmQ0M2IzMzhlMTZmN2NhNTA2OTc5ODUyYTQ2ZGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxMTo1OToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xuaW5kZXggMjUzYzcyZDEzNjZlYi4uNmZkYTM2YWIxNzY2OSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuY1xuKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jXG5AQCAtNzYzLDIxICs3NjMsNDAgQEAgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSlcbiB7XG4gXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbitcdHUzMiBtYXhfdXNlcl9wdWIgPSBUSVBDX01BWF9QVUJMIC0gMTtcbiBcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuK1x0Ym9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7XG4gXHR1MzIgcmNfZGVzdHM7XG4gXG4rXHRpZiAodWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgfHwgdWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX0xJTktfU1RBVEUgfHxcbitcdCAgICB1YS1cdTAwM2Vzci50eXBlID09IFRJUENfVE9QX1NSVilcbitcdFx0cHJvdG9jb2xfdHlwZSA9IHRydWU7XG4rXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbitcdGlmIChwcm90b2NvbF90eXBlKVxuK1x0XHRnb3RvIGluc2VydDtcbiBcbi1cdGlmIChudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IFx1MDAzZT0gVElQQ19NQVhfUFVCTCkge1xuLVx0XHRwcl93YXJuKFwiQmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXFxuXCIsIFRJUENfTUFYX1BVQkwpO1xuK1x0LyogUmVzZXJ2ZSBvbmUgZW50cnkgZm9yIG5vZGUgc3RhdGUgc2VydmljZSB0eXBlIGJlY2F1c2UgaXQgaGFzIGNsdXN0ZXJcbitcdCAqIHNjb3BlIGFuZCBpdCBpcyBkaXN0cmlidXRlZCBpbiBidWxrLiBTbywgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXInc1xuK1x0ICogcHVibGljYXRpb25zIGlzIChUSVBDX01BWF9QVUJMIC0gMSkuXG4rXHQgKi9cbitcdGlmIChudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IFx1MDAzZT0gbWF4X3VzZXJfcHViKSB7XG4rXHRcdHByX3dhcm4oXCJCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcXG5cIiwgbWF4X3VzZXJfcHViKTtcbiBcdFx0Z290byBleGl0O1xuIFx0fVxuIFxuK2luc2VydDpcbiBcdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4gXHRpZiAocCkge1xuLVx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XG4rXHRcdC8qIE5vdCBjb3VudCBub2RlIHN0YXRlLCBsaW5rIHN0YXRlIGFuZCB0b3BvbG9neSBzZXJ2ZXIgdHlwZXNcbitcdFx0ICogc28gdGhhdCBtYXhpbXVtIG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQgZG9lcyBub3QgcHJldmVudFxuK1x0XHQgKiBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIGZyb20gYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgbmFtZVxuK1x0XHQgKiB0YWJsZS5cbitcdFx0ICovXG4rXHRcdGlmICghcHJvdG9jb2xfdHlwZSlcbitcdFx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XG4gXHRcdHNrYiA9IHRpcGNfbmFtZWRfcHVibGlzaChuZXQsIHApO1xuIFx0fVxuIFx0cmNfZGVzdHMgPSBudC1cdTAwM2VyY19kZXN0cztcbkBAIC04MTAsNyArODI5LDEwIEBAIHZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFxuIFx0cCA9IHRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChuZXQsIHVhLCBzaywga2V5KTtcbiBcdGlmIChwKSB7XG4tXHRcdG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQtLTtcbitcdFx0aWYgKHAtXHUwMDNlc3IudHlwZSAhPSBUSVBDX05PREVfU1RBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBwLVx1MDAzZXNyLnR5cGUgIT0gVElQQ19MSU5LX1NUQVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcC1cdTAwM2Vzci50eXBlICE9IFRJUENfVE9QX1NSVilcbitcdFx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50LS07XG4gXHRcdHNrYiA9IHRpcGNfbmFtZWRfd2l0aGRyYXcobmV0LCBwKTtcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwLVx1MDAzZWJpbmRpbmdfc29jayk7XG4gXHRcdGtmcmVlX3JjdShwLCByY3UpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTE6NTk6MjkuODE3NjgwMjYxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA1NzIxMzg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVElQQyBOYW1lIFRhYmxlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC90aXBjL25hbWVfdGFibGUuY2AuIEl0J3MgdG91Y2hpbmcgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZXRibF93aXRoZHJhd2AsIHdoaWNoIGltbWVkaWF0ZWx5IGdldHMgbXkgYXR0ZW50aW9uIGJlY2F1c2UgYW55dGhpbmcgZGVhbGluZyB3aXRoIG5hbWUgc2VydmljZXMsIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JrIHByb3RvY29sLCBpcyBhIHBvdGVudGlhbCBob3RiZWQgZm9yIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSByZWxheGluZyB0aGUgcHVibGljYXRpb24gbGltaXRzLCBzcGVjaWZpY2FsbHkgZm9yIGNlcnRhaW4gdHlwZXM6IGBUSVBDX05PREVfU1RBVEVgLCBgVElQQ19MSU5LX1NUQVRFYCwgYW5kIGBUSVBDX1RPUF9TUlZgLiBCeSBub3QgY291bnRpbmcgdGhlc2UgdG93YXJkcyB0aGUgYGxvY2FsX3B1YmxfY291bnRgIGFuZCBsZXR0aW5nIHRoZW0gYnlwYXNzIGBtYXhfdXNlcl9wdWJgLCB0aGUgZGV2ZWxvcGVycyBjbGVhcmx5IGhhZCBhIHNwZWNpZmljIHBlcmZvcm1hbmNlIG9yIGZ1bmN0aW9uYWwgbmVlZCBpbiBtaW5kLiBCdXQgdGhhdCBhbHNvIHJhaXNlcyBhIGZsYWcgZm9yIHBvdGVudGlhbCBhYnVzZS5cblxuRmlyc3QsIEkgc2hvdWxkIGNvbmZpcm0gdGhlIFRJUEMgY29uZmlnOiBMZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfVElQQ2AgaXMgZW5hYmxlZC5cblxuTmV4dCwgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgYW5kIGZ1enphYmxlLiBHaXZlbiB0aGF0IFRJUEMgaXMgYSBuZXR3b3JrIHByb3RvY29sLCBJJ20gY29uZmlkZW50IHRoYXQgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZXRibF93aXRoZHJhd2AgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBzb2NrZXQgb3BlcmF0aW9ucywgbGlrZWx5IGBiaW5kYCBvciBzaW1pbGFyLiBTaW5jZSBpdCdzIGEgbmV0d29yayBwcm90b2NvbCwgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBzb2NrZXQgQVBJLiBUaGF0IG1ha2VzIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZyBhbmQgY2FyZWZ1bCBhdWRpdGluZy4gV2UgY2FuIGRlZmluaXRlbHkgaGl0IHRoZXNlIGZ1bmN0aW9ucy5cblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGRlZXBlciBpbnRvIGBuZXQvdGlwYy9uYW1lX3RhYmxlLmNgIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgYW5kIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHBvdGVudGlhbCBmbGF3cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY1MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDExOjU5OjM4Ljg3NDg5NjQ2M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDk5NDUwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX25hbWV0YmxfcHVibGlzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvbmFtZV90YWJsZS5jPTczMj12b2lkIHRpcGNfbmFtZXRibF9idWlsZF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2dyb3VwICpncnAsXFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtNzU5LVxcbm5ldC90aXBjL25hbWVfdGFibGUuYzo3NjA6LyogdGlwY19uYW1ldGJsX3B1Ymxpc2ggLSBhZGQgc2VydmljZSBiaW5kaW5nIHRvIG5hbWUgdGFibGVcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtNzYxLSAqL1xcbm5ldC90aXBjL25hbWVfdGFibGUuYzo3NjI6c3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtNzYzLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpXFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmg9MTI2PXZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCxcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmgtMTI3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7XFxubmV0L3RpcGMvbmFtZV90YWJsZS5oOjEyODpzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxcbm5ldC90aXBjL25hbWVfdGFibGUuaC0xMjktXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7XFxuLS1cXG5uZXQvdGlwYy9uZXQuYz0xMjY9c3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcXG4tLVxcbm5ldC90aXBjL25ldC5jLTE0MC1cXHR0aXBjX21vbl9yZWluaXRfc2VsZihuZXQpO1xcbm5ldC90aXBjL25ldC5jOjE0MTpcXHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFxcdTAwMjZ1YSwgXFx1MDAyNnNrLCBhZGRyKTtcXG5uZXQvdGlwYy9uZXQuYy0xNDItfVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTM5Nj1zdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtNDMxLVxcdFxcdHRpcGNfbW9uX3BlZXJfdXAobmV0LCBub2RlLCBiZWFyZXJfaWQpO1xcbm5ldC90aXBjL25vZGUuYzo0MzI6XFx0XFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcXHUwMDI2dWEsIFxcdTAwMjZzaywgc2sucmVmKTtcXG5uZXQvdGlwYy9ub2RlLmMtNDMzLVxcdH1cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI5MDc9c3RhdGljIGludCB0aXBjX3NrX3B1Ymxpc2goc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY191YWRkciAqdWEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTIxLVxcdHNrYWRkci5ub2RlID0gdGlwY19vd25fYWRkcihuZXQpO1xcbm5ldC90aXBjL3NvY2tldC5jOjI5MjI6XFx0cCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsIFxcdTAwMjZza2FkZHIsIGtleSk7XFxubmV0L3RpcGMvc29ja2V0LmMtMjkyMy1cXHRpZiAodW5saWtlbHkoIXApKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMTo1OTozOC45MjU4OTY1MTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDk3NTQ4ODY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgTmFtZSBUYWJsZSBQdWJsaWNhdGlvbiBhbmQgV2l0aGRyYXdhbCBQcm9jZXNzZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIGdldHMgY2FsbGVkIGZyb20gYHRpcGNfc2tfcHVibGlzaGAsIHdoaWNoIGl0c2VsZiBpcyBpbnZva2VkIGJ5IGB0aXBjX2JpbmRgLiBBbmQgb24gdGhlIHdpdGhkcmF3YWwgc2lkZSwgYHRpcGNfbmFtZXRibF93aXRoZHJhd2AgaXMgY2FsbGVkIGZyb20gYHRpcGNfc2tfd2l0aGRyYXdgLCB3aGljaCBpcyB0cmlnZ2VyZWQgZWl0aGVyIGJ5IGB0aXBjX3JlbGVhc2VgIG9yLCBpbnRlcmVzdGluZ2x5LCBhbHNvIGJ5IGB0aXBjX2JpbmRgIHdoZW4gYSBzb2NrZXQgaXMgYmVpbmcgdW5ib3VuZC5cblxuVGhpcyBxdWlja2x5IHRlbGxzIG1lIHRoYXQgYHRpcGNfc2tfcHVibGlzaGAgYW5kIGB0aXBjX3NrX3dpdGhkcmF3YCBhcmUgbGlrZWx5IGtleSBhcmVhcyB0byBsb29rIGF0LCBhcyB0aGV5IGZvcm0gdGhlIGNvcmUgb2YgdGhlIHB1YmxpY2F0aW9uIGFuZCB3aXRoZHJhd2FsIG9wZXJhdGlvbnMuIEhvd2V2ZXIsIGJlY2F1c2UgYHRpcGNfYmluZGAgaXMgZnVuZGFtZW50YWwgdG8gYm90aCwgYW5kIHJlc3BvbnNpYmxlIGZvciBlaXRoZXIgcHVibGlzaGluZyBvciB3aXRoZHJhd2luZywgYHRpcGNfYmluZGAgaXRzZWxmIG1pZ2h0IGJlIHRoZSBiZXR0ZXIgZW50cnkgcG9pbnQgdG8gZXhhbWluZSB0aGUgd2hvbGUgcHJvY2Vzcy4gSSB0aGluayBjaGVja2luZyBvdXQgdGhlIGxvZ2ljIHdpdGhpbiBgdGlwY19iaW5kYCB3b3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgYW5kIHBvdGVudGlhbCBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5ODIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MDA6NDkuOTAxMzg2ODJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQxOTUzNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfYmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvc29ja2V0LmM9NjI2PXN0YXRpYyBpbnQgdGlwY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy02NjEtLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6NjYyOiAqIF9fdGlwY19iaW5kIC0gYXNzb2NpYXRlIG9yIGRpc2Fzc29jaWF0ZSBUSVBDIG5hbWUocykgd2l0aCBhIHNvY2tldFxcbm5ldC90aXBjL3NvY2tldC5jLTY2My0gKiBAc29jazogc29ja2V0IHN0cnVjdHVyZVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtNjc1LSAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjY3NjpzdGF0aWMgaW50IF9fdGlwY19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2thZGRyLCBpbnQgYWxlbilcXG5uZXQvdGlwYy9zb2NrZXQuYy02Nzcte1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9NzA1PWludCB0aXBjX3NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpza2FkZHIsIGludCBhbGVuKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtNzA5LVxcdGxvY2tfc29jayhzb2NrLVxcdTAwM2Vzayk7XFxubmV0L3RpcGMvc29ja2V0LmM6NzEwOlxcdHJlcyA9IF9fdGlwY19iaW5kKHNvY2ssIHNrYWRkciwgYWxlbik7XFxubmV0L3RpcGMvc29ja2V0LmMtNzExLVxcdHJlbGVhc2Vfc29jayhzb2NrLVxcdTAwM2Vzayk7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy03MTQtXFxubmV0L3RpcGMvc29ja2V0LmM6NzE1OnN0YXRpYyBpbnQgdGlwY19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpza2FkZHIsIGludCBhbGVuKVxcbm5ldC90aXBjL3NvY2tldC5jLTcxNi17XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1zZ19vcHMgPSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzYyLVxcdC5yZWxlYXNlXFx0PSB0aXBjX3JlbGVhc2UsXFxubmV0L3RpcGMvc29ja2V0LmM6MzM2MzpcXHQuYmluZFxcdFxcdD0gdGlwY19iaW5kLFxcbm5ldC90aXBjL3NvY2tldC5jLTMzNjQtXFx0LmNvbm5lY3RcXHQ9IHRpcGNfY29ubmVjdCxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTMzNzk9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcyA9IHtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTMzODItXFx0LnJlbGVhc2VcXHQ9IHRpcGNfcmVsZWFzZSxcXG5uZXQvdGlwYy9zb2NrZXQuYzozMzgzOlxcdC5iaW5kXFx0XFx0PSB0aXBjX2JpbmQsXFxubmV0L3RpcGMvc29ja2V0LmMtMzM4NC1cXHQuY29ubmVjdFxcdD0gdGlwY19jb25uZWN0LFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MzM5OT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzdHJlYW1fb3BzID0ge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzQwMi1cXHQucmVsZWFzZVxcdD0gdGlwY19yZWxlYXNlLFxcbm5ldC90aXBjL3NvY2tldC5jOjM0MDM6XFx0LmJpbmRcXHRcXHQ9IHRpcGNfYmluZCxcXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDA0LVxcdC5jb25uZWN0XFx0PSB0aXBjX2Nvbm5lY3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjAwOjUwLjQ0MzM0NDc3OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2OTc0Nzk1ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIFRJUEMgRnVuY3Rpb24gU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgVElQQyBtb2R1bGUuIGB0aXBjX2JpbmRgIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbiwgYSBnb29kIGZvY3VzIHN5bWJvbC4gVGhlbiwgbGV0J3MgYWRkIGB0aXBjX3NrX3B1Ymxpc2hgIGFuZCBgdGlwY19za193aXRoZHJhd2AgdG8gdGhlIGxpc3Qgb2YgcmVsZXZhbnQgZnVuY3Rpb25zLiBXYWl0IGEgc2Vjb25kLCB0aG91Z2guLi4gSSB0aGluayBgdGlwY19za19wdWJsaXNoYCBpcyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgYnJvYWRlciB1dGlsaXR5IGZvciB3aGF0IEknbSB0cnlpbmcgdG8gZGV0ZXJtaW5lLiBMZXQncyBzZWUuLi4gbWF5YmUgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZXRibF93aXRoZHJhd2Agd291bGQgYmUgYmV0dGVyIGNhbmRpZGF0ZXMgdG8gZXhhbWluZS4gVGhvc2UgbWlnaHQgYmUgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMuIExldCdzIHN0YXJ0IHdpdGggYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgZGlnIGludG8gYG5ldC90aXBjL25hbWVfdGFibGUuY2AgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAzNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjowMTowNy40MTgxNDM2NzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzNjExMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19uYW1ldGJsX3dpdGhkcmF3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9uYW1lX3RhYmxlLmM9NzYyPXN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODEyLS8qKlxcbm5ldC90aXBjL25hbWVfdGFibGUuYzo4MTM6ICogdGlwY19uYW1ldGJsX3dpdGhkcmF3IC0gd2l0aGRyYXcgYSBzZXJ2aWNlIGJpbmRpbmdcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODE0LSAqIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlXFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODE4LSAqL1xcbm5ldC90aXBjL25hbWVfdGFibGUuYzo4MTk6dm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTgyMC1cXHRcXHRcXHQgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpXFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmg9MTI4PXN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxubmV0L3RpcGMvbmFtZV90YWJsZS5oLTEyOS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmg6MTMwOnZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxcbm5ldC90aXBjL25hbWVfdGFibGUuaC0xMzEtXFx0XFx0XFx0ICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0zOTY9c3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTQzNS1cXHRcXHR0aXBjX21vbl9wZWVyX2Rvd24obmV0LCBub2RlLCBiZWFyZXJfaWQpO1xcbm5ldC90aXBjL25vZGUuYzo0MzY6XFx0XFx0dGlwY19uYW1ldGJsX3dpdGhkcmF3KG5ldCwgXFx1MDAyNnVhLCBcXHUwMDI2c2ssIHNrLnJlZik7XFxubmV0L3RpcGMvbm9kZS5jLTQzNy1cXHR9XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yOTMyPXN0YXRpYyBpbnQgdGlwY19za193aXRoZHJhdyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI5NDItXFx0XFx0XFx0XFx0ICAgcC1cXHUwMDNlc3IudHlwZSwgcC1cXHUwMDNlc3IubG93ZXIsIHAtXFx1MDAzZXNyLnVwcGVyKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoyOTQzOlxcdFxcdFxcdHRpcGNfbmFtZXRibF93aXRoZHJhdyhuZXQsIFxcdTAwMjZfdWEsIFxcdTAwMjZwLVxcdTAwM2VzaywgcC1cXHUwMDNla2V5KTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTQ0LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjk1NC1cXHRcXHRcXHRicmVhaztcXG5uZXQvdGlwYy9zb2NrZXQuYzoyOTU1OlxcdFxcdHRpcGNfbmFtZXRibF93aXRoZHJhdyhuZXQsIHVhLCBcXHUwMDI2cC1cXHUwMDNlc2ssIHAtXFx1MDAzZWtleSk7XFxubmV0L3RpcGMvc29ja2V0LmMtMjk1Ni1cXHRcXHRyYyA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjAxOjA3LjQ2NjUxMDk1MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzMzMzIzNzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipGb2N1c2luZyBvbiBLZXkgVElQQyBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGVsZW1lbnRzIG9mIHRoaXMgVElQQyBjb2RlLiBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBgdGlwY19uYW1ldGJsX3dpdGhkcmF3YCwgYW5kIGB0aXBjX2JpbmRgIOKAkyB0aG9zZSBhcmUgZ29vZCwgbm9uLXN0YXRpYyBmdW5jdGlvbiBzeW1ib2xzIHRvIGZvY3VzIG9uLiBUaGV5IGltbWVkaWF0ZWx5IGp1bXAgb3V0IGFzIGltcG9ydGFudC4gIFRoZXkncmUgZGVmaW5pdGVseSB3b3J0aCBmdXJ0aGVyIGludmVzdGlnYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyB0aGUgY29kZSdzIGRhdGEgZmxvdy5cblxuTmV4dCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIFRJUEMgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4gUmlnaHQsIGl0J3MgYFRJUENgLiBJJ2xsIG9wZW4gYG5ldC90aXBjL0tjb25maWdgIHRvIHNlZSBob3cgaXQncyBzZXQgdXAsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGlzIHdob2xlIFRJUEMgc3RhY2sgaXMgaW50ZW5kZWQgdG8gYmUgY29uZmlndXJlZCBhbmQgdXNlZCwgcHJvdmlkaW5nIGNvbnRleHQgZm9yIGhvdyB0aGVzZSBmdW5jdGlvbnMgSSd2ZSBqdXN0IGlkZW50aWZpZWQgYXJlIGJyb3VnaHQgaW50byBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDY2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MDE6MjEuMTk5ODM2NjQyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk5MDA0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVElQQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvS2NvbmZpZy01LVxcbm5ldC90aXBjL0tjb25maWc6NjptZW51Y29uZmlnIFRJUENcXG5uZXQvdGlwYy9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlRoZSBUSVBDIFByb3RvY29sXFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy0yMy1cXG5uZXQvdGlwYy9LY29uZmlnOjI0OmNvbmZpZyBUSVBDX01FRElBX0lCXFxubmV0L3RpcGMvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJJbmZpbmlCYW5kIG1lZGlhIHR5cGUgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90aXBjL0tjb25maWctMjktXFx0ICBJUC1vdmVyLUluZmluaUJhbmQgZGV2aWNlcy5cXG5uZXQvdGlwYy9LY29uZmlnOjMwOmNvbmZpZyBUSVBDX01FRElBX1VEUFxcbm5ldC90aXBjL0tjb25maWctMzEtXFx0Ym9vbCBcXFwiSVAvVURQIG1lZGlhIHR5cGUgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90aXBjL0tjb25maWctMzctXFxubmV0L3RpcGMvS2NvbmZpZzozODpjb25maWcgVElQQ19DUllQVE9cXG5uZXQvdGlwYy9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIlRJUEMgZW5jcnlwdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy01Mi1cXG5uZXQvdGlwYy9LY29uZmlnOjUzOmNvbmZpZyBUSVBDX0RJQUdcXG5uZXQvdGlwYy9LY29uZmlnLTU0LVxcdHRyaXN0YXRlIFxcXCJUSVBDOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjAxOjIxLjI0NTgzMDYyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTgzMDUyMTI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUSVBDIFBhdGNoKipcblxuT2theSwgc28gdGhlIGNvbmZpZyBpbiBxdWVzdGlvbiBpcyBgVElQQ2AsIGFuZCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSB0aGUgYFRJUENfTUFYX1BVQkxgIGxpbWl0IGNvdWxkIGluYWR2ZXJ0ZW50bHkgYmxvY2sgdGhlIGluc2VydGlvbiBvZiBjcnVjaWFsIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgaW50byB0aGUgbmFtZSB0YWJsZS4gVGhpbmtpbmcgdGhyb3VnaCB0aGlzLCBpdCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuXG5cbk15IHJlYXNvbmluZz8gV2VsbCwgdGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IHR3ZWFrcyB0aGUgcHVibGljYXRpb24gbGltaXQgbG9naWMgd2l0aGluIHRoZSBUSVBDIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBlbnN1cmluZyB0aGF0IGNvcmUgcHJvdG9jb2wgc2VydmljZSB0eXBlcywgbGlrZSBgVElQQ19OT0RFX1NUQVRFYCwgYFRJUENfTElOS19TVEFURWAsIGFuZCBgVElQQ19UT1BfU1JWYCwgY2FuIGJ5cGFzcyB1c2VyLWRlZmluZWQgcHVibGljYXRpb24gbGltaXRzLiBUaGlzIGhpdHMgZGlyZWN0bHkgYXQgdGhlIGhlYXJ0IG9mIFRJUEMncyBuYW1lIHRhYmxlIG1hbmFnZW1lbnQuIEl0J3MgbGlrZWx5IHJlYWNoYWJsZSB0aHJvdWdoIFRJUEMgc29ja2V0IGJpbmQgb3BlcmF0aW9ucyB3aGljaCBtYWtlcyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5UbyBiZSBwcmVjaXNlLCB0aGUga2V5IHN5bWJvbHMgdGhhdCBzcHJpbmcgdG8gbWluZCBhcmUgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgYHRpcGNfbmFtZXRibF93aXRoZHJhd2AsIGFuZCBvZiBjb3Vyc2UgYHRpcGNfYmluZGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGxpa2VseSBpbnZvbHZlZCBpbiB0aGlzIGxvZ2ljLiBXZSdsbCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiBGaW5hbGx5LCB3ZSBjb25maXJtIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBzZXQgdG8gYFRJUENgLlxuXG5Ob3csIGJlZm9yZSB3ZSBnbyBhbnkgZnVydGhlciwgbGV0J3MganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgVElQQ2AgaXRzZWxmIGRvZXNuJ3QgaGF2ZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGNvbXBsaWNhdGUgdGhpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjAxOjM3LjA3NjM1NDAzNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGlwYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFRJUEMgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIFRJUENcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJUaGUgVElQQyBQcm90b2NvbFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBUaGUgVHJhbnNwYXJlbnQgSW50ZXIgUHJvY2VzcyBDb21tdW5pY2F0aW9uIChUSVBDKSBwcm90b2NvbCBpc1xcbiAgMTE6XFx0XFx0ICBzcGVjaWFsbHkgZGVzaWduZWQgZm9yIGludHJhIGNsdXN0ZXIgY29tbXVuaWNhdGlvbi4gVGhpcyBwcm90b2NvbFxcbiAgMTI6XFx0XFx0ICBvcmlnaW5hdGVzIGZyb20gRXJpY3Nzb24gd2hlcmUgaXQgaGFzIGJlZW4gdXNlZCBpbiBjYXJyaWVyIGdyYWRlXFxuICAxMzpcXHRcXHQgIGNsdXN0ZXIgYXBwbGljYXRpb25zIGZvciBtYW55IHllYXJzLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFRJUEMsIHNlZSBodHRwOi8vdGlwYy5zb3VyY2Vmb3JnZS5uZXQuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgVGhpcyBwcm90b2NvbCBzdXBwb3J0IGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlICggPSBjb2RlIHdoaWNoXFxuICAxODpcXHRcXHQgIGNhbiBiZSBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3VcXG4gIDE5OlxcdFxcdCAgd2FudCkuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGlwYy4gSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdFxcbiAgMjA6XFx0XFx0ICBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZCBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnJzdFxcdTAwM2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjAxOjM3LjA3NjQxNDkzNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDk0NTM4NzQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUSVBDIERlcGVuZGVuY3kgYW5kIEZ1bmN0aW9uIEV4cGxvcmF0aW9uKipcblxuT2theSwgc28gYFRJUENgIHJlbGllcyBvbiBgSU5FVGAuICBBbmQgc2luY2UgYElORVRgIGlzIGFsd2F5cyBlbmFibGVkIGluIHRoZSB0eXBpY2FsIGtlcm5lbCBjb25maWd1cmF0aW9ucywgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gSSBjYW4gcmVhc29uYWJseSBhc3N1bWUgdGhhdCBgVElQQ2AgaXMgc3VmZmljaWVudCBpbiB0aGlzIHJlZ2FyZCBhbmQgSSB3b24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGBJTkVUYCBiZWluZyB0aGUgbWlzc2luZyBwaWVjZSBoZXJlLlxuXG5CdXQgSSBzaG91bGQgY2hlY2sgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgcGVydGluZW50LiBMZXQncyBsb29rIGF0IHdoYXQncyBhdmFpbGFibGUuIEhtbSwgdGhlcmUncyBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBhbmQgYHRpcGNfbmFtZXRibF93aXRoZHJhd2AsIGFuZCB0aGVuIGB0aXBjX2JpbmRgLlxuXG5JIHdvbmRlciwgYXJlIHRoZXJlICptb3JlKj8gQWgsIGhlcmUgd2UgZ28sIGB0aXBjX3NrX2JpbmRgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgY2FsbHMgYF9fdGlwY19iaW5kYCwgd2hpY2ggaW4gdHVybiwgY2FsbHMgYHRpcGNfYmluZGAuIFdhaXQgYSBtaW51dGUuLi4gaXNuJ3QgYHRpcGNfYmluZGAgdGhlIGJpbmQgZnVuY3Rpb24gZm9yIHRoZSBgcHJvdG9fb3BzYD8gWWVzLCBpdCBpcy4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhhdCBgdGlwY19iaW5kYCBmdW5jdGlvbiBtb3JlIGNsb3NlbHksIGFuZCBlbnN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ0NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjAxOjQ4LjAyMTgwNDUxNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5NjM4OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19iaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz02MjY9c3RhdGljIGludCB0aXBjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTY2MS0vKipcXG5uZXQvdGlwYy9zb2NrZXQuYzo2NjI6ICogX190aXBjX2JpbmQgLSBhc3NvY2lhdGUgb3IgZGlzYXNzb2NpYXRlIFRJUEMgbmFtZShzKSB3aXRoIGEgc29ja2V0XFxubmV0L3RpcGMvc29ja2V0LmMtNjYzLSAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy02NzUtICovXFxubmV0L3RpcGMvc29ja2V0LmM6Njc2OnN0YXRpYyBpbnQgX190aXBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpza2FkZHIsIGludCBhbGVuKVxcbm5ldC90aXBjL3NvY2tldC5jLTY3Ny17XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz03MDU9aW50IHRpcGNfc2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNrYWRkciwgaW50IGFsZW4pXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy03MDktXFx0bG9ja19zb2NrKHNvY2stXFx1MDAzZXNrKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzo3MTA6XFx0cmVzID0gX190aXBjX2JpbmQoc29jaywgc2thZGRyLCBhbGVuKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy03MTEtXFx0cmVsZWFzZV9zb2NrKHNvY2stXFx1MDAzZXNrKTtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTcxNC1cXG5uZXQvdGlwYy9zb2NrZXQuYzo3MTU6c3RhdGljIGludCB0aXBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNrYWRkciwgaW50IGFsZW4pXFxubmV0L3RpcGMvc29ja2V0LmMtNzE2LXtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTMzNTk9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcyA9IHtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTMzNjItXFx0LnJlbGVhc2VcXHQ9IHRpcGNfcmVsZWFzZSxcXG5uZXQvdGlwYy9zb2NrZXQuYzozMzYzOlxcdC5iaW5kXFx0XFx0PSB0aXBjX2JpbmQsXFxubmV0L3RpcGMvc29ja2V0LmMtMzM2NC1cXHQuY29ubmVjdFxcdD0gdGlwY19jb25uZWN0LFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MzM3OT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzID0ge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzM4Mi1cXHQucmVsZWFzZVxcdD0gdGlwY19yZWxlYXNlLFxcbm5ldC90aXBjL3NvY2tldC5jOjMzODM6XFx0LmJpbmRcXHRcXHQ9IHRpcGNfYmluZCxcXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzg0LVxcdC5jb25uZWN0XFx0PSB0aXBjX2Nvbm5lY3QsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzk5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHN0cmVhbV9vcHMgPSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDAyLVxcdC5yZWxlYXNlXFx0PSB0aXBjX3JlbGVhc2UsXFxubmV0L3RpcGMvc29ja2V0LmM6MzQwMzpcXHQuYmluZFxcdFxcdD0gdGlwY19iaW5kLFxcbm5ldC90aXBjL3NvY2tldC5jLTM0MDQtXFx0LmNvbm5lY3RcXHQ9IHRpcGNfY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MDE6NDguMDY4NzcxMDgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNzQ4MzQ5NDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aGluZ3MgbXlzZWxmOlxuXG4qKkV4YW1pbmluZyBUSVBDIEJpbmRpbmcgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgVElQQyBiaW5kaW5nIGZ1bmN0aW9ucy4gYHRpcGNfYmluZGAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQnV0IGhvbGQgb24gYSBzZWNvbmTigKYgaWYgaXQncyBzdGF0aWMsIGhvdyBpcyBpdCBnZXR0aW5nIGNhbGxlZD8gQWgsIHJpZ2h0LiBJdCdzIGFzc2lnbmVkIHRvIHRoZSBgcHJvdG9fb3BzYCBzdHJ1Y3R1cmUuIFRoYXQncyB0aGUga2V5LiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGB0aXBjX3NrX2JpbmRgIHdoaWNoIGlzIGV4cG9ydGVkIGFuZCB0aHVzIG5vbi1zdGF0aWMsIGFuZCB0aGlzIHN0YXRpYyBgdGlwY19iaW5kYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VidGxlIGludGVyYWN0aW9ucyBvciBjb25mbGljdHMgSSdtIG1pc3NpbmcuIExldCdzIGRpZyBpbnRvIGJvdGggYW5kIHNlZSB3aGF0IHRoZXkgYXJlIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTE3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MDM6NTUuNTUyMjY4MjY5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzU1NzU1OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHRpcGNfc2tfYmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvc29ja2V0LmM9Njc2PXN0YXRpYyBpbnQgX190aXBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpza2FkZHIsIGludCBhbGVuKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtNzA0LVxcbm5ldC90aXBjL3NvY2tldC5jOjcwNTppbnQgdGlwY19za19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2thZGRyLCBpbnQgYWxlbilcXG5uZXQvdGlwYy9zb2NrZXQuYy03MDYte1xcbi0tXFxubmV0L3RpcGMvc29ja2V0Lmg9NzY9Ym9vbCB0aXBjX3NrX292ZXJsaW1pdDIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5uZXQvdGlwYy9zb2NrZXQuaDo3NzppbnQgdGlwY19za19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2thZGRyLCBpbnQgYWxlbik7XFxubmV0L3RpcGMvc29ja2V0LmgtNzgtaW50IHRza19zZXRfaW1wb3J0YW5jZShzdHJ1Y3Qgc29jayAqc2ssIGludCBpbXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjowMzo1NS44ODc4NDcxNTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk1MTE4OTM5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqQW5hbHl6aW5nIFN5bWJvbCBWaXNpYmlsaXR5IGluIHRoZSBUSVBDIEtlcm5lbCBNb2R1bGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBUSVBDIGtlcm5lbCBmdW5jdGlvbnMsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGVpciB2aXNpYmlsaXR5LiBgdGlwY19za19iaW5kYC4uLiB0aGF0IG9uZSdzIG5vbi1zdGF0aWMuIFJpZ2h0LiBBbmQgdGhlbiwgSSBzZWUgdGhhdCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIGFuZCBgdGlwY19uYW1ldGJsX3dpdGhkcmF3YCBhcmUgYWxzbyBub24tc3RhdGljLiBUaGVyZWZvcmUsIHRoZXNlIHRocmVlIGZ1bmN0aW9ucyBhcmUgdGhlIG9uZXMgSSByZWFsbHkgbmVlZCB0byBmb2N1cyBvbiwgYW5kIEknbSBnb2luZyB0byBjYWxsIHRoZXNlIG15ICpGb2N1c1N5bWJvbHMqOiBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBgdGlwY19uYW1ldGJsX3dpdGhkcmF3YCwgYW5kIGB0aXBjX3NrX2JpbmRgLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugc3ltYm9scyBhcmUgZXhwb3NlZCBhbmQgdXNlZCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGVzZSBhbmQgdGhlbiBjb25zaWRlciB0aGVpciBpbXBhY3Qgd2hlbiBJIGV4YW1pbmUgdGhlIHdpZGVyIGNvZGViYXNlLiBJJ2xsIGNhbGwgdGhpcyByZXN1bHQgc2V0IEkgaGF2ZSBoZXJlICdzZXQtcmVzdWx0cycuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMDIsIk91dHB1dFRva2VucyI6MTI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MDQ6NDUuMzk5NzUyNjgxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc3MDE2OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX25hbWV0YmxfcHVibGlzaFwiLFxuICAgIFwidGlwY19uYW1ldGJsX3dpdGhkcmF3XCIsXG4gICAgXCJ0aXBjX3NrX2JpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcHVibGljYXRpb24gbGltaXQgbG9naWMgaW4gVElQQyB0byBlbnN1cmUgcHJvdG9jb2wgc2VydmljZSB0eXBlcyAoVElQQ19OT0RFX1NUQVRFLCBUSVBDX0xJTktfU1RBVEUsIFRJUENfVE9QX1NSVikgY2FuIGJ5cGFzcyB0aGUgdXNlciBwdWJsaWNhdGlvbiBsaW1pdC4gVGhpcyBhZmZlY3RzIHRoZSBjb3JlIFRJUEMgbmFtZSB0YWJsZSBtYW5hZ2VtZW50IGFuZCBpcyByZWFjaGFibGUgdmlhIFRJUEMgc29ja2V0IGJpbmQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUSVBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGlwY19uYW1ldGJsX3B1Ymxpc2hcIixcbiAgICBcInRpcGNfbmFtZXRibF93aXRoZHJhd1wiLFxuICAgIFwidGlwY19za19iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHB1YmxpY2F0aW9uIGxpbWl0IGxvZ2ljIGluIFRJUEMgdG8gZW5zdXJlIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgKFRJUENfTk9ERV9TVEFURSwgVElQQ19MSU5LX1NUQVRFLCBUSVBDX1RPUF9TUlYpIGNhbiBieXBhc3MgdGhlIHVzZXIgcHVibGljYXRpb24gbGltaXQuIFRoaXMgYWZmZWN0cyB0aGUgY29yZSBUSVBDIG5hbWUgdGFibGUgbWFuYWdlbWVudCBhbmQgaXMgcmVhY2hhYmxlIHZpYSBUSVBDIHNvY2tldCBiaW5kIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjA0OjQ1LjQ3NzQ2MDQ4NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1OTQ4MjQ5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjowNDo0NS40Nzc4NzYxODZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA1OTQ0MDUzMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY291bnRpbmcgbG9jYWwgcHVibGljYXRpb25zIGluIHRoZSBUSVBDIG5hbWUgdGFibGUgdG8gZXhjbHVkZSBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIChUSVBDX05PREVfU1RBVEUsIFRJUENfTElOS19TVEFURSwgVElQQ19UT1BfU1JWKSBhbmQgcmVzZXJ2ZXMgb25lIGVudHJ5IGZvciB0aGUgbm9kZSBzdGF0ZSBzZXJ2aWNlIHR5cGUuIFRoaXMgaXMgcHVyZWx5IGEgcmVzb3VyY2UgbGltaXQgYW5kIGNvdW50aW5nIGxvZ2ljIGNoYW5nZSB0byBwcmV2ZW50IHVzZXIgcHVibGljYXRpb25zIGZyb20gZXhoYXVzdGluZyB0aGUgbGltaXQgYW5kIGJsb2NraW5nIHByb3RvY29sIHNlcnZpY2UgdHlwZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmZmZjZjYxZTFhNjZkNDNiMzM4ZTE2ZjdjYTUwNjk3OTg1MmE0NmRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMTE6NTk6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLjZmZGEzNmFiMTc2NjkgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbisrKyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xuQEAgLTc2MywyMSArNzYzLDQwIEBAIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpXG4ge1xuIFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4rXHR1MzIgbWF4X3VzZXJfcHViID0gVElQQ19NQVhfUFVCTCAtIDE7XG4gXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcCA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbitcdGJvb2wgcHJvdG9jb2xfdHlwZSA9IGZhbHNlO1xuIFx0dTMyIHJjX2Rlc3RzO1xuIFxuK1x0aWYgKHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19OT0RFX1NUQVRFIHx8IHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19MSU5LX1NUQVRFIHx8XG4rXHQgICAgdWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX1RPUF9TUlYpXG4rXHRcdHByb3RvY29sX3R5cGUgPSB0cnVlO1xuK1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4rXHRpZiAocHJvdG9jb2xfdHlwZSlcbitcdFx0Z290byBpbnNlcnQ7XG4gXG4tXHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IFRJUENfTUFYX1BVQkwpIHtcbi1cdFx0cHJfd2FybihcIkJpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxcblwiLCBUSVBDX01BWF9QVUJMKTtcbitcdC8qIFJlc2VydmUgb25lIGVudHJ5IGZvciBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZSBiZWNhdXNlIGl0IGhhcyBjbHVzdGVyXG4rXHQgKiBzY29wZSBhbmQgaXQgaXMgZGlzdHJpYnV0ZWQgaW4gYnVsay4gU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VyJ3NcbitcdCAqIHB1YmxpY2F0aW9ucyBpcyAoVElQQ19NQVhfUFVCTCAtIDEpLlxuK1x0ICovXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IG1heF91c2VyX3B1Yikge1xuK1x0XHRwcl93YXJuKFwiQmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXFxuXCIsIG1heF91c2VyX3B1Yik7XG4gXHRcdGdvdG8gZXhpdDtcbiBcdH1cbiBcbitpbnNlcnQ6XG4gXHRwID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpO1xuIFx0aWYgKHApIHtcbi1cdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCsrO1xuK1x0XHQvKiBOb3QgY291bnQgbm9kZSBzdGF0ZSwgbGluayBzdGF0ZSBhbmQgdG9wb2xvZ3kgc2VydmVyIHR5cGVzXG4rXHRcdCAqIHNvIHRoYXQgbWF4aW11bSBudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IGRvZXMgbm90IHByZXZlbnRcbitcdFx0ICogcHJvdG9jb2wgc2VydmljZSB0eXBlcyBmcm9tIGJlaW5nIGluc2VydGVkIGludG8gdGhlIG5hbWVcbitcdFx0ICogdGFibGUuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIXByb3RvY29sX3R5cGUpXG4rXHRcdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCsrO1xuIFx0XHRza2IgPSB0aXBjX25hbWVkX3B1Ymxpc2gobmV0LCBwKTtcbiBcdH1cbiBcdHJjX2Rlc3RzID0gbnQtXHUwMDNlcmNfZGVzdHM7XG5AQCAtODEwLDcgKzgyOSwxMCBAQCB2b2lkIHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcbiBcdHAgPSB0aXBjX25hbWV0YmxfcmVtb3ZlX3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4gXHRpZiAocCkge1xuLVx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50LS07XG4rXHRcdGlmIChwLVx1MDAzZXNyLnR5cGUgIT0gVElQQ19OT0RFX1NUQVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcC1cdTAwM2Vzci50eXBlICE9IFRJUENfTElOS19TVEFURSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHAtXHUwMDNlc3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpXG4rXHRcdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudC0tO1xuIFx0XHRza2IgPSB0aXBjX25hbWVkX3dpdGhkcmF3KG5ldCwgcCk7XG4gXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX3NvY2spO1xuIFx0XHRrZnJlZV9yY3UocCwgcmN1KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjA0OjQ1LjQ3Nzg3NzQ4NloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDU5NDM4NTQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUSVBDIE5hbWUgVGFibGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGB0aXBjX25hbWV0YmxfcHVibGlzaGAgYW5kIGB0aXBjX25hbWV0Ymxfd2l0aGRyYXdgIGluIGBuZXQvdGlwYy9uYW1lX3RhYmxlLmNgLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgZm9jdXNlZCBvbiBob3cgd2UgY291bnQgbG9jYWwgcHVibGljYXRpb25zLCBzcGVjaWZpY2FsbHkgYG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnRgLiBUaGUgaW50ZW50IGhlcmUgaXMgdG8gKmV4Y2x1ZGUqIGNlcnRhaW4gcHJvdG9jb2wgdHlwZXMg4oCTIGBUSVBDX05PREVfU1RBVEVgLCBgVElQQ19MSU5LX1NUQVRFYCwgYW5kIGBUSVBDX1RPUF9TUlZgIOKAkyBmcm9tIHRoYXQgY291bnQuIFRoaXMgaXMgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLlxuXG5UaGUgY29kZSBub3cgY2hlY2tzIGlmIHRoZSBwdWJsaWNhdGlvbiB0eXBlIGlzIG9uZSBvZiB0aG9zZSBwcm90b2NvbCB0eXBlcywgYW5kIGlmIGl0IGlzLCB0aGUgY291bnQgaXMgKm5vdCogaW5jcmVtZW50ZWQuIEFsc28sIGFuZCB0aGlzIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBpbXBhY3QsIHRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtYXhpbXVtIGxpbWl0IGZvciB1c2VyIHB1YmxpY2F0aW9ucyB0byBgVElQQ19NQVhfUFVCTCAtIDFgLiBUaGUgY29tbWVudCBtYWtlcyBpdCB2ZXJ5IGNsZWFyIHRoYXQgdGhpcyBpcyBiZWluZyBkb25lIHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZSwgd2hpY2ggaXMgY2x1c3Rlci1zY29wZWQgYW5kIGRpc3RyaWJ1dGVkIGluIGJ1bGsuXG5cblRoZSBvcmlnaW5hbCBjb2RlIGNoZWNrZWQgYGlmIChudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IFx1MDAzZT0gVElQQ19NQVhfUFVCTClgIGFuZCB3b3VsZCBlcnJvciBvdXQgaWYgaXQgcmVhY2hlZCB0aGUgbGltaXQuIFRoZSBtb2RpZmllZCBjb2RlIG5vdyBoYXMgYGlmIChudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IFx1MDAzZT0gbWF4X3VzZXJfcHViKWAsIHdoZXJlIGBtYXhfdXNlcl9wdWJgIGlzIGBUSVBDX01BWF9QVUJMIC0gMWAuIFRoZSBpbXBvcnRhbnQgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHRoZXNlIGNoYW5nZXMgcHJldmVudCBhIERvUyBvciByZXNvdXJjZSBleGhhdXN0aW9uIHNjZW5hcmlvLCB3aGVyZSB1c2VyIHB1YmxpY2F0aW9ucyBjb3VsZCBwcmV2ZW50IGNyaXRpY2FsIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgZnJvbSBiZWluZyBpbnNlcnRlZC5cblxuRnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3MuIFRoaXMgcGF0Y2ggaXMgcHVyZWx5IGxvZ2ljLWRyaXZlbjsgSSdtIG5vdCBzZWVpbmcgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgaW50ZXJhY3Rpb25zIHdpdGggdXNlciBzcGFjZSB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0IGFsc28gYXZvaWRzIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBpcyBhbGwgYWJvdXQgYWRqdXN0aW5nIHJlc291cmNlIGxpbWl0cy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGNvcmUgdG9vbHMgYXJlIGFkZXF1YXRlIGhlcmUuXG5cblRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgYXMgdGhpcyBpc24ndCB0b3VjaGluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMganVzdCByZXNvdXJjZSBtYW5hZ2VtZW50LiAqKk5lZWRzS01TQU49ZmFsc2UqKiBpcyB0aGUgY29ycmVjdCBjYWxsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDksIk91dHB1dFRva2VucyI6MTUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzU1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MDQ6NTYuMDcyMjY2MzQyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGNvdW50aW5nIGxvY2FsIHB1YmxpY2F0aW9ucyBpbiB0aGUgVElQQyBuYW1lIHRhYmxlIHRvIGV4Y2x1ZGUgcHJvdG9jb2wgc2VydmljZSB0eXBlcyAoVElQQ19OT0RFX1NUQVRFLCBUSVBDX0xJTktfU1RBVEUsIFRJUENfVE9QX1NSVikgYW5kIHJlc2VydmVzIG9uZSBlbnRyeSBmb3IgdGhlIG5vZGUgc3RhdGUgc2VydmljZSB0eXBlLiBUaGlzIGlzIHB1cmVseSBhIHJlc291cmNlIGxpbWl0IGFuZCBjb3VudGluZyBsb2dpYyBjaGFuZ2UgdG8gcHJldmVudCB1c2VyIHB1YmxpY2F0aW9ucyBmcm9tIGV4aGF1c3RpbmcgdGhlIGxpbWl0IGFuZCBibG9ja2luZyBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgaW50ZXJhY3Rpb25zIHdpdGggdXNlciBzcGFjZSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjb3VudGluZyBsb2NhbCBwdWJsaWNhdGlvbnMgaW4gdGhlIFRJUEMgbmFtZSB0YWJsZSB0byBleGNsdWRlIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgKFRJUENfTk9ERV9TVEFURSwgVElQQ19MSU5LX1NUQVRFLCBUSVBDX1RPUF9TUlYpIGFuZCByZXNlcnZlcyBvbmUgZW50cnkgZm9yIHRoZSBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZS4gVGhpcyBpcyBwdXJlbHkgYSByZXNvdXJjZSBsaW1pdCBhbmQgY291bnRpbmcgbG9naWMgY2hhbmdlIHRvIHByZXZlbnQgdXNlciBwdWJsaWNhdGlvbnMgZnJvbSBleGhhdXN0aW5nIHRoZSBsaW1pdCBhbmQgYmxvY2tpbmcgcHJvdG9jb2wgc2VydmljZSB0eXBlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGludGVyYWN0aW9ucyB3aXRoIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtgpfd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 11:28:45 +0000 UTC FinishedAt: 2026-08-27 12:04:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "f967455fb2a5a2079b9eb5823e9ccf359174bf9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "f967455fb2a5a2079b9eb5823e9ccf359174bf9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "8854ceb5-7d0e-4716-a5a1-ba2fcacb4631" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tipc_nametbl_publish", "tipc_nametbl_withdraw", "tipc_sk_bind" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX25hbWV0YmxfcHVibGlzaCYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWV0Ymxfd2l0aGRyYXcmIzM0OywKICAgICYjMzQ7dGlwY19za19iaW5kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjb3VudGluZyBsb2NhbCBwdWJsaWNhdGlvbnMgaW4gdGhlIFRJUEMgbmFtZSB0YWJsZSB0byBleGNsdWRlIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgKFRJUENfTk9ERV9TVEFURSwgVElQQ19MSU5LX1NUQVRFLCBUSVBDX1RPUF9TUlYpIGFuZCByZXNlcnZlcyBvbmUgZW50cnkgZm9yIHRoZSBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZS4gVGhpcyBpcyBwdXJlbHkgYSByZXNvdXJjZSBsaW1pdCBhbmQgY291bnRpbmcgbG9naWMgY2hhbmdlIHRvIHByZXZlbnQgdXNlciBwdWJsaWNhdGlvbnMgZnJvbSBleGhhdXN0aW5nIHRoZSBsaW1pdCBhbmQgYmxvY2tpbmcgcHJvdG9jb2wgc2VydmljZSB0eXBlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGludGVyYWN0aW9ucyB3aXRoIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcHVibGljYXRpb24gbGltaXQgbG9naWMgaW4gVElQQyB0byBlbnN1cmUgcHJvdG9jb2wgc2VydmljZSB0eXBlcyAoVElQQ19OT0RFX1NUQVRFLCBUSVBDX0xJTktfU1RBVEUsIFRJUENfVE9QX1NSVikgY2FuIGJ5cGFzcyB0aGUgdXNlciBwdWJsaWNhdGlvbiBsaW1pdC4gVGhpcyBhZmZlY3RzIHRoZSBjb3JlIFRJUEMgbmFtZSB0YWJsZSBtYW5hZ2VtZW50IGFuZCBpcyByZWFjaGFibGUgdmlhIFRJUEMgc29ja2V0IGJpbmQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMTo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZmZmNmNjFlMWE2NmQ0M2IzMzhlMTZmN2NhNTA2OTc5ODUyYTQ2ZGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxMTo1OToyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLjZmZGEzNmFiMTc2NjkgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xuQEAgLTc2MywyMSAmIzQzOzc2Myw0MCBAQCBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFx0XHRcdFx0XHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KVxuIHtcbiBcdHN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpO1xuJiM0MztcdHUzMiBtYXhfdXNlcl9wdWIgPSBUSVBDX01BWF9QVUJMIC0gMTtcbiBcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuJiM0MztcdGJvb2wgcHJvdG9jb2xfdHlwZSA9IGZhbHNlO1xuIFx0dTMyIHJjX2Rlc3RzO1xuIFxuJiM0MztcdGlmICh1YS1cdTAwM2Vzci50eXBlID09IFRJUENfTk9ERV9TVEFURSB8fCB1YS1cdTAwM2Vzci50eXBlID09IFRJUENfTElOS19TVEFURSB8fFxuJiM0MztcdCAgICB1YS1cdTAwM2Vzci50eXBlID09IFRJUENfVE9QX1NSVilcbiYjNDM7XHRcdHByb3RvY29sX3R5cGUgPSB0cnVlO1xuJiM0MztcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuJiM0MztcdGlmIChwcm90b2NvbF90eXBlKVxuJiM0MztcdFx0Z290byBpbnNlcnQ7XG4gXG4tXHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IFRJUENfTUFYX1BVQkwpIHtcbi1cdFx0cHJfd2FybihcJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcXG5cJiMzNDssIFRJUENfTUFYX1BVQkwpO1xuJiM0MztcdC8qIFJlc2VydmUgb25lIGVudHJ5IGZvciBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZSBiZWNhdXNlIGl0IGhhcyBjbHVzdGVyXG4mIzQzO1x0ICogc2NvcGUgYW5kIGl0IGlzIGRpc3RyaWJ1dGVkIGluIGJ1bGsuIFNvLCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdXNlciYjMzk7c1xuJiM0MztcdCAqIHB1YmxpY2F0aW9ucyBpcyAoVElQQ19NQVhfUFVCTCAtIDEpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IFx1MDAzZT0gbWF4X3VzZXJfcHViKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O0JpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxcblwmIzM0OywgbWF4X3VzZXJfcHViKTtcbiBcdFx0Z290byBleGl0O1xuIFx0fVxuIFxuJiM0MztpbnNlcnQ6XG4gXHRwID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpO1xuIFx0aWYgKHApIHtcbi1cdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHQvKiBOb3QgY291bnQgbm9kZSBzdGF0ZSwgbGluayBzdGF0ZSBhbmQgdG9wb2xvZ3kgc2VydmVyIHR5cGVzXG4mIzQzO1x0XHQgKiBzbyB0aGF0IG1heGltdW0gbnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBkb2VzIG5vdCBwcmV2ZW50XG4mIzQzO1x0XHQgKiBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIGZyb20gYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgbmFtZVxuJiM0MztcdFx0ICogdGFibGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICghcHJvdG9jb2xfdHlwZSlcbiYjNDM7XHRcdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCYjNDM7JiM0Mzs7XG4gXHRcdHNrYiA9IHRpcGNfbmFtZWRfcHVibGlzaChuZXQsIHApO1xuIFx0fVxuIFx0cmNfZGVzdHMgPSBudC1cdTAwM2VyY19kZXN0cztcbkBAIC04MTAsNyAmIzQzOzgyOSwxMCBAQCB2b2lkIHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcbiBcdHAgPSB0aXBjX25hbWV0YmxfcmVtb3ZlX3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4gXHRpZiAocCkge1xuLVx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50LS07XG4mIzQzO1x0XHRpZiAocC1cdTAwM2Vzci50eXBlICE9IFRJUENfTk9ERV9TVEFURSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBwLVx1MDAzZXNyLnR5cGUgIT0gVElQQ19MSU5LX1NUQVRFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHAtXHUwMDNlc3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpXG4mIzQzO1x0XHRcdG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQtLTtcbiBcdFx0c2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHApO1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnAtXHUwMDNlYmluZGluZ19zb2NrKTtcbiBcdFx0a2ZyZWVfcmN1KHAsIHJjdSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX25hbWV0YmxfcHVibGlzaCYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWV0Ymxfd2l0aGRyYXcmIzM0OywKICAgICYjMzQ7dGlwY19za19iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwdWJsaWNhdGlvbiBsaW1pdCBsb2dpYyBpbiBUSVBDIHRvIGVuc3VyZSBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIChUSVBDX05PREVfU1RBVEUsIFRJUENfTElOS19TVEFURSwgVElQQ19UT1BfU1JWKSBjYW4gYnlwYXNzIHRoZSB1c2VyIHB1YmxpY2F0aW9uIGxpbWl0LiBUaGlzIGFmZmVjdHMgdGhlIGNvcmUgVElQQyBuYW1lIHRhYmxlIG1hbmFnZW1lbnQgYW5kIGlzIHJlYWNoYWJsZSB2aWEgVElQQyBzb2NrZXQgYmluZCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmZmY2Y2MWUxYTY2ZDQzYjMzOGUxNmY3Y2E1MDY5Nzk4NTJhNDZkZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDExOjU5OjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV90YWJsZS5jIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jCmluZGV4IDI1M2M3MmQxMzY2ZWIuLjZmZGEzNmFiMTc2NjkgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmMKQEAgLTc2MywyMSAmIzQzOzc2Myw0MCBAQCBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAogCQkJCQkgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KQogewogCXN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpOwomIzQzOwl1MzIgbWF4X3VzZXJfcHViID0gVElQQ19NQVhfUFVCTCAtIDE7CiAJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKJiM0MzsJYm9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7CiAJdTMyIHJjX2Rlc3RzOwogCiYjNDM7CWlmICh1YS0mZ3Q7c3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgfHwgdWEtJmd0O3NyLnR5cGUgPT0gVElQQ19MSU5LX1NUQVRFIHx8CiYjNDM7CSAgICB1YS0mZ3Q7c3IudHlwZSA9PSBUSVBDX1RPUF9TUlYpCiYjNDM7CQlwcm90b2NvbF90eXBlID0gdHJ1ZTsKJiM0MzsKIAlzcGluX2xvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKJiM0MzsJaWYgKHByb3RvY29sX3R5cGUpCiYjNDM7CQlnb3RvIGluc2VydDsKIAotCWlmIChudC0mZ3Q7bG9jYWxfcHVibF9jb3VudCAmZ3Q7PSBUSVBDX01BWF9QVUJMKSB7Ci0JCXByX3dhcm4oJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcbiYjMzQ7LCBUSVBDX01BWF9QVUJMKTsKJiM0MzsJLyogUmVzZXJ2ZSBvbmUgZW50cnkgZm9yIG5vZGUgc3RhdGUgc2VydmljZSB0eXBlIGJlY2F1c2UgaXQgaGFzIGNsdXN0ZXIKJiM0MzsJICogc2NvcGUgYW5kIGl0IGlzIGRpc3RyaWJ1dGVkIGluIGJ1bGsuIFNvLCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdXNlciYjMzk7cwomIzQzOwkgKiBwdWJsaWNhdGlvbnMgaXMgKFRJUENfTUFYX1BVQkwgLSAxKS4KJiM0MzsJICovCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfcHVibF9jb3VudCAmZ3Q7PSBtYXhfdXNlcl9wdWIpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcbiYjMzQ7LCBtYXhfdXNlcl9wdWIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCiYjNDM7aW5zZXJ0OgogCXAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSk7CiAJaWYgKHApIHsKLQkJbnQtJmd0O2xvY2FsX3B1YmxfY291bnQmIzQzOyYjNDM7OwomIzQzOwkJLyogTm90IGNvdW50IG5vZGUgc3RhdGUsIGxpbmsgc3RhdGUgYW5kIHRvcG9sb2d5IHNlcnZlciB0eXBlcwomIzQzOwkJICogc28gdGhhdCBtYXhpbXVtIG50LSZndDtsb2NhbF9wdWJsX2NvdW50IGRvZXMgbm90IHByZXZlbnQKJiM0MzsJCSAqIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgZnJvbSBiZWluZyBpbnNlcnRlZCBpbnRvIHRoZSBuYW1lCiYjNDM7CQkgKiB0YWJsZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFwcm90b2NvbF90eXBlKQomIzQzOwkJCW50LSZndDtsb2NhbF9wdWJsX2NvdW50JiM0MzsmIzQzOzsKIAkJc2tiID0gdGlwY19uYW1lZF9wdWJsaXNoKG5ldCwgcCk7CiAJfQogCXJjX2Rlc3RzID0gbnQtJmd0O3JjX2Rlc3RzOwpAQCAtODEwLDcgJiM0Mzs4MjksMTAgQEAgdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAKIAlwID0gdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpOwogCWlmIChwKSB7Ci0JCW50LSZndDtsb2NhbF9wdWJsX2NvdW50LS07CiYjNDM7CQlpZiAocC0mZ3Q7c3IudHlwZSAhPSBUSVBDX05PREVfU1RBVEUgJmFtcDsmYW1wOwomIzQzOwkJICAgIHAtJmd0O3NyLnR5cGUgIT0gVElQQ19MSU5LX1NUQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICBwLSZndDtzci50eXBlICE9IFRJUENfVE9QX1NSVikKJiM0MzsJCQludC0mZ3Q7bG9jYWxfcHVibF9jb3VudC0tOwogCQlza2IgPSB0aXBjX25hbWVkX3dpdGhkcmF3KG5ldCwgcCk7CiAJCWxpc3RfZGVsX2luaXQoJmFtcDtwLSZndDtiaW5kaW5nX3NvY2spOwogCQlrZnJlZV9yY3UocCwgcmN1KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVElQQyBOYW1lIFRhYmxlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3RpcGMvbmFtZV90YWJsZS5jYC4gSXQmIzM5O3MgdG91Y2hpbmcgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZXRibF93aXRoZHJhd2AsIHdoaWNoIGltbWVkaWF0ZWx5IGdldHMgbXkgYXR0ZW50aW9uIGJlY2F1c2UgYW55dGhpbmcgZGVhbGluZyB3aXRoIG5hbWUgc2VydmljZXMsIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JrIHByb3RvY29sLCBpcyBhIHBvdGVudGlhbCBob3RiZWQgZm9yIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSByZWxheGluZyB0aGUgcHVibGljYXRpb24gbGltaXRzLCBzcGVjaWZpY2FsbHkgZm9yIGNlcnRhaW4gdHlwZXM6IGBUSVBDX05PREVfU1RBVEVgLCBgVElQQ19MSU5LX1NUQVRFYCwgYW5kIGBUSVBDX1RPUF9TUlZgLiBCeSBub3QgY291bnRpbmcgdGhlc2UgdG93YXJkcyB0aGUgYGxvY2FsX3B1YmxfY291bnRgIGFuZCBsZXR0aW5nIHRoZW0gYnlwYXNzIGBtYXhfdXNlcl9wdWJgLCB0aGUgZGV2ZWxvcGVycyBjbGVhcmx5IGhhZCBhIHNwZWNpZmljIHBlcmZvcm1hbmNlIG9yIGZ1bmN0aW9uYWwgbmVlZCBpbiBtaW5kLiBCdXQgdGhhdCBhbHNvIHJhaXNlcyBhIGZsYWcgZm9yIHBvdGVudGlhbCBhYnVzZS4KCkZpcnN0LCBJIHNob3VsZCBjb25maXJtIHRoZSBUSVBDIGNvbmZpZzogTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19USVBDYCBpcyBlbmFibGVkLgoKTmV4dCwgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgYW5kIGZ1enphYmxlLiBHaXZlbiB0aGF0IFRJUEMgaXMgYSBuZXR3b3JrIHByb3RvY29sLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGB0aXBjX25hbWV0YmxfcHVibGlzaGAgYW5kIGB0aXBjX25hbWV0Ymxfd2l0aGRyYXdgIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggc29ja2V0IG9wZXJhdGlvbnMsIGxpa2VseSBgYmluZGAgb3Igc2ltaWxhci4gU2luY2UgaXQmIzM5O3MgYSBuZXR3b3JrIHByb3RvY29sLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBzb2NrZXQgQVBJLiBUaGF0IG1ha2VzIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZyBhbmQgY2FyZWZ1bCBhdWRpdGluZy4gV2UgY2FuIGRlZmluaXRlbHkgaGl0IHRoZXNlIGZ1bmN0aW9ucy4KCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byBgbmV0L3RpcGMvbmFtZV90YWJsZS5jYCBhbmQgZmlndXJlIG91dCB0aGUgZXhhY3QgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMsIGFuZCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBwb3RlbnRpYWwgZmxhd3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19uYW1ldGJsX3B1Ymxpc2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvbmFtZV90YWJsZS5jPTczMj12b2lkIHRpcGNfbmFtZXRibF9idWlsZF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2dyb3VwICpncnAsXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTc1OS1cbm5ldC90aXBjL25hbWVfdGFibGUuYzo3NjA6LyogdGlwY19uYW1ldGJsX3B1Ymxpc2ggLSBhZGQgc2VydmljZSBiaW5kaW5nIHRvIG5hbWUgdGFibGVcbm5ldC90aXBjL25hbWVfdGFibGUuYy03NjEtICovXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6NzYyOnN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtNzYzLVx0XHRcdFx0XHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KVxuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuaD0xMjY9dm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxubmV0L3RpcGMvbmFtZV90YWJsZS5oLTEyNy1cdFx0XHQgICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEpO1xubmV0L3RpcGMvbmFtZV90YWJsZS5oOjEyODpzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxubmV0L3RpcGMvbmFtZV90YWJsZS5oLTEyOS1cdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7XG4tLVxubmV0L3RpcGMvbmV0LmM9MTI2PXN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4tLVxubmV0L3RpcGMvbmV0LmMtMTQwLVx0dGlwY19tb25fcmVpbml0X3NlbGYobmV0KTtcbm5ldC90aXBjL25ldC5jOjE0MTpcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBhZGRyKTtcbm5ldC90aXBjL25ldC5jLTE0Mi19XG4tLVxubmV0L3RpcGMvbm9kZS5jPTM5Nj1zdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4tLVxubmV0L3RpcGMvbm9kZS5jLTQzMS1cdFx0dGlwY19tb25fcGVlcl91cChuZXQsIG5vZGUsIGJlYXJlcl9pZCk7XG5uZXQvdGlwYy9ub2RlLmM6NDMyOlx0XHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmKTtcbm5ldC90aXBjL25vZGUuYy00MzMtXHR9XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MjkwNz1zdGF0aWMgaW50IHRpcGNfc2tfcHVibGlzaChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTIxLVx0c2thZGRyLm5vZGUgPSB0aXBjX293bl9hZGRyKG5ldCk7XG5uZXQvdGlwYy9zb2NrZXQuYzoyOTIyOlx0cCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsIFx1MDAyNnNrYWRkciwga2V5KTtcbm5ldC90aXBjL3NvY2tldC5jLTI5MjMtXHRpZiAodW5saWtlbHkoIXApKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5ODIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUSVBDIE5hbWUgVGFibGUgUHVibGljYXRpb24gYW5kIFdpdGhkcmF3YWwgUHJvY2Vzc2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBnZXRzIGNhbGxlZCBmcm9tIGB0aXBjX3NrX3B1Ymxpc2hgLCB3aGljaCBpdHNlbGYgaXMgaW52b2tlZCBieSBgdGlwY19iaW5kYC4gQW5kIG9uIHRoZSB3aXRoZHJhd2FsIHNpZGUsIGB0aXBjX25hbWV0Ymxfd2l0aGRyYXdgIGlzIGNhbGxlZCBmcm9tIGB0aXBjX3NrX3dpdGhkcmF3YCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGVpdGhlciBieSBgdGlwY19yZWxlYXNlYCBvciwgaW50ZXJlc3RpbmdseSwgYWxzbyBieSBgdGlwY19iaW5kYCB3aGVuIGEgc29ja2V0IGlzIGJlaW5nIHVuYm91bmQuCgpUaGlzIHF1aWNrbHkgdGVsbHMgbWUgdGhhdCBgdGlwY19za19wdWJsaXNoYCBhbmQgYHRpcGNfc2tfd2l0aGRyYXdgIGFyZSBsaWtlbHkga2V5IGFyZWFzIHRvIGxvb2sgYXQsIGFzIHRoZXkgZm9ybSB0aGUgY29yZSBvZiB0aGUgcHVibGljYXRpb24gYW5kIHdpdGhkcmF3YWwgb3BlcmF0aW9ucy4gSG93ZXZlciwgYmVjYXVzZSBgdGlwY19iaW5kYCBpcyBmdW5kYW1lbnRhbCB0byBib3RoLCBhbmQgcmVzcG9uc2libGUgZm9yIGVpdGhlciBwdWJsaXNoaW5nIG9yIHdpdGhkcmF3aW5nLCBgdGlwY19iaW5kYCBpdHNlbGYgbWlnaHQgYmUgdGhlIGJldHRlciBlbnRyeSBwb2ludCB0byBleGFtaW5lIHRoZSB3aG9sZSBwcm9jZXNzLiBJIHRoaW5rIGNoZWNraW5nIG91dCB0aGUgbG9naWMgd2l0aGluIGB0aXBjX2JpbmRgIHdvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBhbmQgcG90ZW50aWFsIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX2JpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvc29ja2V0LmM9NjI2PXN0YXRpYyBpbnQgdGlwY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtNjYxLS8qKlxubmV0L3RpcGMvc29ja2V0LmM6NjYyOiAqIF9fdGlwY19iaW5kIC0gYXNzb2NpYXRlIG9yIGRpc2Fzc29jaWF0ZSBUSVBDIG5hbWUocykgd2l0aCBhIHNvY2tldFxubmV0L3RpcGMvc29ja2V0LmMtNjYzLSAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtNjc1LSAqL1xubmV0L3RpcGMvc29ja2V0LmM6Njc2OnN0YXRpYyBpbnQgX190aXBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpza2FkZHIsIGludCBhbGVuKVxubmV0L3RpcGMvc29ja2V0LmMtNjc3LXtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz03MDU9aW50IHRpcGNfc2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNrYWRkciwgaW50IGFsZW4pXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtNzA5LVx0bG9ja19zb2NrKHNvY2stXHUwMDNlc2spO1xubmV0L3RpcGMvc29ja2V0LmM6NzEwOlx0cmVzID0gX190aXBjX2JpbmQoc29jaywgc2thZGRyLCBhbGVuKTtcbm5ldC90aXBjL3NvY2tldC5jLTcxMS1cdHJlbGVhc2Vfc29jayhzb2NrLVx1MDAzZXNrKTtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy03MTQtXG5uZXQvdGlwYy9zb2NrZXQuYzo3MTU6c3RhdGljIGludCB0aXBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNrYWRkciwgaW50IGFsZW4pXG5uZXQvdGlwYy9zb2NrZXQuYy03MTYte1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTMzNTk9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcyA9IHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzYyLVx0LnJlbGVhc2VcdD0gdGlwY19yZWxlYXNlLFxubmV0L3RpcGMvc29ja2V0LmM6MzM2MzpcdC5iaW5kXHRcdD0gdGlwY19iaW5kLFxubmV0L3RpcGMvc29ja2V0LmMtMzM2NC1cdC5jb25uZWN0XHQ9IHRpcGNfY29ubmVjdCxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHBhY2tldF9vcHMgPSB7XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzM4Mi1cdC5yZWxlYXNlXHQ9IHRpcGNfcmVsZWFzZSxcbm5ldC90aXBjL3NvY2tldC5jOjMzODM6XHQuYmluZFx0XHQ9IHRpcGNfYmluZCxcbm5ldC90aXBjL3NvY2tldC5jLTMzODQtXHQuY29ubmVjdFx0PSB0aXBjX2Nvbm5lY3QsXG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzM5OT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzdHJlYW1fb3BzID0ge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTM0MDItXHQucmVsZWFzZVx0PSB0aXBjX3JlbGVhc2UsXG5uZXQvdGlwYy9zb2NrZXQuYzozNDAzOlx0LmJpbmRcdFx0PSB0aXBjX2JpbmQsXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDA0LVx0LmNvbm5lY3RcdD0gdGlwY19jb25uZWN0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMzQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gVElQQyBGdW5jdGlvbiBTeW1ib2xzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIFRJUEMgbW9kdWxlLiBgdGlwY19iaW5kYCBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24sIGEgZ29vZCBmb2N1cyBzeW1ib2wuIFRoZW4sIGxldCYjMzk7cyBhZGQgYHRpcGNfc2tfcHVibGlzaGAgYW5kIGB0aXBjX3NrX3dpdGhkcmF3YCB0byB0aGUgbGlzdCBvZiByZWxldmFudCBmdW5jdGlvbnMuIFdhaXQgYSBzZWNvbmQsIHRob3VnaC4uLiBJIHRoaW5rIGB0aXBjX3NrX3B1Ymxpc2hgIGlzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBicm9hZGVyIHV0aWxpdHkgZm9yIHdoYXQgSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lLiBMZXQmIzM5O3Mgc2VlLi4uIG1heWJlIGB0aXBjX25hbWV0YmxfcHVibGlzaGAgYW5kIGB0aXBjX25hbWV0Ymxfd2l0aGRyYXdgIHdvdWxkIGJlIGJldHRlciBjYW5kaWRhdGVzIHRvIGV4YW1pbmUuIFRob3NlIG1pZ2h0IGJlIGV4cG9ydGVkLCBvciBhdCBsZWFzdCBub24tc3RhdGljLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIGFuZCBkaWcgaW50byBgbmV0L3RpcGMvbmFtZV90YWJsZS5jYCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfbmFtZXRibF93aXRoZHJhdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9uYW1lX3RhYmxlLmM9NzYyPXN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTgxMi0vKipcbm5ldC90aXBjL25hbWVfdGFibGUuYzo4MTM6ICogdGlwY19uYW1ldGJsX3dpdGhkcmF3IC0gd2l0aGRyYXcgYSBzZXJ2aWNlIGJpbmRpbmdcbm5ldC90aXBjL25hbWVfdGFibGUuYy04MTQtICogQG5ldDogbmV0d29yayBuYW1lc3BhY2Vcbi0tXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODE4LSAqL1xubmV0L3RpcGMvbmFtZV90YWJsZS5jOjgxOTp2b2lkIHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbm5ldC90aXBjL25hbWVfdGFibGUuYy04MjAtXHRcdFx0ICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KVxuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuaD0xMjg9c3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbm5ldC90aXBjL25hbWVfdGFibGUuaC0xMjktXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpO1xubmV0L3RpcGMvbmFtZV90YWJsZS5oOjEzMDp2b2lkIHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbm5ldC90aXBjL25hbWVfdGFibGUuaC0xMzEtXHRcdFx0ICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcbi0tXG5uZXQvdGlwYy9ub2RlLmM9Mzk2PXN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcbi0tXG5uZXQvdGlwYy9ub2RlLmMtNDM1LVx0XHR0aXBjX21vbl9wZWVyX2Rvd24obmV0LCBub2RlLCBiZWFyZXJfaWQpO1xubmV0L3RpcGMvbm9kZS5jOjQzNjpcdFx0dGlwY19uYW1ldGJsX3dpdGhkcmF3KG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBzay5yZWYpO1xubmV0L3RpcGMvbm9kZS5jLTQzNy1cdH1cbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0yOTMyPXN0YXRpYyBpbnQgdGlwY19za193aXRoZHJhdyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTQyLVx0XHRcdFx0ICAgcC1cdTAwM2Vzci50eXBlLCBwLVx1MDAzZXNyLmxvd2VyLCBwLVx1MDAzZXNyLnVwcGVyKTtcbm5ldC90aXBjL3NvY2tldC5jOjI5NDM6XHRcdFx0dGlwY19uYW1ldGJsX3dpdGhkcmF3KG5ldCwgXHUwMDI2X3VhLCBcdTAwMjZwLVx1MDAzZXNrLCBwLVx1MDAzZWtleSk7XG5uZXQvdGlwYy9zb2NrZXQuYy0yOTQ0LVx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI5NTQtXHRcdFx0YnJlYWs7XG5uZXQvdGlwYy9zb2NrZXQuYzoyOTU1Olx0XHR0aXBjX25hbWV0Ymxfd2l0aGRyYXcobmV0LCB1YSwgXHUwMDI2cC1cdTAwM2VzaywgcC1cdTAwM2VrZXkpO1xubmV0L3RpcGMvc29ja2V0LmMtMjk1Ni1cdFx0cmMgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNjYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRm9jdXNpbmcgb24gS2V5IFRJUEMgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZWxlbWVudHMgb2YgdGhpcyBUSVBDIGNvZGUuIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWV0Ymxfd2l0aGRyYXdgLCBhbmQgYHRpcGNfYmluZGAg4oCTIHRob3NlIGFyZSBnb29kLCBub24tc3RhdGljIGZ1bmN0aW9uIHN5bWJvbHMgdG8gZm9jdXMgb24uIFRoZXkgaW1tZWRpYXRlbHkganVtcCBvdXQgYXMgaW1wb3J0YW50LiAgVGhleSYjMzk7cmUgZGVmaW5pdGVseSB3b3J0aCBmdXJ0aGVyIGludmVzdGlnYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyB0aGUgY29kZSYjMzk7cyBkYXRhIGZsb3cuCgpOZXh0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgVElQQyBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBSaWdodCwgaXQmIzM5O3MgYFRJUENgLiBJJiMzOTtsbCBvcGVuIGBuZXQvdGlwYy9LY29uZmlnYCB0byBzZWUgaG93IGl0JiMzOTtzIHNldCB1cCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoaXMgd2hvbGUgVElQQyBzdGFjayBpcyBpbnRlbmRlZCB0byBiZSBjb25maWd1cmVkIGFuZCB1c2VkLCBwcm92aWRpbmcgY29udGV4dCBmb3IgaG93IHRoZXNlIGZ1bmN0aW9ucyBJJiMzOTt2ZSBqdXN0IGlkZW50aWZpZWQgYXJlIGJyb3VnaHQgaW50byBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVElQQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9LY29uZmlnLTUtXG5uZXQvdGlwYy9LY29uZmlnOjY6bWVudWNvbmZpZyBUSVBDXG5uZXQvdGlwYy9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtUaGUgVElQQyBQcm90b2NvbFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctMjMtXG5uZXQvdGlwYy9LY29uZmlnOjI0OmNvbmZpZyBUSVBDX01FRElBX0lCXG5uZXQvdGlwYy9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtJbmZpbmlCYW5kIG1lZGlhIHR5cGUgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctMjktXHQgIElQLW92ZXItSW5maW5pQmFuZCBkZXZpY2VzLlxubmV0L3RpcGMvS2NvbmZpZzozMDpjb25maWcgVElQQ19NRURJQV9VRFBcbm5ldC90aXBjL0tjb25maWctMzEtXHRib29sIFwmIzM0O0lQL1VEUCBtZWRpYSB0eXBlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTM3LVxubmV0L3RpcGMvS2NvbmZpZzozODpjb25maWcgVElQQ19DUllQVE9cbm5ldC90aXBjL0tjb25maWctMzktXHRib29sIFwmIzM0O1RJUEMgZW5jcnlwdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3RpcGMvS2NvbmZpZy01Mi1cbm5ldC90aXBjL0tjb25maWc6NTM6Y29uZmlnIFRJUENfRElBR1xubmV0L3RpcGMvS2NvbmZpZy01NC1cdHRyaXN0YXRlIFwmIzM0O1RJUEM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRJUEMgUGF0Y2gqKgoKT2theSwgc28gdGhlIGNvbmZpZyBpbiBxdWVzdGlvbiBpcyBgVElQQ2AsIGFuZCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSB0aGUgYFRJUENfTUFYX1BVQkxgIGxpbWl0IGNvdWxkIGluYWR2ZXJ0ZW50bHkgYmxvY2sgdGhlIGluc2VydGlvbiBvZiBjcnVjaWFsIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgaW50byB0aGUgbmFtZSB0YWJsZS4gVGhpbmtpbmcgdGhyb3VnaCB0aGlzLCBpdCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuCgpNeSByZWFzb25pbmc/IFdlbGwsIHRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSB0d2Vha3MgdGhlIHB1YmxpY2F0aW9uIGxpbWl0IGxvZ2ljIHdpdGhpbiB0aGUgVElQQyBzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgZW5zdXJpbmcgdGhhdCBjb3JlIHByb3RvY29sIHNlcnZpY2UgdHlwZXMsIGxpa2UgYFRJUENfTk9ERV9TVEFURWAsIGBUSVBDX0xJTktfU1RBVEVgLCBhbmQgYFRJUENfVE9QX1NSVmAsIGNhbiBieXBhc3MgdXNlci1kZWZpbmVkIHB1YmxpY2F0aW9uIGxpbWl0cy4gVGhpcyBoaXRzIGRpcmVjdGx5IGF0IHRoZSBoZWFydCBvZiBUSVBDJiMzOTtzIG5hbWUgdGFibGUgbWFuYWdlbWVudC4gSXQmIzM5O3MgbGlrZWx5IHJlYWNoYWJsZSB0aHJvdWdoIFRJUEMgc29ja2V0IGJpbmQgb3BlcmF0aW9ucyB3aGljaCBtYWtlcyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLgoKVG8gYmUgcHJlY2lzZSwgdGhlIGtleSBzeW1ib2xzIHRoYXQgc3ByaW5nIHRvIG1pbmQgYXJlIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWV0Ymxfd2l0aGRyYXdgLCBhbmQgb2YgY291cnNlIGB0aXBjX2JpbmRgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhpcyBsb2dpYy4gV2UmIzM5O2xsIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIEZpbmFsbHksIHdlIGNvbmZpcm0gdGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNldCB0byBgVElQQ2AuCgpOb3csIGJlZm9yZSB3ZSBnbyBhbnkgZnVydGhlciwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYFRJUENgIGl0c2VsZiBkb2VzbiYjMzk7dCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgY29tcGxpY2F0ZSB0aGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3RpcGMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFRJUEMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIFRJUENcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBUSVBDIFByb3RvY29sXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgVGhlIFRyYW5zcGFyZW50IEludGVyIFByb2Nlc3MgQ29tbXVuaWNhdGlvbiAoVElQQykgcHJvdG9jb2wgaXNcbiAgMTE6XHRcdCAgc3BlY2lhbGx5IGRlc2lnbmVkIGZvciBpbnRyYSBjbHVzdGVyIGNvbW11bmljYXRpb24uIFRoaXMgcHJvdG9jb2xcbiAgMTI6XHRcdCAgb3JpZ2luYXRlcyBmcm9tIEVyaWNzc29uIHdoZXJlIGl0IGhhcyBiZWVuIHVzZWQgaW4gY2FycmllciBncmFkZVxuICAxMzpcdFx0ICBjbHVzdGVyIGFwcGxpY2F0aW9ucyBmb3IgbWFueSB5ZWFycy5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgVElQQywgc2VlIGh0dHA6Ly90aXBjLnNvdXJjZWZvcmdlLm5ldC5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgVGhpcyBwcm90b2NvbCBzdXBwb3J0IGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlICggPSBjb2RlIHdoaWNoXG4gIDE4Olx0XHQgIGNhbiBiZSBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3VcbiAgMTk6XHRcdCAgd2FudCkuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGlwYy4gSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdFxuICAyMDpcdFx0ICBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMucnN0XHUwMDNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDQ0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRJUEMgRGVwZW5kZW5jeSBhbmQgRnVuY3Rpb24gRXhwbG9yYXRpb24qKgoKT2theSwgc28gYFRJUENgIHJlbGllcyBvbiBgSU5FVGAuICBBbmQgc2luY2UgYElORVRgIGlzIGFsd2F5cyBlbmFibGVkIGluIHRoZSB0eXBpY2FsIGtlcm5lbCBjb25maWd1cmF0aW9ucywgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gSSBjYW4gcmVhc29uYWJseSBhc3N1bWUgdGhhdCBgVElQQ2AgaXMgc3VmZmljaWVudCBpbiB0aGlzIHJlZ2FyZCBhbmQgSSB3b24mIzM5O3QgaGF2ZSB0byB3b3JyeSBhYm91dCBgSU5FVGAgYmVpbmcgdGhlIG1pc3NpbmcgcGllY2UgaGVyZS4KCkJ1dCBJIHNob3VsZCBjaGVjayBmb3IgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1heSBiZSBwZXJ0aW5lbnQuIExldCYjMzk7cyBsb29rIGF0IHdoYXQmIzM5O3MgYXZhaWxhYmxlLiBIbW0sIHRoZXJlJiMzOTtzIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGFuZCBgdGlwY19uYW1ldGJsX3dpdGhkcmF3YCwgYW5kIHRoZW4gYHRpcGNfYmluZGAuCgpJIHdvbmRlciwgYXJlIHRoZXJlICptb3JlKj8gQWgsIGhlcmUgd2UgZ28sIGB0aXBjX3NrX2JpbmRgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgY2FsbHMgYF9fdGlwY19iaW5kYCwgd2hpY2ggaW4gdHVybiwgY2FsbHMgYHRpcGNfYmluZGAuIFdhaXQgYSBtaW51dGUuLi4gaXNuJiMzOTt0IGB0aXBjX2JpbmRgIHRoZSBiaW5kIGZ1bmN0aW9uIGZvciB0aGUgYHByb3RvX29wc2A/IFllcywgaXQgaXMuIEkgbmVlZCB0byByZS1leGFtaW5lIHRoYXQgYHRpcGNfYmluZGAgZnVuY3Rpb24gbW9yZSBjbG9zZWx5LCBhbmQgZW5zdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55dGhpbmcgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfYmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9zb2NrZXQuYz02MjY9c3RhdGljIGludCB0aXBjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy02NjEtLyoqXG5uZXQvdGlwYy9zb2NrZXQuYzo2NjI6ICogX190aXBjX2JpbmQgLSBhc3NvY2lhdGUgb3IgZGlzYXNzb2NpYXRlIFRJUEMgbmFtZShzKSB3aXRoIGEgc29ja2V0XG5uZXQvdGlwYy9zb2NrZXQuYy02NjMtICogQHNvY2s6IHNvY2tldCBzdHJ1Y3R1cmVcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy02NzUtICovXG5uZXQvdGlwYy9zb2NrZXQuYzo2NzY6c3RhdGljIGludCBfX3RpcGNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNrYWRkciwgaW50IGFsZW4pXG5uZXQvdGlwYy9zb2NrZXQuYy02Nzcte1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTcwNT1pbnQgdGlwY19za19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2thZGRyLCBpbnQgYWxlbilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy03MDktXHRsb2NrX3NvY2soc29jay1cdTAwM2Vzayk7XG5uZXQvdGlwYy9zb2NrZXQuYzo3MTA6XHRyZXMgPSBfX3RpcGNfYmluZChzb2NrLCBza2FkZHIsIGFsZW4pO1xubmV0L3RpcGMvc29ja2V0LmMtNzExLVx0cmVsZWFzZV9zb2NrKHNvY2stXHUwMDNlc2spO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTcxNC1cbm5ldC90aXBjL3NvY2tldC5jOjcxNTpzdGF0aWMgaW50IHRpcGNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqc2thZGRyLCBpbnQgYWxlbilcbm5ldC90aXBjL3NvY2tldC5jLTcxNi17XG4tLVxubmV0L3RpcGMvc29ja2V0LmM9MzM1OT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtc2dfb3BzID0ge1xuLS1cbm5ldC90aXBjL3NvY2tldC5jLTMzNjItXHQucmVsZWFzZVx0PSB0aXBjX3JlbGVhc2UsXG5uZXQvdGlwYy9zb2NrZXQuYzozMzYzOlx0LmJpbmRcdFx0PSB0aXBjX2JpbmQsXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzY0LVx0LmNvbm5lY3RcdD0gdGlwY19jb25uZWN0LFxuLS1cbm5ldC90aXBjL3NvY2tldC5jPTMzNzk9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcyA9IHtcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzgyLVx0LnJlbGVhc2VcdD0gdGlwY19yZWxlYXNlLFxubmV0L3RpcGMvc29ja2V0LmM6MzM4MzpcdC5iaW5kXHRcdD0gdGlwY19iaW5kLFxubmV0L3RpcGMvc29ja2V0LmMtMzM4NC1cdC5jb25uZWN0XHQ9IHRpcGNfY29ubmVjdCxcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzk5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHN0cmVhbV9vcHMgPSB7XG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzQwMi1cdC5yZWxlYXNlXHQ9IHRpcGNfcmVsZWFzZSxcbm5ldC90aXBjL3NvY2tldC5jOjM0MDM6XHQuYmluZFx0XHQ9IHRpcGNfYmluZCxcbm5ldC90aXBjL3NvY2tldC5jLTM0MDQtXHQuY29ubmVjdFx0PSB0aXBjX2Nvbm5lY3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhpbmdzIG15c2VsZjoKCioqRXhhbWluaW5nIFRJUEMgQmluZGluZyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIFRJUEMgYmluZGluZyBmdW5jdGlvbnMuIGB0aXBjX2JpbmRgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEJ1dCBob2xkIG9uIGEgc2Vjb25k4oCmIGlmIGl0JiMzOTtzIHN0YXRpYywgaG93IGlzIGl0IGdldHRpbmcgY2FsbGVkPyBBaCwgcmlnaHQuIEl0JiMzOTtzIGFzc2lnbmVkIHRvIHRoZSBgcHJvdG9fb3BzYCBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgdGlwY19za19iaW5kYCB3aGljaCBpcyBleHBvcnRlZCBhbmQgdGh1cyBub24tc3RhdGljLCBhbmQgdGhpcyBzdGF0aWMgYHRpcGNfYmluZGAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1YnRsZSBpbnRlcmFjdGlvbnMgb3IgY29uZmxpY3RzIEkmIzM5O20gbWlzc2luZy4gTGV0JiMzOTtzIGRpZyBpbnRvIGJvdGggYW5kIHNlZSB3aGF0IHRoZXkgYXJlIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgdGlwY19za19iaW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL3NvY2tldC5jPTY3Nj1zdGF0aWMgaW50IF9fdGlwY19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2thZGRyLCBpbnQgYWxlbilcbi0tXG5uZXQvdGlwYy9zb2NrZXQuYy03MDQtXG5uZXQvdGlwYy9zb2NrZXQuYzo3MDU6aW50IHRpcGNfc2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNrYWRkciwgaW50IGFsZW4pXG5uZXQvdGlwYy9zb2NrZXQuYy03MDYte1xuLS1cbm5ldC90aXBjL3NvY2tldC5oPTc2PWJvb2wgdGlwY19za19vdmVybGltaXQyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5uZXQvdGlwYy9zb2NrZXQuaDo3NzppbnQgdGlwY19za19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2thZGRyLCBpbnQgYWxlbik7XG5uZXQvdGlwYy9zb2NrZXQuaC03OC1pbnQgdHNrX3NldF9pbXBvcnRhbmNlKHN0cnVjdCBzb2NrICpzaywgaW50IGltcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMDIKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqQW5hbHl6aW5nIFN5bWJvbCBWaXNpYmlsaXR5IGluIHRoZSBUSVBDIEtlcm5lbCBNb2R1bGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIFRJUEMga2VybmVsIGZ1bmN0aW9ucywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZWlyIHZpc2liaWxpdHkuIGB0aXBjX3NrX2JpbmRgLi4uIHRoYXQgb25lJiMzOTtzIG5vbi1zdGF0aWMuIFJpZ2h0LiBBbmQgdGhlbiwgSSBzZWUgdGhhdCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIGFuZCBgdGlwY19uYW1ldGJsX3dpdGhkcmF3YCBhcmUgYWxzbyBub24tc3RhdGljLiBUaGVyZWZvcmUsIHRoZXNlIHRocmVlIGZ1bmN0aW9ucyBhcmUgdGhlIG9uZXMgSSByZWFsbHkgbmVlZCB0byBmb2N1cyBvbiwgYW5kIEkmIzM5O20gZ29pbmcgdG8gY2FsbCB0aGVzZSBteSAqRm9jdXNTeW1ib2xzKjogYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgYHRpcGNfbmFtZXRibF93aXRoZHJhd2AsIGFuZCBgdGlwY19za19iaW5kYC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHN5bWJvbHMgYXJlIGV4cG9zZWQgYW5kIHVzZWQgdGhyb3VnaG91dCB0aGUga2VybmVsLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZXNlIGFuZCB0aGVuIGNvbnNpZGVyIHRoZWlyIGltcGFjdCB3aGVuIEkgZXhhbWluZSB0aGUgd2lkZXIgY29kZWJhc2UuIEkmIzM5O2xsIGNhbGwgdGhpcyByZXN1bHQgc2V0IEkgaGF2ZSBoZXJlICYjMzk7c2V0LXJlc3VsdHMmIzM5Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX25hbWV0YmxfcHVibGlzaCYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWV0Ymxfd2l0aGRyYXcmIzM0OywKICAgICYjMzQ7dGlwY19za19iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwdWJsaWNhdGlvbiBsaW1pdCBsb2dpYyBpbiBUSVBDIHRvIGVuc3VyZSBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIChUSVBDX05PREVfU1RBVEUsIFRJUENfTElOS19TVEFURSwgVElQQ19UT1BfU1JWKSBjYW4gYnlwYXNzIHRoZSB1c2VyIHB1YmxpY2F0aW9uIGxpbWl0LiBUaGlzIGFmZmVjdHMgdGhlIGNvcmUgVElQQyBuYW1lIHRhYmxlIG1hbmFnZW1lbnQgYW5kIGlzIHJlYWNoYWJsZSB2aWEgVElQQyBzb2NrZXQgYmluZCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19uYW1ldGJsX3B1Ymxpc2gmIzM0OywKICAgICYjMzQ7dGlwY19uYW1ldGJsX3dpdGhkcmF3JiMzNDssCiAgICAmIzM0O3RpcGNfc2tfYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcHVibGljYXRpb24gbGltaXQgbG9naWMgaW4gVElQQyB0byBlbnN1cmUgcHJvdG9jb2wgc2VydmljZSB0eXBlcyAoVElQQ19OT0RFX1NUQVRFLCBUSVBDX0xJTktfU1RBVEUsIFRJUENfVE9QX1NSVikgY2FuIGJ5cGFzcyB0aGUgdXNlciBwdWJsaWNhdGlvbiBsaW1pdC4gVGhpcyBhZmZlY3RzIHRoZSBjb3JlIFRJUEMgbmFtZSB0YWJsZSBtYW5hZ2VtZW50IGFuZCBpcyByZWFjaGFibGUgdmlhIFRJUEMgc29ja2V0IGJpbmQgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTI6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGNvdW50aW5nIGxvY2FsIHB1YmxpY2F0aW9ucyBpbiB0aGUgVElQQyBuYW1lIHRhYmxlIHRvIGV4Y2x1ZGUgcHJvdG9jb2wgc2VydmljZSB0eXBlcyAoVElQQ19OT0RFX1NUQVRFLCBUSVBDX0xJTktfU1RBVEUsIFRJUENfVE9QX1NSVikgYW5kIHJlc2VydmVzIG9uZSBlbnRyeSBmb3IgdGhlIG5vZGUgc3RhdGUgc2VydmljZSB0eXBlLiBUaGlzIGlzIHB1cmVseSBhIHJlc291cmNlIGxpbWl0IGFuZCBjb3VudGluZyBsb2dpYyBjaGFuZ2UgdG8gcHJldmVudCB1c2VyIHB1YmxpY2F0aW9ucyBmcm9tIGV4aGF1c3RpbmcgdGhlIGxpbWl0IGFuZCBibG9ja2luZyBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgaW50ZXJhY3Rpb25zIHdpdGggdXNlciBzcGFjZSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZmZmNmNjFlMWE2NmQ0M2IzMzhlMTZmN2NhNTA2OTc5ODUyYTQ2ZGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAxMTo1OToyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuYwppbmRleCAyNTNjNzJkMTM2NmViLi42ZmRhMzZhYjE3NjY5IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jCkBAIC03NjMsMjEgJiM0Mzs3NjMsNDAgQEAgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIAkJCQkJIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSkKIHsKIAlzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTsKJiM0MzsJdTMyIG1heF91c2VyX3B1YiA9IFRJUENfTUFYX1BVQkwgLSAxOwogCXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwogCXN0cnVjdCBwdWJsaWNhdGlvbiAqcCA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiYjNDM7CWJvb2wgcHJvdG9jb2xfdHlwZSA9IGZhbHNlOwogCXUzMiByY19kZXN0czsKIAomIzQzOwlpZiAodWEtJmd0O3NyLnR5cGUgPT0gVElQQ19OT0RFX1NUQVRFIHx8IHVhLSZndDtzci50eXBlID09IFRJUENfTElOS19TVEFURSB8fAomIzQzOwkgICAgdWEtJmd0O3NyLnR5cGUgPT0gVElQQ19UT1BfU1JWKQomIzQzOwkJcHJvdG9jb2xfdHlwZSA9IHRydWU7CiYjNDM7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiYjNDM7CWlmIChwcm90b2NvbF90eXBlKQomIzQzOwkJZ290byBpbnNlcnQ7CiAKLQlpZiAobnQtJmd0O2xvY2FsX3B1YmxfY291bnQgJmd0Oz0gVElQQ19NQVhfUFVCTCkgewotCQlwcl93YXJuKCYjMzQ7QmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXG4mIzM0OywgVElQQ19NQVhfUFVCTCk7CiYjNDM7CS8qIFJlc2VydmUgb25lIGVudHJ5IGZvciBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZSBiZWNhdXNlIGl0IGhhcyBjbHVzdGVyCiYjNDM7CSAqIHNjb3BlIGFuZCBpdCBpcyBkaXN0cmlidXRlZCBpbiBidWxrLiBTbywgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXImIzM5O3MKJiM0MzsJICogcHVibGljYXRpb25zIGlzIChUSVBDX01BWF9QVUJMIC0gMSkuCiYjNDM7CSAqLwomIzQzOwlpZiAobnQtJmd0O2xvY2FsX3B1YmxfY291bnQgJmd0Oz0gbWF4X3VzZXJfcHViKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7QmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXG4mIzM0OywgbWF4X3VzZXJfcHViKTsKIAkJZ290byBleGl0OwogCX0KIAomIzQzO2luc2VydDoKIAlwID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpOwogCWlmIChwKSB7Ci0JCW50LSZndDtsb2NhbF9wdWJsX2NvdW50JiM0MzsmIzQzOzsKJiM0MzsJCS8qIE5vdCBjb3VudCBub2RlIHN0YXRlLCBsaW5rIHN0YXRlIGFuZCB0b3BvbG9neSBzZXJ2ZXIgdHlwZXMKJiM0MzsJCSAqIHNvIHRoYXQgbWF4aW11bSBudC0mZ3Q7bG9jYWxfcHVibF9jb3VudCBkb2VzIG5vdCBwcmV2ZW50CiYjNDM7CQkgKiBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIGZyb20gYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgbmFtZQomIzQzOwkJICogdGFibGUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghcHJvdG9jb2xfdHlwZSkKJiM0MzsJCQludC0mZ3Q7bG9jYWxfcHVibF9jb3VudCYjNDM7JiM0Mzs7CiAJCXNrYiA9IHRpcGNfbmFtZWRfcHVibGlzaChuZXQsIHApOwogCX0KIAlyY19kZXN0cyA9IG50LSZndDtyY19kZXN0czsKQEAgLTgxMCw3ICYjNDM7ODI5LDEwIEBAIHZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAogCiAJcCA9IHRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChuZXQsIHVhLCBzaywga2V5KTsKIAlpZiAocCkgewotCQludC0mZ3Q7bG9jYWxfcHVibF9jb3VudC0tOwomIzQzOwkJaWYgKHAtJmd0O3NyLnR5cGUgIT0gVElQQ19OT0RFX1NUQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICBwLSZndDtzci50eXBlICE9IFRJUENfTElOS19TVEFURSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcC0mZ3Q7c3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpCiYjNDM7CQkJbnQtJmd0O2xvY2FsX3B1YmxfY291bnQtLTsKIAkJc2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHApOwogCQlsaXN0X2RlbF9pbml0KCZhbXA7cC0mZ3Q7YmluZGluZ19zb2NrKTsKIAkJa2ZyZWVfcmN1KHAsIHJjdSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ5CgkJCQkJCQlvdXRwdXQ6IDE1MQoJCQkJCQkJdGhvdWdodHM6IDc1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUSVBDIE5hbWUgVGFibGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZXRibF93aXRoZHJhd2AgaW4gYG5ldC90aXBjL25hbWVfdGFibGUuY2AuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBmb2N1c2VkIG9uIGhvdyB3ZSBjb3VudCBsb2NhbCBwdWJsaWNhdGlvbnMsIHNwZWNpZmljYWxseSBgbnQtJmd0O2xvY2FsX3B1YmxfY291bnRgLiBUaGUgaW50ZW50IGhlcmUgaXMgdG8gKmV4Y2x1ZGUqIGNlcnRhaW4gcHJvdG9jb2wgdHlwZXMg4oCTIGBUSVBDX05PREVfU1RBVEVgLCBgVElQQ19MSU5LX1NUQVRFYCwgYW5kIGBUSVBDX1RPUF9TUlZgIOKAkyBmcm9tIHRoYXQgY291bnQuIFRoaXMgaXMgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLgoKVGhlIGNvZGUgbm93IGNoZWNrcyBpZiB0aGUgcHVibGljYXRpb24gdHlwZSBpcyBvbmUgb2YgdGhvc2UgcHJvdG9jb2wgdHlwZXMsIGFuZCBpZiBpdCBpcywgdGhlIGNvdW50IGlzICpub3QqIGluY3JlbWVudGVkLiBBbHNvLCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgaW1wYWN0LCB0aGUgcGF0Y2ggY2hhbmdlcyB0aGUgbWF4aW11bSBsaW1pdCBmb3IgdXNlciBwdWJsaWNhdGlvbnMgdG8gYFRJUENfTUFYX1BVQkwgLSAxYC4gVGhlIGNvbW1lbnQgbWFrZXMgaXQgdmVyeSBjbGVhciB0aGF0IHRoaXMgaXMgYmVpbmcgZG9uZSB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgbm9kZSBzdGF0ZSBzZXJ2aWNlIHR5cGUsIHdoaWNoIGlzIGNsdXN0ZXItc2NvcGVkIGFuZCBkaXN0cmlidXRlZCBpbiBidWxrLgoKVGhlIG9yaWdpbmFsIGNvZGUgY2hlY2tlZCBgaWYgKG50LSZndDtsb2NhbF9wdWJsX2NvdW50ICZndDs9IFRJUENfTUFYX1BVQkwpYCBhbmQgd291bGQgZXJyb3Igb3V0IGlmIGl0IHJlYWNoZWQgdGhlIGxpbWl0LiBUaGUgbW9kaWZpZWQgY29kZSBub3cgaGFzIGBpZiAobnQtJmd0O2xvY2FsX3B1YmxfY291bnQgJmd0Oz0gbWF4X3VzZXJfcHViKWAsIHdoZXJlIGBtYXhfdXNlcl9wdWJgIGlzIGBUSVBDX01BWF9QVUJMIC0gMWAuIFRoZSBpbXBvcnRhbnQgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHRoZXNlIGNoYW5nZXMgcHJldmVudCBhIERvUyBvciByZXNvdXJjZSBleGhhdXN0aW9uIHNjZW5hcmlvLCB3aGVyZSB1c2VyIHB1YmxpY2F0aW9ucyBjb3VsZCBwcmV2ZW50IGNyaXRpY2FsIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgZnJvbSBiZWluZyBpbnNlcnRlZC4KCkZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3MuIFRoaXMgcGF0Y2ggaXMgcHVyZWx5IGxvZ2ljLWRyaXZlbjsgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGludGVyYWN0aW9ucyB3aXRoIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBhbHNvIGF2b2lkcyBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoaXMgaXMgYWxsIGFib3V0IGFkanVzdGluZyByZXNvdXJjZSBsaW1pdHMuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBjb3JlIHRvb2xzIGFyZSBhZGVxdWF0ZSBoZXJlLgoKVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LCBhcyB0aGlzIGlzbiYjMzk7dCB0b3VjaGluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMganVzdCByZXNvdXJjZSBtYW5hZ2VtZW50LiAqKk5lZWRzS01TQU49ZmFsc2UqKiBpcyB0aGUgY29ycmVjdCBjYWxsIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY291bnRpbmcgbG9jYWwgcHVibGljYXRpb25zIGluIHRoZSBUSVBDIG5hbWUgdGFibGUgdG8gZXhjbHVkZSBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIChUSVBDX05PREVfU1RBVEUsIFRJUENfTElOS19TVEFURSwgVElQQ19UT1BfU1JWKSBhbmQgcmVzZXJ2ZXMgb25lIGVudHJ5IGZvciB0aGUgbm9kZSBzdGF0ZSBzZXJ2aWNlIHR5cGUuIFRoaXMgaXMgcHVyZWx5IGEgcmVzb3VyY2UgbGltaXQgYW5kIGNvdW50aW5nIGxvZ2ljIGNoYW5nZSB0byBwcmV2ZW50IHVzZXIgcHVibGljYXRpb25zIGZyb20gZXhoYXVzdGluZyB0aGUgbGltaXQgYW5kIGJsb2NraW5nIHByb3RvY29sIHNlcnZpY2UgdHlwZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY291bnRpbmcgbG9jYWwgcHVibGljYXRpb25zIGluIHRoZSBUSVBDIG5hbWUgdGFibGUgdG8gZXhjbHVkZSBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIChUSVBDX05PREVfU1RBVEUsIFRJUENfTElOS19TVEFURSwgVElQQ19UT1BfU1JWKSBhbmQgcmVzZXJ2ZXMgb25lIGVudHJ5IGZvciB0aGUgbm9kZSBzdGF0ZSBzZXJ2aWNlIHR5cGUuIFRoaXMgaXMgcHVyZWx5IGEgcmVzb3VyY2UgbGltaXQgYW5kIGNvdW50aW5nIGxvZ2ljIGNoYW5nZSB0byBwcmV2ZW50IHVzZXIgcHVibGljYXRpb25zIGZyb20gZXhoYXVzdGluZyB0aGUgbGltaXQgYW5kIGJsb2NraW5nIHByb3RvY29sIHNlcnZpY2UgdHlwZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTE6NTk6MjkuNDA1MDI2ODYxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI2NjY3MjY2OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX25hbWV0YmxfcHVibGlzaFwiLFxuICAgIFwidGlwY19uYW1ldGJsX3dpdGhkcmF3XCIsXG4gICAgXCJ0aXBjX3NrX2JpbmRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY291bnRpbmcgbG9jYWwgcHVibGljYXRpb25zIGluIHRoZSBUSVBDIG5hbWUgdGFibGUgdG8gZXhjbHVkZSBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIChUSVBDX05PREVfU1RBVEUsIFRJUENfTElOS19TVEFURSwgVElQQ19UT1BfU1JWKSBhbmQgcmVzZXJ2ZXMgb25lIGVudHJ5IGZvciB0aGUgbm9kZSBzdGF0ZSBzZXJ2aWNlIHR5cGUuIFRoaXMgaXMgcHVyZWx5IGEgcmVzb3VyY2UgbGltaXQgYW5kIGNvdW50aW5nIGxvZ2ljIGNoYW5nZSB0byBwcmV2ZW50IHVzZXIgcHVibGljYXRpb25zIGZyb20gZXhoYXVzdGluZyB0aGUgbGltaXQgYW5kIGJsb2NraW5nIHByb3RvY29sIHNlcnZpY2UgdHlwZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcHVibGljYXRpb24gbGltaXQgbG9naWMgaW4gVElQQyB0byBlbnN1cmUgcHJvdG9jb2wgc2VydmljZSB0eXBlcyAoVElQQ19OT0RFX1NUQVRFLCBUSVBDX0xJTktfU1RBVEUsIFRJUENfVE9QX1NSVikgY2FuIGJ5cGFzcyB0aGUgdXNlciBwdWJsaWNhdGlvbiBsaW1pdC4gVGhpcyBhZmZlY3RzIHRoZSBjb3JlIFRJUEMgbmFtZSB0YWJsZSBtYW5hZ2VtZW50IGFuZCBpcyByZWFjaGFibGUgdmlhIFRJUEMgc29ja2V0IGJpbmQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTE6NTk6MjkuNDA1MDMxMzkyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTE5MjE3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmZmZjZjYxZTFhNjZkNDNiMzM4ZTE2ZjdjYTUwNjk3OTg1MmE0NmRlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDI3IDExOjU5OjI4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLjZmZGEzNmFiMTc2NjkgMTAwNjQ0XFxuLS0tIGEvbmV0L3RpcGMvbmFtZV90YWJsZS5jXFxuKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jXFxuQEAgLTc2MywyMSArNzYzLDQwIEBAIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpXFxuIHtcXG4gXFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XFxuK1xcdHUzMiBtYXhfdXNlcl9wdWIgPSBUSVBDX01BWF9QVUJMIC0gMTtcXG4gXFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XFxuIFxcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbitcXHRib29sIHByb3RvY29sX3R5cGUgPSBmYWxzZTtcXG4gXFx0dTMyIHJjX2Rlc3RzO1xcbiBcXG4rXFx0aWYgKHVhLVxcdTAwM2Vzci50eXBlID09IFRJUENfTk9ERV9TVEFURSB8fCB1YS1cXHUwMDNlc3IudHlwZSA9PSBUSVBDX0xJTktfU1RBVEUgfHxcXG4rXFx0ICAgIHVhLVxcdTAwM2Vzci50eXBlID09IFRJUENfVE9QX1NSVilcXG4rXFx0XFx0cHJvdG9jb2xfdHlwZSA9IHRydWU7XFxuK1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRuLVxcdTAwM2VuYW1ldGJsX2xvY2spO1xcbitcXHRpZiAocHJvdG9jb2xfdHlwZSlcXG4rXFx0XFx0Z290byBpbnNlcnQ7XFxuIFxcbi1cXHRpZiAobnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQgXFx1MDAzZT0gVElQQ19NQVhfUFVCTCkge1xcbi1cXHRcXHRwcl93YXJuKFxcXCJCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcXFxcblxcXCIsIFRJUENfTUFYX1BVQkwpO1xcbitcXHQvKiBSZXNlcnZlIG9uZSBlbnRyeSBmb3Igbm9kZSBzdGF0ZSBzZXJ2aWNlIHR5cGUgYmVjYXVzZSBpdCBoYXMgY2x1c3RlclxcbitcXHQgKiBzY29wZSBhbmQgaXQgaXMgZGlzdHJpYnV0ZWQgaW4gYnVsay4gU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VyJ3NcXG4rXFx0ICogcHVibGljYXRpb25zIGlzIChUSVBDX01BWF9QVUJMIC0gMSkuXFxuK1xcdCAqL1xcbitcXHRpZiAobnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQgXFx1MDAzZT0gbWF4X3VzZXJfcHViKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIkJpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxcXFxuXFxcIiwgbWF4X3VzZXJfcHViKTtcXG4gXFx0XFx0Z290byBleGl0O1xcbiBcXHR9XFxuIFxcbitpbnNlcnQ6XFxuIFxcdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XFxuIFxcdGlmIChwKSB7XFxuLVxcdFxcdG50LVxcdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XFxuK1xcdFxcdC8qIE5vdCBjb3VudCBub2RlIHN0YXRlLCBsaW5rIHN0YXRlIGFuZCB0b3BvbG9neSBzZXJ2ZXIgdHlwZXNcXG4rXFx0XFx0ICogc28gdGhhdCBtYXhpbXVtIG50LVxcdTAwM2Vsb2NhbF9wdWJsX2NvdW50IGRvZXMgbm90IHByZXZlbnRcXG4rXFx0XFx0ICogcHJvdG9jb2wgc2VydmljZSB0eXBlcyBmcm9tIGJlaW5nIGluc2VydGVkIGludG8gdGhlIG5hbWVcXG4rXFx0XFx0ICogdGFibGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIXByb3RvY29sX3R5cGUpXFxuK1xcdFxcdFxcdG50LVxcdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XFxuIFxcdFxcdHNrYiA9IHRpcGNfbmFtZWRfcHVibGlzaChuZXQsIHApO1xcbiBcXHR9XFxuIFxcdHJjX2Rlc3RzID0gbnQtXFx1MDAzZXJjX2Rlc3RzO1xcbkBAIC04MTAsNyArODI5LDEwIEBAIHZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxcbiBcXG4gXFx0cCA9IHRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChuZXQsIHVhLCBzaywga2V5KTtcXG4gXFx0aWYgKHApIHtcXG4tXFx0XFx0bnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQtLTtcXG4rXFx0XFx0aWYgKHAtXFx1MDAzZXNyLnR5cGUgIT0gVElQQ19OT0RFX1NUQVRFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBwLVxcdTAwM2Vzci50eXBlICE9IFRJUENfTElOS19TVEFURSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcC1cXHUwMDNlc3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpXFxuK1xcdFxcdFxcdG50LVxcdTAwM2Vsb2NhbF9wdWJsX2NvdW50LS07XFxuIFxcdFxcdHNrYiA9IHRpcGNfbmFtZWRfd2l0aGRyYXcobmV0LCBwKTtcXG4gXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cC1cXHUwMDNlYmluZGluZ19zb2NrKTtcXG4gXFx0XFx0a2ZyZWVfcmN1KHAsIHJjdSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDExOjU5OjI5LjgxNzY3ODk0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMxNTY1OTc3Nzg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUSVBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGlwY19uYW1ldGJsX3B1Ymxpc2hcIixcbiAgICBcInRpcGNfbmFtZXRibF93aXRoZHJhd1wiLFxuICAgIFwidGlwY19za19iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHB1YmxpY2F0aW9uIGxpbWl0IGxvZ2ljIGluIFRJUEMgdG8gZW5zdXJlIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgKFRJUENfTk9ERV9TVEFURSwgVElQQ19MSU5LX1NUQVRFLCBUSVBDX1RPUF9TUlYpIGNhbiBieXBhc3MgdGhlIHVzZXIgcHVibGljYXRpb24gbGltaXQuIFRoaXMgYWZmZWN0cyB0aGUgY29yZSBUSVBDIG5hbWUgdGFibGUgbWFuYWdlbWVudCBhbmQgaXMgcmVhY2hhYmxlIHZpYSBUSVBDIHNvY2tldCBiaW5kIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZmZmNmNjFlMWE2NmQ0M2IzMzhlMTZmN2NhNTA2OTc5ODUyYTQ2ZGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxMTo1OToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xuaW5kZXggMjUzYzcyZDEzNjZlYi4uNmZkYTM2YWIxNzY2OSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuY1xuKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jXG5AQCAtNzYzLDIxICs3NjMsNDAgQEAgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSlcbiB7XG4gXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbitcdHUzMiBtYXhfdXNlcl9wdWIgPSBUSVBDX01BWF9QVUJMIC0gMTtcbiBcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuK1x0Ym9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7XG4gXHR1MzIgcmNfZGVzdHM7XG4gXG4rXHRpZiAodWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgfHwgdWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX0xJTktfU1RBVEUgfHxcbitcdCAgICB1YS1cdTAwM2Vzci50eXBlID09IFRJUENfVE9QX1NSVilcbitcdFx0cHJvdG9jb2xfdHlwZSA9IHRydWU7XG4rXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbitcdGlmIChwcm90b2NvbF90eXBlKVxuK1x0XHRnb3RvIGluc2VydDtcbiBcbi1cdGlmIChudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IFx1MDAzZT0gVElQQ19NQVhfUFVCTCkge1xuLVx0XHRwcl93YXJuKFwiQmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXFxuXCIsIFRJUENfTUFYX1BVQkwpO1xuK1x0LyogUmVzZXJ2ZSBvbmUgZW50cnkgZm9yIG5vZGUgc3RhdGUgc2VydmljZSB0eXBlIGJlY2F1c2UgaXQgaGFzIGNsdXN0ZXJcbitcdCAqIHNjb3BlIGFuZCBpdCBpcyBkaXN0cmlidXRlZCBpbiBidWxrLiBTbywgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXInc1xuK1x0ICogcHVibGljYXRpb25zIGlzIChUSVBDX01BWF9QVUJMIC0gMSkuXG4rXHQgKi9cbitcdGlmIChudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IFx1MDAzZT0gbWF4X3VzZXJfcHViKSB7XG4rXHRcdHByX3dhcm4oXCJCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcXG5cIiwgbWF4X3VzZXJfcHViKTtcbiBcdFx0Z290byBleGl0O1xuIFx0fVxuIFxuK2luc2VydDpcbiBcdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4gXHRpZiAocCkge1xuLVx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XG4rXHRcdC8qIE5vdCBjb3VudCBub2RlIHN0YXRlLCBsaW5rIHN0YXRlIGFuZCB0b3BvbG9neSBzZXJ2ZXIgdHlwZXNcbitcdFx0ICogc28gdGhhdCBtYXhpbXVtIG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQgZG9lcyBub3QgcHJldmVudFxuK1x0XHQgKiBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIGZyb20gYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgbmFtZVxuK1x0XHQgKiB0YWJsZS5cbitcdFx0ICovXG4rXHRcdGlmICghcHJvdG9jb2xfdHlwZSlcbitcdFx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XG4gXHRcdHNrYiA9IHRpcGNfbmFtZWRfcHVibGlzaChuZXQsIHApO1xuIFx0fVxuIFx0cmNfZGVzdHMgPSBudC1cdTAwM2VyY19kZXN0cztcbkBAIC04MTAsNyArODI5LDEwIEBAIHZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFxuIFx0cCA9IHRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChuZXQsIHVhLCBzaywga2V5KTtcbiBcdGlmIChwKSB7XG4tXHRcdG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQtLTtcbitcdFx0aWYgKHAtXHUwMDNlc3IudHlwZSAhPSBUSVBDX05PREVfU1RBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBwLVx1MDAzZXNyLnR5cGUgIT0gVElQQ19MSU5LX1NUQVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcC1cdTAwM2Vzci50eXBlICE9IFRJUENfVE9QX1NSVilcbitcdFx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50LS07XG4gXHRcdHNrYiA9IHRpcGNfbmFtZWRfd2l0aGRyYXcobmV0LCBwKTtcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwLVx1MDAzZWJpbmRpbmdfc29jayk7XG4gXHRcdGtmcmVlX3JjdShwLCByY3UpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTE6NTk6MjkuODE3NjgwMjYxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA1NzIxMzg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVElQQyBOYW1lIFRhYmxlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC90aXBjL25hbWVfdGFibGUuY2AuIEl0J3MgdG91Y2hpbmcgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZXRibF93aXRoZHJhd2AsIHdoaWNoIGltbWVkaWF0ZWx5IGdldHMgbXkgYXR0ZW50aW9uIGJlY2F1c2UgYW55dGhpbmcgZGVhbGluZyB3aXRoIG5hbWUgc2VydmljZXMsIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JrIHByb3RvY29sLCBpcyBhIHBvdGVudGlhbCBob3RiZWQgZm9yIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSByZWxheGluZyB0aGUgcHVibGljYXRpb24gbGltaXRzLCBzcGVjaWZpY2FsbHkgZm9yIGNlcnRhaW4gdHlwZXM6IGBUSVBDX05PREVfU1RBVEVgLCBgVElQQ19MSU5LX1NUQVRFYCwgYW5kIGBUSVBDX1RPUF9TUlZgLiBCeSBub3QgY291bnRpbmcgdGhlc2UgdG93YXJkcyB0aGUgYGxvY2FsX3B1YmxfY291bnRgIGFuZCBsZXR0aW5nIHRoZW0gYnlwYXNzIGBtYXhfdXNlcl9wdWJgLCB0aGUgZGV2ZWxvcGVycyBjbGVhcmx5IGhhZCBhIHNwZWNpZmljIHBlcmZvcm1hbmNlIG9yIGZ1bmN0aW9uYWwgbmVlZCBpbiBtaW5kLiBCdXQgdGhhdCBhbHNvIHJhaXNlcyBhIGZsYWcgZm9yIHBvdGVudGlhbCBhYnVzZS5cblxuRmlyc3QsIEkgc2hvdWxkIGNvbmZpcm0gdGhlIFRJUEMgY29uZmlnOiBMZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfVElQQ2AgaXMgZW5hYmxlZC5cblxuTmV4dCwgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgYW5kIGZ1enphYmxlLiBHaXZlbiB0aGF0IFRJUEMgaXMgYSBuZXR3b3JrIHByb3RvY29sLCBJJ20gY29uZmlkZW50IHRoYXQgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZXRibF93aXRoZHJhd2AgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBzb2NrZXQgb3BlcmF0aW9ucywgbGlrZWx5IGBiaW5kYCBvciBzaW1pbGFyLiBTaW5jZSBpdCdzIGEgbmV0d29yayBwcm90b2NvbCwgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBzb2NrZXQgQVBJLiBUaGF0IG1ha2VzIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZyBhbmQgY2FyZWZ1bCBhdWRpdGluZy4gV2UgY2FuIGRlZmluaXRlbHkgaGl0IHRoZXNlIGZ1bmN0aW9ucy5cblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGRlZXBlciBpbnRvIGBuZXQvdGlwYy9uYW1lX3RhYmxlLmNgIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgYW5kIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHBvdGVudGlhbCBmbGF3cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY1MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDExOjU5OjM4Ljg3NDg5NjQ2M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDk5NDUwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aXBjX25hbWV0YmxfcHVibGlzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvbmFtZV90YWJsZS5jPTczMj12b2lkIHRpcGNfbmFtZXRibF9idWlsZF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2dyb3VwICpncnAsXFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtNzU5LVxcbm5ldC90aXBjL25hbWVfdGFibGUuYzo3NjA6LyogdGlwY19uYW1ldGJsX3B1Ymxpc2ggLSBhZGQgc2VydmljZSBiaW5kaW5nIHRvIG5hbWUgdGFibGVcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtNzYxLSAqL1xcbm5ldC90aXBjL25hbWVfdGFibGUuYzo3NjI6c3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtNzYzLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpXFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmg9MTI2PXZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCxcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmgtMTI3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7XFxubmV0L3RpcGMvbmFtZV90YWJsZS5oOjEyODpzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxcbm5ldC90aXBjL25hbWVfdGFibGUuaC0xMjktXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7XFxuLS1cXG5uZXQvdGlwYy9uZXQuYz0xMjY9c3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcXG4tLVxcbm5ldC90aXBjL25ldC5jLTE0MC1cXHR0aXBjX21vbl9yZWluaXRfc2VsZihuZXQpO1xcbm5ldC90aXBjL25ldC5jOjE0MTpcXHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFxcdTAwMjZ1YSwgXFx1MDAyNnNrLCBhZGRyKTtcXG5uZXQvdGlwYy9uZXQuYy0xNDItfVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jPTM5Nj1zdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXFxuLS1cXG5uZXQvdGlwYy9ub2RlLmMtNDMxLVxcdFxcdHRpcGNfbW9uX3BlZXJfdXAobmV0LCBub2RlLCBiZWFyZXJfaWQpO1xcbm5ldC90aXBjL25vZGUuYzo0MzI6XFx0XFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcXHUwMDI2dWEsIFxcdTAwMjZzaywgc2sucmVmKTtcXG5uZXQvdGlwYy9ub2RlLmMtNDMzLVxcdH1cXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTI5MDc9c3RhdGljIGludCB0aXBjX3NrX3B1Ymxpc2goc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY191YWRkciAqdWEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTIxLVxcdHNrYWRkci5ub2RlID0gdGlwY19vd25fYWRkcihuZXQpO1xcbm5ldC90aXBjL3NvY2tldC5jOjI5MjI6XFx0cCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsIFxcdTAwMjZza2FkZHIsIGtleSk7XFxubmV0L3RpcGMvc29ja2V0LmMtMjkyMy1cXHRpZiAodW5saWtlbHkoIXApKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMTo1OTozOC45MjU4OTY1MTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDk3NTQ4ODY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgTmFtZSBUYWJsZSBQdWJsaWNhdGlvbiBhbmQgV2l0aGRyYXdhbCBQcm9jZXNzZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIGdldHMgY2FsbGVkIGZyb20gYHRpcGNfc2tfcHVibGlzaGAsIHdoaWNoIGl0c2VsZiBpcyBpbnZva2VkIGJ5IGB0aXBjX2JpbmRgLiBBbmQgb24gdGhlIHdpdGhkcmF3YWwgc2lkZSwgYHRpcGNfbmFtZXRibF93aXRoZHJhd2AgaXMgY2FsbGVkIGZyb20gYHRpcGNfc2tfd2l0aGRyYXdgLCB3aGljaCBpcyB0cmlnZ2VyZWQgZWl0aGVyIGJ5IGB0aXBjX3JlbGVhc2VgIG9yLCBpbnRlcmVzdGluZ2x5LCBhbHNvIGJ5IGB0aXBjX2JpbmRgIHdoZW4gYSBzb2NrZXQgaXMgYmVpbmcgdW5ib3VuZC5cblxuVGhpcyBxdWlja2x5IHRlbGxzIG1lIHRoYXQgYHRpcGNfc2tfcHVibGlzaGAgYW5kIGB0aXBjX3NrX3dpdGhkcmF3YCBhcmUgbGlrZWx5IGtleSBhcmVhcyB0byBsb29rIGF0LCBhcyB0aGV5IGZvcm0gdGhlIGNvcmUgb2YgdGhlIHB1YmxpY2F0aW9uIGFuZCB3aXRoZHJhd2FsIG9wZXJhdGlvbnMuIEhvd2V2ZXIsIGJlY2F1c2UgYHRpcGNfYmluZGAgaXMgZnVuZGFtZW50YWwgdG8gYm90aCwgYW5kIHJlc3BvbnNpYmxlIGZvciBlaXRoZXIgcHVibGlzaGluZyBvciB3aXRoZHJhd2luZywgYHRpcGNfYmluZGAgaXRzZWxmIG1pZ2h0IGJlIHRoZSBiZXR0ZXIgZW50cnkgcG9pbnQgdG8gZXhhbWluZSB0aGUgd2hvbGUgcHJvY2Vzcy4gSSB0aGluayBjaGVja2luZyBvdXQgdGhlIGxvZ2ljIHdpdGhpbiBgdGlwY19iaW5kYCB3b3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgYW5kIHBvdGVudGlhbCBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5ODIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MDA6NDkuOTAxMzg2ODJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQxOTUzNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfYmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvc29ja2V0LmM9NjI2PXN0YXRpYyBpbnQgdGlwY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy02NjEtLyoqXFxubmV0L3RpcGMvc29ja2V0LmM6NjYyOiAqIF9fdGlwY19iaW5kIC0gYXNzb2NpYXRlIG9yIGRpc2Fzc29jaWF0ZSBUSVBDIG5hbWUocykgd2l0aCBhIHNvY2tldFxcbm5ldC90aXBjL3NvY2tldC5jLTY2My0gKiBAc29jazogc29ja2V0IHN0cnVjdHVyZVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtNjc1LSAqL1xcbm5ldC90aXBjL3NvY2tldC5jOjY3NjpzdGF0aWMgaW50IF9fdGlwY19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2thZGRyLCBpbnQgYWxlbilcXG5uZXQvdGlwYy9zb2NrZXQuYy02Nzcte1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9NzA1PWludCB0aXBjX3NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpza2FkZHIsIGludCBhbGVuKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtNzA5LVxcdGxvY2tfc29jayhzb2NrLVxcdTAwM2Vzayk7XFxubmV0L3RpcGMvc29ja2V0LmM6NzEwOlxcdHJlcyA9IF9fdGlwY19iaW5kKHNvY2ssIHNrYWRkciwgYWxlbik7XFxubmV0L3RpcGMvc29ja2V0LmMtNzExLVxcdHJlbGVhc2Vfc29jayhzb2NrLVxcdTAwM2Vzayk7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy03MTQtXFxubmV0L3RpcGMvc29ja2V0LmM6NzE1OnN0YXRpYyBpbnQgdGlwY19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICpza2FkZHIsIGludCBhbGVuKVxcbm5ldC90aXBjL3NvY2tldC5jLTcxNi17XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1zZ19vcHMgPSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzYyLVxcdC5yZWxlYXNlXFx0PSB0aXBjX3JlbGVhc2UsXFxubmV0L3RpcGMvc29ja2V0LmM6MzM2MzpcXHQuYmluZFxcdFxcdD0gdGlwY19iaW5kLFxcbm5ldC90aXBjL3NvY2tldC5jLTMzNjQtXFx0LmNvbm5lY3RcXHQ9IHRpcGNfY29ubmVjdCxcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTMzNzk9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcGFja2V0X29wcyA9IHtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTMzODItXFx0LnJlbGVhc2VcXHQ9IHRpcGNfcmVsZWFzZSxcXG5uZXQvdGlwYy9zb2NrZXQuYzozMzgzOlxcdC5iaW5kXFx0XFx0PSB0aXBjX2JpbmQsXFxubmV0L3RpcGMvc29ja2V0LmMtMzM4NC1cXHQuY29ubmVjdFxcdD0gdGlwY19jb25uZWN0LFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MzM5OT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzdHJlYW1fb3BzID0ge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzQwMi1cXHQucmVsZWFzZVxcdD0gdGlwY19yZWxlYXNlLFxcbm5ldC90aXBjL3NvY2tldC5jOjM0MDM6XFx0LmJpbmRcXHRcXHQ9IHRpcGNfYmluZCxcXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDA0LVxcdC5jb25uZWN0XFx0PSB0aXBjX2Nvbm5lY3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjAwOjUwLjQ0MzM0NDc3OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2OTc0Nzk1ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIFRJUEMgRnVuY3Rpb24gU3ltYm9scyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgVElQQyBtb2R1bGUuIGB0aXBjX2JpbmRgIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbiwgYSBnb29kIGZvY3VzIHN5bWJvbC4gVGhlbiwgbGV0J3MgYWRkIGB0aXBjX3NrX3B1Ymxpc2hgIGFuZCBgdGlwY19za193aXRoZHJhd2AgdG8gdGhlIGxpc3Qgb2YgcmVsZXZhbnQgZnVuY3Rpb25zLiBXYWl0IGEgc2Vjb25kLCB0aG91Z2guLi4gSSB0aGluayBgdGlwY19za19wdWJsaXNoYCBpcyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgYnJvYWRlciB1dGlsaXR5IGZvciB3aGF0IEknbSB0cnlpbmcgdG8gZGV0ZXJtaW5lLiBMZXQncyBzZWUuLi4gbWF5YmUgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZXRibF93aXRoZHJhd2Agd291bGQgYmUgYmV0dGVyIGNhbmRpZGF0ZXMgdG8gZXhhbWluZS4gVGhvc2UgbWlnaHQgYmUgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMuIExldCdzIHN0YXJ0IHdpdGggYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgZGlnIGludG8gYG5ldC90aXBjL25hbWVfdGFibGUuY2AgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAzNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjowMTowNy40MTgxNDM2NzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzNjExMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19uYW1ldGJsX3dpdGhkcmF3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9uYW1lX3RhYmxlLmM9NzYyPXN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODEyLS8qKlxcbm5ldC90aXBjL25hbWVfdGFibGUuYzo4MTM6ICogdGlwY19uYW1ldGJsX3dpdGhkcmF3IC0gd2l0aGRyYXcgYSBzZXJ2aWNlIGJpbmRpbmdcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODE0LSAqIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlXFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODE4LSAqL1xcbm5ldC90aXBjL25hbWVfdGFibGUuYzo4MTk6dm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTgyMC1cXHRcXHRcXHQgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpXFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmg9MTI4PXN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxubmV0L3RpcGMvbmFtZV90YWJsZS5oLTEyOS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmg6MTMwOnZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxcbm5ldC90aXBjL25hbWVfdGFibGUuaC0xMzEtXFx0XFx0XFx0ICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0zOTY9c3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTQzNS1cXHRcXHR0aXBjX21vbl9wZWVyX2Rvd24obmV0LCBub2RlLCBiZWFyZXJfaWQpO1xcbm5ldC90aXBjL25vZGUuYzo0MzY6XFx0XFx0dGlwY19uYW1ldGJsX3dpdGhkcmF3KG5ldCwgXFx1MDAyNnVhLCBcXHUwMDI2c2ssIHNrLnJlZik7XFxubmV0L3RpcGMvbm9kZS5jLTQzNy1cXHR9XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yOTMyPXN0YXRpYyBpbnQgdGlwY19za193aXRoZHJhdyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI5NDItXFx0XFx0XFx0XFx0ICAgcC1cXHUwMDNlc3IudHlwZSwgcC1cXHUwMDNlc3IubG93ZXIsIHAtXFx1MDAzZXNyLnVwcGVyKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzoyOTQzOlxcdFxcdFxcdHRpcGNfbmFtZXRibF93aXRoZHJhdyhuZXQsIFxcdTAwMjZfdWEsIFxcdTAwMjZwLVxcdTAwM2VzaywgcC1cXHUwMDNla2V5KTtcXG5uZXQvdGlwYy9zb2NrZXQuYy0yOTQ0LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMjk1NC1cXHRcXHRcXHRicmVhaztcXG5uZXQvdGlwYy9zb2NrZXQuYzoyOTU1OlxcdFxcdHRpcGNfbmFtZXRibF93aXRoZHJhdyhuZXQsIHVhLCBcXHUwMDI2cC1cXHUwMDNlc2ssIHAtXFx1MDAzZWtleSk7XFxubmV0L3RpcGMvc29ja2V0LmMtMjk1Ni1cXHRcXHRyYyA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjAxOjA3LjQ2NjUxMDk1MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzMzMzIzNzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipGb2N1c2luZyBvbiBLZXkgVElQQyBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGVsZW1lbnRzIG9mIHRoaXMgVElQQyBjb2RlLiBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBgdGlwY19uYW1ldGJsX3dpdGhkcmF3YCwgYW5kIGB0aXBjX2JpbmRgIOKAkyB0aG9zZSBhcmUgZ29vZCwgbm9uLXN0YXRpYyBmdW5jdGlvbiBzeW1ib2xzIHRvIGZvY3VzIG9uLiBUaGV5IGltbWVkaWF0ZWx5IGp1bXAgb3V0IGFzIGltcG9ydGFudC4gIFRoZXkncmUgZGVmaW5pdGVseSB3b3J0aCBmdXJ0aGVyIGludmVzdGlnYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyB0aGUgY29kZSdzIGRhdGEgZmxvdy5cblxuTmV4dCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIFRJUEMgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4gUmlnaHQsIGl0J3MgYFRJUENgLiBJJ2xsIG9wZW4gYG5ldC90aXBjL0tjb25maWdgIHRvIHNlZSBob3cgaXQncyBzZXQgdXAsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGlzIHdob2xlIFRJUEMgc3RhY2sgaXMgaW50ZW5kZWQgdG8gYmUgY29uZmlndXJlZCBhbmQgdXNlZCwgcHJvdmlkaW5nIGNvbnRleHQgZm9yIGhvdyB0aGVzZSBmdW5jdGlvbnMgSSd2ZSBqdXN0IGlkZW50aWZpZWQgYXJlIGJyb3VnaHQgaW50byBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDY2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MDE6MjEuMTk5ODM2NjQyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk5MDA0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVElQQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvS2NvbmZpZy01LVxcbm5ldC90aXBjL0tjb25maWc6NjptZW51Y29uZmlnIFRJUENcXG5uZXQvdGlwYy9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlRoZSBUSVBDIFByb3RvY29sXFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy0yMy1cXG5uZXQvdGlwYy9LY29uZmlnOjI0OmNvbmZpZyBUSVBDX01FRElBX0lCXFxubmV0L3RpcGMvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJJbmZpbmlCYW5kIG1lZGlhIHR5cGUgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90aXBjL0tjb25maWctMjktXFx0ICBJUC1vdmVyLUluZmluaUJhbmQgZGV2aWNlcy5cXG5uZXQvdGlwYy9LY29uZmlnOjMwOmNvbmZpZyBUSVBDX01FRElBX1VEUFxcbm5ldC90aXBjL0tjb25maWctMzEtXFx0Ym9vbCBcXFwiSVAvVURQIG1lZGlhIHR5cGUgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90aXBjL0tjb25maWctMzctXFxubmV0L3RpcGMvS2NvbmZpZzozODpjb25maWcgVElQQ19DUllQVE9cXG5uZXQvdGlwYy9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIlRJUEMgZW5jcnlwdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy01Mi1cXG5uZXQvdGlwYy9LY29uZmlnOjUzOmNvbmZpZyBUSVBDX0RJQUdcXG5uZXQvdGlwYy9LY29uZmlnLTU0LVxcdHRyaXN0YXRlIFxcXCJUSVBDOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjAxOjIxLjI0NTgzMDYyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTgzMDUyMTI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUSVBDIFBhdGNoKipcblxuT2theSwgc28gdGhlIGNvbmZpZyBpbiBxdWVzdGlvbiBpcyBgVElQQ2AsIGFuZCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSB0aGUgYFRJUENfTUFYX1BVQkxgIGxpbWl0IGNvdWxkIGluYWR2ZXJ0ZW50bHkgYmxvY2sgdGhlIGluc2VydGlvbiBvZiBjcnVjaWFsIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgaW50byB0aGUgbmFtZSB0YWJsZS4gVGhpbmtpbmcgdGhyb3VnaCB0aGlzLCBpdCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuXG5cbk15IHJlYXNvbmluZz8gV2VsbCwgdGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IHR3ZWFrcyB0aGUgcHVibGljYXRpb24gbGltaXQgbG9naWMgd2l0aGluIHRoZSBUSVBDIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBlbnN1cmluZyB0aGF0IGNvcmUgcHJvdG9jb2wgc2VydmljZSB0eXBlcywgbGlrZSBgVElQQ19OT0RFX1NUQVRFYCwgYFRJUENfTElOS19TVEFURWAsIGFuZCBgVElQQ19UT1BfU1JWYCwgY2FuIGJ5cGFzcyB1c2VyLWRlZmluZWQgcHVibGljYXRpb24gbGltaXRzLiBUaGlzIGhpdHMgZGlyZWN0bHkgYXQgdGhlIGhlYXJ0IG9mIFRJUEMncyBuYW1lIHRhYmxlIG1hbmFnZW1lbnQuIEl0J3MgbGlrZWx5IHJlYWNoYWJsZSB0aHJvdWdoIFRJUEMgc29ja2V0IGJpbmQgb3BlcmF0aW9ucyB3aGljaCBtYWtlcyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5UbyBiZSBwcmVjaXNlLCB0aGUga2V5IHN5bWJvbHMgdGhhdCBzcHJpbmcgdG8gbWluZCBhcmUgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgYHRpcGNfbmFtZXRibF93aXRoZHJhd2AsIGFuZCBvZiBjb3Vyc2UgYHRpcGNfYmluZGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGxpa2VseSBpbnZvbHZlZCBpbiB0aGlzIGxvZ2ljLiBXZSdsbCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiBGaW5hbGx5LCB3ZSBjb25maXJtIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBzZXQgdG8gYFRJUENgLlxuXG5Ob3csIGJlZm9yZSB3ZSBnbyBhbnkgZnVydGhlciwgbGV0J3MganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgVElQQ2AgaXRzZWxmIGRvZXNuJ3QgaGF2ZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGNvbXBsaWNhdGUgdGhpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjAxOjM3LjA3NjM1NDAzNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGlwYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFRJUEMgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIFRJUENcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJUaGUgVElQQyBQcm90b2NvbFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBUaGUgVHJhbnNwYXJlbnQgSW50ZXIgUHJvY2VzcyBDb21tdW5pY2F0aW9uIChUSVBDKSBwcm90b2NvbCBpc1xcbiAgMTE6XFx0XFx0ICBzcGVjaWFsbHkgZGVzaWduZWQgZm9yIGludHJhIGNsdXN0ZXIgY29tbXVuaWNhdGlvbi4gVGhpcyBwcm90b2NvbFxcbiAgMTI6XFx0XFx0ICBvcmlnaW5hdGVzIGZyb20gRXJpY3Nzb24gd2hlcmUgaXQgaGFzIGJlZW4gdXNlZCBpbiBjYXJyaWVyIGdyYWRlXFxuICAxMzpcXHRcXHQgIGNsdXN0ZXIgYXBwbGljYXRpb25zIGZvciBtYW55IHllYXJzLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFRJUEMsIHNlZSBodHRwOi8vdGlwYy5zb3VyY2Vmb3JnZS5uZXQuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgVGhpcyBwcm90b2NvbCBzdXBwb3J0IGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlICggPSBjb2RlIHdoaWNoXFxuICAxODpcXHRcXHQgIGNhbiBiZSBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3VcXG4gIDE5OlxcdFxcdCAgd2FudCkuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGlwYy4gSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdFxcbiAgMjA6XFx0XFx0ICBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZCBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnJzdFxcdTAwM2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjAxOjM3LjA3NjQxNDkzNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDk0NTM4NzQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUSVBDIERlcGVuZGVuY3kgYW5kIEZ1bmN0aW9uIEV4cGxvcmF0aW9uKipcblxuT2theSwgc28gYFRJUENgIHJlbGllcyBvbiBgSU5FVGAuICBBbmQgc2luY2UgYElORVRgIGlzIGFsd2F5cyBlbmFibGVkIGluIHRoZSB0eXBpY2FsIGtlcm5lbCBjb25maWd1cmF0aW9ucywgdGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gSSBjYW4gcmVhc29uYWJseSBhc3N1bWUgdGhhdCBgVElQQ2AgaXMgc3VmZmljaWVudCBpbiB0aGlzIHJlZ2FyZCBhbmQgSSB3b24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGBJTkVUYCBiZWluZyB0aGUgbWlzc2luZyBwaWVjZSBoZXJlLlxuXG5CdXQgSSBzaG91bGQgY2hlY2sgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgcGVydGluZW50LiBMZXQncyBsb29rIGF0IHdoYXQncyBhdmFpbGFibGUuIEhtbSwgdGhlcmUncyBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBhbmQgYHRpcGNfbmFtZXRibF93aXRoZHJhd2AsIGFuZCB0aGVuIGB0aXBjX2JpbmRgLlxuXG5JIHdvbmRlciwgYXJlIHRoZXJlICptb3JlKj8gQWgsIGhlcmUgd2UgZ28sIGB0aXBjX3NrX2JpbmRgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgY2FsbHMgYF9fdGlwY19iaW5kYCwgd2hpY2ggaW4gdHVybiwgY2FsbHMgYHRpcGNfYmluZGAuIFdhaXQgYSBtaW51dGUuLi4gaXNuJ3QgYHRpcGNfYmluZGAgdGhlIGJpbmQgZnVuY3Rpb24gZm9yIHRoZSBgcHJvdG9fb3BzYD8gWWVzLCBpdCBpcy4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhhdCBgdGlwY19iaW5kYCBmdW5jdGlvbiBtb3JlIGNsb3NlbHksIGFuZCBlbnN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ0NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjAxOjQ4LjAyMTgwNDUxNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5NjM4OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19iaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9zb2NrZXQuYz02MjY9c3RhdGljIGludCB0aXBjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTY2MS0vKipcXG5uZXQvdGlwYy9zb2NrZXQuYzo2NjI6ICogX190aXBjX2JpbmQgLSBhc3NvY2lhdGUgb3IgZGlzYXNzb2NpYXRlIFRJUEMgbmFtZShzKSB3aXRoIGEgc29ja2V0XFxubmV0L3RpcGMvc29ja2V0LmMtNjYzLSAqIEBzb2NrOiBzb2NrZXQgc3RydWN0dXJlXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy02NzUtICovXFxubmV0L3RpcGMvc29ja2V0LmM6Njc2OnN0YXRpYyBpbnQgX190aXBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpza2FkZHIsIGludCBhbGVuKVxcbm5ldC90aXBjL3NvY2tldC5jLTY3Ny17XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz03MDU9aW50IHRpcGNfc2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNrYWRkciwgaW50IGFsZW4pXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy03MDktXFx0bG9ja19zb2NrKHNvY2stXFx1MDAzZXNrKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzo3MTA6XFx0cmVzID0gX190aXBjX2JpbmQoc29jaywgc2thZGRyLCBhbGVuKTtcXG5uZXQvdGlwYy9zb2NrZXQuYy03MTEtXFx0cmVsZWFzZV9zb2NrKHNvY2stXFx1MDAzZXNrKTtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTcxNC1cXG5uZXQvdGlwYy9zb2NrZXQuYzo3MTU6c3RhdGljIGludCB0aXBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnNrYWRkciwgaW50IGFsZW4pXFxubmV0L3RpcGMvc29ja2V0LmMtNzE2LXtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTMzNTk9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXNnX29wcyA9IHtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTMzNjItXFx0LnJlbGVhc2VcXHQ9IHRpcGNfcmVsZWFzZSxcXG5uZXQvdGlwYy9zb2NrZXQuYzozMzYzOlxcdC5iaW5kXFx0XFx0PSB0aXBjX2JpbmQsXFxubmV0L3RpcGMvc29ja2V0LmMtMzM2NC1cXHQuY29ubmVjdFxcdD0gdGlwY19jb25uZWN0LFxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmM9MzM3OT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzID0ge1xcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtMzM4Mi1cXHQucmVsZWFzZVxcdD0gdGlwY19yZWxlYXNlLFxcbm5ldC90aXBjL3NvY2tldC5jOjMzODM6XFx0LmJpbmRcXHRcXHQ9IHRpcGNfYmluZCxcXG5uZXQvdGlwYy9zb2NrZXQuYy0zMzg0LVxcdC5jb25uZWN0XFx0PSB0aXBjX2Nvbm5lY3QsXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0zMzk5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHN0cmVhbV9vcHMgPSB7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0zNDAyLVxcdC5yZWxlYXNlXFx0PSB0aXBjX3JlbGVhc2UsXFxubmV0L3RpcGMvc29ja2V0LmM6MzQwMzpcXHQuYmluZFxcdFxcdD0gdGlwY19iaW5kLFxcbm5ldC90aXBjL3NvY2tldC5jLTM0MDQtXFx0LmNvbm5lY3RcXHQ9IHRpcGNfY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MDE6NDguMDY4NzcxMDgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNzQ4MzQ5NDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aGluZ3MgbXlzZWxmOlxuXG4qKkV4YW1pbmluZyBUSVBDIEJpbmRpbmcgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgVElQQyBiaW5kaW5nIGZ1bmN0aW9ucy4gYHRpcGNfYmluZGAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQnV0IGhvbGQgb24gYSBzZWNvbmTigKYgaWYgaXQncyBzdGF0aWMsIGhvdyBpcyBpdCBnZXR0aW5nIGNhbGxlZD8gQWgsIHJpZ2h0LiBJdCdzIGFzc2lnbmVkIHRvIHRoZSBgcHJvdG9fb3BzYCBzdHJ1Y3R1cmUuIFRoYXQncyB0aGUga2V5LiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGB0aXBjX3NrX2JpbmRgIHdoaWNoIGlzIGV4cG9ydGVkIGFuZCB0aHVzIG5vbi1zdGF0aWMsIGFuZCB0aGlzIHN0YXRpYyBgdGlwY19iaW5kYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VidGxlIGludGVyYWN0aW9ucyBvciBjb25mbGljdHMgSSdtIG1pc3NpbmcuIExldCdzIGRpZyBpbnRvIGJvdGggYW5kIHNlZSB3aGF0IHRoZXkgYXJlIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTE3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MDM6NTUuNTUyMjY4MjY5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzU1NzU1OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHRpcGNfc2tfYmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvc29ja2V0LmM9Njc2PXN0YXRpYyBpbnQgX190aXBjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpza2FkZHIsIGludCBhbGVuKVxcbi0tXFxubmV0L3RpcGMvc29ja2V0LmMtNzA0LVxcbm5ldC90aXBjL3NvY2tldC5jOjcwNTppbnQgdGlwY19za19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2thZGRyLCBpbnQgYWxlbilcXG5uZXQvdGlwYy9zb2NrZXQuYy03MDYte1xcbi0tXFxubmV0L3RpcGMvc29ja2V0Lmg9NzY9Ym9vbCB0aXBjX3NrX292ZXJsaW1pdDIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5uZXQvdGlwYy9zb2NrZXQuaDo3NzppbnQgdGlwY19za19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2thZGRyLCBpbnQgYWxlbik7XFxubmV0L3RpcGMvc29ja2V0LmgtNzgtaW50IHRza19zZXRfaW1wb3J0YW5jZShzdHJ1Y3Qgc29jayAqc2ssIGludCBpbXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjowMzo1NS44ODc4NDcxNTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk1MTE4OTM5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqQW5hbHl6aW5nIFN5bWJvbCBWaXNpYmlsaXR5IGluIHRoZSBUSVBDIEtlcm5lbCBNb2R1bGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBUSVBDIGtlcm5lbCBmdW5jdGlvbnMsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGVpciB2aXNpYmlsaXR5LiBgdGlwY19za19iaW5kYC4uLiB0aGF0IG9uZSdzIG5vbi1zdGF0aWMuIFJpZ2h0LiBBbmQgdGhlbiwgSSBzZWUgdGhhdCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIGFuZCBgdGlwY19uYW1ldGJsX3dpdGhkcmF3YCBhcmUgYWxzbyBub24tc3RhdGljLiBUaGVyZWZvcmUsIHRoZXNlIHRocmVlIGZ1bmN0aW9ucyBhcmUgdGhlIG9uZXMgSSByZWFsbHkgbmVlZCB0byBmb2N1cyBvbiwgYW5kIEknbSBnb2luZyB0byBjYWxsIHRoZXNlIG15ICpGb2N1c1N5bWJvbHMqOiBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBgdGlwY19uYW1ldGJsX3dpdGhkcmF3YCwgYW5kIGB0aXBjX3NrX2JpbmRgLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugc3ltYm9scyBhcmUgZXhwb3NlZCBhbmQgdXNlZCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGVzZSBhbmQgdGhlbiBjb25zaWRlciB0aGVpciBpbXBhY3Qgd2hlbiBJIGV4YW1pbmUgdGhlIHdpZGVyIGNvZGViYXNlLiBJJ2xsIGNhbGwgdGhpcyByZXN1bHQgc2V0IEkgaGF2ZSBoZXJlICdzZXQtcmVzdWx0cycuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMDIsIk91dHB1dFRva2VucyI6MTI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MDQ6NDUuMzk5NzUyNjgxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc3MDE2OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX25hbWV0YmxfcHVibGlzaFwiLFxuICAgIFwidGlwY19uYW1ldGJsX3dpdGhkcmF3XCIsXG4gICAgXCJ0aXBjX3NrX2JpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcHVibGljYXRpb24gbGltaXQgbG9naWMgaW4gVElQQyB0byBlbnN1cmUgcHJvdG9jb2wgc2VydmljZSB0eXBlcyAoVElQQ19OT0RFX1NUQVRFLCBUSVBDX0xJTktfU1RBVEUsIFRJUENfVE9QX1NSVikgY2FuIGJ5cGFzcyB0aGUgdXNlciBwdWJsaWNhdGlvbiBsaW1pdC4gVGhpcyBhZmZlY3RzIHRoZSBjb3JlIFRJUEMgbmFtZSB0YWJsZSBtYW5hZ2VtZW50IGFuZCBpcyByZWFjaGFibGUgdmlhIFRJUEMgc29ja2V0IGJpbmQgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUSVBDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGlwY19uYW1ldGJsX3B1Ymxpc2hcIixcbiAgICBcInRpcGNfbmFtZXRibF93aXRoZHJhd1wiLFxuICAgIFwidGlwY19za19iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHB1YmxpY2F0aW9uIGxpbWl0IGxvZ2ljIGluIFRJUEMgdG8gZW5zdXJlIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgKFRJUENfTk9ERV9TVEFURSwgVElQQ19MSU5LX1NUQVRFLCBUSVBDX1RPUF9TUlYpIGNhbiBieXBhc3MgdGhlIHVzZXIgcHVibGljYXRpb24gbGltaXQuIFRoaXMgYWZmZWN0cyB0aGUgY29yZSBUSVBDIG5hbWUgdGFibGUgbWFuYWdlbWVudCBhbmQgaXMgcmVhY2hhYmxlIHZpYSBUSVBDIHNvY2tldCBiaW5kIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjA0OjQ1LjQ3NzQ2MDQ4NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1OTQ4MjQ5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMjowNDo0NS40Nzc4NzYxODZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA1OTQ0MDUzMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY291bnRpbmcgbG9jYWwgcHVibGljYXRpb25zIGluIHRoZSBUSVBDIG5hbWUgdGFibGUgdG8gZXhjbHVkZSBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIChUSVBDX05PREVfU1RBVEUsIFRJUENfTElOS19TVEFURSwgVElQQ19UT1BfU1JWKSBhbmQgcmVzZXJ2ZXMgb25lIGVudHJ5IGZvciB0aGUgbm9kZSBzdGF0ZSBzZXJ2aWNlIHR5cGUuIFRoaXMgaXMgcHVyZWx5IGEgcmVzb3VyY2UgbGltaXQgYW5kIGNvdW50aW5nIGxvZ2ljIGNoYW5nZSB0byBwcmV2ZW50IHVzZXIgcHVibGljYXRpb25zIGZyb20gZXhoYXVzdGluZyB0aGUgbGltaXQgYW5kIGJsb2NraW5nIHByb3RvY29sIHNlcnZpY2UgdHlwZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgY29kZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmZmZjZjYxZTFhNjZkNDNiMzM4ZTE2ZjdjYTUwNjk3OTg1MmE0NmRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMTE6NTk6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLjZmZGEzNmFiMTc2NjkgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbisrKyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xuQEAgLTc2MywyMSArNzYzLDQwIEBAIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpXG4ge1xuIFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4rXHR1MzIgbWF4X3VzZXJfcHViID0gVElQQ19NQVhfUFVCTCAtIDE7XG4gXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcCA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbitcdGJvb2wgcHJvdG9jb2xfdHlwZSA9IGZhbHNlO1xuIFx0dTMyIHJjX2Rlc3RzO1xuIFxuK1x0aWYgKHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19OT0RFX1NUQVRFIHx8IHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19MSU5LX1NUQVRFIHx8XG4rXHQgICAgdWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX1RPUF9TUlYpXG4rXHRcdHByb3RvY29sX3R5cGUgPSB0cnVlO1xuK1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4rXHRpZiAocHJvdG9jb2xfdHlwZSlcbitcdFx0Z290byBpbnNlcnQ7XG4gXG4tXHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IFRJUENfTUFYX1BVQkwpIHtcbi1cdFx0cHJfd2FybihcIkJpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxcblwiLCBUSVBDX01BWF9QVUJMKTtcbitcdC8qIFJlc2VydmUgb25lIGVudHJ5IGZvciBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZSBiZWNhdXNlIGl0IGhhcyBjbHVzdGVyXG4rXHQgKiBzY29wZSBhbmQgaXQgaXMgZGlzdHJpYnV0ZWQgaW4gYnVsay4gU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VyJ3NcbitcdCAqIHB1YmxpY2F0aW9ucyBpcyAoVElQQ19NQVhfUFVCTCAtIDEpLlxuK1x0ICovXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IG1heF91c2VyX3B1Yikge1xuK1x0XHRwcl93YXJuKFwiQmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXFxuXCIsIG1heF91c2VyX3B1Yik7XG4gXHRcdGdvdG8gZXhpdDtcbiBcdH1cbiBcbitpbnNlcnQ6XG4gXHRwID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpO1xuIFx0aWYgKHApIHtcbi1cdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCsrO1xuK1x0XHQvKiBOb3QgY291bnQgbm9kZSBzdGF0ZSwgbGluayBzdGF0ZSBhbmQgdG9wb2xvZ3kgc2VydmVyIHR5cGVzXG4rXHRcdCAqIHNvIHRoYXQgbWF4aW11bSBudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IGRvZXMgbm90IHByZXZlbnRcbitcdFx0ICogcHJvdG9jb2wgc2VydmljZSB0eXBlcyBmcm9tIGJlaW5nIGluc2VydGVkIGludG8gdGhlIG5hbWVcbitcdFx0ICogdGFibGUuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIXByb3RvY29sX3R5cGUpXG4rXHRcdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCsrO1xuIFx0XHRza2IgPSB0aXBjX25hbWVkX3B1Ymxpc2gobmV0LCBwKTtcbiBcdH1cbiBcdHJjX2Rlc3RzID0gbnQtXHUwMDNlcmNfZGVzdHM7XG5AQCAtODEwLDcgKzgyOSwxMCBAQCB2b2lkIHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcbiBcdHAgPSB0aXBjX25hbWV0YmxfcmVtb3ZlX3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4gXHRpZiAocCkge1xuLVx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50LS07XG4rXHRcdGlmIChwLVx1MDAzZXNyLnR5cGUgIT0gVElQQ19OT0RFX1NUQVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcC1cdTAwM2Vzci50eXBlICE9IFRJUENfTElOS19TVEFURSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHAtXHUwMDNlc3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpXG4rXHRcdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudC0tO1xuIFx0XHRza2IgPSB0aXBjX25hbWVkX3dpdGhkcmF3KG5ldCwgcCk7XG4gXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX3NvY2spO1xuIFx0XHRrZnJlZV9yY3UocCwgcmN1KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDEyOjA0OjQ1LjQ3Nzg3NzQ4NloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDU5NDM4NTQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUSVBDIE5hbWUgVGFibGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGB0aXBjX25hbWV0YmxfcHVibGlzaGAgYW5kIGB0aXBjX25hbWV0Ymxfd2l0aGRyYXdgIGluIGBuZXQvdGlwYy9uYW1lX3RhYmxlLmNgLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgZm9jdXNlZCBvbiBob3cgd2UgY291bnQgbG9jYWwgcHVibGljYXRpb25zLCBzcGVjaWZpY2FsbHkgYG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnRgLiBUaGUgaW50ZW50IGhlcmUgaXMgdG8gKmV4Y2x1ZGUqIGNlcnRhaW4gcHJvdG9jb2wgdHlwZXMg4oCTIGBUSVBDX05PREVfU1RBVEVgLCBgVElQQ19MSU5LX1NUQVRFYCwgYW5kIGBUSVBDX1RPUF9TUlZgIOKAkyBmcm9tIHRoYXQgY291bnQuIFRoaXMgaXMgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLlxuXG5UaGUgY29kZSBub3cgY2hlY2tzIGlmIHRoZSBwdWJsaWNhdGlvbiB0eXBlIGlzIG9uZSBvZiB0aG9zZSBwcm90b2NvbCB0eXBlcywgYW5kIGlmIGl0IGlzLCB0aGUgY291bnQgaXMgKm5vdCogaW5jcmVtZW50ZWQuIEFsc28sIGFuZCB0aGlzIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBpbXBhY3QsIHRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBtYXhpbXVtIGxpbWl0IGZvciB1c2VyIHB1YmxpY2F0aW9ucyB0byBgVElQQ19NQVhfUFVCTCAtIDFgLiBUaGUgY29tbWVudCBtYWtlcyBpdCB2ZXJ5IGNsZWFyIHRoYXQgdGhpcyBpcyBiZWluZyBkb25lIHRvIHJlc2VydmUgc3BhY2UgZm9yIHRoZSBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZSwgd2hpY2ggaXMgY2x1c3Rlci1zY29wZWQgYW5kIGRpc3RyaWJ1dGVkIGluIGJ1bGsuXG5cblRoZSBvcmlnaW5hbCBjb2RlIGNoZWNrZWQgYGlmIChudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IFx1MDAzZT0gVElQQ19NQVhfUFVCTClgIGFuZCB3b3VsZCBlcnJvciBvdXQgaWYgaXQgcmVhY2hlZCB0aGUgbGltaXQuIFRoZSBtb2RpZmllZCBjb2RlIG5vdyBoYXMgYGlmIChudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IFx1MDAzZT0gbWF4X3VzZXJfcHViKWAsIHdoZXJlIGBtYXhfdXNlcl9wdWJgIGlzIGBUSVBDX01BWF9QVUJMIC0gMWAuIFRoZSBpbXBvcnRhbnQgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHRoZXNlIGNoYW5nZXMgcHJldmVudCBhIERvUyBvciByZXNvdXJjZSBleGhhdXN0aW9uIHNjZW5hcmlvLCB3aGVyZSB1c2VyIHB1YmxpY2F0aW9ucyBjb3VsZCBwcmV2ZW50IGNyaXRpY2FsIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgZnJvbSBiZWluZyBpbnNlcnRlZC5cblxuRnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3MuIFRoaXMgcGF0Y2ggaXMgcHVyZWx5IGxvZ2ljLWRyaXZlbjsgSSdtIG5vdCBzZWVpbmcgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgaW50ZXJhY3Rpb25zIHdpdGggdXNlciBzcGFjZSB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0IGFsc28gYXZvaWRzIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBpcyBhbGwgYWJvdXQgYWRqdXN0aW5nIHJlc291cmNlIGxpbWl0cy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGNvcmUgdG9vbHMgYXJlIGFkZXF1YXRlIGhlcmUuXG5cblRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgYXMgdGhpcyBpc24ndCB0b3VjaGluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb24uIFRoaXMgaXMganVzdCByZXNvdXJjZSBtYW5hZ2VtZW50LiAqKk5lZWRzS01TQU49ZmFsc2UqKiBpcyB0aGUgY29ycmVjdCBjYWxsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDksIk91dHB1dFRva2VucyI6MTUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzU1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTI6MDQ6NTYuMDcyMjY2MzQyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGNvdW50aW5nIGxvY2FsIHB1YmxpY2F0aW9ucyBpbiB0aGUgVElQQyBuYW1lIHRhYmxlIHRvIGV4Y2x1ZGUgcHJvdG9jb2wgc2VydmljZSB0eXBlcyAoVElQQ19OT0RFX1NUQVRFLCBUSVBDX0xJTktfU1RBVEUsIFRJUENfVE9QX1NSVikgYW5kIHJlc2VydmVzIG9uZSBlbnRyeSBmb3IgdGhlIG5vZGUgc3RhdGUgc2VydmljZSB0eXBlLiBUaGlzIGlzIHB1cmVseSBhIHJlc291cmNlIGxpbWl0IGFuZCBjb3VudGluZyBsb2dpYyBjaGFuZ2UgdG8gcHJldmVudCB1c2VyIHB1YmxpY2F0aW9ucyBmcm9tIGV4aGF1c3RpbmcgdGhlIGxpbWl0IGFuZCBibG9ja2luZyBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgaW50ZXJhY3Rpb25zIHdpdGggdXNlciBzcGFjZSB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjb3VudGluZyBsb2NhbCBwdWJsaWNhdGlvbnMgaW4gdGhlIFRJUEMgbmFtZSB0YWJsZSB0byBleGNsdWRlIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgKFRJUENfTk9ERV9TVEFURSwgVElQQ19MSU5LX1NUQVRFLCBUSVBDX1RPUF9TUlYpIGFuZCByZXNlcnZlcyBvbmUgZW50cnkgZm9yIHRoZSBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZS4gVGhpcyBpcyBwdXJlbHkgYSByZXNvdXJjZSBsaW1pdCBhbmQgY291bnRpbmcgbG9naWMgY2hhbmdlIHRvIHByZXZlbnQgdXNlciBwdWJsaWNhdGlvbnMgZnJvbSBleGhhdXN0aW5nIHRoZSBsaW1pdCBhbmQgYmxvY2tpbmcgcHJvdG9jb2wgc2VydmljZSB0eXBlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGludGVyYWN0aW9ucyB3aXRoIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtgpfd[1] Phase: Succeeded StartedAt: 2026-08-27 12:05:08 +0000 UTC FinishedAt: 2026-08-27 12:05:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-27 12:05:08 +0000 UTC FinishedAt: 2026-08-27 12:05:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2] Phase: Succeeded StartedAt: 2026-08-27 12:05:08 +0000 UTC FinishedAt: 2026-08-27 15:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-27 12:05:08 +0000 UTC FinishedAt: 2026-08-27 15:43:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-27 12:05:08 +0000 UTC FinishedAt: 2026-08-27 12:05:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-27 12:05:08 +0000 UTC FinishedAt: 2026-08-27 12:05:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtgpfd/series-workflowtgpfd-convert-artifact-1161216684/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-27 12:05:18 +0000 UTC FinishedAt: 2026-08-27 12:21:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-27 12:05:18 +0000 UTC FinishedAt: 2026-08-27 12:21:13 +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:*05735d91-6bbf-4952-af7e-cac500be371b,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-workflowtgpfd/series-workflowtgpfd-convert-artifact-1161216684/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": "49b50e47-cd58-4c52-b83d-82893171952a", "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-workflowtgpfd/series-workflowtgpfd-build-action-251250906/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-27 12:05:18 +0000 UTC FinishedAt: 2026-08-27 12:21:03 +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:*05735d91-6bbf-4952-af7e-cac500be371b,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-workflowtgpfd/series-workflowtgpfd-convert-artifact-1161216684/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": "49b50e47-cd58-4c52-b83d-82893171952a", "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-workflowtgpfd/series-workflowtgpfd-build-action-251250906/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-27 12:21:13 +0000 UTC FinishedAt: 2026-08-27 12:21:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-27 12:21:13 +0000 UTC FinishedAt: 2026-08-27 12:21:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-27 12:21:13 +0000 UTC FinishedAt: 2026-08-27 12:21:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-27 12:21:13 +0000 UTC FinishedAt: 2026-08-27 12:21:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtgpfd/series-workflowtgpfd-convert-artifact-1052743787/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-27 12:21:23 +0000 UTC FinishedAt: 2026-08-27 12:23:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-27 12:21:23 +0000 UTC FinishedAt: 2026-08-27 12:23:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49b50e47-cd58-4c52-b83d-82893171952a,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-workflowtgpfd/series-workflowtgpfd-build-action-251250906/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-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-27 12:23:19 +0000 UTC FinishedAt: 2026-08-27 12:23:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-27 12:23:19 +0000 UTC FinishedAt: 2026-08-27 12:23:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-27 12:23:19 +0000 UTC FinishedAt: 2026-08-27 12:39:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-27 12:23:19 +0000 UTC FinishedAt: 2026-08-27 12:39:07 +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:*05735d91-6bbf-4952-af7e-cac500be371b,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-workflowtgpfd/series-workflowtgpfd-convert-artifact-1052743787/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": "55fe0ef7-7e83-4675-b313-95cd1ae64438", "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-workflowtgpfd/series-workflowtgpfd-build-action-2633291151/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-27 12:23:19 +0000 UTC FinishedAt: 2026-08-27 12:38:57 +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:*05735d91-6bbf-4952-af7e-cac500be371b,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-workflowtgpfd/series-workflowtgpfd-convert-artifact-1052743787/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": "55fe0ef7-7e83-4675-b313-95cd1ae64438", "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-workflowtgpfd/series-workflowtgpfd-build-action-2633291151/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-27 12:39:07 +0000 UTC FinishedAt: 2026-08-27 12:39:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-27 12:39:07 +0000 UTC FinishedAt: 2026-08-27 12:39:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-27 12:39:07 +0000 UTC FinishedAt: 2026-08-27 12:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-27 12:39:07 +0000 UTC FinishedAt: 2026-08-27 12:40:52 +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:*55fe0ef7-7e83-4675-b313-95cd1ae64438,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-workflowtgpfd/series-workflowtgpfd-build-action-2633291151/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-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-27 12:41:02 +0000 UTC FinishedAt: 2026-08-27 15:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-27 12:41:02 +0000 UTC FinishedAt: 2026-08-27 15:43:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"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:*49b50e47-cd58-4c52-b83d-82893171952a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*55fe0ef7-7e83-4675-b313-95cd1ae64438,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-workflowtgpfd/series-workflowtgpfd-build-action-251250906/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-workflowtgpfd/series-workflowtgpfd-build-action-2633291151/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-27 12:41:02 +0000 UTC FinishedAt: 2026-08-27 12:41:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-27 12:41:02 +0000 UTC FinishedAt: 2026-08-27 12:41:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"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-workflowtgpfd/series-workflowtgpfd-convert-artifact-1672546692/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-27 12:41:02 +0000 UTC FinishedAt: 2026-08-27 12:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-27 12:41:02 +0000 UTC FinishedAt: 2026-08-27 12:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-27 12:41:02 +0000 UTC FinishedAt: 2026-08-27 12:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-27 12:41:12 +0000 UTC FinishedAt: 2026-08-27 15:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtgpfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_nametbl_publish","tipc_nametbl_withdraw","tipc_sk_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"8854ceb5-7d0e-4716-a5a1-ba2fcacb4631","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-27 12:41:12 +0000 UTC FinishedAt: 2026-08-27 15:43:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49b50e47-cd58-4c52-b83d-82893171952a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*55fe0ef7-7e83-4675-b313-95cd1ae64438,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-workflowtgpfd/series-workflowtgpfd-build-action-251250906/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-workflowtgpfd/series-workflowtgpfd-build-action-2633291151/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-workflowtgpfd/series-workflowtgpfd-convert-artifact-1672546692/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,}