Name: series-workflowjtjnz Phase: Succeeded StartedAt: 2026-08-13 18:02:40 +0000 UTC FinishedAt: 2026-08-13 22:50:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[0] Phase: Succeeded StartedAt: 2026-08-13 18:02:40 +0000 UTC FinishedAt: 2026-08-13 19:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 18:02:40 +0000 UTC FinishedAt: 2026-08-13 19:02:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "09190c59cd101e0bf87a1c5a32ebae25c91e6d81", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VSOCKETS_LOOPBACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "09190c59cd101e0bf87a1c5a32ebae25c91e6d81", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VSOCKETS_LOOPBACK" ], "series_id": "80df64d6-9537-4c9f-ad2c-8c83aebe9ce6" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vsock_connect", "vsock_accept", "vsock_pending_work" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTX0xPT1BCQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dnNvY2tfY29ubmVjdCYjMzQ7LAogICAgJiMzNDt2c29ja19hY2NlcHQmIzM0OywKICAgICYjMzQ7dnNvY2tfcGVuZGluZ193b3JrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdnNvY2tfc29ja2AgYW5kIHNpbXBsaWZpZXMgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBhbnkgbmV3IGFsbG9jYXRpb25zIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBUaGUgY2hhbmdlcyBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBsb2dpYyBlcnJvcnMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyBmb3IgQUZfVlNPQ0sgc29ja2V0cy4gSXQgcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBzdGF0ZSBmcm9tIHBlbmRpbmcgc29ja2V0cyBhbmQgY2hhbmdlcyBob3cgYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YCBoYW5kbGUgc29ja2V0IGVycm9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIgZHVyaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYmE1NDZiNjBkZTA4YjBmZTFhNzNhYzQ2NGVmNTZkYWNmYmUyMTIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTk6MDE6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaCBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbmluZGV4IDMwMDQ2YTNjMjBmNzMuLjMzNTdlZTYyZDEwYmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9hZl92c29jay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9hZl92c29jay5oXG5AQCAtNTIsMTMgJiM0Mzs1MiwxMCBAQCBzdHJ1Y3QgdnNvY2tfc29jayB7XG4gXHQgKiBUaGUgbGlzdGVuaW5nIHNvY2tldCBpcyB0aGUgaGVhZCBmb3IgYm90aCBsaXN0cy4gIFNvY2tldHMgY3JlYXRlZFxuIFx0ICogZm9yIGNvbm5lY3Rpb24gcmVxdWVzdHMgYXJlIHBsYWNlZCBpbiB0aGUgcGVuZGluZyBsaXN0IHVudGlsIHRoZXlcbiBcdCAqIGFyZSBjb25uZWN0ZWQsIGF0IHdoaWNoIHBvaW50IHRoZXkgYXJlIHB1dCBpbiB0aGUgYWNjZXB0IHF1ZXVlIGxpc3Rcbi1cdCAqIHNvIHRoZXkgY2FuIGJlIGFjY2VwdGVkIGluIGFjY2VwdCgpLiAgSWYgYWNjZXB0KCkgY2Fubm90IGFjY2VwdCB0aGVcbi1cdCAqIGNvbm5lY3Rpb24sIGl0IGlzIG1hcmtlZCBhcyByZWplY3RlZCBzbyB0aGUgY2xlYW51cCBmdW5jdGlvbiBrbm93c1xuLVx0ICogdG8gY2xlYW4gdXAgdGhlIHNvY2tldC5cbiYjNDM7XHQgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS5cbiBcdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpbmtzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBhY2NlcHRfcXVldWU7XG4tXHRib29sIHJlamVjdGVkO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBjb25uZWN0X3dvcms7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHBlbmRpbmdfd29yaztcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgY2xvc2Vfd29yaztcbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbmluZGV4IDYyMmRiZDA0Njc5OTQuLmU4OWNiODRiOGQ3MzcgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuQEAgLTM4LDEwICYjNDM7MzgsOSBAQFxuICAqIHBlbmRpbmcgc29ja2V0LiAgV2hlbiB0aGF0IHNvY2tldCByZWFjaGVzIHRoZSBjb25uZWN0ZWQgc3RhdGUsIGl0IGlzIHJlbW92ZWRcbiAgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQmIzM5O3MgcGVuZGluZyBsaXN0IGFuZCBlbnF1ZXVlZCBpbiB0aGUgbGlzdGVuZXJcbiAgKiBzb2NrZXQmIzM5O3MgYWNjZXB0IHF1ZXVlLiAgQ2FsbGVycyBvZiBhY2NlcHQoMikgd2lsbCBhY2NlcHQgY29ubmVjdGVkIHNvY2tldHNcbi0gKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQmIzM5O3MgYWNjZXB0IHF1ZXVlLiAgSWYgdGhlIHNvY2tldCBjYW5ub3QgYmUgYWNjZXB0ZWRcbi0gKiBmb3Igc29tZSByZWFzb24gdGhlbiBpdCBpcyBtYXJrZWQgcmVqZWN0ZWQuICBPbmNlIHRoZSBjb25uZWN0aW9uIGlzXG4tICogYWNjZXB0ZWQsIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cFxuLSAqIGZhbGxzIHdpdGggdGhhdCB1c2VyIHByb2Nlc3MuXG4mIzQzOyAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCYjMzk7cyBhY2NlcHQgcXVldWUuIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgYWNjZXB0ZWQsXG4mIzQzOyAqIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cCBmYWxsc1xuJiM0MzsgKiB3aXRoIHRoYXQgdXNlciBwcm9jZXNzLlxuICAqXG4gICogLSBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXNlIHBlbmRpbmcgc29ja2V0cyB3aWxsIG5ldmVyIHJlYWNoIHRoZSBjb25uZWN0ZWRcbiAgKiBzdGF0ZTsgaW4gZmFjdCwgd2UgbWF5IG5ldmVyIHJlY2VpdmUgYW5vdGhlciBwYWNrZXQgYWZ0ZXIgdGhlIGNvbm5lY3Rpb25cbkBAIC00OSw5ICYjNDM7NDgsNyBAQFxuICAqIGZ1dHVyZSwgYWZ0ZXIgc29tZSBhbW91bnQgb2YgdGltZSBwYXNzZXMgd2hlcmUgYSBjb25uZWN0aW9uIHNob3VsZCBoYXZlIGJlZW5cbiAgKiBlc3RhYmxpc2hlZC4gIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBzb2NrZXQgaXMgb2ZmIGFsbCBsaXN0cyBzbyBpdFxuICAqIGNhbm5vdCBiZSByZXRyaWV2ZWQsIHRoZW4gZHJvcHMgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIHNvY2tldCBzbyBpdCBpcyBjbGVhbmVkXG4tICogdXAgKHNvY2tfcHV0KCkgLVx1MDAzZSBza19mcmVlKCkgLVx1MDAzZSBvdXIgc2tfZGVzdHJ1Y3QgaW1wbGVtZW50YXRpb24pLiAgTm90ZSB0aGlzXG4tICogZnVuY3Rpb24gd2lsbCBhbHNvIGNsZWFudXAgcmVqZWN0ZWQgc29ja2V0cywgdGhvc2UgdGhhdCByZWFjaCB0aGUgY29ubmVjdGVkXG4tICogc3RhdGUgYnV0IGxlYXZlIGl0IGJlZm9yZSB0aGV5IGhhdmUgYmVlbiBhY2NlcHRlZC5cbiYjNDM7ICogdXAgKHNvY2tfcHV0KCkgLVx1MDAzZSBza19mcmVlKCkgLVx1MDAzZSBvdXIgc2tfZGVzdHJ1Y3QgaW1wbGVtZW50YXRpb24pLlxuICAqXG4gICogLSBMb2NrIG9yZGVyaW5nIGZvciBwZW5kaW5nIG9yIGFjY2VwdCBxdWV1ZSBzb2NrZXRzIGlzOlxuICAqXG5AQCAtNzc0LDExICYjNDM7NzcxLDEwIEBAIHN0YXRpYyB2b2lkIHZzb2NrX3BlbmRpbmdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gXHRpZiAodnNvY2tfaXNfcGVuZGluZyhzaykpIHtcbiBcdFx0dnNvY2tfcmVtb3ZlX3BlbmRpbmcobGlzdGVuZXIsIHNrKTtcbi1cdH0gZWxzZSBpZiAoIXZzay1cdTAwM2VyZWplY3RlZCkge1xuLVx0XHQvKiBXZSBhcmUgbm90IG9uIHRoZSBwZW5kaW5nIGxpc3QgYW5kIGFjY2VwdCgpIGRpZCBub3QgcmVqZWN0XG4tXHRcdCAqIHVzLCBzbyB3ZSBtdXN0IGhhdmUgYmVlbiBhY2NlcHRlZCBieSBvdXIgdXNlciBwcm9jZXNzLiAgV2Vcbi1cdFx0ICoganVzdCBuZWVkIHRvIGRyb3Agb3VyIHJlZmVyZW5jZXMgdG8gdGhlIHNvY2tldHMgYW5kIGJlIG9uXG4tXHRcdCAqIG91ciB3YXkuXG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBzbyB3ZSBtdXN0IGhhdmUgYmVlbiBhY2NlcHRlZFxuJiM0MztcdFx0ICogYnkgb3VyIHVzZXIgcHJvY2Vzcy4gV2UganVzdCBuZWVkIHRvIGRyb3Agb3VyIHJlZmVyZW5jZXMgdG9cbiYjNDM7XHRcdCAqIHRoZSBzb2NrZXRzIGFuZCBiZSBvbiBvdXIgd2F5LlxuIFx0XHQgKi9cbiBcdFx0Y2xlYW51cCA9IGZhbHNlO1xuIFx0XHRnb3RvIG91dDtcbkBAIC05NDIsNyAmIzQzOzkzOCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0dnNrLVx1MDAzZWxpc3RlbmVyID0gTlVMTDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZzay1cdTAwM2VwZW5kaW5nX2xpbmtzKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZzay1cdTAwM2VhY2NlcHRfcXVldWUpO1xuLVx0dnNrLVx1MDAzZXJlamVjdGVkID0gZmFsc2U7XG4gXHR2c2stXHUwMDNlc2VudF9yZXF1ZXN0ID0gZmFsc2U7XG4gXHR2c2stXHUwMDNlaWdub3JlX2Nvbm5lY3RpbmdfcnN0ID0gZmFsc2U7XG4gXHRXUklURV9PTkNFKHZzay1cdTAwM2VwZWVyX3NodXRkb3duLCAwKTtcbkBAIC0xODQ3LDEyICYjNDM7MTg0MiwxMCBAQCBzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4gXHRcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChzayksIFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gXHR9XG4gXG4tXHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4tXHRcdGVyciA9IC1zay1cdTAwM2Vza19lcnI7XG4mIzQzO1x0ZXJyID0gc29ja19lcnJvcihzayk7XG4mIzQzO1x0aWYgKGVycikge1xuIFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IFRDUF9DTE9TRTtcbiBcdFx0c29jay1cdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xuLVx0fSBlbHNlIHtcbi1cdFx0ZXJyID0gMDtcbiBcdH1cbiBcbiBvdXRfd2FpdDpcbkBAIC0xODkzLDcgJiM0MzsxODg2LDcgQEAgc3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbiBcdHRpbWVvdXQgPSBzb2NrX3JjdnRpbWVvKGxpc3RlbmVyLCBhcmctXHUwMDNlZmxhZ3MgXHUwMDI2IE9fTk9OQkxPQ0spO1xuIFxuIFx0d2hpbGUgKChjb25uZWN0ZWQgPSB2c29ja19kZXF1ZXVlX2FjY2VwdChsaXN0ZW5lcikpID09IE5VTEwgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgbGlzdGVuZXItXHUwMDNlc2tfZXJyID09IDAgXHUwMDI2XHUwMDI2IHRpbWVvdXQgIT0gMCkge1xuJiM0MztcdFx0dGltZW91dCAhPSAwKSB7XG4gXHRcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChsaXN0ZW5lciksIFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gXHRcdHJlbGVhc2Vfc29jayhsaXN0ZW5lcik7XG4gXHRcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xuQEAgLTE5MDYsMzggJiM0MzsxODk5LDIzIEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChsaXN0ZW5lci1cdTAwM2Vza19lcnIpIHtcbi1cdFx0ZXJyID0gLWxpc3RlbmVyLVx1MDAzZXNrX2Vycjtcbi1cdH0gZWxzZSBpZiAoIWNvbm5lY3RlZCkge1xuJiM0MztcdGlmICghY29ubmVjdGVkKSB7XG4gXHRcdGVyciA9IC1FQUdBSU47XG4tXHR9XG4tXG4tXHRpZiAoY29ubmVjdGVkKSB7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0c2tfYWNjZXB0cV9yZW1vdmVkKGxpc3RlbmVyKTtcbiBcbiBcdFx0bG9ja19zb2NrX25lc3RlZChjb25uZWN0ZWQsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiBcdFx0dmNvbm5lY3RlZCA9IHZzb2NrX3NrKGNvbm5lY3RlZCk7XG4gXG4tXHRcdC8qIElmIHRoZSBsaXN0ZW5lciBzb2NrZXQgaGFzIHJlY2VpdmVkIGFuIGVycm9yLCB0aGVuIHdlIHNob3VsZFxuLVx0XHQgKiByZWplY3QgdGhpcyBzb2NrZXQgYW5kIHJldHVybi4gIE5vdGUgdGhhdCB3ZSBzaW1wbHkgbWFyayB0aGVcbi1cdFx0ICogc29ja2V0IHJlamVjdGVkLCBkcm9wIG91ciByZWZlcmVuY2UsIGFuZCBsZXQgdGhlIGNsZWFudXBcbi1cdFx0ICogZnVuY3Rpb24gaGFuZGxlIHRoZSBjbGVhbnVwOyB0aGUgZmFjdCB0aGF0IHdlIGZvdW5kIGl0IGluXG4tXHRcdCAqIHRoZSBsaXN0ZW5lciYjMzk7cyBhY2NlcHQgcXVldWUgZ3VhcmFudGVlcyB0aGF0IHRoZSBjbGVhbnVwXG4tXHRcdCAqIGZ1bmN0aW9uIGhhc24mIzM5O3QgcnVuIHlldC5cbi1cdFx0ICovXG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHR2Y29ubmVjdGVkLVx1MDAzZXJlamVjdGVkID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRuZXdzb2NrLVx1MDAzZXN0YXRlID0gU1NfQ09OTkVDVEVEO1xuLVx0XHRcdHNvY2tfZ3JhZnQoY29ubmVjdGVkLCBuZXdzb2NrKTtcbiYjNDM7XHRcdG5ld3NvY2stXHUwMDNlc3RhdGUgPSBTU19DT05ORUNURUQ7XG4mIzQzO1x0XHRzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7XG4gXG4tXHRcdFx0c2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULFxuLVx0XHRcdFx0XHUwMDI2Y29ubmVjdGVkLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsXG4mIzQzO1x0XHRcdFx1MDAyNmNvbm5lY3RlZC1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuIFxuLVx0XHRcdGlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLVx1MDAzZXRyYW5zcG9ydCkpXG4tXHRcdFx0XHRzZXRfYml0KFNPQ0tfU1VQUE9SVF9aQyxcbi1cdFx0XHRcdFx0XHUwMDI2Y29ubmVjdGVkLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmbGFncyk7XG4tXHRcdH1cbiYjNDM7XHRcdGlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLVx1MDAzZXRyYW5zcG9ydCkpXG4mIzQzO1x0XHRcdHNldF9iaXQoU09DS19TVVBQT1JUX1pDLFxuJiM0MztcdFx0XHRcdFx1MDAyNmNvbm5lY3RlZC1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuIFxuIFx0XHRyZWxlYXNlX3NvY2soY29ubmVjdGVkKTtcbiBcdFx0c29ja19wdXQoY29ubmVjdGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOTowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7VlNPQ0tFVFNfTE9PUEJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2c29ja19jb25uZWN0JiMzNDssCiAgICAmIzM0O3Zzb2NrX2FjY2VwdCYjMzQ7LAogICAgJiMzNDt2c29ja19wZW5kaW5nX3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyBmb3IgQUZfVlNPQ0sgc29ja2V0cy4gSXQgcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBzdGF0ZSBmcm9tIHBlbmRpbmcgc29ja2V0cyBhbmQgY2hhbmdlcyBob3cgYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YCBoYW5kbGUgc29ja2V0IGVycm9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIgZHVyaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYmE1NDZiNjBkZTA4YjBmZTFhNzNhYzQ2NGVmNTZkYWNmYmUyMTIxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTk6MDE6MTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl92c29jay5oIGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaAppbmRleCAzMDA0NmEzYzIwZjczLi4zMzU3ZWU2MmQxMGJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZl92c29jay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmgKQEAgLTUyLDEzICYjNDM7NTIsMTAgQEAgc3RydWN0IHZzb2NrX3NvY2sgewogCSAqIFRoZSBsaXN0ZW5pbmcgc29ja2V0IGlzIHRoZSBoZWFkIGZvciBib3RoIGxpc3RzLiAgU29ja2V0cyBjcmVhdGVkCiAJICogZm9yIGNvbm5lY3Rpb24gcmVxdWVzdHMgYXJlIHBsYWNlZCBpbiB0aGUgcGVuZGluZyBsaXN0IHVudGlsIHRoZXkKIAkgKiBhcmUgY29ubmVjdGVkLCBhdCB3aGljaCBwb2ludCB0aGV5IGFyZSBwdXQgaW4gdGhlIGFjY2VwdCBxdWV1ZSBsaXN0Ci0JICogc28gdGhleSBjYW4gYmUgYWNjZXB0ZWQgaW4gYWNjZXB0KCkuICBJZiBhY2NlcHQoKSBjYW5ub3QgYWNjZXB0IHRoZQotCSAqIGNvbm5lY3Rpb24sIGl0IGlzIG1hcmtlZCBhcyByZWplY3RlZCBzbyB0aGUgY2xlYW51cCBmdW5jdGlvbiBrbm93cwotCSAqIHRvIGNsZWFuIHVwIHRoZSBzb2NrZXQuCiYjNDM7CSAqIHNvIHRoZXkgY2FuIGJlIGFjY2VwdGVkIGluIGFjY2VwdCgpLgogCSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ19saW5rczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGFjY2VwdF9xdWV1ZTsKLQlib29sIHJlamVjdGVkOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgY29ubmVjdF93b3JrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgcGVuZGluZ193b3JrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgY2xvc2Vfd29yazsKZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwppbmRleCA2MjJkYmQwNDY3OTk0Li5lODljYjg0YjhkNzM3IDEwMDY0NAotLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCkBAIC0zOCwxMCAmIzQzOzM4LDkgQEAKICAqIHBlbmRpbmcgc29ja2V0LiAgV2hlbiB0aGF0IHNvY2tldCByZWFjaGVzIHRoZSBjb25uZWN0ZWQgc3RhdGUsIGl0IGlzIHJlbW92ZWQKICAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCYjMzk7cyBwZW5kaW5nIGxpc3QgYW5kIGVucXVldWVkIGluIHRoZSBsaXN0ZW5lcgogICogc29ja2V0JiMzOTtzIGFjY2VwdCBxdWV1ZS4gIENhbGxlcnMgb2YgYWNjZXB0KDIpIHdpbGwgYWNjZXB0IGNvbm5lY3RlZCBzb2NrZXRzCi0gKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQmIzM5O3MgYWNjZXB0IHF1ZXVlLiAgSWYgdGhlIHNvY2tldCBjYW5ub3QgYmUgYWNjZXB0ZWQKLSAqIGZvciBzb21lIHJlYXNvbiB0aGVuIGl0IGlzIG1hcmtlZCByZWplY3RlZC4gIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXMKLSAqIGFjY2VwdGVkLCBpdCBpcyBvd25lZCBieSB0aGUgdXNlciBwcm9jZXNzIGFuZCB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGNsZWFudXAKLSAqIGZhbGxzIHdpdGggdGhhdCB1c2VyIHByb2Nlc3MuCiYjNDM7ICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0JiMzOTtzIGFjY2VwdCBxdWV1ZS4gT25jZSB0aGUgY29ubmVjdGlvbiBpcyBhY2NlcHRlZCwKJiM0MzsgKiBpdCBpcyBvd25lZCBieSB0aGUgdXNlciBwcm9jZXNzIGFuZCB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGNsZWFudXAgZmFsbHMKJiM0MzsgKiB3aXRoIHRoYXQgdXNlciBwcm9jZXNzLgogICoKICAqIC0gSXQgaXMgcG9zc2libGUgdGhhdCB0aGVzZSBwZW5kaW5nIHNvY2tldHMgd2lsbCBuZXZlciByZWFjaCB0aGUgY29ubmVjdGVkCiAgKiBzdGF0ZTsgaW4gZmFjdCwgd2UgbWF5IG5ldmVyIHJlY2VpdmUgYW5vdGhlciBwYWNrZXQgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24KQEAgLTQ5LDkgJiM0Mzs0OCw3IEBACiAgKiBmdXR1cmUsIGFmdGVyIHNvbWUgYW1vdW50IG9mIHRpbWUgcGFzc2VzIHdoZXJlIGEgY29ubmVjdGlvbiBzaG91bGQgaGF2ZSBiZWVuCiAgKiBlc3RhYmxpc2hlZC4gIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBzb2NrZXQgaXMgb2ZmIGFsbCBsaXN0cyBzbyBpdAogICogY2Fubm90IGJlIHJldHJpZXZlZCwgdGhlbiBkcm9wcyBhbGwgcmVmZXJlbmNlcyB0byB0aGUgc29ja2V0IHNvIGl0IGlzIGNsZWFuZWQKLSAqIHVwIChzb2NrX3B1dCgpIC0mZ3Q7IHNrX2ZyZWUoKSAtJmd0OyBvdXIgc2tfZGVzdHJ1Y3QgaW1wbGVtZW50YXRpb24pLiAgTm90ZSB0aGlzCi0gKiBmdW5jdGlvbiB3aWxsIGFsc28gY2xlYW51cCByZWplY3RlZCBzb2NrZXRzLCB0aG9zZSB0aGF0IHJlYWNoIHRoZSBjb25uZWN0ZWQKLSAqIHN0YXRlIGJ1dCBsZWF2ZSBpdCBiZWZvcmUgdGhleSBoYXZlIGJlZW4gYWNjZXB0ZWQuCiYjNDM7ICogdXAgKHNvY2tfcHV0KCkgLSZndDsgc2tfZnJlZSgpIC0mZ3Q7IG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuCiAgKgogICogLSBMb2NrIG9yZGVyaW5nIGZvciBwZW5kaW5nIG9yIGFjY2VwdCBxdWV1ZSBzb2NrZXRzIGlzOgogICoKQEAgLTc3NCwxMSAmIzQzOzc3MSwxMCBAQCBzdGF0aWMgdm9pZCB2c29ja19wZW5kaW5nX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJaWYgKHZzb2NrX2lzX3BlbmRpbmcoc2spKSB7CiAJCXZzb2NrX3JlbW92ZV9wZW5kaW5nKGxpc3RlbmVyLCBzayk7Ci0JfSBlbHNlIGlmICghdnNrLSZndDtyZWplY3RlZCkgewotCQkvKiBXZSBhcmUgbm90IG9uIHRoZSBwZW5kaW5nIGxpc3QgYW5kIGFjY2VwdCgpIGRpZCBub3QgcmVqZWN0Ci0JCSAqIHVzLCBzbyB3ZSBtdXN0IGhhdmUgYmVlbiBhY2NlcHRlZCBieSBvdXIgdXNlciBwcm9jZXNzLiAgV2UKLQkJICoganVzdCBuZWVkIHRvIGRyb3Agb3VyIHJlZmVyZW5jZXMgdG8gdGhlIHNvY2tldHMgYW5kIGJlIG9uCi0JCSAqIG91ciB3YXkuCiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBXZSBhcmUgbm90IG9uIHRoZSBwZW5kaW5nIGxpc3Qgc28gd2UgbXVzdCBoYXZlIGJlZW4gYWNjZXB0ZWQKJiM0MzsJCSAqIGJ5IG91ciB1c2VyIHByb2Nlc3MuIFdlIGp1c3QgbmVlZCB0byBkcm9wIG91ciByZWZlcmVuY2VzIHRvCiYjNDM7CQkgKiB0aGUgc29ja2V0cyBhbmQgYmUgb24gb3VyIHdheS4KIAkJICovCiAJCWNsZWFudXAgPSBmYWxzZTsKIAkJZ290byBvdXQ7CkBAIC05NDIsNyAmIzQzOzkzOCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LAogCXZzay0mZ3Q7bGlzdGVuZXIgPSBOVUxMOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7dnNrLSZndDtwZW5kaW5nX2xpbmtzKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3Zzay0mZ3Q7YWNjZXB0X3F1ZXVlKTsKLQl2c2stJmd0O3JlamVjdGVkID0gZmFsc2U7CiAJdnNrLSZndDtzZW50X3JlcXVlc3QgPSBmYWxzZTsKIAl2c2stJmd0O2lnbm9yZV9jb25uZWN0aW5nX3JzdCA9IGZhbHNlOwogCVdSSVRFX09OQ0UodnNrLSZndDtwZWVyX3NodXRkb3duLCAwKTsKQEAgLTE4NDcsMTIgJiM0MzsxODQyLDEwIEBAIHN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwKIAkJcHJlcGFyZV90b193YWl0KHNrX3NsZWVwKHNrKSwgJmFtcDt3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCX0KIAotCWlmIChzay0mZ3Q7c2tfZXJyKSB7Ci0JCWVyciA9IC1zay0mZ3Q7c2tfZXJyOwomIzQzOwllcnIgPSBzb2NrX2Vycm9yKHNrKTsKJiM0MzsJaWYgKGVycikgewogCQlzay0mZ3Q7c2tfc3RhdGUgPSBUQ1BfQ0xPU0U7CiAJCXNvY2stJmd0O3N0YXRlID0gU1NfVU5DT05ORUNURUQ7Ci0JfSBlbHNlIHsKLQkJZXJyID0gMDsKIAl9CiAKIG91dF93YWl0OgpAQCAtMTg5Myw3ICYjNDM7MTg4Niw3IEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssCiAJdGltZW91dCA9IHNvY2tfcmN2dGltZW8obGlzdGVuZXIsIGFyZy0mZ3Q7ZmxhZ3MgJmFtcDsgT19OT05CTE9DSyk7CiAKIAl3aGlsZSAoKGNvbm5lY3RlZCA9IHZzb2NrX2RlcXVldWVfYWNjZXB0KGxpc3RlbmVyKSkgPT0gTlVMTCAmYW1wOyZhbXA7Ci0JICAgICAgIGxpc3RlbmVyLSZndDtza19lcnIgPT0gMCAmYW1wOyZhbXA7IHRpbWVvdXQgIT0gMCkgewomIzQzOwkJdGltZW91dCAhPSAwKSB7CiAJCXByZXBhcmVfdG9fd2FpdChza19zbGVlcChsaXN0ZW5lciksICZhbXA7d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJcmVsZWFzZV9zb2NrKGxpc3RlbmVyKTsKIAkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CkBAIC0xOTA2LDM4ICYjNDM7MTg5OSwyMyBAQCBzdGF0aWMgaW50IHZzb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLAogCQl9CiAJfQogCi0JaWYgKGxpc3RlbmVyLSZndDtza19lcnIpIHsKLQkJZXJyID0gLWxpc3RlbmVyLSZndDtza19lcnI7Ci0JfSBlbHNlIGlmICghY29ubmVjdGVkKSB7CiYjNDM7CWlmICghY29ubmVjdGVkKSB7CiAJCWVyciA9IC1FQUdBSU47Ci0JfQotCi0JaWYgKGNvbm5lY3RlZCkgewomIzQzOwl9IGVsc2UgewogCQlza19hY2NlcHRxX3JlbW92ZWQobGlzdGVuZXIpOwogCiAJCWxvY2tfc29ja19uZXN0ZWQoY29ubmVjdGVkLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAJCXZjb25uZWN0ZWQgPSB2c29ja19zayhjb25uZWN0ZWQpOwogCi0JCS8qIElmIHRoZSBsaXN0ZW5lciBzb2NrZXQgaGFzIHJlY2VpdmVkIGFuIGVycm9yLCB0aGVuIHdlIHNob3VsZAotCQkgKiByZWplY3QgdGhpcyBzb2NrZXQgYW5kIHJldHVybi4gIE5vdGUgdGhhdCB3ZSBzaW1wbHkgbWFyayB0aGUKLQkJICogc29ja2V0IHJlamVjdGVkLCBkcm9wIG91ciByZWZlcmVuY2UsIGFuZCBsZXQgdGhlIGNsZWFudXAKLQkJICogZnVuY3Rpb24gaGFuZGxlIHRoZSBjbGVhbnVwOyB0aGUgZmFjdCB0aGF0IHdlIGZvdW5kIGl0IGluCi0JCSAqIHRoZSBsaXN0ZW5lciYjMzk7cyBhY2NlcHQgcXVldWUgZ3VhcmFudGVlcyB0aGF0IHRoZSBjbGVhbnVwCi0JCSAqIGZ1bmN0aW9uIGhhc24mIzM5O3QgcnVuIHlldC4KLQkJICovCi0JCWlmIChlcnIpIHsKLQkJCXZjb25uZWN0ZWQtJmd0O3JlamVjdGVkID0gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJCW5ld3NvY2stJmd0O3N0YXRlID0gU1NfQ09OTkVDVEVEOwotCQkJc29ja19ncmFmdChjb25uZWN0ZWQsIG5ld3NvY2spOwomIzQzOwkJbmV3c29jay0mZ3Q7c3RhdGUgPSBTU19DT05ORUNURUQ7CiYjNDM7CQlzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7CiAKLQkJCXNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwKLQkJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7CiYjNDM7CQlzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsCiYjNDM7CQkJJmFtcDtjb25uZWN0ZWQtJmd0O3NrX3NvY2tldC0mZ3Q7ZmxhZ3MpOwogCi0JCQlpZiAodnNvY2tfbXNnemVyb2NvcHlfYWxsb3codmNvbm5lY3RlZC0mZ3Q7dHJhbnNwb3J0KSkKLQkJCQlzZXRfYml0KFNPQ0tfU1VQUE9SVF9aQywKLQkJCQkJJmFtcDtjb25uZWN0ZWQtJmd0O3NrX3NvY2tldC0mZ3Q7ZmxhZ3MpOwotCQl9CiYjNDM7CQlpZiAodnNvY2tfbXNnemVyb2NvcHlfYWxsb3codmNvbm5lY3RlZC0mZ3Q7dHJhbnNwb3J0KSkKJiM0MzsJCQlzZXRfYml0KFNPQ0tfU1VQUE9SVF9aQywKJiM0MzsJCQkJJmFtcDtjb25uZWN0ZWQtJmd0O3NrX3NvY2tldC0mZ3Q7ZmxhZ3MpOwogCiAJCXJlbGVhc2Vfc29jayhjb25uZWN0ZWQpOwogCQlzb2NrX3B1dChjb25uZWN0ZWQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjg2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIHZzb2NrIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyB0aGUgdnNvY2sgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBtZXNzaW5nIHdpdGggYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AgYW5kIGBpbmNsdWRlL25ldC9hZl92c29jay5oYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7aW50cmlndWluZywgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHdoYXQgdGhpcyBtZWFucyBmb3IgdGhlIG5ldHdvcmsgc3Vic3lzdGVtLiYjMzQ7IEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcmVtb3ZpbmcgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgLCBhbmQgdGhhdCBpbnN0YW50bHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBUaGF0IGJvb2xlYW4gbGlrZWx5IGhhZCBhIHZlcnkgc3BlY2lmaWMgcHVycG9zZSBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb3IgY29ubmVjdGlvbiBsaWZlY3ljbGUuCgpUaGUgY2hhbmdlcyBmb2N1cyBvbiBhIGZldyBrZXkgZnVuY3Rpb25zOiBgdnNvY2tfcGVuZGluZ193b3JrYCwgYHZzb2NrX2Nvbm5lY3RgLCBhbmQgYHZzb2NrX2FjY2VwdGAuIExldCYjMzk7cyBicmVhayBpdCBkb3duOgoKKiAgICoqYHZzb2NrX3NvY2tgIHN0cnVjdCoqOiBHb25lIGlzIHRoZSBgcmVqZWN0ZWRgIGJvb2xlYW4uIFRoYXQgaW1wbGllcyBhIHNoaWZ0IGluIGhvdyBjb25uZWN0aW9ucyBhcmUgbWFuYWdlZC4KKiAgICoqYHZzb2NrX3BlbmRpbmdfd29ya2AqKjogVGhlIHBhdGNoIGVsaW1pbmF0ZXMgYSBjaGVjayBmb3IgYCF2c2stJmd0O3JlamVjdGVkYC4gVGhpcyBpcyBjb3VwbGVkIHRvIHRoZSBmaXJzdCBwb2ludDsgdGhlICYjMzQ7cmVqZWN0aW9uJiMzNDsgY29uY2VwdCBpcyBnZXR0aW5nIGFsdGVyZWQgb3IgcmVtb3ZlZC4KKiAgICoqYHZzb2NrX2Nvbm5lY3RgKio6IFRoZSBwYXRjaCBpcyBnb2luZyBmcm9tIGBpZiAoc2stJmd0O3NrX2VycilgIHRvIGBlcnIgPSBzb2NrX2Vycm9yKHNrKTsgaWYgKGVycilgLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBjbGVhbmVyIHdheSB0byBnZXQgdGhlIHNvY2tldCBlcnJvci4KKiAgICoqYHZzb2NrX2FjY2VwdGAqKjogVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgY2hlY2sgZm9yIGBsaXN0ZW5lci0mZ3Q7c2tfZXJyID09IDBgIGluIHRoZSBgd2hpbGVgIGxvb3AsIHJlbW92ZXMgaGFuZGxpbmcgZm9yIGBsaXN0ZW5lci0mZ3Q7c2tfZXJyYCwgYW5kIHRoZSBjb2RlIHBhdGggaGFuZGxpbmcgYHZjb25uZWN0ZWQtJmd0O3JlamVjdGVkID0gdHJ1ZWAuIFRoaXMgcG9pbnRzIHRvIGEgY2hhbmdlIGluIGhvdyB0aGUgYWNjZXB0IHF1ZXVlIGlzIGhhbmRsZWQsIG1heWJlIG1vcmUgbGVuaWVudCBlcnJvciBoYW5kbGluZy4KClRoaXMgaXMgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gdnNvY2sgY29yZSBsb2dpYywgd2hpY2ggaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGZvciB0aGUgZWZmZWN0cyBvbiBlcnJvciBoYW5kbGluZyBpbiBgYWNjZXB0KClgIGFuZCBgY29ubmVjdCgpYC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgbmVlZHMgc29tZSBzb2xpZCBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9scy4gVGhlIGZ1bmN0aW9ucyBiZWluZyB0b3VjaGVkIGFyZTogYHZzb2NrX3BlbmRpbmdfd29ya2AsIGB2c29ja19jb25uZWN0YCwgYW5kIGB2c29ja19hY2NlcHRgLiBUaGV5JiMzOTtyZSAqc3RhdGljKiwgYnV0IGFzc2lnbmVkIHRvIGBzdHJ1Y3QgcHJvdG9fb3BzYC4gQWxyaWdodCwgc28gYHZzb2NrX2Nvbm5lY3RgIGFuZCBgdnNvY2tfYWNjZXB0YCBhcmUgdGhlIGFjdHVhbCwgZGlyZWN0IGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIHdyYXBwZXJzLCBsaWtlIHRoZSB1c3VhbCBgc3lzX2Nvbm5lY3RgIC0mZ3Q7IGBfX3N5c19jb25uZWN0YCAtJmd0OyBgc29jay0mZ3Q7b3BzLSZndDtjb25uZWN0YCBwYXR0ZXJuLiBZZXMsIGB2c29ja19jb25uZWN0YCBhbmQgYHZzb2NrX2FjY2VwdGAgYXJlIHN0YXRpYyB3aXRoaW4gYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AsIHNvIHRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzLgoKR2l2ZW4gdGhpcyB1bmRlcnN0YW5kaW5nLCBJIGNhbiBub3cgYmVnaW4gdG8gbWFwIG91dCB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zzb2NrX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9hZl92c29jay5jPTIwOT1zdGF0aWMgREVGSU5FX01VVEVYKHZzb2NrX3JlZ2lzdGVyX211dGV4KTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjM1LVx0KCgoc3JjKS1cdTAwM2Vzdm1fY2lkIF4gKGRzdCktXHUwMDNlc3ZtX3BvcnQpICUgVlNPQ0tfSEFTSF9TSVpFKVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzNjojZGVmaW5lIHZzb2NrX2Nvbm5lY3RlZF9zb2NrZXRzKHNyYywgZHN0KVx0XHRcXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzNzpcdChcdTAwMjZ2c29ja19jb25uZWN0ZWRfdGFibGVbVlNPQ0tfQ09OTl9IQVNIKHNyYywgZHN0KV0pXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjM4OiNkZWZpbmUgdnNvY2tfY29ubmVjdGVkX3NvY2tldHNfdnNrKHZzaylcdFx0XHRcdFxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjM5Olx0dnNvY2tfY29ubmVjdGVkX3NvY2tldHMoXHUwMDI2KHZzayktXHUwMDNlcmVtb3RlX2FkZHIsIFx1MDAyNih2c2spLVx1MDAzZWxvY2FsX2FkZHIpXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjQwLVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNDI9RVhQT1JUX1NZTUJPTF9HUEwodnNvY2tfYmluZF90YWJsZSk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQzOnN0cnVjdCBsaXN0X2hlYWQgdnNvY2tfY29ubmVjdGVkX3RhYmxlW1ZTT0NLX0hBU0hfU0laRV07XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQ0OkVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2Nvbm5lY3RlZF90YWJsZSk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjQ1LURFRklORV9TUElOTE9DSyh2c29ja190YWJsZV9sb2NrKTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjYwPXN0YXRpYyB2b2lkIHZzb2NrX2luaXRfdGFibGVzKHZvaWQpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2Ni1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjc6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHZzb2NrX2Nvbm5lY3RlZF90YWJsZSk7IGkmIzQzOyYjNDM7KVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2ODpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dnNvY2tfY29ubmVjdGVkX3RhYmxlW2ldKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjktfVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0zMjA9X192c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXRfbmV0KHN0cnVjdCBzb2NrYWRkcl92bSAqc3JjLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMjQtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzI1Olx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2c2ssIHZzb2NrX2Nvbm5lY3RlZF9zb2NrZXRzKHNyYywgZHN0KSxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMjYtXHRcdFx0ICAgIGNvbm5lY3RlZF90YWJsZSkge1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0zNDY9dm9pZCB2c29ja19pbnNlcnRfY29ubmVjdGVkKHN0cnVjdCB2c29ja19zb2NrICp2c2spXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzQ3LXtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozNDg6XHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0ID0gdnNvY2tfY29ubmVjdGVkX3NvY2tldHMoXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzQ5LVx0XHRcdTAwMjZ2c2stXHUwMDNlcmVtb3RlX2FkZHIsIFx1MDAyNnZzay1cdTAwM2Vsb2NhbF9hZGRyKTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9NDUxPXZvaWQgdnNvY2tfZm9yX2VhY2hfY29ubmVjdGVkX3NvY2tldChzdHJ1Y3QgdnNvY2tfdHJhbnNwb3J0ICp0cmFuc3BvcnQsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTQ1Ny1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo0NTg6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHZzb2NrX2Nvbm5lY3RlZF90YWJsZSk7IGkmIzQzOyYjNDM7KSB7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNDU5LVx0XHRzdHJ1Y3QgdnNvY2tfc29jayAqdnNrO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjQ2MDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2c2ssIFx1MDAyNnZzb2NrX2Nvbm5lY3RlZF90YWJsZVtpXSxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00NjEtXHRcdFx0XHQgICAgY29ubmVjdGVkX3RhYmxlKSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTU2Nz1pbnQgdnNvY2tfYXNzaWduX3RyYW5zcG9ydChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCBzdHJ1Y3QgdnNvY2tfc29jayAqcHNrKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy02NDAtXHRcdC8qIHRyYW5zcG9ydC1cdTAwM2VyZWxlYXNlKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBzb2NrIGxvY2sgYWNxdWlyZWQuXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6NjQxOlx0XHQgKiBUaGlzIHBhdGggY2FuIG9ubHkgYmUgdGFrZW4gZHVyaW5nIHZzb2NrX2Nvbm5lY3QoKSwgd2hlcmUgd2Vcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy02NDItXHRcdCAqIGhhdmUgYWxyZWFkeSBoZWxkIHRoZSBzb2NrIGxvY2suIEluIHRoZSBvdGhlciBjYXNlcywgdGhpc1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy02NTAtXHRcdCAqIHN0YXRlLCBzaW5jZSB3ZSBhcmUgcmVhc3NpZ25pbmcgdGhlIHNvY2tldCB0byBhIG5ldyB0cmFuc3BvcnRcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo2NTE6XHRcdCAqIGR1cmluZyB2c29ja19jb25uZWN0KCksIGxldCYjMzk7cyByZXNldCB0aGVzZSBmaWVsZHMgdG8gaGF2ZSBhXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNjUyLVx0XHQgKiBjbGVhbiBzdGF0ZS5cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9ODY1PXN0YXRpYyBpbnQgX192c29ja19iaW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3ZtICphZGRyKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy05MDEtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6OTAyOnN0YXRpYyB2b2lkIHZzb2NrX2Nvbm5lY3RfdGltZW91dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTkwMy1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz05MDQ9c3RhdGljIHN0cnVjdCBzb2NrICpfX3Zzb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk0My1cdFdSSVRFX09OQ0UodnNrLVx1MDAzZXBlZXJfc2h1dGRvd24sIDApO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjk0NDpcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnZzay1cdTAwM2Vjb25uZWN0X3dvcmssIHZzb2NrX2Nvbm5lY3RfdGltZW91dCk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTQ1LVx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2dnNrLVx1MDAzZXBlbmRpbmdfd29yaywgdnNvY2tfcGVuZGluZ193b3JrKTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTA1OD1FWFBPUlRfU1lNQk9MX0dQTCh2c29ja19zdHJlYW1faGFzX2RhdGEpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTEwNTktXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTA2MDpzNjQgdnNvY2tfY29ubmVjdGlibGVfaGFzX2RhdGEoc3RydWN0IHZzb2NrX3NvY2sgKnZzaylcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMDYxLXtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTA3MS19XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTA3MjpFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19jb25uZWN0aWJsZV9oYXNfZGF0YSk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTA3My1cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTY0MD1zdGF0aWMgaW50IHZzb2NrX3RyYW5zcG9ydF9jYW5jZWxfcGt0KHN0cnVjdCB2c29ja19zb2NrICp2c2spXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE2NDktXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTY1MDpzdGF0aWMgdm9pZCB2c29ja19jb25uZWN0X3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE2NTEte1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNjcxLVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE2NzI6c3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE2NzMtXHRcdFx0IGludCBhZGRyX2xlbiwgaW50IGZsYWdzKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xODE5LVx0XHQgKiBza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQgaW1wbGllcyB0aGF0IHNvY2tldCBpcyBub3Qgb25cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxODIwOlx0XHQgKiB2c29ja19jb25uZWN0ZWRfdGFibGUuIFdlIGtlZXAgdGhlIGJpbmRpbmcgYW5kIHRoZSB0cmFuc3BvcnRcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xODIxLVx0XHQgKiBhc3NpZ25lZC5cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTk2Nj1zdGF0aWMgdm9pZCB2c29ja191cGRhdGVfYnVmZmVyX3NpemUoc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTk4Mi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxOTgzOnN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdGlibGVfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE5ODQtXHRcdFx0XHRcdGludCBsZXZlbCxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjA5Ni1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMDk3OnN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdGlibGVfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIwOTgtXHRcdFx0XHRcdGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIxNTUtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjE1NjpzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3RpYmxlX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIxNTctXHRcdFx0XHQgICAgIHNpemVfdCBsZW4pXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzMTctXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjMxODpzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3RpYmxlX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjMxOS1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjMzNC1cdFx0cHJlcGFyZV90b193YWl0KHNrX3NsZWVwKHNrKSwgd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzM1Olx0XHRkYXRhID0gdnNvY2tfY29ubmVjdGlibGVfaGFzX2RhdGEodnNrKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMzM2LVx0XHRpZiAoZGF0YSAhPSAwKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yMzg1PXN0YXRpYyBpbnQgX192c29ja19zdHJlYW1fcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjQyMi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNDIzOlx0XHRlcnIgPSB2c29ja19jb25uZWN0aWJsZV93YWl0X2RhdGEoc2ssIFx1MDAyNndhaXQsIHRpbWVvdXQsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjQyNC1cdFx0XHRcdFx0XHQgIFx1MDAyNnJlY3ZfZGF0YSwgdGFyZ2V0KTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjQ2ND1zdGF0aWMgaW50IF9fdnNvY2tfc2VxcGFja2V0X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0NzgtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQ3OTpcdGVyciA9IHZzb2NrX2Nvbm5lY3RpYmxlX3dhaXRfZGF0YShzaywgXHUwMDI2d2FpdCwgdGltZW91dCwgTlVMTCwgMCk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjQ4MC1cdGlmIChlcnIgXHUwMDNjPSAwKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNTE0PWludFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI1MTU6X192c29ja19jb25uZWN0aWJsZV9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTE2LVx0XHRcdCAgICBpbnQgZmxhZ3MpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI1ODE9aW50XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjU4Mjp2c29ja19jb25uZWN0aWJsZV9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTgzLVx0XHRcdCAgaW50IGZsYWdzKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTkzLVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI1OTQ6XHRyZXR1cm4gX192c29ja19jb25uZWN0aWJsZV9yZWN2bXNnKHNvY2ssIG1zZywgbGVuLCBmbGFncyk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjU5NS19XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjU5NjpFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19jb25uZWN0aWJsZV9yZWN2bXNnKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTk3LVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHZzb2NrX3N0cmVhbV9vcHMgPSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MjYtXHQuYmluZCA9IHZzb2NrX2JpbmQsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjYyNzpcdC5jb25uZWN0ID0gdnNvY2tfY29ubmVjdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjI4LVx0LnNvY2tldHBhaXIgPSBzb2NrX25vX3NvY2tldHBhaXIsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MzQtXHQuc2h1dGRvd24gPSB2c29ja19zaHV0ZG93bixcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjM1Olx0LnNldHNvY2tvcHQgPSB2c29ja19jb25uZWN0aWJsZV9zZXRzb2Nrb3B0LFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2MzY6XHQuZ2V0c29ja29wdF9pdGVyID0gdnNvY2tfY29ubmVjdGlibGVfZ2V0c29ja29wdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjM3Olx0LnNlbmRtc2cgPSB2c29ja19jb25uZWN0aWJsZV9zZW5kbXNnLFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2Mzg6XHQucmVjdm1zZyA9IHZzb2NrX2Nvbm5lY3RpYmxlX3JlY3Ztc2csXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjYzOS1cdC5tbWFwID0gc29ja19ub19tbWFwLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHZzb2NrX3NlcXBhY2tldF9vcHMgPSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NDgtXHQuYmluZCA9IHZzb2NrX2JpbmQsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY0OTpcdC5jb25uZWN0ID0gdnNvY2tfY29ubmVjdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjUwLVx0LnNvY2tldHBhaXIgPSBzb2NrX25vX3NvY2tldHBhaXIsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NTYtXHQuc2h1dGRvd24gPSB2c29ja19zaHV0ZG93bixcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjU3Olx0LnNldHNvY2tvcHQgPSB2c29ja19jb25uZWN0aWJsZV9zZXRzb2Nrb3B0LFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2NTg6XHQuZ2V0c29ja29wdF9pdGVyID0gdnNvY2tfY29ubmVjdGlibGVfZ2V0c29ja29wdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjU5Olx0LnNlbmRtc2cgPSB2c29ja19jb25uZWN0aWJsZV9zZW5kbXNnLFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2NjA6XHQucmVjdm1zZyA9IHZzb2NrX2Nvbm5lY3RpYmxlX3JlY3Ztc2csXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY2MS1cdC5tbWFwID0gc29ja19ub19tbWFwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIHZzb2NrIENvbm5lY3Rpb24gRnVuY3Rpb25zKioKCk9rYXksIHNvIGB2c29ja19jb25uZWN0YC4uLiByaWdodCwgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYXMgZXhwZWN0ZWQuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCYjMzk7cyBhbHNvIHRydWUgZm9yIHRoZSBgdnNvY2tfYWNjZXB0YCBmdW5jdGlvbiwgYm90aCBvZiB3aGljaCBhcmUgcmVzaWRpbmcgaW4gYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IG5vbi1zdGF0aWMgd3JhcHBlcnMgZm9yIHRoZXNlIGZ1bmN0aW9ucz8gVGhhdCYjMzk7cyB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBvbiB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHRzLiBMZXQgbWUgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGB2c29ja19hY2NlcHRgIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIG5vbi1zdGF0aWMgY2FsbCBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnNvY2tfYWNjZXB0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9hZl92c29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svYWZfdnNvY2suYz0xNjcyPXN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTg1Ny1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxODU4OnN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTg1OS1cdFx0XHRzdHJ1Y3QgcHJvdG9fYWNjZXB0X2FyZyAqYXJnKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHZzb2NrX3N0cmVhbV9vcHMgPSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MjgtXHQuc29ja2V0cGFpciA9IHNvY2tfbm9fc29ja2V0cGFpcixcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjI5Olx0LmFjY2VwdCA9IHZzb2NrX2FjY2VwdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjMwLVx0LmdldG5hbWUgPSB2c29ja19nZXRuYW1lLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHZzb2NrX3NlcXBhY2tldF9vcHMgPSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NTAtXHQuc29ja2V0cGFpciA9IHNvY2tfbm9fc29ja2V0cGFpcixcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjUxOlx0LmFjY2VwdCA9IHZzb2NrX2FjY2VwdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjUyLVx0LmdldG5hbWUgPSB2c29ja19nZXRuYW1lLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB2c29jayBBUEkgRW50cnlwb2ludHMgZm9yIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBleHBvc2UgdGhlIGB2c29ja2AgZnVuY3Rpb25hbGl0eSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gVGhlIGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBzaW5jZSBgdnNvY2tfY29ubmVjdGAgYW5kIGB2c29ja19hY2NlcHRgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMgZnVuY3Rpb25zLCBzeXprYWxsZXIgd291bGRuJiMzOTt0IGJlIGFibGUgdG8gZGlyZWN0bHkgY2FsbCB0aGVtIGFzIHNlcGFyYXRlIHN5bWJvbHMuIEhvd2V2ZXIsIEkgcmVhbGl6ZSBzeXprYWxsZXIgd2lsbCBmdXp6IGBjb25uZWN0KClgIGFuZCBgYWNjZXB0KClgIG9uIGBBRl9WU09DS2Agc29ja2V0cy4gQnV0IGRvZXMgaXQgdGhlbiBmdXp6IGBjb25uZWN0JHZzb2NrYCBhbmQgYGFjY2VwdCR2c29ja2A/IE15IG1lbnRhbCBtb2RlbCBpcyB0aGF0IGl0IG1hcHMgdG8gYHN5c19jb25uZWN0YCBhbmQgYHN5c19hY2NlcHRgLCB3aGljaCBldmVudHVhbGx5ICpjYWxsKiB0aGVzZSBmdW5jdGlvbnMuCgpUaGVuIEkgcmVjYWxsZWQgdGhlIGd1aWRlbGluZTogcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBpcyBrZXkuIFRoZSBnb29kIG5ld3MgaXMgdGhhdCBgdnNvY2tfY29ubmVjdGAgYW5kIGB2c29ja19hY2NlcHRgIGFyZSBhc3NpZ25lZCB0byB0aGUgYHByb3RvX29wc2Agc3RydWN0cyAoYHZzb2NrX3N0cmVhbV9vcHNgIGFuZCBgdnNvY2tfc2VxcGFja2V0X29wc2ApLiBTaW5jZSB0aGV5JiMzOTtyZSBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gc3RydWN0cywgdGhlIGNvbXBpbGVyICpzaG91bGRuJiMzOTt0KiBpbmxpbmUgdGhlbS4gVGhlaXIgYWRkcmVzc2VzIGFyZSBkZWZpbml0ZWx5IHRha2VuLCBzbyB0aGV5IHNob3VsZCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuCgpCdXQsIGlmIEkgbmVlZCB0byBwcm92aWRlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhcmUgdGhlcmUgYW55PyBUaGVyZSBhcmVuJiMzOTt0IGFueSBleHBsaWNpdCBub24tc3RhdGljIHdyYXBwZXJzIGZvciBgdnNvY2tfY29ubmVjdGAgYW5kIGB2c29ja19hY2NlcHRgOyB0aGV5IGFyZSBkaXJlY3RseSBhc3NpZ25lZCB3aXRoaW4gdGhlIGBwcm90b19vcHNgLiBTbyBpdCBsb29rcyBsaWtlIEkgY2FuIGp1c3QgbGlzdCBgdnNvY2tfY29ubmVjdGAgYW5kIGB2c29ja19hY2NlcHRgLgoKV2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCBgdnNvY2tfcGVuZGluZ193b3JrYD8gVGhpcyBpcyBhIHdvcmtxdWV1ZSBjYWxsYmFjay4gSXQmIzM5O3MgKmFsc28qIHN0YXRpYywgYnV0IGl0cyBhZGRyZXNzIGlzIHRha2VuIHdpdGhpbiBgSU5JVF9ERUxBWUVEX1dPUktgLiBTbywgaXQgd29uJiMzOTt0IGJlIGlubGluZWQgZWl0aGVyISBTbywgSSB0aGluayBJIGNhbiBzYWZlbHkgaW5jbHVkZSBgdnNvY2tfY29ubmVjdGAsIGB2c29ja19hY2NlcHRgLCBhbmQgYHZzb2NrX3BlbmRpbmdfd29ya2AgYXMgc3VpdGFibGUgY2FuZGlkYXRlcy4KCkZpbmFsbHksIEkgc2hvdWxkIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgYEFGX1ZTT0NLYCBzdXBwb3J0IHJlcXVpcmVzIGBDT05GSUdfVlNPQ0tFVFNgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgYnV0IEkmIzM5O2xsIG1ha2Ugc3VyZSBpdCYjMzk7cyBlbmFibGVkIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVlNPQ0tFVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9LY29uZmlnLTUtXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6Njpjb25maWcgVlNPQ0tFVFNcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXQgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMTgtXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6MTk6Y29uZmlnIFZTT0NLRVRTX0RJQUdcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yOC1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzoyOTpjb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zMC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0cyBsb29wYmFjayB0cmFuc3BvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBWU09DS0VUUyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgYFZTT0NLRVRTYCBzdWJzeXN0ZW0uIFRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSByZWxldmFudCBtb2R1bGUuIExldCYjMzk7cyBzZWUsIHRoYXQgd291bGQgYmUgYG5ldC92bXdfdnNvY2svS2NvbmZpZ2AuIFRoaXMgZmlsZSBzaG91bGQgbGF5IG91dCBldmVyeXRoaW5nIEkgbmVlZCB0byBrbm93IGluIHRlcm1zIG9mIHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzLCBvcHRpb25zLCBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyBuZWVkIHRvIGJlIHByZXNlbnQgb3IgZW5hYmxlZCBmb3IgYFZTT0NLRVRTYCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBwZXJoYXBzIHRoaW5ncyBsaWtlIGh5cGVydmlzb3Igc3BlY2lmaWMgc2V0dGluZ3Mgb3IgY2VydGFpbiBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb25zLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgc29ydCBvZiBkZWJ1Z2dpbmcgb3IgcG9ydGluZyBlZmZvcnQgSSYjMzk7bGwgbmVlZCB0byBkby4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyBpbiB0aGF0IGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVnNvY2sgcHJvdG9jb2xcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFZTT0NLRVRTXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldCBwcm90b2NvbFwmIzM0O1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBWaXJ0dWFsIFNvY2tldCBQcm90b2NvbCBpcyBhIHNvY2tldCBwcm90b2NvbCBzaW1pbGFyIHRvIFRDUC9JUFxuICAxMDpcdFx0ICBhbGxvd2luZyBjb21tdW5pY2F0aW9uIGJldHdlZW4gVmlydHVhbCBNYWNoaW5lcyBhbmQgaHlwZXJ2aXNvclxuICAxMTpcdFx0ICBvciBob3N0LlxuICAxMjpcdFxuICAxMzpcdFx0ICBZb3Ugc2hvdWxkIGFsc28gc2VsZWN0IG9uZSBvciBtb3JlIGh5cGVydmlzb3Itc3BlY2lmaWMgdHJhbnNwb3J0c1xuICAxNDpcdFx0ICBiZWxvdy5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICAxNzpcdFx0ICB3aWxsIGJlIGNhbGxlZCB2c29jay4gSWYgdW5zdXJlLCBzYXkgTi5cbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgVlNPQ0tFVFNfRElBR1xuICAyMDpcdFx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTg4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29uc2lkZXJpbmcgYFZTT0NLRVRTYCBUZXN0aW5nIE9wdGlvbnMqKgoKUmlnaHQsIHNvIGBWU09DS0VUU2AsIGluaGVyZW50bHksIGlzIHN0YW5kLWFsb25lLiBObyBvdGhlciBsaWJyYXJpZXMgYXJlIHJlcXVpcmVkLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgcGx1cyBmb3Iga2VlcGluZyB0aGluZ3MgY2xlYW4uIE5vdywgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0byBhY3R1YWxseSAqdGVzdCogdGhpcy4gVG8gYWN0dWFsbHkgZXhlcmNpc2UgdGhlIGBWU09DS0VUU2AgQVBJLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgYSB0cmFuc3BvcnQgbGF5ZXIsIG9mIGNvdXJzZS4gRm9yIG15IHB1cnBvc2VzLCBwYXJ0aWN1bGFybHkgZm9yIGZ1enppbmcsIGBWU09DS0VUU19MT09QQkFDS2AgaXMgYWN0dWFsbHkgYW4gZXhjZWxsZW50IGNob2ljZS4gTm8gaHlwZXJ2aXNvciBkZXBlbmRlbmNpZXMgbWVhbnMgbGVzcyBvdmVyaGVhZCBhbmQgY29tcGxleGl0eSwgd2hpY2ggaXMgaWRlYWwgd2hlbiBJJiMzOTttIGFpbWluZyBmb3Igc3BlZWQgYW5kIHNpbXBsaWNpdHkgaW4gbXkgZnV6emluZyBzZXR1cC4gVGhpcyBzaG91bGQgYWxsb3cgZm9yIGVmZmljaWVudCBhbmQgZm9jdXNlZCB0ZXN0aW5nIG9mIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMTpcdFx0ZGVwZW5kcyBvbiBWU09DS0VUU1xuICAyMjpcdFx0ZGVmYXVsdCB5XG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFN1cHBvcnQgZm9yIFBGX1ZTT0NLIHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0aGUgc3MgdG9vbC5cbiAgMjU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMjY6XHRcbiAgMjc6XHRcdCAgRW5hYmxlIHRoaXMgbW9kdWxlIHNvIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgY2FuIHF1ZXJ5IG9wZW4gc29ja2V0cy5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcbiAgMzA6XHRcdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0cyBsb29wYmFjayB0cmFuc3BvcnRcJiMzNDtcbiAgMzE6XHRcdGRlcGVuZHMgb24gVlNPQ0tFVFNcbiAgMzI6XHRcdGRlZmF1bHQgeVxuICAzMzpcdFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cbiAgMzQ6XHRcdGhlbHBcbiAgMzU6XHRcdCAgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIGxvb3BiYWNrIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzLFxuICAzNjpcdFx0ICB1c2luZyB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydF9jb21tb24uXG4gIDM3Olx0XG4gIDM4Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgMzk6XHRcdCAgd2lsbCBiZSBjYWxsZWQgdnNvY2tfbG9vcGJhY2suIElmIHVuc3VyZSwgc2F5IE4uXG4gIDQwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTA3CgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDI5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBWU09DSyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgdGhyb3VnaCB0aGUgcHJvcG9zZWQgY2hhbmdlcyB0byB0aGUgVlNPQ0sgc3Vic3lzdGVtLiBJdCBzZWVtcyBsaWtlIGVuYWJsaW5nIGBWU09DS0VUU2AgYW5kIGBWU09DS0VUU19MT09QQkFDS2AgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0ZXN0aW5nLiBJIHF1aWNrbHkgY29uZmlybWVkIHRoYXQgYFZJUlRJT19WU09DS0VUU19DT01NT05gIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYnkgYFZTT0NLRVRTX0xPT1BCQUNLYCwgc28gdGhvc2UgdHdvIGFyZSBhbGwgSSBuZWVkIHRvIGZvY3VzIG9uLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIHN0cmVhbWxpbmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGVycm9yIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgcmVtb3ZpbmcgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgLCB3aGljaCBtYWtlcyBzZW5zZSB0byBtZeKAlGl0IGZlZWxzIGxpa2UgYSBzb21ld2hhdCByZWR1bmRhbnQgcGllY2Ugb2Ygc3RhdGUuIFRoZSBjb2RlIG5vdyBoYW5kbGVzIHRoZSByZWplY3Rpb24gbG9naWMgaW4gYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YCBtb3JlIGNvbmNpc2VseS4gSW4gYHZzb2NrX2FjY2VwdGAsIGluc3RlYWQgb2Ygc2V0dGluZyBgdmNvbm5lY3RlZC0mZ3Q7cmVqZWN0ZWQgPSB0cnVlYCwgaXQgbm93IHNpbXBseSByZXR1cm5zIGAtRUFHQUlOYCBpZiB0aGUgY29ubmVjdGlvbiBpc24mIzM5O3QgcmVhZHkuIEFuZCwgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBzd2l0Y2hlZCB0byB1c2luZyBgc29ja19lcnJvcihzaylgIGluIGB2c29ja19jb25uZWN0YCBpbnN0ZWFkIG9mIGRpcmVjdGx5IGFjY2Vzc2luZyBgc2stJmd0O3NrX2VycmAuIFRoZSBwYXRjaCBhbHNvIHNpbXBsaWZpZXMgYHZzb2NrX3BlbmRpbmdfd29ya2AsIHJlbW92aW5nIHRoZSBjaGVjayB0aGF0IGludm9sdmVkIHRoZSBgcmVqZWN0ZWRgIGZpZWxkLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IHRvdWNoaW5nIG9uIGNyaXRpY2FsIGFzcGVjdHMgb2YgdGhlIGNvbm5lY3Rpb24gcHJvY2Vzcy4gR2l2ZW4gdGhlIGNoYW5nZXMgdG8gdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIEkgdGhpbmsgd2Ugc2hvdWxkIGRlZmluaXRlbHkgcHJpb3JpdGl6ZSBmdXp6aW5nIHRoZSBgdnNvY2tfY29ubmVjdGAsIGB2c29ja19hY2NlcHRgLCBhbmQgYHZzb2NrX3BlbmRpbmdfd29ya2AgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGFyb3VuZCBlcnJvciBjb25kaXRpb25zIGFuZCBjb25jdXJyZW50IGNvbm5lY3Rpb24gYXR0ZW1wdHMuIEl0JiMzOTtzIHRpbWUgdG8gZ2VuZXJhdGUgc29tZSB0ZXN0IGNhc2VzLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7VlNPQ0tFVFNfTE9PUEJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2c29ja19jb25uZWN0JiMzNDssCiAgICAmIzM0O3Zzb2NrX2FjY2VwdCYjMzQ7LAogICAgJiMzNDt2c29ja19wZW5kaW5nX3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyBmb3IgQUZfVlNPQ0sgc29ja2V0cy4gSXQgcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBzdGF0ZSBmcm9tIHBlbmRpbmcgc29ja2V0cyBhbmQgY2hhbmdlcyBob3cgYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YCBoYW5kbGUgc29ja2V0IGVycm9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIgZHVyaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTX0xPT1BCQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dnNvY2tfY29ubmVjdCYjMzQ7LAogICAgJiMzNDt2c29ja19hY2NlcHQmIzM0OywKICAgICYjMzQ7dnNvY2tfcGVuZGluZ193b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgZXJyb3IgaGFuZGxpbmcgbG9naWMgZm9yIEFGX1ZTT0NLIHNvY2tldHMuIEl0IHJlbW92ZXMgdGhlIGByZWplY3RlZGAgc3RhdGUgZnJvbSBwZW5kaW5nIHNvY2tldHMgYW5kIGNoYW5nZXMgaG93IGB2c29ja19hY2NlcHRgIGFuZCBgdnNvY2tfY29ubmVjdGAgaGFuZGxlIHNvY2tldCBlcnJvcnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzIG9jY3VyIGR1cmluZyBjb25uZWN0aW9uIGZhaWx1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOTowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgIGFuZCBzaW1wbGlmaWVzIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIGB2c29ja19hY2NlcHRgIGFuZCBgdnNvY2tfY29ubmVjdGAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcy4gVGhlIGNoYW5nZXMgZG8gbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgbG9naWMgZXJyb3JzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRiYTU0NmI2MGRlMDhiMGZlMWE3M2FjNDY0ZWY1NmRhY2ZiZTIxMjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxOTowMToxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmggYi9pbmNsdWRlL25ldC9hZl92c29jay5oCmluZGV4IDMwMDQ2YTNjMjBmNzMuLjMzNTdlZTYyZDEwYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaApAQCAtNTIsMTMgJiM0Mzs1MiwxMCBAQCBzdHJ1Y3QgdnNvY2tfc29jayB7CiAJICogVGhlIGxpc3RlbmluZyBzb2NrZXQgaXMgdGhlIGhlYWQgZm9yIGJvdGggbGlzdHMuICBTb2NrZXRzIGNyZWF0ZWQKIAkgKiBmb3IgY29ubmVjdGlvbiByZXF1ZXN0cyBhcmUgcGxhY2VkIGluIHRoZSBwZW5kaW5nIGxpc3QgdW50aWwgdGhleQogCSAqIGFyZSBjb25uZWN0ZWQsIGF0IHdoaWNoIHBvaW50IHRoZXkgYXJlIHB1dCBpbiB0aGUgYWNjZXB0IHF1ZXVlIGxpc3QKLQkgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS4gIElmIGFjY2VwdCgpIGNhbm5vdCBhY2NlcHQgdGhlCi0JICogY29ubmVjdGlvbiwgaXQgaXMgbWFya2VkIGFzIHJlamVjdGVkIHNvIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGtub3dzCi0JICogdG8gY2xlYW4gdXAgdGhlIHNvY2tldC4KJiM0MzsJICogc28gdGhleSBjYW4gYmUgYWNjZXB0ZWQgaW4gYWNjZXB0KCkuCiAJICovCiAJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpbmtzOwogCXN0cnVjdCBsaXN0X2hlYWQgYWNjZXB0X3F1ZXVlOwotCWJvb2wgcmVqZWN0ZWQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBjb25uZWN0X3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBwZW5kaW5nX3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBjbG9zZV93b3JrOwpkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCmluZGV4IDYyMmRiZDA0Njc5OTQuLmU4OWNiODRiOGQ3MzcgMTAwNjQ0Ci0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKQEAgLTM4LDEwICYjNDM7MzgsOSBAQAogICogcGVuZGluZyBzb2NrZXQuICBXaGVuIHRoYXQgc29ja2V0IHJlYWNoZXMgdGhlIGNvbm5lY3RlZCBzdGF0ZSwgaXQgaXMgcmVtb3ZlZAogICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0JiMzOTtzIHBlbmRpbmcgbGlzdCBhbmQgZW5xdWV1ZWQgaW4gdGhlIGxpc3RlbmVyCiAgKiBzb2NrZXQmIzM5O3MgYWNjZXB0IHF1ZXVlLiAgQ2FsbGVycyBvZiBhY2NlcHQoMikgd2lsbCBhY2NlcHQgY29ubmVjdGVkIHNvY2tldHMKLSAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCYjMzk7cyBhY2NlcHQgcXVldWUuICBJZiB0aGUgc29ja2V0IGNhbm5vdCBiZSBhY2NlcHRlZAotICogZm9yIHNvbWUgcmVhc29uIHRoZW4gaXQgaXMgbWFya2VkIHJlamVjdGVkLiAgT25jZSB0aGUgY29ubmVjdGlvbiBpcwotICogYWNjZXB0ZWQsIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cAotICogZmFsbHMgd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy4KJiM0MzsgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQmIzM5O3MgYWNjZXB0IHF1ZXVlLiBPbmNlIHRoZSBjb25uZWN0aW9uIGlzIGFjY2VwdGVkLAomIzQzOyAqIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cCBmYWxscwomIzQzOyAqIHdpdGggdGhhdCB1c2VyIHByb2Nlc3MuCiAgKgogICogLSBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXNlIHBlbmRpbmcgc29ja2V0cyB3aWxsIG5ldmVyIHJlYWNoIHRoZSBjb25uZWN0ZWQKICAqIHN0YXRlOyBpbiBmYWN0LCB3ZSBtYXkgbmV2ZXIgcmVjZWl2ZSBhbm90aGVyIHBhY2tldCBhZnRlciB0aGUgY29ubmVjdGlvbgpAQCAtNDksOSAmIzQzOzQ4LDcgQEAKICAqIGZ1dHVyZSwgYWZ0ZXIgc29tZSBhbW91bnQgb2YgdGltZSBwYXNzZXMgd2hlcmUgYSBjb25uZWN0aW9uIHNob3VsZCBoYXZlIGJlZW4KICAqIGVzdGFibGlzaGVkLiAgVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIHNvY2tldCBpcyBvZmYgYWxsIGxpc3RzIHNvIGl0CiAgKiBjYW5ub3QgYmUgcmV0cmlldmVkLCB0aGVuIGRyb3BzIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBzb2NrZXQgc28gaXQgaXMgY2xlYW5lZAotICogdXAgKHNvY2tfcHV0KCkgLSZndDsgc2tfZnJlZSgpIC0mZ3Q7IG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuICBOb3RlIHRoaXMKLSAqIGZ1bmN0aW9uIHdpbGwgYWxzbyBjbGVhbnVwIHJlamVjdGVkIHNvY2tldHMsIHRob3NlIHRoYXQgcmVhY2ggdGhlIGNvbm5lY3RlZAotICogc3RhdGUgYnV0IGxlYXZlIGl0IGJlZm9yZSB0aGV5IGhhdmUgYmVlbiBhY2NlcHRlZC4KJiM0MzsgKiB1cCAoc29ja19wdXQoKSAtJmd0OyBza19mcmVlKCkgLSZndDsgb3VyIHNrX2Rlc3RydWN0IGltcGxlbWVudGF0aW9uKS4KICAqCiAgKiAtIExvY2sgb3JkZXJpbmcgZm9yIHBlbmRpbmcgb3IgYWNjZXB0IHF1ZXVlIHNvY2tldHMgaXM6CiAgKgpAQCAtNzc0LDExICYjNDM7NzcxLDEwIEBAIHN0YXRpYyB2b2lkIHZzb2NrX3BlbmRpbmdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAKIAlpZiAodnNvY2tfaXNfcGVuZGluZyhzaykpIHsKIAkJdnNvY2tfcmVtb3ZlX3BlbmRpbmcobGlzdGVuZXIsIHNrKTsKLQl9IGVsc2UgaWYgKCF2c2stJmd0O3JlamVjdGVkKSB7Ci0JCS8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBhbmQgYWNjZXB0KCkgZGlkIG5vdCByZWplY3QKLQkJICogdXMsIHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkIGJ5IG91ciB1c2VyIHByb2Nlc3MuICBXZQotCQkgKiBqdXN0IG5lZWQgdG8gZHJvcCBvdXIgcmVmZXJlbmNlcyB0byB0aGUgc29ja2V0cyBhbmQgYmUgb24KLQkJICogb3VyIHdheS4KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBzbyB3ZSBtdXN0IGhhdmUgYmVlbiBhY2NlcHRlZAomIzQzOwkJICogYnkgb3VyIHVzZXIgcHJvY2Vzcy4gV2UganVzdCBuZWVkIHRvIGRyb3Agb3VyIHJlZmVyZW5jZXMgdG8KJiM0MzsJCSAqIHRoZSBzb2NrZXRzIGFuZCBiZSBvbiBvdXIgd2F5LgogCQkgKi8KIAkJY2xlYW51cCA9IGZhbHNlOwogCQlnb3RvIG91dDsKQEAgLTk0Miw3ICYjNDM7OTM4LDYgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpfX3Zzb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJdnNrLSZndDtsaXN0ZW5lciA9IE5VTEw7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDt2c2stJmd0O3BlbmRpbmdfbGlua3MpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7dnNrLSZndDthY2NlcHRfcXVldWUpOwotCXZzay0mZ3Q7cmVqZWN0ZWQgPSBmYWxzZTsKIAl2c2stJmd0O3NlbnRfcmVxdWVzdCA9IGZhbHNlOwogCXZzay0mZ3Q7aWdub3JlX2Nvbm5lY3RpbmdfcnN0ID0gZmFsc2U7CiAJV1JJVEVfT05DRSh2c2stJmd0O3BlZXJfc2h1dGRvd24sIDApOwpAQCAtMTg0NywxMiAmIzQzOzE4NDIsMTAgQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLAogCQlwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCAmYW1wO3dhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJfQogCi0JaWYgKHNrLSZndDtza19lcnIpIHsKLQkJZXJyID0gLXNrLSZndDtza19lcnI7CiYjNDM7CWVyciA9IHNvY2tfZXJyb3Ioc2spOwomIzQzOwlpZiAoZXJyKSB7CiAJCXNrLSZndDtza19zdGF0ZSA9IFRDUF9DTE9TRTsKIAkJc29jay0mZ3Q7c3RhdGUgPSBTU19VTkNPTk5FQ1RFRDsKLQl9IGVsc2UgewotCQllcnIgPSAwOwogCX0KIAogb3V0X3dhaXQ6CkBAIC0xODkzLDcgJiM0MzsxODg2LDcgQEAgc3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywKIAl0aW1lb3V0ID0gc29ja19yY3Z0aW1lbyhsaXN0ZW5lciwgYXJnLSZndDtmbGFncyAmYW1wOyBPX05PTkJMT0NLKTsKIAogCXdoaWxlICgoY29ubmVjdGVkID0gdnNvY2tfZGVxdWV1ZV9hY2NlcHQobGlzdGVuZXIpKSA9PSBOVUxMICZhbXA7JmFtcDsKLQkgICAgICAgbGlzdGVuZXItJmd0O3NrX2VyciA9PSAwICZhbXA7JmFtcDsgdGltZW91dCAhPSAwKSB7CiYjNDM7CQl0aW1lb3V0ICE9IDApIHsKIAkJcHJlcGFyZV90b193YWl0KHNrX3NsZWVwKGxpc3RlbmVyKSwgJmFtcDt3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlyZWxlYXNlX3NvY2sobGlzdGVuZXIpOwogCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKQEAgLTE5MDYsMzggJiM0MzsxODk5LDIzIEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssCiAJCX0KIAl9CiAKLQlpZiAobGlzdGVuZXItJmd0O3NrX2VycikgewotCQllcnIgPSAtbGlzdGVuZXItJmd0O3NrX2VycjsKLQl9IGVsc2UgaWYgKCFjb25uZWN0ZWQpIHsKJiM0MzsJaWYgKCFjb25uZWN0ZWQpIHsKIAkJZXJyID0gLUVBR0FJTjsKLQl9Ci0KLQlpZiAoY29ubmVjdGVkKSB7CiYjNDM7CX0gZWxzZSB7CiAJCXNrX2FjY2VwdHFfcmVtb3ZlZChsaXN0ZW5lcik7CiAKIAkJbG9ja19zb2NrX25lc3RlZChjb25uZWN0ZWQsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAkJdmNvbm5lY3RlZCA9IHZzb2NrX3NrKGNvbm5lY3RlZCk7CiAKLQkJLyogSWYgdGhlIGxpc3RlbmVyIHNvY2tldCBoYXMgcmVjZWl2ZWQgYW4gZXJyb3IsIHRoZW4gd2Ugc2hvdWxkCi0JCSAqIHJlamVjdCB0aGlzIHNvY2tldCBhbmQgcmV0dXJuLiAgTm90ZSB0aGF0IHdlIHNpbXBseSBtYXJrIHRoZQotCQkgKiBzb2NrZXQgcmVqZWN0ZWQsIGRyb3Agb3VyIHJlZmVyZW5jZSwgYW5kIGxldCB0aGUgY2xlYW51cAotCQkgKiBmdW5jdGlvbiBoYW5kbGUgdGhlIGNsZWFudXA7IHRoZSBmYWN0IHRoYXQgd2UgZm91bmQgaXQgaW4KLQkJICogdGhlIGxpc3RlbmVyJiMzOTtzIGFjY2VwdCBxdWV1ZSBndWFyYW50ZWVzIHRoYXQgdGhlIGNsZWFudXAKLQkJICogZnVuY3Rpb24gaGFzbiYjMzk7dCBydW4geWV0LgotCQkgKi8KLQkJaWYgKGVycikgewotCQkJdmNvbm5lY3RlZC0mZ3Q7cmVqZWN0ZWQgPSB0cnVlOwotCQl9IGVsc2UgewotCQkJbmV3c29jay0mZ3Q7c3RhdGUgPSBTU19DT05ORUNURUQ7Ci0JCQlzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7CiYjNDM7CQluZXdzb2NrLSZndDtzdGF0ZSA9IFNTX0NPTk5FQ1RFRDsKJiM0MzsJCXNvY2tfZ3JhZnQoY29ubmVjdGVkLCBuZXdzb2NrKTsKIAotCQkJc2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULAotCQkJCSZhbXA7Y29ubmVjdGVkLSZndDtza19zb2NrZXQtJmd0O2ZsYWdzKTsKJiM0MzsJCXNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwKJiM0MzsJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7CiAKLQkJCWlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLSZndDt0cmFuc3BvcnQpKQotCQkJCXNldF9iaXQoU09DS19TVVBQT1JUX1pDLAotCQkJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7Ci0JCX0KJiM0MzsJCWlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLSZndDt0cmFuc3BvcnQpKQomIzQzOwkJCXNldF9iaXQoU09DS19TVVBQT1JUX1pDLAomIzQzOwkJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7CiAKIAkJcmVsZWFzZV9zb2NrKGNvbm5lY3RlZCk7CiAJCXNvY2tfcHV0KGNvbm5lY3RlZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjgzCgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDU4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSB2c29jayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhZl92c29jay5jYCBhbmQgYGFmX3Zzb2NrLmhgLCBzcGVjaWZpY2FsbHkgcmVtb3ZpbmcgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiAgSSBhbHdheXMgZ28gdGhyb3VnaCB0aGlzIGNoZWNrbGlzdC4KClRoZSBjb2RlIGNoYW5nZXMgYXJlIG1vc3RseSBmb2N1c2VkIG9uIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgdnNvY2tfcGVuZGluZ193b3JrYCwgYHZzb2NrX2Nvbm5lY3RgLCBhbmQgYHZzb2NrX2FjY2VwdGAuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmVwbGFjaW5nIGRpcmVjdCBjaGVja3Mgb2YgYHNrLSZndDtza19lcnJgIGFuZCBgbGlzdGVuZXItJmd0O3NrX2VycmAgd2l0aCBgc29ja19lcnJvcihzaylgLiAgQXQgZmlyc3QgZ2xhbmNlLCBubyBuZXcgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludm9sdmVkLCBhbmQgaXQgZG9lc24mIzM5O3Qgc2VlbSBsaWtlIGFueSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgKmJlaW5nKiBleHBvc2VkLiAgVGhlIGNoYW5nZXMgYXBwZWFyIHRvIGJlIHB1cmVseSBsb2dpYy1kcml2ZW4sIHByaW1hcmlseSByZWxhdGVkIHRvIGhvdyBzb2NrZXQgZXJyb3JzIGFuZCBjb25uZWN0aW9uIHJlamVjdGlvbnMgYXJlIGhhbmRsZWQuIEkgZG9uJiMzOTt0IHNlZSBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncy4gVGhpcyBkb2VzbiYjMzk7dCBzZWVtIGxpa2UgdGhlIHNvcnQgb2YgY2hhbmdlIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBzaG91bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcuCgpIb3dldmVyLCBsZXQmIzM5O3Mgem9vbSBpbiBvbiBgdnNvY2tfYWNjZXB0YCDigJMgdGhlcmUmIzM5O3MgYSBkZWZpbml0ZSBsb2dpYyBzaGlmdC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgYHdoaWxlYCBsb29wIGNvbmRpdGlvbiB0aGF0IGNoZWNrZWQgZm9yIGJvdGggYSBjb25uZWN0ZWQgc29ja2V0IGFuZCBgbGlzdGVuZXItJmd0O3NrX2VycmAsIGFuZCB0aGVuIGNoZWNrZWQgYGxpc3RlbmVyLSZndDtza19lcnJgICphZ2FpbiogYWZ0ZXIgdGhlIGxvb3AuIE5vdywgaXQgc2VlbXMgdGhhdCBpZiBgbGlzdGVuZXItJmd0O3NrX2VycmAgaXNuJiMzOTt0IHplcm8sIGl0IHdpbGwgZWl0aGVyIHJldHVybiBgLUVBR0FJTmAgb3IgY29udGludWUgdG8gZXhlY3V0ZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgbG9naWMgY2hhbmdlIGFuZCBuZWVkcyBjYXJlZnVsIHJldmlldywgYnV0IGl0IHN0aWxsIHNlZW1zIHRoYXQgdGhlIGNoYW5nZSBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIGdvIHRocm91Z2ggdGhlIEtNU0FOIHJ1bGVzOiAgRXNzZW50aWFsbHksIEkmIzM5O20gY2hlY2tpbmcgZm9yICpteSogYXJlYXMgb2YgZXhwZXJ0aXNlIC0tIGNhc2VzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG1pZ2h0IHNuZWFrIHRocm91Z2guCjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkPyBOby4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOZWdhdGl2ZS4KNC4gQm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIHdoaWNoIGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGE/IERvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdC4KCkdpdmVuIGFsbCBvZiB0aGlzLCBJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBJdCYjMzk7cyBhIGxvZ2ljIGNoYW5nZSwgbGlrZWx5IHNpbXBsaWZ5aW5nIGVycm9yIGhhbmRsaW5nLCBidXQgbm90IGludHJvZHVjaW5nIGFueSBhcHBhcmVudCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGluIHRoZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBgcmVqZWN0ZWRgIGZpZWxkIGZyb20gYHN0cnVjdCB2c29ja19zb2NrYCBhbmQgc2ltcGxpZmllcyBlcnJvciBoYW5kbGluZyBsb2dpYyBpbiBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGxvZ2ljIGVycm9ycykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdnNvY2tfc29ja2AgYW5kIHNpbXBsaWZpZXMgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBhbnkgbmV3IGFsbG9jYXRpb25zIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBUaGUgY2hhbmdlcyBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBsb2dpYyBlcnJvcnMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MDE6MTcuOTMzNjM5MDg2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA2NzU1NzgxMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnNvY2tfY29ubmVjdFwiLFxuICAgIFwidnNvY2tfYWNjZXB0XCIsXG4gICAgXCJ2c29ja19wZW5kaW5nX3dvcmtcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgIGFuZCBzaW1wbGlmaWVzIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIGB2c29ja19hY2NlcHRgIGFuZCBgdnNvY2tfY29ubmVjdGAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcy4gVGhlIGNoYW5nZXMgZG8gbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgbG9naWMgZXJyb3JzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyBmb3IgQUZfVlNPQ0sgc29ja2V0cy4gSXQgcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBzdGF0ZSBmcm9tIHBlbmRpbmcgc29ja2V0cyBhbmQgY2hhbmdlcyBob3cgYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YCBoYW5kbGUgc29ja2V0IGVycm9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIgZHVyaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjE3LjkzMzY5MTA0NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MjYxODI5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRiYTU0NmI2MGRlMDhiMGZlMWE3M2FjNDY0ZWY1NmRhY2ZiZTIxMjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTk6MDE6MTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaCBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcXG5pbmRleCAzMDA0NmEzYzIwZjczLi4zMzU3ZWU2MmQxMGJmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcXG4rKysgYi9pbmNsdWRlL25ldC9hZl92c29jay5oXFxuQEAgLTUyLDEzICs1MiwxMCBAQCBzdHJ1Y3QgdnNvY2tfc29jayB7XFxuIFxcdCAqIFRoZSBsaXN0ZW5pbmcgc29ja2V0IGlzIHRoZSBoZWFkIGZvciBib3RoIGxpc3RzLiAgU29ja2V0cyBjcmVhdGVkXFxuIFxcdCAqIGZvciBjb25uZWN0aW9uIHJlcXVlc3RzIGFyZSBwbGFjZWQgaW4gdGhlIHBlbmRpbmcgbGlzdCB1bnRpbCB0aGV5XFxuIFxcdCAqIGFyZSBjb25uZWN0ZWQsIGF0IHdoaWNoIHBvaW50IHRoZXkgYXJlIHB1dCBpbiB0aGUgYWNjZXB0IHF1ZXVlIGxpc3RcXG4tXFx0ICogc28gdGhleSBjYW4gYmUgYWNjZXB0ZWQgaW4gYWNjZXB0KCkuICBJZiBhY2NlcHQoKSBjYW5ub3QgYWNjZXB0IHRoZVxcbi1cXHQgKiBjb25uZWN0aW9uLCBpdCBpcyBtYXJrZWQgYXMgcmVqZWN0ZWQgc28gdGhlIGNsZWFudXAgZnVuY3Rpb24ga25vd3NcXG4tXFx0ICogdG8gY2xlYW4gdXAgdGhlIHNvY2tldC5cXG4rXFx0ICogc28gdGhleSBjYW4gYmUgYWNjZXB0ZWQgaW4gYWNjZXB0KCkuXFxuIFxcdCAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIHBlbmRpbmdfbGlua3M7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgYWNjZXB0X3F1ZXVlO1xcbi1cXHRib29sIHJlamVjdGVkO1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIGNvbm5lY3Rfd29yaztcXG4gXFx0c3RydWN0IGRlbGF5ZWRfd29yayBwZW5kaW5nX3dvcms7XFxuIFxcdHN0cnVjdCBkZWxheWVkX3dvcmsgY2xvc2Vfd29yaztcXG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXFxuaW5kZXggNjIyZGJkMDQ2Nzk5NC4uZTg5Y2I4NGI4ZDczNyAxMDA2NDRcXG4tLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcXG4rKysgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcXG5AQCAtMzgsMTAgKzM4LDkgQEBcXG4gICogcGVuZGluZyBzb2NrZXQuICBXaGVuIHRoYXQgc29ja2V0IHJlYWNoZXMgdGhlIGNvbm5lY3RlZCBzdGF0ZSwgaXQgaXMgcmVtb3ZlZFxcbiAgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQncyBwZW5kaW5nIGxpc3QgYW5kIGVucXVldWVkIGluIHRoZSBsaXN0ZW5lclxcbiAgKiBzb2NrZXQncyBhY2NlcHQgcXVldWUuICBDYWxsZXJzIG9mIGFjY2VwdCgyKSB3aWxsIGFjY2VwdCBjb25uZWN0ZWQgc29ja2V0c1xcbi0gKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQncyBhY2NlcHQgcXVldWUuICBJZiB0aGUgc29ja2V0IGNhbm5vdCBiZSBhY2NlcHRlZFxcbi0gKiBmb3Igc29tZSByZWFzb24gdGhlbiBpdCBpcyBtYXJrZWQgcmVqZWN0ZWQuICBPbmNlIHRoZSBjb25uZWN0aW9uIGlzXFxuLSAqIGFjY2VwdGVkLCBpdCBpcyBvd25lZCBieSB0aGUgdXNlciBwcm9jZXNzIGFuZCB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGNsZWFudXBcXG4tICogZmFsbHMgd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy5cXG4rICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0J3MgYWNjZXB0IHF1ZXVlLiBPbmNlIHRoZSBjb25uZWN0aW9uIGlzIGFjY2VwdGVkLFxcbisgKiBpdCBpcyBvd25lZCBieSB0aGUgdXNlciBwcm9jZXNzIGFuZCB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGNsZWFudXAgZmFsbHNcXG4rICogd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy5cXG4gICpcXG4gICogLSBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXNlIHBlbmRpbmcgc29ja2V0cyB3aWxsIG5ldmVyIHJlYWNoIHRoZSBjb25uZWN0ZWRcXG4gICogc3RhdGU7IGluIGZhY3QsIHdlIG1heSBuZXZlciByZWNlaXZlIGFub3RoZXIgcGFja2V0IGFmdGVyIHRoZSBjb25uZWN0aW9uXFxuQEAgLTQ5LDkgKzQ4LDcgQEBcXG4gICogZnV0dXJlLCBhZnRlciBzb21lIGFtb3VudCBvZiB0aW1lIHBhc3NlcyB3aGVyZSBhIGNvbm5lY3Rpb24gc2hvdWxkIGhhdmUgYmVlblxcbiAgKiBlc3RhYmxpc2hlZC4gIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBzb2NrZXQgaXMgb2ZmIGFsbCBsaXN0cyBzbyBpdFxcbiAgKiBjYW5ub3QgYmUgcmV0cmlldmVkLCB0aGVuIGRyb3BzIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBzb2NrZXQgc28gaXQgaXMgY2xlYW5lZFxcbi0gKiB1cCAoc29ja19wdXQoKSAtXFx1MDAzZSBza19mcmVlKCkgLVxcdTAwM2Ugb3VyIHNrX2Rlc3RydWN0IGltcGxlbWVudGF0aW9uKS4gIE5vdGUgdGhpc1xcbi0gKiBmdW5jdGlvbiB3aWxsIGFsc28gY2xlYW51cCByZWplY3RlZCBzb2NrZXRzLCB0aG9zZSB0aGF0IHJlYWNoIHRoZSBjb25uZWN0ZWRcXG4tICogc3RhdGUgYnV0IGxlYXZlIGl0IGJlZm9yZSB0aGV5IGhhdmUgYmVlbiBhY2NlcHRlZC5cXG4rICogdXAgKHNvY2tfcHV0KCkgLVxcdTAwM2Ugc2tfZnJlZSgpIC1cXHUwMDNlIG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuXFxuICAqXFxuICAqIC0gTG9jayBvcmRlcmluZyBmb3IgcGVuZGluZyBvciBhY2NlcHQgcXVldWUgc29ja2V0cyBpczpcXG4gICpcXG5AQCAtNzc0LDExICs3NzEsMTAgQEAgc3RhdGljIHZvaWQgdnNvY2tfcGVuZGluZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFxuIFxcdGlmICh2c29ja19pc19wZW5kaW5nKHNrKSkge1xcbiBcXHRcXHR2c29ja19yZW1vdmVfcGVuZGluZyhsaXN0ZW5lciwgc2spO1xcbi1cXHR9IGVsc2UgaWYgKCF2c2stXFx1MDAzZXJlamVjdGVkKSB7XFxuLVxcdFxcdC8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBhbmQgYWNjZXB0KCkgZGlkIG5vdCByZWplY3RcXG4tXFx0XFx0ICogdXMsIHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkIGJ5IG91ciB1c2VyIHByb2Nlc3MuICBXZVxcbi1cXHRcXHQgKiBqdXN0IG5lZWQgdG8gZHJvcCBvdXIgcmVmZXJlbmNlcyB0byB0aGUgc29ja2V0cyBhbmQgYmUgb25cXG4tXFx0XFx0ICogb3VyIHdheS5cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogV2UgYXJlIG5vdCBvbiB0aGUgcGVuZGluZyBsaXN0IHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkXFxuK1xcdFxcdCAqIGJ5IG91ciB1c2VyIHByb2Nlc3MuIFdlIGp1c3QgbmVlZCB0byBkcm9wIG91ciByZWZlcmVuY2VzIHRvXFxuK1xcdFxcdCAqIHRoZSBzb2NrZXRzIGFuZCBiZSBvbiBvdXIgd2F5LlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0Y2xlYW51cCA9IGZhbHNlO1xcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtOTQyLDcgKzkzOCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHR2c2stXFx1MDAzZWxpc3RlbmVyID0gTlVMTDtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnZzay1cXHUwMDNlcGVuZGluZ19saW5rcyk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ2c2stXFx1MDAzZWFjY2VwdF9xdWV1ZSk7XFxuLVxcdHZzay1cXHUwMDNlcmVqZWN0ZWQgPSBmYWxzZTtcXG4gXFx0dnNrLVxcdTAwM2VzZW50X3JlcXVlc3QgPSBmYWxzZTtcXG4gXFx0dnNrLVxcdTAwM2VpZ25vcmVfY29ubmVjdGluZ19yc3QgPSBmYWxzZTtcXG4gXFx0V1JJVEVfT05DRSh2c2stXFx1MDAzZXBlZXJfc2h1dGRvd24sIDApO1xcbkBAIC0xODQ3LDEyICsxODQyLDEwIEBAIHN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcXG4gXFx0XFx0cHJlcGFyZV90b193YWl0KHNrX3NsZWVwKHNrKSwgXFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChzay1cXHUwMDNlc2tfZXJyKSB7XFxuLVxcdFxcdGVyciA9IC1zay1cXHUwMDNlc2tfZXJyO1xcbitcXHRlcnIgPSBzb2NrX2Vycm9yKHNrKTtcXG4rXFx0aWYgKGVycikge1xcbiBcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBUQ1BfQ0xPU0U7XFxuIFxcdFxcdHNvY2stXFx1MDAzZXN0YXRlID0gU1NfVU5DT05ORUNURUQ7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGVyciA9IDA7XFxuIFxcdH1cXG4gXFxuIG91dF93YWl0OlxcbkBAIC0xODkzLDcgKzE4ODYsNyBAQCBzdGF0aWMgaW50IHZzb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxcbiBcXHR0aW1lb3V0ID0gc29ja19yY3Z0aW1lbyhsaXN0ZW5lciwgYXJnLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9fTk9OQkxPQ0spO1xcbiBcXG4gXFx0d2hpbGUgKChjb25uZWN0ZWQgPSB2c29ja19kZXF1ZXVlX2FjY2VwdChsaXN0ZW5lcikpID09IE5VTEwgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICAgIGxpc3RlbmVyLVxcdTAwM2Vza19lcnIgPT0gMCBcXHUwMDI2XFx1MDAyNiB0aW1lb3V0ICE9IDApIHtcXG4rXFx0XFx0dGltZW91dCAhPSAwKSB7XFxuIFxcdFxcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChsaXN0ZW5lciksIFxcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xcbiBcXHRcXHRyZWxlYXNlX3NvY2sobGlzdGVuZXIpO1xcbiBcXHRcXHR0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTtcXG5AQCAtMTkwNiwzOCArMTg5OSwyMyBAQCBzdGF0aWMgaW50IHZzb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChsaXN0ZW5lci1cXHUwMDNlc2tfZXJyKSB7XFxuLVxcdFxcdGVyciA9IC1saXN0ZW5lci1cXHUwMDNlc2tfZXJyO1xcbi1cXHR9IGVsc2UgaWYgKCFjb25uZWN0ZWQpIHtcXG4rXFx0aWYgKCFjb25uZWN0ZWQpIHtcXG4gXFx0XFx0ZXJyID0gLUVBR0FJTjtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKGNvbm5lY3RlZCkge1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRza19hY2NlcHRxX3JlbW92ZWQobGlzdGVuZXIpO1xcbiBcXG4gXFx0XFx0bG9ja19zb2NrX25lc3RlZChjb25uZWN0ZWQsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4gXFx0XFx0dmNvbm5lY3RlZCA9IHZzb2NrX3NrKGNvbm5lY3RlZCk7XFxuIFxcbi1cXHRcXHQvKiBJZiB0aGUgbGlzdGVuZXIgc29ja2V0IGhhcyByZWNlaXZlZCBhbiBlcnJvciwgdGhlbiB3ZSBzaG91bGRcXG4tXFx0XFx0ICogcmVqZWN0IHRoaXMgc29ja2V0IGFuZCByZXR1cm4uICBOb3RlIHRoYXQgd2Ugc2ltcGx5IG1hcmsgdGhlXFxuLVxcdFxcdCAqIHNvY2tldCByZWplY3RlZCwgZHJvcCBvdXIgcmVmZXJlbmNlLCBhbmQgbGV0IHRoZSBjbGVhbnVwXFxuLVxcdFxcdCAqIGZ1bmN0aW9uIGhhbmRsZSB0aGUgY2xlYW51cDsgdGhlIGZhY3QgdGhhdCB3ZSBmb3VuZCBpdCBpblxcbi1cXHRcXHQgKiB0aGUgbGlzdGVuZXIncyBhY2NlcHQgcXVldWUgZ3VhcmFudGVlcyB0aGF0IHRoZSBjbGVhbnVwXFxuLVxcdFxcdCAqIGZ1bmN0aW9uIGhhc24ndCBydW4geWV0Llxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHR2Y29ubmVjdGVkLVxcdTAwM2VyZWplY3RlZCA9IHRydWU7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdG5ld3NvY2stXFx1MDAzZXN0YXRlID0gU1NfQ09OTkVDVEVEO1xcbi1cXHRcXHRcXHRzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7XFxuK1xcdFxcdG5ld3NvY2stXFx1MDAzZXN0YXRlID0gU1NfQ09OTkVDVEVEO1xcbitcXHRcXHRzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7XFxuIFxcbi1cXHRcXHRcXHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZjb25uZWN0ZWQtXFx1MDAzZXNrX3NvY2tldC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsXFxuK1xcdFxcdFxcdFxcdTAwMjZjb25uZWN0ZWQtXFx1MDAzZXNrX3NvY2tldC1cXHUwMDNlZmxhZ3MpO1xcbiBcXG4tXFx0XFx0XFx0aWYgKHZzb2NrX21zZ3plcm9jb3B5X2FsbG93KHZjb25uZWN0ZWQtXFx1MDAzZXRyYW5zcG9ydCkpXFxuLVxcdFxcdFxcdFxcdHNldF9iaXQoU09DS19TVVBQT1JUX1pDLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2Y29ubmVjdGVkLVxcdTAwM2Vza19zb2NrZXQtXFx1MDAzZWZsYWdzKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAodnNvY2tfbXNnemVyb2NvcHlfYWxsb3codmNvbm5lY3RlZC1cXHUwMDNldHJhbnNwb3J0KSlcXG4rXFx0XFx0XFx0c2V0X2JpdChTT0NLX1NVUFBPUlRfWkMsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZjb25uZWN0ZWQtXFx1MDAzZXNrX3NvY2tldC1cXHUwMDNlZmxhZ3MpO1xcbiBcXG4gXFx0XFx0cmVsZWFzZV9zb2NrKGNvbm5lY3RlZCk7XFxuIFxcdFxcdHNvY2tfcHV0KGNvbm5lY3RlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjE5LjMyNjkxMzg3MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM4MzcwNTU4MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWU09DS0VUU19MT09QQkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZzb2NrX2Nvbm5lY3RcIixcbiAgICBcInZzb2NrX2FjY2VwdFwiLFxuICAgIFwidnNvY2tfcGVuZGluZ193b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyBmb3IgQUZfVlNPQ0sgc29ja2V0cy4gSXQgcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBzdGF0ZSBmcm9tIHBlbmRpbmcgc29ja2V0cyBhbmQgY2hhbmdlcyBob3cgYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YCBoYW5kbGUgc29ja2V0IGVycm9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIgZHVyaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRiYTU0NmI2MGRlMDhiMGZlMWE3M2FjNDY0ZWY1NmRhY2ZiZTIxMjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxOTowMToxNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmggYi9pbmNsdWRlL25ldC9hZl92c29jay5oXG5pbmRleCAzMDA0NmEzYzIwZjczLi4zMzU3ZWU2MmQxMGJmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuKysrIGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuQEAgLTUyLDEzICs1MiwxMCBAQCBzdHJ1Y3QgdnNvY2tfc29jayB7XG4gXHQgKiBUaGUgbGlzdGVuaW5nIHNvY2tldCBpcyB0aGUgaGVhZCBmb3IgYm90aCBsaXN0cy4gIFNvY2tldHMgY3JlYXRlZFxuIFx0ICogZm9yIGNvbm5lY3Rpb24gcmVxdWVzdHMgYXJlIHBsYWNlZCBpbiB0aGUgcGVuZGluZyBsaXN0IHVudGlsIHRoZXlcbiBcdCAqIGFyZSBjb25uZWN0ZWQsIGF0IHdoaWNoIHBvaW50IHRoZXkgYXJlIHB1dCBpbiB0aGUgYWNjZXB0IHF1ZXVlIGxpc3Rcbi1cdCAqIHNvIHRoZXkgY2FuIGJlIGFjY2VwdGVkIGluIGFjY2VwdCgpLiAgSWYgYWNjZXB0KCkgY2Fubm90IGFjY2VwdCB0aGVcbi1cdCAqIGNvbm5lY3Rpb24sIGl0IGlzIG1hcmtlZCBhcyByZWplY3RlZCBzbyB0aGUgY2xlYW51cCBmdW5jdGlvbiBrbm93c1xuLVx0ICogdG8gY2xlYW4gdXAgdGhlIHNvY2tldC5cbitcdCAqIHNvIHRoZXkgY2FuIGJlIGFjY2VwdGVkIGluIGFjY2VwdCgpLlxuIFx0ICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHBlbmRpbmdfbGlua3M7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGFjY2VwdF9xdWV1ZTtcbi1cdGJvb2wgcmVqZWN0ZWQ7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIGNvbm5lY3Rfd29yaztcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgcGVuZGluZ193b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBjbG9zZV93b3JrO1xuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuaW5kZXggNjIyZGJkMDQ2Nzk5NC4uZTg5Y2I4NGI4ZDczNyAxMDA2NDRcbi0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuKysrIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5AQCAtMzgsMTAgKzM4LDkgQEBcbiAgKiBwZW5kaW5nIHNvY2tldC4gIFdoZW4gdGhhdCBzb2NrZXQgcmVhY2hlcyB0aGUgY29ubmVjdGVkIHN0YXRlLCBpdCBpcyByZW1vdmVkXG4gICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0J3MgcGVuZGluZyBsaXN0IGFuZCBlbnF1ZXVlZCBpbiB0aGUgbGlzdGVuZXJcbiAgKiBzb2NrZXQncyBhY2NlcHQgcXVldWUuICBDYWxsZXJzIG9mIGFjY2VwdCgyKSB3aWxsIGFjY2VwdCBjb25uZWN0ZWQgc29ja2V0c1xuLSAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCdzIGFjY2VwdCBxdWV1ZS4gIElmIHRoZSBzb2NrZXQgY2Fubm90IGJlIGFjY2VwdGVkXG4tICogZm9yIHNvbWUgcmVhc29uIHRoZW4gaXQgaXMgbWFya2VkIHJlamVjdGVkLiAgT25jZSB0aGUgY29ubmVjdGlvbiBpc1xuLSAqIGFjY2VwdGVkLCBpdCBpcyBvd25lZCBieSB0aGUgdXNlciBwcm9jZXNzIGFuZCB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGNsZWFudXBcbi0gKiBmYWxscyB3aXRoIHRoYXQgdXNlciBwcm9jZXNzLlxuKyAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCdzIGFjY2VwdCBxdWV1ZS4gT25jZSB0aGUgY29ubmVjdGlvbiBpcyBhY2NlcHRlZCxcbisgKiBpdCBpcyBvd25lZCBieSB0aGUgdXNlciBwcm9jZXNzIGFuZCB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGNsZWFudXAgZmFsbHNcbisgKiB3aXRoIHRoYXQgdXNlciBwcm9jZXNzLlxuICAqXG4gICogLSBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXNlIHBlbmRpbmcgc29ja2V0cyB3aWxsIG5ldmVyIHJlYWNoIHRoZSBjb25uZWN0ZWRcbiAgKiBzdGF0ZTsgaW4gZmFjdCwgd2UgbWF5IG5ldmVyIHJlY2VpdmUgYW5vdGhlciBwYWNrZXQgYWZ0ZXIgdGhlIGNvbm5lY3Rpb25cbkBAIC00OSw5ICs0OCw3IEBAXG4gICogZnV0dXJlLCBhZnRlciBzb21lIGFtb3VudCBvZiB0aW1lIHBhc3NlcyB3aGVyZSBhIGNvbm5lY3Rpb24gc2hvdWxkIGhhdmUgYmVlblxuICAqIGVzdGFibGlzaGVkLiAgVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIHNvY2tldCBpcyBvZmYgYWxsIGxpc3RzIHNvIGl0XG4gICogY2Fubm90IGJlIHJldHJpZXZlZCwgdGhlbiBkcm9wcyBhbGwgcmVmZXJlbmNlcyB0byB0aGUgc29ja2V0IHNvIGl0IGlzIGNsZWFuZWRcbi0gKiB1cCAoc29ja19wdXQoKSAtXHUwMDNlIHNrX2ZyZWUoKSAtXHUwMDNlIG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuICBOb3RlIHRoaXNcbi0gKiBmdW5jdGlvbiB3aWxsIGFsc28gY2xlYW51cCByZWplY3RlZCBzb2NrZXRzLCB0aG9zZSB0aGF0IHJlYWNoIHRoZSBjb25uZWN0ZWRcbi0gKiBzdGF0ZSBidXQgbGVhdmUgaXQgYmVmb3JlIHRoZXkgaGF2ZSBiZWVuIGFjY2VwdGVkLlxuKyAqIHVwIChzb2NrX3B1dCgpIC1cdTAwM2Ugc2tfZnJlZSgpIC1cdTAwM2Ugb3VyIHNrX2Rlc3RydWN0IGltcGxlbWVudGF0aW9uKS5cbiAgKlxuICAqIC0gTG9jayBvcmRlcmluZyBmb3IgcGVuZGluZyBvciBhY2NlcHQgcXVldWUgc29ja2V0cyBpczpcbiAgKlxuQEAgLTc3NCwxMSArNzcxLDEwIEBAIHN0YXRpYyB2b2lkIHZzb2NrX3BlbmRpbmdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gXHRpZiAodnNvY2tfaXNfcGVuZGluZyhzaykpIHtcbiBcdFx0dnNvY2tfcmVtb3ZlX3BlbmRpbmcobGlzdGVuZXIsIHNrKTtcbi1cdH0gZWxzZSBpZiAoIXZzay1cdTAwM2VyZWplY3RlZCkge1xuLVx0XHQvKiBXZSBhcmUgbm90IG9uIHRoZSBwZW5kaW5nIGxpc3QgYW5kIGFjY2VwdCgpIGRpZCBub3QgcmVqZWN0XG4tXHRcdCAqIHVzLCBzbyB3ZSBtdXN0IGhhdmUgYmVlbiBhY2NlcHRlZCBieSBvdXIgdXNlciBwcm9jZXNzLiAgV2Vcbi1cdFx0ICoganVzdCBuZWVkIHRvIGRyb3Agb3VyIHJlZmVyZW5jZXMgdG8gdGhlIHNvY2tldHMgYW5kIGJlIG9uXG4tXHRcdCAqIG91ciB3YXkuXG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBXZSBhcmUgbm90IG9uIHRoZSBwZW5kaW5nIGxpc3Qgc28gd2UgbXVzdCBoYXZlIGJlZW4gYWNjZXB0ZWRcbitcdFx0ICogYnkgb3VyIHVzZXIgcHJvY2Vzcy4gV2UganVzdCBuZWVkIHRvIGRyb3Agb3VyIHJlZmVyZW5jZXMgdG9cbitcdFx0ICogdGhlIHNvY2tldHMgYW5kIGJlIG9uIG91ciB3YXkuXG4gXHRcdCAqL1xuIFx0XHRjbGVhbnVwID0gZmFsc2U7XG4gXHRcdGdvdG8gb3V0O1xuQEAgLTk0Miw3ICs5MzgsNiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKl9fdnNvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdHZzay1cdTAwM2VsaXN0ZW5lciA9IE5VTEw7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2c2stXHUwMDNlcGVuZGluZ19saW5rcyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2c2stXHUwMDNlYWNjZXB0X3F1ZXVlKTtcbi1cdHZzay1cdTAwM2VyZWplY3RlZCA9IGZhbHNlO1xuIFx0dnNrLVx1MDAzZXNlbnRfcmVxdWVzdCA9IGZhbHNlO1xuIFx0dnNrLVx1MDAzZWlnbm9yZV9jb25uZWN0aW5nX3JzdCA9IGZhbHNlO1xuIFx0V1JJVEVfT05DRSh2c2stXHUwMDNlcGVlcl9zaHV0ZG93biwgMCk7XG5AQCAtMTg0NywxMiArMTg0MiwxMCBAQCBzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4gXHRcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChzayksIFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gXHR9XG4gXG4tXHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4tXHRcdGVyciA9IC1zay1cdTAwM2Vza19lcnI7XG4rXHRlcnIgPSBzb2NrX2Vycm9yKHNrKTtcbitcdGlmIChlcnIpIHtcbiBcdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBUQ1BfQ0xPU0U7XG4gXHRcdHNvY2stXHUwMDNlc3RhdGUgPSBTU19VTkNPTk5FQ1RFRDtcbi1cdH0gZWxzZSB7XG4tXHRcdGVyciA9IDA7XG4gXHR9XG4gXG4gb3V0X3dhaXQ6XG5AQCAtMTg5Myw3ICsxODg2LDcgQEAgc3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbiBcdHRpbWVvdXQgPSBzb2NrX3JjdnRpbWVvKGxpc3RlbmVyLCBhcmctXHUwMDNlZmxhZ3MgXHUwMDI2IE9fTk9OQkxPQ0spO1xuIFxuIFx0d2hpbGUgKChjb25uZWN0ZWQgPSB2c29ja19kZXF1ZXVlX2FjY2VwdChsaXN0ZW5lcikpID09IE5VTEwgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgbGlzdGVuZXItXHUwMDNlc2tfZXJyID09IDAgXHUwMDI2XHUwMDI2IHRpbWVvdXQgIT0gMCkge1xuK1x0XHR0aW1lb3V0ICE9IDApIHtcbiBcdFx0cHJlcGFyZV90b193YWl0KHNrX3NsZWVwKGxpc3RlbmVyKSwgXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcdFx0cmVsZWFzZV9zb2NrKGxpc3RlbmVyKTtcbiBcdFx0dGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7XG5AQCAtMTkwNiwzOCArMTg5OSwyMyBAQCBzdGF0aWMgaW50IHZzb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAobGlzdGVuZXItXHUwMDNlc2tfZXJyKSB7XG4tXHRcdGVyciA9IC1saXN0ZW5lci1cdTAwM2Vza19lcnI7XG4tXHR9IGVsc2UgaWYgKCFjb25uZWN0ZWQpIHtcbitcdGlmICghY29ubmVjdGVkKSB7XG4gXHRcdGVyciA9IC1FQUdBSU47XG4tXHR9XG4tXG4tXHRpZiAoY29ubmVjdGVkKSB7XG4rXHR9IGVsc2Uge1xuIFx0XHRza19hY2NlcHRxX3JlbW92ZWQobGlzdGVuZXIpO1xuIFxuIFx0XHRsb2NrX3NvY2tfbmVzdGVkKGNvbm5lY3RlZCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuIFx0XHR2Y29ubmVjdGVkID0gdnNvY2tfc2soY29ubmVjdGVkKTtcbiBcbi1cdFx0LyogSWYgdGhlIGxpc3RlbmVyIHNvY2tldCBoYXMgcmVjZWl2ZWQgYW4gZXJyb3IsIHRoZW4gd2Ugc2hvdWxkXG4tXHRcdCAqIHJlamVjdCB0aGlzIHNvY2tldCBhbmQgcmV0dXJuLiAgTm90ZSB0aGF0IHdlIHNpbXBseSBtYXJrIHRoZVxuLVx0XHQgKiBzb2NrZXQgcmVqZWN0ZWQsIGRyb3Agb3VyIHJlZmVyZW5jZSwgYW5kIGxldCB0aGUgY2xlYW51cFxuLVx0XHQgKiBmdW5jdGlvbiBoYW5kbGUgdGhlIGNsZWFudXA7IHRoZSBmYWN0IHRoYXQgd2UgZm91bmQgaXQgaW5cbi1cdFx0ICogdGhlIGxpc3RlbmVyJ3MgYWNjZXB0IHF1ZXVlIGd1YXJhbnRlZXMgdGhhdCB0aGUgY2xlYW51cFxuLVx0XHQgKiBmdW5jdGlvbiBoYXNuJ3QgcnVuIHlldC5cbi1cdFx0ICovXG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHR2Y29ubmVjdGVkLVx1MDAzZXJlamVjdGVkID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRuZXdzb2NrLVx1MDAzZXN0YXRlID0gU1NfQ09OTkVDVEVEO1xuLVx0XHRcdHNvY2tfZ3JhZnQoY29ubmVjdGVkLCBuZXdzb2NrKTtcbitcdFx0bmV3c29jay1cdTAwM2VzdGF0ZSA9IFNTX0NPTk5FQ1RFRDtcbitcdFx0c29ja19ncmFmdChjb25uZWN0ZWQsIG5ld3NvY2spO1xuIFxuLVx0XHRcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCxcbi1cdFx0XHRcdFx1MDAyNmNvbm5lY3RlZC1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuK1x0XHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsXG4rXHRcdFx0XHUwMDI2Y29ubmVjdGVkLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmbGFncyk7XG4gXG4tXHRcdFx0aWYgKHZzb2NrX21zZ3plcm9jb3B5X2FsbG93KHZjb25uZWN0ZWQtXHUwMDNldHJhbnNwb3J0KSlcbi1cdFx0XHRcdHNldF9iaXQoU09DS19TVVBQT1JUX1pDLFxuLVx0XHRcdFx0XHRcdTAwMjZjb25uZWN0ZWQtXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbi1cdFx0fVxuK1x0XHRpZiAodnNvY2tfbXNnemVyb2NvcHlfYWxsb3codmNvbm5lY3RlZC1cdTAwM2V0cmFuc3BvcnQpKVxuK1x0XHRcdHNldF9iaXQoU09DS19TVVBQT1JUX1pDLFxuK1x0XHRcdFx0XHUwMDI2Y29ubmVjdGVkLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmbGFncyk7XG4gXG4gXHRcdHJlbGVhc2Vfc29jayhjb25uZWN0ZWQpO1xuIFx0XHRzb2NrX3B1dChjb25uZWN0ZWQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MDE6MTkuMzI2OTE1MTEyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk2MTQzMzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSB2c29jayBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIHRoZSB2c29jayBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IG1lc3Npbmcgd2l0aCBgbmV0L3Ztd192c29jay9hZl92c29jay5jYCBhbmQgYGluY2x1ZGUvbmV0L2FmX3Zzb2NrLmhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJpbnRyaWd1aW5nLCBsZXQncyBzZWUgd2hhdCdzIGNoYW5nZWQgYW5kIHdoYXQgdGhpcyBtZWFucyBmb3IgdGhlIG5ldHdvcmsgc3Vic3lzdGVtLlwiIEl0IGxvb2tzIGxpa2UgdGhleSdyZSByZW1vdmluZyB0aGUgYHJlamVjdGVkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdnNvY2tfc29ja2AsIGFuZCB0aGF0IGluc3RhbnRseSBmbGFncyBteSBhdHRlbnRpb24uIFRoYXQgYm9vbGVhbiBsaWtlbHkgaGFkIGEgdmVyeSBzcGVjaWZpYyBwdXJwb3NlIGluIHRoZSBlcnJvciBoYW5kbGluZyBvciBjb25uZWN0aW9uIGxpZmVjeWNsZS5cblxuVGhlIGNoYW5nZXMgZm9jdXMgb24gYSBmZXcga2V5IGZ1bmN0aW9uczogYHZzb2NrX3BlbmRpbmdfd29ya2AsIGB2c29ja19jb25uZWN0YCwgYW5kIGB2c29ja19hY2NlcHRgLiBMZXQncyBicmVhayBpdCBkb3duOlxuXG4qICAgKipgdnNvY2tfc29ja2Agc3RydWN0Kio6IEdvbmUgaXMgdGhlIGByZWplY3RlZGAgYm9vbGVhbi4gVGhhdCBpbXBsaWVzIGEgc2hpZnQgaW4gaG93IGNvbm5lY3Rpb25zIGFyZSBtYW5hZ2VkLlxuKiAgICoqYHZzb2NrX3BlbmRpbmdfd29ya2AqKjogVGhlIHBhdGNoIGVsaW1pbmF0ZXMgYSBjaGVjayBmb3IgYCF2c2stXHUwMDNlcmVqZWN0ZWRgLiBUaGlzIGlzIGNvdXBsZWQgdG8gdGhlIGZpcnN0IHBvaW50OyB0aGUgXCJyZWplY3Rpb25cIiBjb25jZXB0IGlzIGdldHRpbmcgYWx0ZXJlZCBvciByZW1vdmVkLlxuKiAgICoqYHZzb2NrX2Nvbm5lY3RgKio6IFRoZSBwYXRjaCBpcyBnb2luZyBmcm9tIGBpZiAoc2stXHUwMDNlc2tfZXJyKWAgdG8gYGVyciA9IHNvY2tfZXJyb3Ioc2spOyBpZiAoZXJyKWAuIFRoaXMgYXBwZWFycyB0byBiZSBhIGNsZWFuZXIgd2F5IHRvIGdldCB0aGUgc29ja2V0IGVycm9yLlxuKiAgICoqYHZzb2NrX2FjY2VwdGAqKjogVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgY2hlY2sgZm9yIGBsaXN0ZW5lci1cdTAwM2Vza19lcnIgPT0gMGAgaW4gdGhlIGB3aGlsZWAgbG9vcCwgcmVtb3ZlcyBoYW5kbGluZyBmb3IgYGxpc3RlbmVyLVx1MDAzZXNrX2VycmAsIGFuZCB0aGUgY29kZSBwYXRoIGhhbmRsaW5nIGB2Y29ubmVjdGVkLVx1MDAzZXJlamVjdGVkID0gdHJ1ZWAuIFRoaXMgcG9pbnRzIHRvIGEgY2hhbmdlIGluIGhvdyB0aGUgYWNjZXB0IHF1ZXVlIGlzIGhhbmRsZWQsIG1heWJlIG1vcmUgbGVuaWVudCBlcnJvciBoYW5kbGluZy5cblxuVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byB2c29jayBjb3JlIGxvZ2ljLCB3aGljaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgZm9yIHRoZSBlZmZlY3RzIG9uIGVycm9yIGhhbmRsaW5nIGluIGBhY2NlcHQoKWAgYW5kIGBjb25uZWN0KClgLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBuZWVkcyBzb21lIHNvbGlkIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMuIFRoZSBmdW5jdGlvbnMgYmVpbmcgdG91Y2hlZCBhcmU6IGB2c29ja19wZW5kaW5nX3dvcmtgLCBgdnNvY2tfY29ubmVjdGAsIGFuZCBgdnNvY2tfYWNjZXB0YC4gVGhleSdyZSAqc3RhdGljKiwgYnV0IGFzc2lnbmVkIHRvIGBzdHJ1Y3QgcHJvdG9fb3BzYC4gQWxyaWdodCwgc28gYHZzb2NrX2Nvbm5lY3RgIGFuZCBgdnNvY2tfYWNjZXB0YCBhcmUgdGhlIGFjdHVhbCwgZGlyZWN0IGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIHdyYXBwZXJzLCBsaWtlIHRoZSB1c3VhbCBgc3lzX2Nvbm5lY3RgIC1cdTAwM2UgYF9fc3lzX2Nvbm5lY3RgIC1cdTAwM2UgYHNvY2stXHUwMDNlb3BzLVx1MDAzZWNvbm5lY3RgIHBhdHRlcm4uIFllcywgYHZzb2NrX2Nvbm5lY3RgIGFuZCBgdnNvY2tfYWNjZXB0YCBhcmUgc3RhdGljIHdpdGhpbiBgbmV0L3Ztd192c29jay9hZl92c29jay5jYCwgc28gdGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuXG5cbkdpdmVuIHRoaXMgdW5kZXJzdGFuZGluZywgSSBjYW4gbm93IGJlZ2luIHRvIG1hcCBvdXQgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY4NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjI4LjI4ODM1MjIwMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzI4MTgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2c29ja19jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC92bXdfdnNvY2svYWZfdnNvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjA5PXN0YXRpYyBERUZJTkVfTVVURVgodnNvY2tfcmVnaXN0ZXJfbXV0ZXgpO1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzNS1cXHQoKChzcmMpLVxcdTAwM2Vzdm1fY2lkIF4gKGRzdCktXFx1MDAzZXN2bV9wb3J0KSAlIFZTT0NLX0hBU0hfU0laRSlcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjM2OiNkZWZpbmUgdnNvY2tfY29ubmVjdGVkX3NvY2tldHMoc3JjLCBkc3QpXFx0XFx0XFxcXFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzc6XFx0KFxcdTAwMjZ2c29ja19jb25uZWN0ZWRfdGFibGVbVlNPQ0tfQ09OTl9IQVNIKHNyYywgZHN0KV0pXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzODojZGVmaW5lIHZzb2NrX2Nvbm5lY3RlZF9zb2NrZXRzX3Zzayh2c2spXFx0XFx0XFx0XFx0XFxcXFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzk6XFx0dnNvY2tfY29ubmVjdGVkX3NvY2tldHMoXFx1MDAyNih2c2spLVxcdTAwM2VyZW1vdGVfYWRkciwgXFx1MDAyNih2c2spLVxcdTAwM2Vsb2NhbF9hZGRyKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNDAtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjQyPUVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2JpbmRfdGFibGUpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNDM6c3RydWN0IGxpc3RfaGVhZCB2c29ja19jb25uZWN0ZWRfdGFibGVbVlNPQ0tfSEFTSF9TSVpFXTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQ0OkVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2Nvbm5lY3RlZF90YWJsZSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0NS1ERUZJTkVfU1BJTkxPQ0sodnNvY2tfdGFibGVfbG9jayk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjYwPXN0YXRpYyB2b2lkIHZzb2NrX2luaXRfdGFibGVzKHZvaWQpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY2LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjc6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodnNvY2tfY29ubmVjdGVkX3RhYmxlKTsgaSsrKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjg6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnZzb2NrX2Nvbm5lY3RlZF90YWJsZVtpXSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2OS19XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzIwPV9fdnNvY2tfZmluZF9jb25uZWN0ZWRfc29ja2V0X25ldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYyxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMjQtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjMyNTpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZzaywgdnNvY2tfY29ubmVjdGVkX3NvY2tldHMoc3JjLCBkc3QpLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMjYtXFx0XFx0XFx0ICAgIGNvbm5lY3RlZF90YWJsZSkge1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTM0Nj12b2lkIHZzb2NrX2luc2VydF9jb25uZWN0ZWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaylcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzQ3LXtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzQ4OlxcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSB2c29ja19jb25uZWN0ZWRfc29ja2V0cyhcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzQ5LVxcdFxcdFxcdTAwMjZ2c2stXFx1MDAzZXJlbW90ZV9hZGRyLCBcXHUwMDI2dnNrLVxcdTAwM2Vsb2NhbF9hZGRyKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz00NTE9dm9pZCB2c29ja19mb3JfZWFjaF9jb25uZWN0ZWRfc29ja2V0KHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00NTctXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjQ1ODpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh2c29ja19jb25uZWN0ZWRfdGFibGUpOyBpKyspIHtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNDU5LVxcdFxcdHN0cnVjdCB2c29ja19zb2NrICp2c2s7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjQ2MDpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZzaywgXFx1MDAyNnZzb2NrX2Nvbm5lY3RlZF90YWJsZVtpXSxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNDYxLVxcdFxcdFxcdFxcdCAgICBjb25uZWN0ZWRfdGFibGUpIHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz01Njc9aW50IHZzb2NrX2Fzc2lnbl90cmFuc3BvcnQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgc3RydWN0IHZzb2NrX3NvY2sgKnBzaylcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy02NDAtXFx0XFx0LyogdHJhbnNwb3J0LVxcdTAwM2VyZWxlYXNlKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBzb2NrIGxvY2sgYWNxdWlyZWQuXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjY0MTpcXHRcXHQgKiBUaGlzIHBhdGggY2FuIG9ubHkgYmUgdGFrZW4gZHVyaW5nIHZzb2NrX2Nvbm5lY3QoKSwgd2hlcmUgd2VcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNjQyLVxcdFxcdCAqIGhhdmUgYWxyZWFkeSBoZWxkIHRoZSBzb2NrIGxvY2suIEluIHRoZSBvdGhlciBjYXNlcywgdGhpc1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTY1MC1cXHRcXHQgKiBzdGF0ZSwgc2luY2Ugd2UgYXJlIHJlYXNzaWduaW5nIHRoZSBzb2NrZXQgdG8gYSBuZXcgdHJhbnNwb3J0XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjY1MTpcXHRcXHQgKiBkdXJpbmcgdnNvY2tfY29ubmVjdCgpLCBsZXQncyByZXNldCB0aGVzZSBmaWVsZHMgdG8gaGF2ZSBhXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTY1Mi1cXHRcXHQgKiBjbGVhbiBzdGF0ZS5cXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz04NjU9c3RhdGljIGludCBfX3Zzb2NrX2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTAxLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo5MDI6c3RhdGljIHZvaWQgdnNvY2tfY29ubmVjdF90aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTkwMy1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9OTA0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk0My1cXHRXUklURV9PTkNFKHZzay1cXHUwMDNlcGVlcl9zaHV0ZG93biwgMCk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjk0NDpcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2dnNrLVxcdTAwM2Vjb25uZWN0X3dvcmssIHZzb2NrX2Nvbm5lY3RfdGltZW91dCk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk0NS1cXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2dnNrLVxcdTAwM2VwZW5kaW5nX3dvcmssIHZzb2NrX3BlbmRpbmdfd29yayk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTA1OD1FWFBPUlRfU1lNQk9MX0dQTCh2c29ja19zdHJlYW1faGFzX2RhdGEpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMDU5LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxMDYwOnM2NCB2c29ja19jb25uZWN0aWJsZV9oYXNfZGF0YShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMDYxLXtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMDcxLX1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTA3MjpFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19jb25uZWN0aWJsZV9oYXNfZGF0YSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTEwNzMtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTY0MD1zdGF0aWMgaW50IHZzb2NrX3RyYW5zcG9ydF9jYW5jZWxfcGt0KHN0cnVjdCB2c29ja19zb2NrICp2c2spXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTY0OS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTY1MDpzdGF0aWMgdm9pZCB2c29ja19jb25uZWN0X3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNjUxLXtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNjcxLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxNjcyOnN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTY3My1cXHRcXHRcXHQgaW50IGFkZHJfbGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTgxOS1cXHRcXHQgKiBza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQgaW1wbGllcyB0aGF0IHNvY2tldCBpcyBub3Qgb25cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTgyMDpcXHRcXHQgKiB2c29ja19jb25uZWN0ZWRfdGFibGUuIFdlIGtlZXAgdGhlIGJpbmRpbmcgYW5kIHRoZSB0cmFuc3BvcnRcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTgyMS1cXHRcXHQgKiBhc3NpZ25lZC5cXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0xOTY2PXN0YXRpYyB2b2lkIHZzb2NrX3VwZGF0ZV9idWZmZXJfc2l6ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE5ODItXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE5ODM6c3RhdGljIGludCB2c29ja19jb25uZWN0aWJsZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE5ODQtXFx0XFx0XFx0XFx0XFx0aW50IGxldmVsLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIwOTYtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIwOTc6c3RhdGljIGludCB2c29ja19jb25uZWN0aWJsZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIwOTgtXFx0XFx0XFx0XFx0XFx0aW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTU1LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMTU2OnN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdGlibGVfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIxNTctXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzMTctXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzMTg6c3RhdGljIGludCB2c29ja19jb25uZWN0aWJsZV93YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMzE5LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMzM0LVxcdFxcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChzayksIHdhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzMzU6XFx0XFx0ZGF0YSA9IHZzb2NrX2Nvbm5lY3RpYmxlX2hhc19kYXRhKHZzayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzMzYtXFx0XFx0aWYgKGRhdGEgIT0gMClcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yMzg1PXN0YXRpYyBpbnQgX192c29ja19zdHJlYW1fcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNDIyLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNDIzOlxcdFxcdGVyciA9IHZzb2NrX2Nvbm5lY3RpYmxlX3dhaXRfZGF0YShzaywgXFx1MDAyNndhaXQsIHRpbWVvdXQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0MjQtXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2cmVjdl9kYXRhLCB0YXJnZXQpO1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI0NjQ9c3RhdGljIGludCBfX3Zzb2NrX3NlcXBhY2tldF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0NzgtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI0Nzk6XFx0ZXJyID0gdnNvY2tfY29ubmVjdGlibGVfd2FpdF9kYXRhKHNrLCBcXHUwMDI2d2FpdCwgdGltZW91dCwgTlVMTCwgMCk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0ODAtXFx0aWYgKGVyciBcXHUwMDNjPSAwKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI1MTQ9aW50XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI1MTU6X192c29ja19jb25uZWN0aWJsZV9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjUxNi1cXHRcXHRcXHQgICAgaW50IGZsYWdzKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI1ODE9aW50XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI1ODI6dnNvY2tfY29ubmVjdGlibGVfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI1ODMtXFx0XFx0XFx0ICBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjU5My1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjU5NDpcXHRyZXR1cm4gX192c29ja19jb25uZWN0aWJsZV9yZWN2bXNnKHNvY2ssIG1zZywgbGVuLCBmbGFncyk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI1OTUtfVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNTk2OkVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2Nvbm5lY3RpYmxlX3JlY3Ztc2cpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTk3LVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI2MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdnNvY2tfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjI2LVxcdC5iaW5kID0gdnNvY2tfYmluZCxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjYyNzpcXHQuY29ubmVjdCA9IHZzb2NrX2Nvbm5lY3QsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MjgtXFx0LnNvY2tldHBhaXIgPSBzb2NrX25vX3NvY2tldHBhaXIsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjYzNC1cXHQuc2h1dGRvd24gPSB2c29ja19zaHV0ZG93bixcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjYzNTpcXHQuc2V0c29ja29wdCA9IHZzb2NrX2Nvbm5lY3RpYmxlX3NldHNvY2tvcHQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2MzY6XFx0LmdldHNvY2tvcHRfaXRlciA9IHZzb2NrX2Nvbm5lY3RpYmxlX2dldHNvY2tvcHQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2Mzc6XFx0LnNlbmRtc2cgPSB2c29ja19jb25uZWN0aWJsZV9zZW5kbXNnLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjM4OlxcdC5yZWN2bXNnID0gdnNvY2tfY29ubmVjdGlibGVfcmVjdm1zZyxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjYzOS1cXHQubW1hcCA9IHNvY2tfbm9fbW1hcCxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHZzb2NrX3NlcXBhY2tldF9vcHMgPSB7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY0OC1cXHQuYmluZCA9IHZzb2NrX2JpbmQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2NDk6XFx0LmNvbm5lY3QgPSB2c29ja19jb25uZWN0LFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjUwLVxcdC5zb2NrZXRwYWlyID0gc29ja19ub19zb2NrZXRwYWlyLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NTYtXFx0LnNodXRkb3duID0gdnNvY2tfc2h1dGRvd24sXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2NTc6XFx0LnNldHNvY2tvcHQgPSB2c29ja19jb25uZWN0aWJsZV9zZXRzb2Nrb3B0LFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjU4OlxcdC5nZXRzb2Nrb3B0X2l0ZXIgPSB2c29ja19jb25uZWN0aWJsZV9nZXRzb2Nrb3B0LFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjU5OlxcdC5zZW5kbXNnID0gdnNvY2tfY29ubmVjdGlibGVfc2VuZG1zZyxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY2MDpcXHQucmVjdm1zZyA9IHZzb2NrX2Nvbm5lY3RpYmxlX3JlY3Ztc2csXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NjEtXFx0Lm1tYXAgPSBzb2NrX25vX21tYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjI4LjM0NTYzODgzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyODUzODc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIHZzb2NrIENvbm5lY3Rpb24gRnVuY3Rpb25zKipcblxuT2theSwgc28gYHZzb2NrX2Nvbm5lY3RgLi4uIHJpZ2h0LCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgYXMgZXhwZWN0ZWQuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCdzIGFsc28gdHJ1ZSBmb3IgdGhlIGB2c29ja19hY2NlcHRgIGZ1bmN0aW9uLCBib3RoIG9mIHdoaWNoIGFyZSByZXNpZGluZyBpbiBgbmV0L3Ztd192c29jay9hZl92c29jay5jYC4gVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgbm9uLXN0YXRpYyB3cmFwcGVycyBmb3IgdGhlc2UgZnVuY3Rpb25zPyBUaGF0J3Mgd2hhdCBJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gb24gdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0cy4gTGV0IG1lIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiBgdnNvY2tfYWNjZXB0YCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBub24tc3RhdGljIGNhbGwgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzU2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MDE6MzIuMDc0MTgxMjIyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTIxNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZzb2NrX2FjY2VwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay9hZl92c29jay5jPTE2NzI9c3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE4NTctXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE4NTg6c3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTg1OS1cXHRcXHRcXHRzdHJ1Y3QgcHJvdG9fYWNjZXB0X2FyZyAqYXJnKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI2MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdnNvY2tfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjI4LVxcdC5zb2NrZXRwYWlyID0gc29ja19ub19zb2NrZXRwYWlyLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjI5OlxcdC5hY2NlcHQgPSB2c29ja19hY2NlcHQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MzAtXFx0LmdldG5hbWUgPSB2c29ja19nZXRuYW1lLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI2NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdnNvY2tfc2VxcGFja2V0X29wcyA9IHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjUwLVxcdC5zb2NrZXRwYWlyID0gc29ja19ub19zb2NrZXRwYWlyLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjUxOlxcdC5hY2NlcHQgPSB2c29ja19hY2NlcHQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NTItXFx0LmdldG5hbWUgPSB2c29ja19nZXRuYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOTowMTozMi4xNDI3MDc3MzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzQyNzQ1ODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdnNvY2sgQVBJIEVudHJ5cG9pbnRzIGZvciBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGV4cG9zZSB0aGUgYHZzb2NrYCBmdW5jdGlvbmFsaXR5IGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHNpbmNlIGB2c29ja19jb25uZWN0YCBhbmQgYHZzb2NrX2FjY2VwdGAgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYyBmdW5jdGlvbnMsIHN5emthbGxlciB3b3VsZG4ndCBiZSBhYmxlIHRvIGRpcmVjdGx5IGNhbGwgdGhlbSBhcyBzZXBhcmF0ZSBzeW1ib2xzLiBIb3dldmVyLCBJIHJlYWxpemUgc3l6a2FsbGVyIHdpbGwgZnV6eiBgY29ubmVjdCgpYCBhbmQgYGFjY2VwdCgpYCBvbiBgQUZfVlNPQ0tgIHNvY2tldHMuIEJ1dCBkb2VzIGl0IHRoZW4gZnV6eiBgY29ubmVjdCR2c29ja2AgYW5kIGBhY2NlcHQkdnNvY2tgPyBNeSBtZW50YWwgbW9kZWwgaXMgdGhhdCBpdCBtYXBzIHRvIGBzeXNfY29ubmVjdGAgYW5kIGBzeXNfYWNjZXB0YCwgd2hpY2ggZXZlbnR1YWxseSAqY2FsbCogdGhlc2UgZnVuY3Rpb25zLlxuXG5UaGVuIEkgcmVjYWxsZWQgdGhlIGd1aWRlbGluZTogcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBpcyBrZXkuIFRoZSBnb29kIG5ld3MgaXMgdGhhdCBgdnNvY2tfY29ubmVjdGAgYW5kIGB2c29ja19hY2NlcHRgIGFyZSBhc3NpZ25lZCB0byB0aGUgYHByb3RvX29wc2Agc3RydWN0cyAoYHZzb2NrX3N0cmVhbV9vcHNgIGFuZCBgdnNvY2tfc2VxcGFja2V0X29wc2ApLiBTaW5jZSB0aGV5J3JlIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBzdHJ1Y3RzLCB0aGUgY29tcGlsZXIgKnNob3VsZG4ndCogaW5saW5lIHRoZW0uIFRoZWlyIGFkZHJlc3NlcyBhcmUgZGVmaW5pdGVseSB0YWtlbiwgc28gdGhleSBzaG91bGQgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLlxuXG5CdXQsIGlmIEkgbmVlZCB0byBwcm92aWRlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhcmUgdGhlcmUgYW55PyBUaGVyZSBhcmVuJ3QgYW55IGV4cGxpY2l0IG5vbi1zdGF0aWMgd3JhcHBlcnMgZm9yIGB2c29ja19jb25uZWN0YCBhbmQgYHZzb2NrX2FjY2VwdGA7IHRoZXkgYXJlIGRpcmVjdGx5IGFzc2lnbmVkIHdpdGhpbiB0aGUgYHByb3RvX29wc2AuIFNvIGl0IGxvb2tzIGxpa2UgSSBjYW4ganVzdCBsaXN0IGB2c29ja19jb25uZWN0YCBhbmQgYHZzb2NrX2FjY2VwdGAuXG5cbldhaXQgYSBtaW51dGUsIHdoYXQgYWJvdXQgYHZzb2NrX3BlbmRpbmdfd29ya2A/IFRoaXMgaXMgYSB3b3JrcXVldWUgY2FsbGJhY2suIEl0J3MgKmFsc28qIHN0YXRpYywgYnV0IGl0cyBhZGRyZXNzIGlzIHRha2VuIHdpdGhpbiBgSU5JVF9ERUxBWUVEX1dPUktgLiBTbywgaXQgd29uJ3QgYmUgaW5saW5lZCBlaXRoZXIhIFNvLCBJIHRoaW5rIEkgY2FuIHNhZmVseSBpbmNsdWRlIGB2c29ja19jb25uZWN0YCwgYHZzb2NrX2FjY2VwdGAsIGFuZCBgdnNvY2tfcGVuZGluZ193b3JrYCBhcyBzdWl0YWJsZSBjYW5kaWRhdGVzLlxuXG5GaW5hbGx5LCBJIHNob3VsZCBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGBBRl9WU09DS2Agc3VwcG9ydCByZXF1aXJlcyBgQ09ORklHX1ZTT0NLRVRTYC4gVGhhdCdzIHRoZSBiYXNlbGluZSwgYnV0IEknbGwgbWFrZSBzdXJlIGl0J3MgZW5hYmxlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MDE6MzkuNDg1NDU3NzI3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTk1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWU09DS0VUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay9LY29uZmlnLTUtXFxubmV0L3Ztd192c29jay9LY29uZmlnOjY6Y29uZmlnIFZTT0NLRVRTXFxubmV0L3Ztd192c29jay9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0IHByb3RvY29sXFxcIlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTE4LVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzoxOTpjb25maWcgVlNPQ0tFVFNfRElBR1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTI4LVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzoyOTpjb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMzAtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0cyBsb29wYmFjayB0cmFuc3BvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjM5LjU0NjA1NzA5NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDc5MDEwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBWU09DS0VUUyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBgVlNPQ0tFVFNgIHN1YnN5c3RlbS4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHJlbGV2YW50IG1vZHVsZS4gTGV0J3Mgc2VlLCB0aGF0IHdvdWxkIGJlIGBuZXQvdm13X3Zzb2NrL0tjb25maWdgLiBUaGlzIGZpbGUgc2hvdWxkIGxheSBvdXQgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBpbiB0ZXJtcyBvZiB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcywgb3B0aW9ucywgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMgbmVlZCB0byBiZSBwcmVzZW50IG9yIGVuYWJsZWQgZm9yIGBWU09DS0VUU2AgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBwZXJoYXBzIHRoaW5ncyBsaWtlIGh5cGVydmlzb3Igc3BlY2lmaWMgc2V0dGluZ3Mgb3IgY2VydGFpbiBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb25zLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgc29ydCBvZiBkZWJ1Z2dpbmcgb3IgcG9ydGluZyBlZmZvcnQgSSdsbCBuZWVkIHRvIGRvLiBUaW1lIHRvIHNlZSB3aGF0J3MgaW4gdGhhdCBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUwOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjQzLjM5Mzk2MTI4N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Ztd192c29jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFZzb2NrIHByb3RvY29sXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBWU09DS0VUU1xcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0IHByb3RvY29sXFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBWaXJ0dWFsIFNvY2tldCBQcm90b2NvbCBpcyBhIHNvY2tldCBwcm90b2NvbCBzaW1pbGFyIHRvIFRDUC9JUFxcbiAgMTA6XFx0XFx0ICBhbGxvd2luZyBjb21tdW5pY2F0aW9uIGJldHdlZW4gVmlydHVhbCBNYWNoaW5lcyBhbmQgaHlwZXJ2aXNvclxcbiAgMTE6XFx0XFx0ICBvciBob3N0LlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIFlvdSBzaG91bGQgYWxzbyBzZWxlY3Qgb25lIG9yIG1vcmUgaHlwZXJ2aXNvci1zcGVjaWZpYyB0cmFuc3BvcnRzXFxuICAxNDpcXHRcXHQgIGJlbG93LlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDE3OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdnNvY2suIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBWU09DS0VUU19ESUFHXFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOTowMTo0My4zOTQwNjcyNzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0MjM2MDM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQ29uc2lkZXJpbmcgYFZTT0NLRVRTYCBUZXN0aW5nIE9wdGlvbnMqKlxuXG5SaWdodCwgc28gYFZTT0NLRVRTYCwgaW5oZXJlbnRseSwgaXMgc3RhbmQtYWxvbmUuIE5vIG90aGVyIGxpYnJhcmllcyBhcmUgcmVxdWlyZWQuIFRoYXQncyBhIGRlZmluaXRlIHBsdXMgZm9yIGtlZXBpbmcgdGhpbmdzIGNsZWFuLiBOb3csIEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgdG8gYWN0dWFsbHkgKnRlc3QqIHRoaXMuIFRvIGFjdHVhbGx5IGV4ZXJjaXNlIHRoZSBgVlNPQ0tFVFNgIEFQSSwgSSdtIGdvaW5nIHRvIG5lZWQgYSB0cmFuc3BvcnQgbGF5ZXIsIG9mIGNvdXJzZS4gRm9yIG15IHB1cnBvc2VzLCBwYXJ0aWN1bGFybHkgZm9yIGZ1enppbmcsIGBWU09DS0VUU19MT09QQkFDS2AgaXMgYWN0dWFsbHkgYW4gZXhjZWxsZW50IGNob2ljZS4gTm8gaHlwZXJ2aXNvciBkZXBlbmRlbmNpZXMgbWVhbnMgbGVzcyBvdmVyaGVhZCBhbmQgY29tcGxleGl0eSwgd2hpY2ggaXMgaWRlYWwgd2hlbiBJJ20gYWltaW5nIGZvciBzcGVlZCBhbmQgc2ltcGxpY2l0eSBpbiBteSBmdXp6aW5nIHNldHVwLiBUaGlzIHNob3VsZCBhbGxvdyBmb3IgZWZmaWNpZW50IGFuZCBmb2N1c2VkIHRlc3Rpbmcgb2YgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5ODgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjQ3LjgzNjQzMDY2MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBWU09DS0VUU1xcbiAgMjI6XFx0XFx0ZGVmYXVsdCB5XFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFN1cHBvcnQgZm9yIFBGX1ZTT0NLIHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0aGUgc3MgdG9vbC5cXG4gIDI1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICBFbmFibGUgdGhpcyBtb2R1bGUgc28gdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBjYW4gcXVlcnkgb3BlbiBzb2NrZXRzLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRjb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldHMgbG9vcGJhY2sgdHJhbnNwb3J0XFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBWU09DS0VUU1xcbiAgMzI6XFx0XFx0ZGVmYXVsdCB5XFxuICAzMzpcXHRcXHRzZWxlY3QgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbiAgMzQ6XFx0XFx0aGVscFxcbiAgMzU6XFx0XFx0ICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgbG9vcGJhY2sgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHMsXFxuICAzNjpcXHRcXHQgIHVzaW5nIHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICAzOTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHZzb2NrX2xvb3BiYWNrLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjQ3LjgzNjQ5MDMyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjU2NDgzNzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZTT0NLIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgdGhyb3VnaCB0aGUgcHJvcG9zZWQgY2hhbmdlcyB0byB0aGUgVlNPQ0sgc3Vic3lzdGVtLiBJdCBzZWVtcyBsaWtlIGVuYWJsaW5nIGBWU09DS0VUU2AgYW5kIGBWU09DS0VUU19MT09QQkFDS2AgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0ZXN0aW5nLiBJIHF1aWNrbHkgY29uZmlybWVkIHRoYXQgYFZJUlRJT19WU09DS0VUU19DT01NT05gIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYnkgYFZTT0NLRVRTX0xPT1BCQUNLYCwgc28gdGhvc2UgdHdvIGFyZSBhbGwgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgc3RyZWFtbGluaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgZXJyb3IgaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGV5J3JlIHJlbW92aW5nIHRoZSBgcmVqZWN0ZWRgIGZpZWxkIGZyb20gYHN0cnVjdCB2c29ja19zb2NrYCwgd2hpY2ggbWFrZXMgc2Vuc2UgdG8gbWXigJRpdCBmZWVscyBsaWtlIGEgc29tZXdoYXQgcmVkdW5kYW50IHBpZWNlIG9mIHN0YXRlLiBUaGUgY29kZSBub3cgaGFuZGxlcyB0aGUgcmVqZWN0aW9uIGxvZ2ljIGluIGB2c29ja19hY2NlcHRgIGFuZCBgdnNvY2tfY29ubmVjdGAgbW9yZSBjb25jaXNlbHkuIEluIGB2c29ja19hY2NlcHRgLCBpbnN0ZWFkIG9mIHNldHRpbmcgYHZjb25uZWN0ZWQtXHUwMDNlcmVqZWN0ZWQgPSB0cnVlYCwgaXQgbm93IHNpbXBseSByZXR1cm5zIGAtRUFHQUlOYCBpZiB0aGUgY29ubmVjdGlvbiBpc24ndCByZWFkeS4gQW5kLCBpdCBsb29rcyBsaWtlIHRoZXkndmUgc3dpdGNoZWQgdG8gdXNpbmcgYHNvY2tfZXJyb3Ioc2spYCBpbiBgdnNvY2tfY29ubmVjdGAgaW5zdGVhZCBvZiBkaXJlY3RseSBhY2Nlc3NpbmcgYHNrLVx1MDAzZXNrX2VycmAuIFRoZSBwYXRjaCBhbHNvIHNpbXBsaWZpZXMgYHZzb2NrX3BlbmRpbmdfd29ya2AsIHJlbW92aW5nIHRoZSBjaGVjayB0aGF0IGludm9sdmVkIHRoZSBgcmVqZWN0ZWRgIGZpZWxkLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgdG91Y2hpbmcgb24gY3JpdGljYWwgYXNwZWN0cyBvZiB0aGUgY29ubmVjdGlvbiBwcm9jZXNzLiBHaXZlbiB0aGUgY2hhbmdlcyB0byB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgSSB0aGluayB3ZSBzaG91bGQgZGVmaW5pdGVseSBwcmlvcml0aXplIGZ1enppbmcgdGhlIGB2c29ja19jb25uZWN0YCwgYHZzb2NrX2FjY2VwdGAsIGFuZCBgdnNvY2tfcGVuZGluZ193b3JrYCBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgYXJvdW5kIGVycm9yIGNvbmRpdGlvbnMgYW5kIGNvbmN1cnJlbnQgY29ubmVjdGlvbiBhdHRlbXB0cy4gSXQncyB0aW1lIHRvIGdlbmVyYXRlIHNvbWUgdGVzdCBjYXNlcy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUwNywiT3V0cHV0VG9rZW5zIjoxNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOTowMTo1Ny40OTI5ODA0NDRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ0ODY0MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWU09DS0VUU19MT09QQkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZzb2NrX2Nvbm5lY3RcIixcbiAgICBcInZzb2NrX2FjY2VwdFwiLFxuICAgIFwidnNvY2tfcGVuZGluZ193b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyBmb3IgQUZfVlNPQ0sgc29ja2V0cy4gSXQgcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBzdGF0ZSBmcm9tIHBlbmRpbmcgc29ja2V0cyBhbmQgY2hhbmdlcyBob3cgYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YCBoYW5kbGUgc29ja2V0IGVycm9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIgZHVyaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnNvY2tfY29ubmVjdFwiLFxuICAgIFwidnNvY2tfYWNjZXB0XCIsXG4gICAgXCJ2c29ja19wZW5kaW5nX3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGZvciBBRl9WU09DSyBzb2NrZXRzLiBJdCByZW1vdmVzIHRoZSBgcmVqZWN0ZWRgIHN0YXRlIGZyb20gcGVuZGluZyBzb2NrZXRzIGFuZCBjaGFuZ2VzIGhvdyBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgIGhhbmRsZSBzb2NrZXQgZXJyb3JzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBvY2N1ciBkdXJpbmcgY29ubmVjdGlvbiBmYWlsdXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MDE6NTcuNjk3NDc3MzkyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDkxMTcyNDczOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjU3LjY5ODUyNTI2MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDkxMDY3MDI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdnNvY2tfc29ja2AgYW5kIHNpbXBsaWZpZXMgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBhbnkgbmV3IGFsbG9jYXRpb25zIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBUaGUgY2hhbmdlcyBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBsb2dpYyBlcnJvcnMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYmE1NDZiNjBkZTA4YjBmZTFhNzNhYzQ2NGVmNTZkYWNmYmUyMTIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTk6MDE6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl92c29jay5oIGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuaW5kZXggMzAwNDZhM2MyMGY3My4uMzM1N2VlNjJkMTBiZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbisrKyBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbkBAIC01MiwxMyArNTIsMTAgQEAgc3RydWN0IHZzb2NrX3NvY2sge1xuIFx0ICogVGhlIGxpc3RlbmluZyBzb2NrZXQgaXMgdGhlIGhlYWQgZm9yIGJvdGggbGlzdHMuICBTb2NrZXRzIGNyZWF0ZWRcbiBcdCAqIGZvciBjb25uZWN0aW9uIHJlcXVlc3RzIGFyZSBwbGFjZWQgaW4gdGhlIHBlbmRpbmcgbGlzdCB1bnRpbCB0aGV5XG4gXHQgKiBhcmUgY29ubmVjdGVkLCBhdCB3aGljaCBwb2ludCB0aGV5IGFyZSBwdXQgaW4gdGhlIGFjY2VwdCBxdWV1ZSBsaXN0XG4tXHQgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS4gIElmIGFjY2VwdCgpIGNhbm5vdCBhY2NlcHQgdGhlXG4tXHQgKiBjb25uZWN0aW9uLCBpdCBpcyBtYXJrZWQgYXMgcmVqZWN0ZWQgc28gdGhlIGNsZWFudXAgZnVuY3Rpb24ga25vd3Ncbi1cdCAqIHRvIGNsZWFuIHVwIHRoZSBzb2NrZXQuXG4rXHQgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS5cbiBcdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpbmtzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBhY2NlcHRfcXVldWU7XG4tXHRib29sIHJlamVjdGVkO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBjb25uZWN0X3dvcms7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHBlbmRpbmdfd29yaztcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgY2xvc2Vfd29yaztcbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbmluZGV4IDYyMmRiZDA0Njc5OTQuLmU4OWNiODRiOGQ3MzcgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbisrKyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuQEAgLTM4LDEwICszOCw5IEBAXG4gICogcGVuZGluZyBzb2NrZXQuICBXaGVuIHRoYXQgc29ja2V0IHJlYWNoZXMgdGhlIGNvbm5lY3RlZCBzdGF0ZSwgaXQgaXMgcmVtb3ZlZFxuICAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCdzIHBlbmRpbmcgbGlzdCBhbmQgZW5xdWV1ZWQgaW4gdGhlIGxpc3RlbmVyXG4gICogc29ja2V0J3MgYWNjZXB0IHF1ZXVlLiAgQ2FsbGVycyBvZiBhY2NlcHQoMikgd2lsbCBhY2NlcHQgY29ubmVjdGVkIHNvY2tldHNcbi0gKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQncyBhY2NlcHQgcXVldWUuICBJZiB0aGUgc29ja2V0IGNhbm5vdCBiZSBhY2NlcHRlZFxuLSAqIGZvciBzb21lIHJlYXNvbiB0aGVuIGl0IGlzIG1hcmtlZCByZWplY3RlZC4gIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXNcbi0gKiBhY2NlcHRlZCwgaXQgaXMgb3duZWQgYnkgdGhlIHVzZXIgcHJvY2VzcyBhbmQgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBjbGVhbnVwXG4tICogZmFsbHMgd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy5cbisgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQncyBhY2NlcHQgcXVldWUuIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgYWNjZXB0ZWQsXG4rICogaXQgaXMgb3duZWQgYnkgdGhlIHVzZXIgcHJvY2VzcyBhbmQgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBjbGVhbnVwIGZhbGxzXG4rICogd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy5cbiAgKlxuICAqIC0gSXQgaXMgcG9zc2libGUgdGhhdCB0aGVzZSBwZW5kaW5nIHNvY2tldHMgd2lsbCBuZXZlciByZWFjaCB0aGUgY29ubmVjdGVkXG4gICogc3RhdGU7IGluIGZhY3QsIHdlIG1heSBuZXZlciByZWNlaXZlIGFub3RoZXIgcGFja2V0IGFmdGVyIHRoZSBjb25uZWN0aW9uXG5AQCAtNDksOSArNDgsNyBAQFxuICAqIGZ1dHVyZSwgYWZ0ZXIgc29tZSBhbW91bnQgb2YgdGltZSBwYXNzZXMgd2hlcmUgYSBjb25uZWN0aW9uIHNob3VsZCBoYXZlIGJlZW5cbiAgKiBlc3RhYmxpc2hlZC4gIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBzb2NrZXQgaXMgb2ZmIGFsbCBsaXN0cyBzbyBpdFxuICAqIGNhbm5vdCBiZSByZXRyaWV2ZWQsIHRoZW4gZHJvcHMgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIHNvY2tldCBzbyBpdCBpcyBjbGVhbmVkXG4tICogdXAgKHNvY2tfcHV0KCkgLVx1MDAzZSBza19mcmVlKCkgLVx1MDAzZSBvdXIgc2tfZGVzdHJ1Y3QgaW1wbGVtZW50YXRpb24pLiAgTm90ZSB0aGlzXG4tICogZnVuY3Rpb24gd2lsbCBhbHNvIGNsZWFudXAgcmVqZWN0ZWQgc29ja2V0cywgdGhvc2UgdGhhdCByZWFjaCB0aGUgY29ubmVjdGVkXG4tICogc3RhdGUgYnV0IGxlYXZlIGl0IGJlZm9yZSB0aGV5IGhhdmUgYmVlbiBhY2NlcHRlZC5cbisgKiB1cCAoc29ja19wdXQoKSAtXHUwMDNlIHNrX2ZyZWUoKSAtXHUwMDNlIG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuXG4gICpcbiAgKiAtIExvY2sgb3JkZXJpbmcgZm9yIHBlbmRpbmcgb3IgYWNjZXB0IHF1ZXVlIHNvY2tldHMgaXM6XG4gICpcbkBAIC03NzQsMTEgKzc3MSwxMCBAQCBzdGF0aWMgdm9pZCB2c29ja19wZW5kaW5nX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIFx0aWYgKHZzb2NrX2lzX3BlbmRpbmcoc2spKSB7XG4gXHRcdHZzb2NrX3JlbW92ZV9wZW5kaW5nKGxpc3RlbmVyLCBzayk7XG4tXHR9IGVsc2UgaWYgKCF2c2stXHUwMDNlcmVqZWN0ZWQpIHtcbi1cdFx0LyogV2UgYXJlIG5vdCBvbiB0aGUgcGVuZGluZyBsaXN0IGFuZCBhY2NlcHQoKSBkaWQgbm90IHJlamVjdFxuLVx0XHQgKiB1cywgc28gd2UgbXVzdCBoYXZlIGJlZW4gYWNjZXB0ZWQgYnkgb3VyIHVzZXIgcHJvY2Vzcy4gIFdlXG4tXHRcdCAqIGp1c3QgbmVlZCB0byBkcm9wIG91ciByZWZlcmVuY2VzIHRvIHRoZSBzb2NrZXRzIGFuZCBiZSBvblxuLVx0XHQgKiBvdXIgd2F5LlxuK1x0fSBlbHNlIHtcbitcdFx0LyogV2UgYXJlIG5vdCBvbiB0aGUgcGVuZGluZyBsaXN0IHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkXG4rXHRcdCAqIGJ5IG91ciB1c2VyIHByb2Nlc3MuIFdlIGp1c3QgbmVlZCB0byBkcm9wIG91ciByZWZlcmVuY2VzIHRvXG4rXHRcdCAqIHRoZSBzb2NrZXRzIGFuZCBiZSBvbiBvdXIgd2F5LlxuIFx0XHQgKi9cbiBcdFx0Y2xlYW51cCA9IGZhbHNlO1xuIFx0XHRnb3RvIG91dDtcbkBAIC05NDIsNyArOTM4LDYgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpfX3Zzb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHR2c2stXHUwMDNlbGlzdGVuZXIgPSBOVUxMO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dnNrLVx1MDAzZXBlbmRpbmdfbGlua3MpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dnNrLVx1MDAzZWFjY2VwdF9xdWV1ZSk7XG4tXHR2c2stXHUwMDNlcmVqZWN0ZWQgPSBmYWxzZTtcbiBcdHZzay1cdTAwM2VzZW50X3JlcXVlc3QgPSBmYWxzZTtcbiBcdHZzay1cdTAwM2VpZ25vcmVfY29ubmVjdGluZ19yc3QgPSBmYWxzZTtcbiBcdFdSSVRFX09OQ0UodnNrLVx1MDAzZXBlZXJfc2h1dGRvd24sIDApO1xuQEAgLTE4NDcsMTIgKzE4NDIsMTAgQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuIFx0XHRwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCBcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xuIFx0fVxuIFxuLVx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuLVx0XHRlcnIgPSAtc2stXHUwMDNlc2tfZXJyO1xuK1x0ZXJyID0gc29ja19lcnJvcihzayk7XG4rXHRpZiAoZXJyKSB7XG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gVENQX0NMT1NFO1xuIFx0XHRzb2NrLVx1MDAzZXN0YXRlID0gU1NfVU5DT05ORUNURUQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRlcnIgPSAwO1xuIFx0fVxuIFxuIG91dF93YWl0OlxuQEAgLTE4OTMsNyArMTg4Niw3IEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHR0aW1lb3V0ID0gc29ja19yY3Z0aW1lbyhsaXN0ZW5lciwgYXJnLVx1MDAzZWZsYWdzIFx1MDAyNiBPX05PTkJMT0NLKTtcbiBcbiBcdHdoaWxlICgoY29ubmVjdGVkID0gdnNvY2tfZGVxdWV1ZV9hY2NlcHQobGlzdGVuZXIpKSA9PSBOVUxMIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIGxpc3RlbmVyLVx1MDAzZXNrX2VyciA9PSAwIFx1MDAyNlx1MDAyNiB0aW1lb3V0ICE9IDApIHtcbitcdFx0dGltZW91dCAhPSAwKSB7XG4gXHRcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChsaXN0ZW5lciksIFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gXHRcdHJlbGVhc2Vfc29jayhsaXN0ZW5lcik7XG4gXHRcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xuQEAgLTE5MDYsMzggKzE4OTksMjMgQEAgc3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKGxpc3RlbmVyLVx1MDAzZXNrX2Vycikge1xuLVx0XHRlcnIgPSAtbGlzdGVuZXItXHUwMDNlc2tfZXJyO1xuLVx0fSBlbHNlIGlmICghY29ubmVjdGVkKSB7XG4rXHRpZiAoIWNvbm5lY3RlZCkge1xuIFx0XHRlcnIgPSAtRUFHQUlOO1xuLVx0fVxuLVxuLVx0aWYgKGNvbm5lY3RlZCkge1xuK1x0fSBlbHNlIHtcbiBcdFx0c2tfYWNjZXB0cV9yZW1vdmVkKGxpc3RlbmVyKTtcbiBcbiBcdFx0bG9ja19zb2NrX25lc3RlZChjb25uZWN0ZWQsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiBcdFx0dmNvbm5lY3RlZCA9IHZzb2NrX3NrKGNvbm5lY3RlZCk7XG4gXG4tXHRcdC8qIElmIHRoZSBsaXN0ZW5lciBzb2NrZXQgaGFzIHJlY2VpdmVkIGFuIGVycm9yLCB0aGVuIHdlIHNob3VsZFxuLVx0XHQgKiByZWplY3QgdGhpcyBzb2NrZXQgYW5kIHJldHVybi4gIE5vdGUgdGhhdCB3ZSBzaW1wbHkgbWFyayB0aGVcbi1cdFx0ICogc29ja2V0IHJlamVjdGVkLCBkcm9wIG91ciByZWZlcmVuY2UsIGFuZCBsZXQgdGhlIGNsZWFudXBcbi1cdFx0ICogZnVuY3Rpb24gaGFuZGxlIHRoZSBjbGVhbnVwOyB0aGUgZmFjdCB0aGF0IHdlIGZvdW5kIGl0IGluXG4tXHRcdCAqIHRoZSBsaXN0ZW5lcidzIGFjY2VwdCBxdWV1ZSBndWFyYW50ZWVzIHRoYXQgdGhlIGNsZWFudXBcbi1cdFx0ICogZnVuY3Rpb24gaGFzbid0IHJ1biB5ZXQuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0dmNvbm5lY3RlZC1cdTAwM2VyZWplY3RlZCA9IHRydWU7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0bmV3c29jay1cdTAwM2VzdGF0ZSA9IFNTX0NPTk5FQ1RFRDtcbi1cdFx0XHRzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7XG4rXHRcdG5ld3NvY2stXHUwMDNlc3RhdGUgPSBTU19DT05ORUNURUQ7XG4rXHRcdHNvY2tfZ3JhZnQoY29ubmVjdGVkLCBuZXdzb2NrKTtcbiBcbi1cdFx0XHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsXG4tXHRcdFx0XHRcdTAwMjZjb25uZWN0ZWQtXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbitcdFx0c2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULFxuK1x0XHRcdFx1MDAyNmNvbm5lY3RlZC1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuIFxuLVx0XHRcdGlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLVx1MDAzZXRyYW5zcG9ydCkpXG4tXHRcdFx0XHRzZXRfYml0KFNPQ0tfU1VQUE9SVF9aQyxcbi1cdFx0XHRcdFx0XHUwMDI2Y29ubmVjdGVkLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmbGFncyk7XG4tXHRcdH1cbitcdFx0aWYgKHZzb2NrX21zZ3plcm9jb3B5X2FsbG93KHZjb25uZWN0ZWQtXHUwMDNldHJhbnNwb3J0KSlcbitcdFx0XHRzZXRfYml0KFNPQ0tfU1VQUE9SVF9aQyxcbitcdFx0XHRcdFx1MDAyNmNvbm5lY3RlZC1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuIFxuIFx0XHRyZWxlYXNlX3NvY2soY29ubmVjdGVkKTtcbiBcdFx0c29ja19wdXQoY29ubmVjdGVkKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjU3LjY5ODUyODQxMloiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDkxMDYzNTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSB2c29jayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYWZfdnNvY2suY2AgYW5kIGBhZl92c29jay5oYCwgc3BlY2lmaWNhbGx5IHJlbW92aW5nIHRoZSBgcmVqZWN0ZWRgIGZpZWxkIGZyb20gYHN0cnVjdCB2c29ja19zb2NrYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gIEkgYWx3YXlzIGdvIHRocm91Z2ggdGhpcyBjaGVja2xpc3QuXG5cblRoZSBjb2RlIGNoYW5nZXMgYXJlIG1vc3RseSBmb2N1c2VkIG9uIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgdnNvY2tfcGVuZGluZ193b3JrYCwgYHZzb2NrX2Nvbm5lY3RgLCBhbmQgYHZzb2NrX2FjY2VwdGAuIEl0IGxvb2tzIGxpa2UgaXQncyByZXBsYWNpbmcgZGlyZWN0IGNoZWNrcyBvZiBgc2stXHUwMDNlc2tfZXJyYCBhbmQgYGxpc3RlbmVyLVx1MDAzZXNrX2VycmAgd2l0aCBgc29ja19lcnJvcihzaylgLiAgQXQgZmlyc3QgZ2xhbmNlLCBubyBuZXcgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludm9sdmVkLCBhbmQgaXQgZG9lc24ndCBzZWVtIGxpa2UgYW55IHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSAqYmVpbmcqIGV4cG9zZWQuICBUaGUgY2hhbmdlcyBhcHBlYXIgdG8gYmUgcHVyZWx5IGxvZ2ljLWRyaXZlbiwgcHJpbWFyaWx5IHJlbGF0ZWQgdG8gaG93IHNvY2tldCBlcnJvcnMgYW5kIGNvbm5lY3Rpb24gcmVqZWN0aW9ucyBhcmUgaGFuZGxlZC4gSSBkb24ndCBzZWUgYW55IGltbWVkaWF0ZSByZWQgZmxhZ3MuIFRoaXMgZG9lc24ndCBzZWVtIGxpa2UgdGhlIHNvcnQgb2YgY2hhbmdlIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBzaG91bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcuXG5cbkhvd2V2ZXIsIGxldCdzIHpvb20gaW4gb24gYHZzb2NrX2FjY2VwdGAg4oCTIHRoZXJlJ3MgYSBkZWZpbml0ZSBsb2dpYyBzaGlmdC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgYHdoaWxlYCBsb29wIGNvbmRpdGlvbiB0aGF0IGNoZWNrZWQgZm9yIGJvdGggYSBjb25uZWN0ZWQgc29ja2V0IGFuZCBgbGlzdGVuZXItXHUwMDNlc2tfZXJyYCwgYW5kIHRoZW4gY2hlY2tlZCBgbGlzdGVuZXItXHUwMDNlc2tfZXJyYCAqYWdhaW4qIGFmdGVyIHRoZSBsb29wLiBOb3csIGl0IHNlZW1zIHRoYXQgaWYgYGxpc3RlbmVyLVx1MDAzZXNrX2VycmAgaXNuJ3QgemVybywgaXQgd2lsbCBlaXRoZXIgcmV0dXJuIGAtRUFHQUlOYCBvciBjb250aW51ZSB0byBleGVjdXRlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBsb2dpYyBjaGFuZ2UgYW5kIG5lZWRzIGNhcmVmdWwgcmV2aWV3LCBidXQgaXQgc3RpbGwgc2VlbXMgdGhhdCB0aGUgY2hhbmdlIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIGdvIHRocm91Z2ggdGhlIEtNU0FOIHJ1bGVzOiAgRXNzZW50aWFsbHksIEknbSBjaGVja2luZyBmb3IgKm15KiBhcmVhcyBvZiBleHBlcnRpc2UgLS0gY2FzZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgbWlnaHQgc25lYWsgdGhyb3VnaC5cbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkPyBOby5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/IE5lZ2F0aXZlLlxuNC4gQm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIHdoaWNoIGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGE/IERvZXNuJ3QgbG9vayBsaWtlIGl0LlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBJdCdzIGEgbG9naWMgY2hhbmdlLCBsaWtlbHkgc2ltcGxpZnlpbmcgZXJyb3IgaGFuZGxpbmcsIGJ1dCBub3QgaW50cm9kdWNpbmcgYW55IGFwcGFyZW50IG1lbW9yeSBzYWZldHkgY29uY2VybnMgaW4gdGhlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2ODMsIk91dHB1dFRva2VucyI6MTQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MDI6MDguNjA5MTY4ODQxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBgcmVqZWN0ZWRgIGZpZWxkIGZyb20gYHN0cnVjdCB2c29ja19zb2NrYCBhbmQgc2ltcGxpZmllcyBlcnJvciBoYW5kbGluZyBsb2dpYyBpbiBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGxvZ2ljIGVycm9ycykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgIGFuZCBzaW1wbGlmaWVzIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIGB2c29ja19hY2NlcHRgIGFuZCBgdnNvY2tfY29ubmVjdGAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcy4gVGhlIGNoYW5nZXMgZG8gbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgbG9naWMgZXJyb3JzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjtjnz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 18:02:40 +0000 UTC FinishedAt: 2026-08-13 19:02:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "09190c59cd101e0bf87a1c5a32ebae25c91e6d81", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VSOCKETS_LOOPBACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "09190c59cd101e0bf87a1c5a32ebae25c91e6d81", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VSOCKETS_LOOPBACK" ], "series_id": "80df64d6-9537-4c9f-ad2c-8c83aebe9ce6" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vsock_connect", "vsock_accept", "vsock_pending_work" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTX0xPT1BCQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dnNvY2tfY29ubmVjdCYjMzQ7LAogICAgJiMzNDt2c29ja19hY2NlcHQmIzM0OywKICAgICYjMzQ7dnNvY2tfcGVuZGluZ193b3JrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdnNvY2tfc29ja2AgYW5kIHNpbXBsaWZpZXMgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBhbnkgbmV3IGFsbG9jYXRpb25zIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBUaGUgY2hhbmdlcyBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBsb2dpYyBlcnJvcnMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyBmb3IgQUZfVlNPQ0sgc29ja2V0cy4gSXQgcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBzdGF0ZSBmcm9tIHBlbmRpbmcgc29ja2V0cyBhbmQgY2hhbmdlcyBob3cgYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YCBoYW5kbGUgc29ja2V0IGVycm9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIgZHVyaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYmE1NDZiNjBkZTA4YjBmZTFhNzNhYzQ2NGVmNTZkYWNmYmUyMTIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTk6MDE6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaCBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbmluZGV4IDMwMDQ2YTNjMjBmNzMuLjMzNTdlZTYyZDEwYmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9hZl92c29jay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9hZl92c29jay5oXG5AQCAtNTIsMTMgJiM0Mzs1MiwxMCBAQCBzdHJ1Y3QgdnNvY2tfc29jayB7XG4gXHQgKiBUaGUgbGlzdGVuaW5nIHNvY2tldCBpcyB0aGUgaGVhZCBmb3IgYm90aCBsaXN0cy4gIFNvY2tldHMgY3JlYXRlZFxuIFx0ICogZm9yIGNvbm5lY3Rpb24gcmVxdWVzdHMgYXJlIHBsYWNlZCBpbiB0aGUgcGVuZGluZyBsaXN0IHVudGlsIHRoZXlcbiBcdCAqIGFyZSBjb25uZWN0ZWQsIGF0IHdoaWNoIHBvaW50IHRoZXkgYXJlIHB1dCBpbiB0aGUgYWNjZXB0IHF1ZXVlIGxpc3Rcbi1cdCAqIHNvIHRoZXkgY2FuIGJlIGFjY2VwdGVkIGluIGFjY2VwdCgpLiAgSWYgYWNjZXB0KCkgY2Fubm90IGFjY2VwdCB0aGVcbi1cdCAqIGNvbm5lY3Rpb24sIGl0IGlzIG1hcmtlZCBhcyByZWplY3RlZCBzbyB0aGUgY2xlYW51cCBmdW5jdGlvbiBrbm93c1xuLVx0ICogdG8gY2xlYW4gdXAgdGhlIHNvY2tldC5cbiYjNDM7XHQgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS5cbiBcdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpbmtzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBhY2NlcHRfcXVldWU7XG4tXHRib29sIHJlamVjdGVkO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBjb25uZWN0X3dvcms7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHBlbmRpbmdfd29yaztcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgY2xvc2Vfd29yaztcbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbmluZGV4IDYyMmRiZDA0Njc5OTQuLmU4OWNiODRiOGQ3MzcgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuQEAgLTM4LDEwICYjNDM7MzgsOSBAQFxuICAqIHBlbmRpbmcgc29ja2V0LiAgV2hlbiB0aGF0IHNvY2tldCByZWFjaGVzIHRoZSBjb25uZWN0ZWQgc3RhdGUsIGl0IGlzIHJlbW92ZWRcbiAgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQmIzM5O3MgcGVuZGluZyBsaXN0IGFuZCBlbnF1ZXVlZCBpbiB0aGUgbGlzdGVuZXJcbiAgKiBzb2NrZXQmIzM5O3MgYWNjZXB0IHF1ZXVlLiAgQ2FsbGVycyBvZiBhY2NlcHQoMikgd2lsbCBhY2NlcHQgY29ubmVjdGVkIHNvY2tldHNcbi0gKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQmIzM5O3MgYWNjZXB0IHF1ZXVlLiAgSWYgdGhlIHNvY2tldCBjYW5ub3QgYmUgYWNjZXB0ZWRcbi0gKiBmb3Igc29tZSByZWFzb24gdGhlbiBpdCBpcyBtYXJrZWQgcmVqZWN0ZWQuICBPbmNlIHRoZSBjb25uZWN0aW9uIGlzXG4tICogYWNjZXB0ZWQsIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cFxuLSAqIGZhbGxzIHdpdGggdGhhdCB1c2VyIHByb2Nlc3MuXG4mIzQzOyAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCYjMzk7cyBhY2NlcHQgcXVldWUuIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgYWNjZXB0ZWQsXG4mIzQzOyAqIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cCBmYWxsc1xuJiM0MzsgKiB3aXRoIHRoYXQgdXNlciBwcm9jZXNzLlxuICAqXG4gICogLSBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXNlIHBlbmRpbmcgc29ja2V0cyB3aWxsIG5ldmVyIHJlYWNoIHRoZSBjb25uZWN0ZWRcbiAgKiBzdGF0ZTsgaW4gZmFjdCwgd2UgbWF5IG5ldmVyIHJlY2VpdmUgYW5vdGhlciBwYWNrZXQgYWZ0ZXIgdGhlIGNvbm5lY3Rpb25cbkBAIC00OSw5ICYjNDM7NDgsNyBAQFxuICAqIGZ1dHVyZSwgYWZ0ZXIgc29tZSBhbW91bnQgb2YgdGltZSBwYXNzZXMgd2hlcmUgYSBjb25uZWN0aW9uIHNob3VsZCBoYXZlIGJlZW5cbiAgKiBlc3RhYmxpc2hlZC4gIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBzb2NrZXQgaXMgb2ZmIGFsbCBsaXN0cyBzbyBpdFxuICAqIGNhbm5vdCBiZSByZXRyaWV2ZWQsIHRoZW4gZHJvcHMgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIHNvY2tldCBzbyBpdCBpcyBjbGVhbmVkXG4tICogdXAgKHNvY2tfcHV0KCkgLVx1MDAzZSBza19mcmVlKCkgLVx1MDAzZSBvdXIgc2tfZGVzdHJ1Y3QgaW1wbGVtZW50YXRpb24pLiAgTm90ZSB0aGlzXG4tICogZnVuY3Rpb24gd2lsbCBhbHNvIGNsZWFudXAgcmVqZWN0ZWQgc29ja2V0cywgdGhvc2UgdGhhdCByZWFjaCB0aGUgY29ubmVjdGVkXG4tICogc3RhdGUgYnV0IGxlYXZlIGl0IGJlZm9yZSB0aGV5IGhhdmUgYmVlbiBhY2NlcHRlZC5cbiYjNDM7ICogdXAgKHNvY2tfcHV0KCkgLVx1MDAzZSBza19mcmVlKCkgLVx1MDAzZSBvdXIgc2tfZGVzdHJ1Y3QgaW1wbGVtZW50YXRpb24pLlxuICAqXG4gICogLSBMb2NrIG9yZGVyaW5nIGZvciBwZW5kaW5nIG9yIGFjY2VwdCBxdWV1ZSBzb2NrZXRzIGlzOlxuICAqXG5AQCAtNzc0LDExICYjNDM7NzcxLDEwIEBAIHN0YXRpYyB2b2lkIHZzb2NrX3BlbmRpbmdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gXHRpZiAodnNvY2tfaXNfcGVuZGluZyhzaykpIHtcbiBcdFx0dnNvY2tfcmVtb3ZlX3BlbmRpbmcobGlzdGVuZXIsIHNrKTtcbi1cdH0gZWxzZSBpZiAoIXZzay1cdTAwM2VyZWplY3RlZCkge1xuLVx0XHQvKiBXZSBhcmUgbm90IG9uIHRoZSBwZW5kaW5nIGxpc3QgYW5kIGFjY2VwdCgpIGRpZCBub3QgcmVqZWN0XG4tXHRcdCAqIHVzLCBzbyB3ZSBtdXN0IGhhdmUgYmVlbiBhY2NlcHRlZCBieSBvdXIgdXNlciBwcm9jZXNzLiAgV2Vcbi1cdFx0ICoganVzdCBuZWVkIHRvIGRyb3Agb3VyIHJlZmVyZW5jZXMgdG8gdGhlIHNvY2tldHMgYW5kIGJlIG9uXG4tXHRcdCAqIG91ciB3YXkuXG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBzbyB3ZSBtdXN0IGhhdmUgYmVlbiBhY2NlcHRlZFxuJiM0MztcdFx0ICogYnkgb3VyIHVzZXIgcHJvY2Vzcy4gV2UganVzdCBuZWVkIHRvIGRyb3Agb3VyIHJlZmVyZW5jZXMgdG9cbiYjNDM7XHRcdCAqIHRoZSBzb2NrZXRzIGFuZCBiZSBvbiBvdXIgd2F5LlxuIFx0XHQgKi9cbiBcdFx0Y2xlYW51cCA9IGZhbHNlO1xuIFx0XHRnb3RvIG91dDtcbkBAIC05NDIsNyAmIzQzOzkzOCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0dnNrLVx1MDAzZWxpc3RlbmVyID0gTlVMTDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZzay1cdTAwM2VwZW5kaW5nX2xpbmtzKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZzay1cdTAwM2VhY2NlcHRfcXVldWUpO1xuLVx0dnNrLVx1MDAzZXJlamVjdGVkID0gZmFsc2U7XG4gXHR2c2stXHUwMDNlc2VudF9yZXF1ZXN0ID0gZmFsc2U7XG4gXHR2c2stXHUwMDNlaWdub3JlX2Nvbm5lY3RpbmdfcnN0ID0gZmFsc2U7XG4gXHRXUklURV9PTkNFKHZzay1cdTAwM2VwZWVyX3NodXRkb3duLCAwKTtcbkBAIC0xODQ3LDEyICYjNDM7MTg0MiwxMCBAQCBzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4gXHRcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChzayksIFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gXHR9XG4gXG4tXHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4tXHRcdGVyciA9IC1zay1cdTAwM2Vza19lcnI7XG4mIzQzO1x0ZXJyID0gc29ja19lcnJvcihzayk7XG4mIzQzO1x0aWYgKGVycikge1xuIFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IFRDUF9DTE9TRTtcbiBcdFx0c29jay1cdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xuLVx0fSBlbHNlIHtcbi1cdFx0ZXJyID0gMDtcbiBcdH1cbiBcbiBvdXRfd2FpdDpcbkBAIC0xODkzLDcgJiM0MzsxODg2LDcgQEAgc3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbiBcdHRpbWVvdXQgPSBzb2NrX3JjdnRpbWVvKGxpc3RlbmVyLCBhcmctXHUwMDNlZmxhZ3MgXHUwMDI2IE9fTk9OQkxPQ0spO1xuIFxuIFx0d2hpbGUgKChjb25uZWN0ZWQgPSB2c29ja19kZXF1ZXVlX2FjY2VwdChsaXN0ZW5lcikpID09IE5VTEwgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgbGlzdGVuZXItXHUwMDNlc2tfZXJyID09IDAgXHUwMDI2XHUwMDI2IHRpbWVvdXQgIT0gMCkge1xuJiM0MztcdFx0dGltZW91dCAhPSAwKSB7XG4gXHRcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChsaXN0ZW5lciksIFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gXHRcdHJlbGVhc2Vfc29jayhsaXN0ZW5lcik7XG4gXHRcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xuQEAgLTE5MDYsMzggJiM0MzsxODk5LDIzIEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChsaXN0ZW5lci1cdTAwM2Vza19lcnIpIHtcbi1cdFx0ZXJyID0gLWxpc3RlbmVyLVx1MDAzZXNrX2Vycjtcbi1cdH0gZWxzZSBpZiAoIWNvbm5lY3RlZCkge1xuJiM0MztcdGlmICghY29ubmVjdGVkKSB7XG4gXHRcdGVyciA9IC1FQUdBSU47XG4tXHR9XG4tXG4tXHRpZiAoY29ubmVjdGVkKSB7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0c2tfYWNjZXB0cV9yZW1vdmVkKGxpc3RlbmVyKTtcbiBcbiBcdFx0bG9ja19zb2NrX25lc3RlZChjb25uZWN0ZWQsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiBcdFx0dmNvbm5lY3RlZCA9IHZzb2NrX3NrKGNvbm5lY3RlZCk7XG4gXG4tXHRcdC8qIElmIHRoZSBsaXN0ZW5lciBzb2NrZXQgaGFzIHJlY2VpdmVkIGFuIGVycm9yLCB0aGVuIHdlIHNob3VsZFxuLVx0XHQgKiByZWplY3QgdGhpcyBzb2NrZXQgYW5kIHJldHVybi4gIE5vdGUgdGhhdCB3ZSBzaW1wbHkgbWFyayB0aGVcbi1cdFx0ICogc29ja2V0IHJlamVjdGVkLCBkcm9wIG91ciByZWZlcmVuY2UsIGFuZCBsZXQgdGhlIGNsZWFudXBcbi1cdFx0ICogZnVuY3Rpb24gaGFuZGxlIHRoZSBjbGVhbnVwOyB0aGUgZmFjdCB0aGF0IHdlIGZvdW5kIGl0IGluXG4tXHRcdCAqIHRoZSBsaXN0ZW5lciYjMzk7cyBhY2NlcHQgcXVldWUgZ3VhcmFudGVlcyB0aGF0IHRoZSBjbGVhbnVwXG4tXHRcdCAqIGZ1bmN0aW9uIGhhc24mIzM5O3QgcnVuIHlldC5cbi1cdFx0ICovXG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHR2Y29ubmVjdGVkLVx1MDAzZXJlamVjdGVkID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRuZXdzb2NrLVx1MDAzZXN0YXRlID0gU1NfQ09OTkVDVEVEO1xuLVx0XHRcdHNvY2tfZ3JhZnQoY29ubmVjdGVkLCBuZXdzb2NrKTtcbiYjNDM7XHRcdG5ld3NvY2stXHUwMDNlc3RhdGUgPSBTU19DT05ORUNURUQ7XG4mIzQzO1x0XHRzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7XG4gXG4tXHRcdFx0c2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULFxuLVx0XHRcdFx0XHUwMDI2Y29ubmVjdGVkLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsXG4mIzQzO1x0XHRcdFx1MDAyNmNvbm5lY3RlZC1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuIFxuLVx0XHRcdGlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLVx1MDAzZXRyYW5zcG9ydCkpXG4tXHRcdFx0XHRzZXRfYml0KFNPQ0tfU1VQUE9SVF9aQyxcbi1cdFx0XHRcdFx0XHUwMDI2Y29ubmVjdGVkLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmbGFncyk7XG4tXHRcdH1cbiYjNDM7XHRcdGlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLVx1MDAzZXRyYW5zcG9ydCkpXG4mIzQzO1x0XHRcdHNldF9iaXQoU09DS19TVVBQT1JUX1pDLFxuJiM0MztcdFx0XHRcdFx1MDAyNmNvbm5lY3RlZC1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuIFxuIFx0XHRyZWxlYXNlX3NvY2soY29ubmVjdGVkKTtcbiBcdFx0c29ja19wdXQoY29ubmVjdGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOTowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7VlNPQ0tFVFNfTE9PUEJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2c29ja19jb25uZWN0JiMzNDssCiAgICAmIzM0O3Zzb2NrX2FjY2VwdCYjMzQ7LAogICAgJiMzNDt2c29ja19wZW5kaW5nX3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyBmb3IgQUZfVlNPQ0sgc29ja2V0cy4gSXQgcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBzdGF0ZSBmcm9tIHBlbmRpbmcgc29ja2V0cyBhbmQgY2hhbmdlcyBob3cgYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YCBoYW5kbGUgc29ja2V0IGVycm9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIgZHVyaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYmE1NDZiNjBkZTA4YjBmZTFhNzNhYzQ2NGVmNTZkYWNmYmUyMTIxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTk6MDE6MTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl92c29jay5oIGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaAppbmRleCAzMDA0NmEzYzIwZjczLi4zMzU3ZWU2MmQxMGJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZl92c29jay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmgKQEAgLTUyLDEzICYjNDM7NTIsMTAgQEAgc3RydWN0IHZzb2NrX3NvY2sgewogCSAqIFRoZSBsaXN0ZW5pbmcgc29ja2V0IGlzIHRoZSBoZWFkIGZvciBib3RoIGxpc3RzLiAgU29ja2V0cyBjcmVhdGVkCiAJICogZm9yIGNvbm5lY3Rpb24gcmVxdWVzdHMgYXJlIHBsYWNlZCBpbiB0aGUgcGVuZGluZyBsaXN0IHVudGlsIHRoZXkKIAkgKiBhcmUgY29ubmVjdGVkLCBhdCB3aGljaCBwb2ludCB0aGV5IGFyZSBwdXQgaW4gdGhlIGFjY2VwdCBxdWV1ZSBsaXN0Ci0JICogc28gdGhleSBjYW4gYmUgYWNjZXB0ZWQgaW4gYWNjZXB0KCkuICBJZiBhY2NlcHQoKSBjYW5ub3QgYWNjZXB0IHRoZQotCSAqIGNvbm5lY3Rpb24sIGl0IGlzIG1hcmtlZCBhcyByZWplY3RlZCBzbyB0aGUgY2xlYW51cCBmdW5jdGlvbiBrbm93cwotCSAqIHRvIGNsZWFuIHVwIHRoZSBzb2NrZXQuCiYjNDM7CSAqIHNvIHRoZXkgY2FuIGJlIGFjY2VwdGVkIGluIGFjY2VwdCgpLgogCSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ19saW5rczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGFjY2VwdF9xdWV1ZTsKLQlib29sIHJlamVjdGVkOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgY29ubmVjdF93b3JrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgcGVuZGluZ193b3JrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgY2xvc2Vfd29yazsKZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwppbmRleCA2MjJkYmQwNDY3OTk0Li5lODljYjg0YjhkNzM3IDEwMDY0NAotLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCkBAIC0zOCwxMCAmIzQzOzM4LDkgQEAKICAqIHBlbmRpbmcgc29ja2V0LiAgV2hlbiB0aGF0IHNvY2tldCByZWFjaGVzIHRoZSBjb25uZWN0ZWQgc3RhdGUsIGl0IGlzIHJlbW92ZWQKICAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCYjMzk7cyBwZW5kaW5nIGxpc3QgYW5kIGVucXVldWVkIGluIHRoZSBsaXN0ZW5lcgogICogc29ja2V0JiMzOTtzIGFjY2VwdCBxdWV1ZS4gIENhbGxlcnMgb2YgYWNjZXB0KDIpIHdpbGwgYWNjZXB0IGNvbm5lY3RlZCBzb2NrZXRzCi0gKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQmIzM5O3MgYWNjZXB0IHF1ZXVlLiAgSWYgdGhlIHNvY2tldCBjYW5ub3QgYmUgYWNjZXB0ZWQKLSAqIGZvciBzb21lIHJlYXNvbiB0aGVuIGl0IGlzIG1hcmtlZCByZWplY3RlZC4gIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXMKLSAqIGFjY2VwdGVkLCBpdCBpcyBvd25lZCBieSB0aGUgdXNlciBwcm9jZXNzIGFuZCB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGNsZWFudXAKLSAqIGZhbGxzIHdpdGggdGhhdCB1c2VyIHByb2Nlc3MuCiYjNDM7ICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0JiMzOTtzIGFjY2VwdCBxdWV1ZS4gT25jZSB0aGUgY29ubmVjdGlvbiBpcyBhY2NlcHRlZCwKJiM0MzsgKiBpdCBpcyBvd25lZCBieSB0aGUgdXNlciBwcm9jZXNzIGFuZCB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGNsZWFudXAgZmFsbHMKJiM0MzsgKiB3aXRoIHRoYXQgdXNlciBwcm9jZXNzLgogICoKICAqIC0gSXQgaXMgcG9zc2libGUgdGhhdCB0aGVzZSBwZW5kaW5nIHNvY2tldHMgd2lsbCBuZXZlciByZWFjaCB0aGUgY29ubmVjdGVkCiAgKiBzdGF0ZTsgaW4gZmFjdCwgd2UgbWF5IG5ldmVyIHJlY2VpdmUgYW5vdGhlciBwYWNrZXQgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24KQEAgLTQ5LDkgJiM0Mzs0OCw3IEBACiAgKiBmdXR1cmUsIGFmdGVyIHNvbWUgYW1vdW50IG9mIHRpbWUgcGFzc2VzIHdoZXJlIGEgY29ubmVjdGlvbiBzaG91bGQgaGF2ZSBiZWVuCiAgKiBlc3RhYmxpc2hlZC4gIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBzb2NrZXQgaXMgb2ZmIGFsbCBsaXN0cyBzbyBpdAogICogY2Fubm90IGJlIHJldHJpZXZlZCwgdGhlbiBkcm9wcyBhbGwgcmVmZXJlbmNlcyB0byB0aGUgc29ja2V0IHNvIGl0IGlzIGNsZWFuZWQKLSAqIHVwIChzb2NrX3B1dCgpIC0mZ3Q7IHNrX2ZyZWUoKSAtJmd0OyBvdXIgc2tfZGVzdHJ1Y3QgaW1wbGVtZW50YXRpb24pLiAgTm90ZSB0aGlzCi0gKiBmdW5jdGlvbiB3aWxsIGFsc28gY2xlYW51cCByZWplY3RlZCBzb2NrZXRzLCB0aG9zZSB0aGF0IHJlYWNoIHRoZSBjb25uZWN0ZWQKLSAqIHN0YXRlIGJ1dCBsZWF2ZSBpdCBiZWZvcmUgdGhleSBoYXZlIGJlZW4gYWNjZXB0ZWQuCiYjNDM7ICogdXAgKHNvY2tfcHV0KCkgLSZndDsgc2tfZnJlZSgpIC0mZ3Q7IG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuCiAgKgogICogLSBMb2NrIG9yZGVyaW5nIGZvciBwZW5kaW5nIG9yIGFjY2VwdCBxdWV1ZSBzb2NrZXRzIGlzOgogICoKQEAgLTc3NCwxMSAmIzQzOzc3MSwxMCBAQCBzdGF0aWMgdm9pZCB2c29ja19wZW5kaW5nX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJaWYgKHZzb2NrX2lzX3BlbmRpbmcoc2spKSB7CiAJCXZzb2NrX3JlbW92ZV9wZW5kaW5nKGxpc3RlbmVyLCBzayk7Ci0JfSBlbHNlIGlmICghdnNrLSZndDtyZWplY3RlZCkgewotCQkvKiBXZSBhcmUgbm90IG9uIHRoZSBwZW5kaW5nIGxpc3QgYW5kIGFjY2VwdCgpIGRpZCBub3QgcmVqZWN0Ci0JCSAqIHVzLCBzbyB3ZSBtdXN0IGhhdmUgYmVlbiBhY2NlcHRlZCBieSBvdXIgdXNlciBwcm9jZXNzLiAgV2UKLQkJICoganVzdCBuZWVkIHRvIGRyb3Agb3VyIHJlZmVyZW5jZXMgdG8gdGhlIHNvY2tldHMgYW5kIGJlIG9uCi0JCSAqIG91ciB3YXkuCiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBXZSBhcmUgbm90IG9uIHRoZSBwZW5kaW5nIGxpc3Qgc28gd2UgbXVzdCBoYXZlIGJlZW4gYWNjZXB0ZWQKJiM0MzsJCSAqIGJ5IG91ciB1c2VyIHByb2Nlc3MuIFdlIGp1c3QgbmVlZCB0byBkcm9wIG91ciByZWZlcmVuY2VzIHRvCiYjNDM7CQkgKiB0aGUgc29ja2V0cyBhbmQgYmUgb24gb3VyIHdheS4KIAkJICovCiAJCWNsZWFudXAgPSBmYWxzZTsKIAkJZ290byBvdXQ7CkBAIC05NDIsNyAmIzQzOzkzOCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LAogCXZzay0mZ3Q7bGlzdGVuZXIgPSBOVUxMOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7dnNrLSZndDtwZW5kaW5nX2xpbmtzKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3Zzay0mZ3Q7YWNjZXB0X3F1ZXVlKTsKLQl2c2stJmd0O3JlamVjdGVkID0gZmFsc2U7CiAJdnNrLSZndDtzZW50X3JlcXVlc3QgPSBmYWxzZTsKIAl2c2stJmd0O2lnbm9yZV9jb25uZWN0aW5nX3JzdCA9IGZhbHNlOwogCVdSSVRFX09OQ0UodnNrLSZndDtwZWVyX3NodXRkb3duLCAwKTsKQEAgLTE4NDcsMTIgJiM0MzsxODQyLDEwIEBAIHN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwKIAkJcHJlcGFyZV90b193YWl0KHNrX3NsZWVwKHNrKSwgJmFtcDt3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCX0KIAotCWlmIChzay0mZ3Q7c2tfZXJyKSB7Ci0JCWVyciA9IC1zay0mZ3Q7c2tfZXJyOwomIzQzOwllcnIgPSBzb2NrX2Vycm9yKHNrKTsKJiM0MzsJaWYgKGVycikgewogCQlzay0mZ3Q7c2tfc3RhdGUgPSBUQ1BfQ0xPU0U7CiAJCXNvY2stJmd0O3N0YXRlID0gU1NfVU5DT05ORUNURUQ7Ci0JfSBlbHNlIHsKLQkJZXJyID0gMDsKIAl9CiAKIG91dF93YWl0OgpAQCAtMTg5Myw3ICYjNDM7MTg4Niw3IEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssCiAJdGltZW91dCA9IHNvY2tfcmN2dGltZW8obGlzdGVuZXIsIGFyZy0mZ3Q7ZmxhZ3MgJmFtcDsgT19OT05CTE9DSyk7CiAKIAl3aGlsZSAoKGNvbm5lY3RlZCA9IHZzb2NrX2RlcXVldWVfYWNjZXB0KGxpc3RlbmVyKSkgPT0gTlVMTCAmYW1wOyZhbXA7Ci0JICAgICAgIGxpc3RlbmVyLSZndDtza19lcnIgPT0gMCAmYW1wOyZhbXA7IHRpbWVvdXQgIT0gMCkgewomIzQzOwkJdGltZW91dCAhPSAwKSB7CiAJCXByZXBhcmVfdG9fd2FpdChza19zbGVlcChsaXN0ZW5lciksICZhbXA7d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJcmVsZWFzZV9zb2NrKGxpc3RlbmVyKTsKIAkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CkBAIC0xOTA2LDM4ICYjNDM7MTg5OSwyMyBAQCBzdGF0aWMgaW50IHZzb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLAogCQl9CiAJfQogCi0JaWYgKGxpc3RlbmVyLSZndDtza19lcnIpIHsKLQkJZXJyID0gLWxpc3RlbmVyLSZndDtza19lcnI7Ci0JfSBlbHNlIGlmICghY29ubmVjdGVkKSB7CiYjNDM7CWlmICghY29ubmVjdGVkKSB7CiAJCWVyciA9IC1FQUdBSU47Ci0JfQotCi0JaWYgKGNvbm5lY3RlZCkgewomIzQzOwl9IGVsc2UgewogCQlza19hY2NlcHRxX3JlbW92ZWQobGlzdGVuZXIpOwogCiAJCWxvY2tfc29ja19uZXN0ZWQoY29ubmVjdGVkLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAJCXZjb25uZWN0ZWQgPSB2c29ja19zayhjb25uZWN0ZWQpOwogCi0JCS8qIElmIHRoZSBsaXN0ZW5lciBzb2NrZXQgaGFzIHJlY2VpdmVkIGFuIGVycm9yLCB0aGVuIHdlIHNob3VsZAotCQkgKiByZWplY3QgdGhpcyBzb2NrZXQgYW5kIHJldHVybi4gIE5vdGUgdGhhdCB3ZSBzaW1wbHkgbWFyayB0aGUKLQkJICogc29ja2V0IHJlamVjdGVkLCBkcm9wIG91ciByZWZlcmVuY2UsIGFuZCBsZXQgdGhlIGNsZWFudXAKLQkJICogZnVuY3Rpb24gaGFuZGxlIHRoZSBjbGVhbnVwOyB0aGUgZmFjdCB0aGF0IHdlIGZvdW5kIGl0IGluCi0JCSAqIHRoZSBsaXN0ZW5lciYjMzk7cyBhY2NlcHQgcXVldWUgZ3VhcmFudGVlcyB0aGF0IHRoZSBjbGVhbnVwCi0JCSAqIGZ1bmN0aW9uIGhhc24mIzM5O3QgcnVuIHlldC4KLQkJICovCi0JCWlmIChlcnIpIHsKLQkJCXZjb25uZWN0ZWQtJmd0O3JlamVjdGVkID0gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJCW5ld3NvY2stJmd0O3N0YXRlID0gU1NfQ09OTkVDVEVEOwotCQkJc29ja19ncmFmdChjb25uZWN0ZWQsIG5ld3NvY2spOwomIzQzOwkJbmV3c29jay0mZ3Q7c3RhdGUgPSBTU19DT05ORUNURUQ7CiYjNDM7CQlzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7CiAKLQkJCXNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwKLQkJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7CiYjNDM7CQlzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsCiYjNDM7CQkJJmFtcDtjb25uZWN0ZWQtJmd0O3NrX3NvY2tldC0mZ3Q7ZmxhZ3MpOwogCi0JCQlpZiAodnNvY2tfbXNnemVyb2NvcHlfYWxsb3codmNvbm5lY3RlZC0mZ3Q7dHJhbnNwb3J0KSkKLQkJCQlzZXRfYml0KFNPQ0tfU1VQUE9SVF9aQywKLQkJCQkJJmFtcDtjb25uZWN0ZWQtJmd0O3NrX3NvY2tldC0mZ3Q7ZmxhZ3MpOwotCQl9CiYjNDM7CQlpZiAodnNvY2tfbXNnemVyb2NvcHlfYWxsb3codmNvbm5lY3RlZC0mZ3Q7dHJhbnNwb3J0KSkKJiM0MzsJCQlzZXRfYml0KFNPQ0tfU1VQUE9SVF9aQywKJiM0MzsJCQkJJmFtcDtjb25uZWN0ZWQtJmd0O3NrX3NvY2tldC0mZ3Q7ZmxhZ3MpOwogCiAJCXJlbGVhc2Vfc29jayhjb25uZWN0ZWQpOwogCQlzb2NrX3B1dChjb25uZWN0ZWQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjg2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIHZzb2NrIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyB0aGUgdnNvY2sgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBtZXNzaW5nIHdpdGggYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AgYW5kIGBpbmNsdWRlL25ldC9hZl92c29jay5oYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7aW50cmlndWluZywgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHdoYXQgdGhpcyBtZWFucyBmb3IgdGhlIG5ldHdvcmsgc3Vic3lzdGVtLiYjMzQ7IEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcmVtb3ZpbmcgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgLCBhbmQgdGhhdCBpbnN0YW50bHkgZmxhZ3MgbXkgYXR0ZW50aW9uLiBUaGF0IGJvb2xlYW4gbGlrZWx5IGhhZCBhIHZlcnkgc3BlY2lmaWMgcHVycG9zZSBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb3IgY29ubmVjdGlvbiBsaWZlY3ljbGUuCgpUaGUgY2hhbmdlcyBmb2N1cyBvbiBhIGZldyBrZXkgZnVuY3Rpb25zOiBgdnNvY2tfcGVuZGluZ193b3JrYCwgYHZzb2NrX2Nvbm5lY3RgLCBhbmQgYHZzb2NrX2FjY2VwdGAuIExldCYjMzk7cyBicmVhayBpdCBkb3duOgoKKiAgICoqYHZzb2NrX3NvY2tgIHN0cnVjdCoqOiBHb25lIGlzIHRoZSBgcmVqZWN0ZWRgIGJvb2xlYW4uIFRoYXQgaW1wbGllcyBhIHNoaWZ0IGluIGhvdyBjb25uZWN0aW9ucyBhcmUgbWFuYWdlZC4KKiAgICoqYHZzb2NrX3BlbmRpbmdfd29ya2AqKjogVGhlIHBhdGNoIGVsaW1pbmF0ZXMgYSBjaGVjayBmb3IgYCF2c2stJmd0O3JlamVjdGVkYC4gVGhpcyBpcyBjb3VwbGVkIHRvIHRoZSBmaXJzdCBwb2ludDsgdGhlICYjMzQ7cmVqZWN0aW9uJiMzNDsgY29uY2VwdCBpcyBnZXR0aW5nIGFsdGVyZWQgb3IgcmVtb3ZlZC4KKiAgICoqYHZzb2NrX2Nvbm5lY3RgKio6IFRoZSBwYXRjaCBpcyBnb2luZyBmcm9tIGBpZiAoc2stJmd0O3NrX2VycilgIHRvIGBlcnIgPSBzb2NrX2Vycm9yKHNrKTsgaWYgKGVycilgLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBjbGVhbmVyIHdheSB0byBnZXQgdGhlIHNvY2tldCBlcnJvci4KKiAgICoqYHZzb2NrX2FjY2VwdGAqKjogVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgY2hlY2sgZm9yIGBsaXN0ZW5lci0mZ3Q7c2tfZXJyID09IDBgIGluIHRoZSBgd2hpbGVgIGxvb3AsIHJlbW92ZXMgaGFuZGxpbmcgZm9yIGBsaXN0ZW5lci0mZ3Q7c2tfZXJyYCwgYW5kIHRoZSBjb2RlIHBhdGggaGFuZGxpbmcgYHZjb25uZWN0ZWQtJmd0O3JlamVjdGVkID0gdHJ1ZWAuIFRoaXMgcG9pbnRzIHRvIGEgY2hhbmdlIGluIGhvdyB0aGUgYWNjZXB0IHF1ZXVlIGlzIGhhbmRsZWQsIG1heWJlIG1vcmUgbGVuaWVudCBlcnJvciBoYW5kbGluZy4KClRoaXMgaXMgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gdnNvY2sgY29yZSBsb2dpYywgd2hpY2ggaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGZvciB0aGUgZWZmZWN0cyBvbiBlcnJvciBoYW5kbGluZyBpbiBgYWNjZXB0KClgIGFuZCBgY29ubmVjdCgpYC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgbmVlZHMgc29tZSBzb2xpZCBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9scy4gVGhlIGZ1bmN0aW9ucyBiZWluZyB0b3VjaGVkIGFyZTogYHZzb2NrX3BlbmRpbmdfd29ya2AsIGB2c29ja19jb25uZWN0YCwgYW5kIGB2c29ja19hY2NlcHRgLiBUaGV5JiMzOTtyZSAqc3RhdGljKiwgYnV0IGFzc2lnbmVkIHRvIGBzdHJ1Y3QgcHJvdG9fb3BzYC4gQWxyaWdodCwgc28gYHZzb2NrX2Nvbm5lY3RgIGFuZCBgdnNvY2tfYWNjZXB0YCBhcmUgdGhlIGFjdHVhbCwgZGlyZWN0IGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIHdyYXBwZXJzLCBsaWtlIHRoZSB1c3VhbCBgc3lzX2Nvbm5lY3RgIC0mZ3Q7IGBfX3N5c19jb25uZWN0YCAtJmd0OyBgc29jay0mZ3Q7b3BzLSZndDtjb25uZWN0YCBwYXR0ZXJuLiBZZXMsIGB2c29ja19jb25uZWN0YCBhbmQgYHZzb2NrX2FjY2VwdGAgYXJlIHN0YXRpYyB3aXRoaW4gYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AsIHNvIHRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzLgoKR2l2ZW4gdGhpcyB1bmRlcnN0YW5kaW5nLCBJIGNhbiBub3cgYmVnaW4gdG8gbWFwIG91dCB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zzb2NrX2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9hZl92c29jay5jPTIwOT1zdGF0aWMgREVGSU5FX01VVEVYKHZzb2NrX3JlZ2lzdGVyX211dGV4KTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjM1LVx0KCgoc3JjKS1cdTAwM2Vzdm1fY2lkIF4gKGRzdCktXHUwMDNlc3ZtX3BvcnQpICUgVlNPQ0tfSEFTSF9TSVpFKVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzNjojZGVmaW5lIHZzb2NrX2Nvbm5lY3RlZF9zb2NrZXRzKHNyYywgZHN0KVx0XHRcXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzNzpcdChcdTAwMjZ2c29ja19jb25uZWN0ZWRfdGFibGVbVlNPQ0tfQ09OTl9IQVNIKHNyYywgZHN0KV0pXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjM4OiNkZWZpbmUgdnNvY2tfY29ubmVjdGVkX3NvY2tldHNfdnNrKHZzaylcdFx0XHRcdFxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjM5Olx0dnNvY2tfY29ubmVjdGVkX3NvY2tldHMoXHUwMDI2KHZzayktXHUwMDNlcmVtb3RlX2FkZHIsIFx1MDAyNih2c2spLVx1MDAzZWxvY2FsX2FkZHIpXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjQwLVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNDI9RVhQT1JUX1NZTUJPTF9HUEwodnNvY2tfYmluZF90YWJsZSk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQzOnN0cnVjdCBsaXN0X2hlYWQgdnNvY2tfY29ubmVjdGVkX3RhYmxlW1ZTT0NLX0hBU0hfU0laRV07XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQ0OkVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2Nvbm5lY3RlZF90YWJsZSk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjQ1LURFRklORV9TUElOTE9DSyh2c29ja190YWJsZV9sb2NrKTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjYwPXN0YXRpYyB2b2lkIHZzb2NrX2luaXRfdGFibGVzKHZvaWQpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2Ni1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjc6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHZzb2NrX2Nvbm5lY3RlZF90YWJsZSk7IGkmIzQzOyYjNDM7KVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2ODpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dnNvY2tfY29ubmVjdGVkX3RhYmxlW2ldKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjktfVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0zMjA9X192c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXRfbmV0KHN0cnVjdCBzb2NrYWRkcl92bSAqc3JjLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMjQtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzI1Olx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2c2ssIHZzb2NrX2Nvbm5lY3RlZF9zb2NrZXRzKHNyYywgZHN0KSxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMjYtXHRcdFx0ICAgIGNvbm5lY3RlZF90YWJsZSkge1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0zNDY9dm9pZCB2c29ja19pbnNlcnRfY29ubmVjdGVkKHN0cnVjdCB2c29ja19zb2NrICp2c2spXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzQ3LXtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzozNDg6XHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0ID0gdnNvY2tfY29ubmVjdGVkX3NvY2tldHMoXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzQ5LVx0XHRcdTAwMjZ2c2stXHUwMDNlcmVtb3RlX2FkZHIsIFx1MDAyNnZzay1cdTAwM2Vsb2NhbF9hZGRyKTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9NDUxPXZvaWQgdnNvY2tfZm9yX2VhY2hfY29ubmVjdGVkX3NvY2tldChzdHJ1Y3QgdnNvY2tfdHJhbnNwb3J0ICp0cmFuc3BvcnQsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTQ1Ny1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo0NTg6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHZzb2NrX2Nvbm5lY3RlZF90YWJsZSk7IGkmIzQzOyYjNDM7KSB7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNDU5LVx0XHRzdHJ1Y3QgdnNvY2tfc29jayAqdnNrO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjQ2MDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2c2ssIFx1MDAyNnZzb2NrX2Nvbm5lY3RlZF90YWJsZVtpXSxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00NjEtXHRcdFx0XHQgICAgY29ubmVjdGVkX3RhYmxlKSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTU2Nz1pbnQgdnNvY2tfYXNzaWduX3RyYW5zcG9ydChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCBzdHJ1Y3QgdnNvY2tfc29jayAqcHNrKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy02NDAtXHRcdC8qIHRyYW5zcG9ydC1cdTAwM2VyZWxlYXNlKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBzb2NrIGxvY2sgYWNxdWlyZWQuXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6NjQxOlx0XHQgKiBUaGlzIHBhdGggY2FuIG9ubHkgYmUgdGFrZW4gZHVyaW5nIHZzb2NrX2Nvbm5lY3QoKSwgd2hlcmUgd2Vcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy02NDItXHRcdCAqIGhhdmUgYWxyZWFkeSBoZWxkIHRoZSBzb2NrIGxvY2suIEluIHRoZSBvdGhlciBjYXNlcywgdGhpc1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy02NTAtXHRcdCAqIHN0YXRlLCBzaW5jZSB3ZSBhcmUgcmVhc3NpZ25pbmcgdGhlIHNvY2tldCB0byBhIG5ldyB0cmFuc3BvcnRcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo2NTE6XHRcdCAqIGR1cmluZyB2c29ja19jb25uZWN0KCksIGxldCYjMzk7cyByZXNldCB0aGVzZSBmaWVsZHMgdG8gaGF2ZSBhXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNjUyLVx0XHQgKiBjbGVhbiBzdGF0ZS5cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9ODY1PXN0YXRpYyBpbnQgX192c29ja19iaW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3ZtICphZGRyKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy05MDEtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6OTAyOnN0YXRpYyB2b2lkIHZzb2NrX2Nvbm5lY3RfdGltZW91dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTkwMy1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz05MDQ9c3RhdGljIHN0cnVjdCBzb2NrICpfX3Zzb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk0My1cdFdSSVRFX09OQ0UodnNrLVx1MDAzZXBlZXJfc2h1dGRvd24sIDApO1xubmV0L3Ztd192c29jay9hZl92c29jay5jOjk0NDpcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnZzay1cdTAwM2Vjb25uZWN0X3dvcmssIHZzb2NrX2Nvbm5lY3RfdGltZW91dCk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTQ1LVx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2dnNrLVx1MDAzZXBlbmRpbmdfd29yaywgdnNvY2tfcGVuZGluZ193b3JrKTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTA1OD1FWFBPUlRfU1lNQk9MX0dQTCh2c29ja19zdHJlYW1faGFzX2RhdGEpO1xubmV0L3Ztd192c29jay9hZl92c29jay5jLTEwNTktXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTA2MDpzNjQgdnNvY2tfY29ubmVjdGlibGVfaGFzX2RhdGEoc3RydWN0IHZzb2NrX3NvY2sgKnZzaylcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMDYxLXtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTA3MS19XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTA3MjpFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19jb25uZWN0aWJsZV9oYXNfZGF0YSk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTA3My1cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTY0MD1zdGF0aWMgaW50IHZzb2NrX3RyYW5zcG9ydF9jYW5jZWxfcGt0KHN0cnVjdCB2c29ja19zb2NrICp2c2spXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE2NDktXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTY1MDpzdGF0aWMgdm9pZCB2c29ja19jb25uZWN0X3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE2NTEte1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNjcxLVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE2NzI6c3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE2NzMtXHRcdFx0IGludCBhZGRyX2xlbiwgaW50IGZsYWdzKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xODE5LVx0XHQgKiBza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQgaW1wbGllcyB0aGF0IHNvY2tldCBpcyBub3Qgb25cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxODIwOlx0XHQgKiB2c29ja19jb25uZWN0ZWRfdGFibGUuIFdlIGtlZXAgdGhlIGJpbmRpbmcgYW5kIHRoZSB0cmFuc3BvcnRcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xODIxLVx0XHQgKiBhc3NpZ25lZC5cbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTk2Nj1zdGF0aWMgdm9pZCB2c29ja191cGRhdGVfYnVmZmVyX3NpemUoc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTk4Mi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxOTgzOnN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdGlibGVfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE5ODQtXHRcdFx0XHRcdGludCBsZXZlbCxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjA5Ni1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMDk3OnN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdGlibGVfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIwOTgtXHRcdFx0XHRcdGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIxNTUtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjE1NjpzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3RpYmxlX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIxNTctXHRcdFx0XHQgICAgIHNpemVfdCBsZW4pXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzMTctXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjMxODpzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3RpYmxlX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjMxOS1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjMzNC1cdFx0cHJlcGFyZV90b193YWl0KHNrX3NsZWVwKHNrKSwgd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzM1Olx0XHRkYXRhID0gdnNvY2tfY29ubmVjdGlibGVfaGFzX2RhdGEodnNrKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMzM2LVx0XHRpZiAoZGF0YSAhPSAwKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yMzg1PXN0YXRpYyBpbnQgX192c29ja19zdHJlYW1fcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjQyMi1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNDIzOlx0XHRlcnIgPSB2c29ja19jb25uZWN0aWJsZV93YWl0X2RhdGEoc2ssIFx1MDAyNndhaXQsIHRpbWVvdXQsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjQyNC1cdFx0XHRcdFx0XHQgIFx1MDAyNnJlY3ZfZGF0YSwgdGFyZ2V0KTtcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjQ2ND1zdGF0aWMgaW50IF9fdnNvY2tfc2VxcGFja2V0X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0NzgtXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQ3OTpcdGVyciA9IHZzb2NrX2Nvbm5lY3RpYmxlX3dhaXRfZGF0YShzaywgXHUwMDI2d2FpdCwgdGltZW91dCwgTlVMTCwgMCk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjQ4MC1cdGlmIChlcnIgXHUwMDNjPSAwKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNTE0PWludFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI1MTU6X192c29ja19jb25uZWN0aWJsZV9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTE2LVx0XHRcdCAgICBpbnQgZmxhZ3MpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI1ODE9aW50XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjU4Mjp2c29ja19jb25uZWN0aWJsZV9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTgzLVx0XHRcdCAgaW50IGZsYWdzKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTkzLVxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI1OTQ6XHRyZXR1cm4gX192c29ja19jb25uZWN0aWJsZV9yZWN2bXNnKHNvY2ssIG1zZywgbGVuLCBmbGFncyk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjU5NS19XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjU5NjpFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19jb25uZWN0aWJsZV9yZWN2bXNnKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTk3LVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHZzb2NrX3N0cmVhbV9vcHMgPSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MjYtXHQuYmluZCA9IHZzb2NrX2JpbmQsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjYyNzpcdC5jb25uZWN0ID0gdnNvY2tfY29ubmVjdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjI4LVx0LnNvY2tldHBhaXIgPSBzb2NrX25vX3NvY2tldHBhaXIsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MzQtXHQuc2h1dGRvd24gPSB2c29ja19zaHV0ZG93bixcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjM1Olx0LnNldHNvY2tvcHQgPSB2c29ja19jb25uZWN0aWJsZV9zZXRzb2Nrb3B0LFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2MzY6XHQuZ2V0c29ja29wdF9pdGVyID0gdnNvY2tfY29ubmVjdGlibGVfZ2V0c29ja29wdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjM3Olx0LnNlbmRtc2cgPSB2c29ja19jb25uZWN0aWJsZV9zZW5kbXNnLFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2Mzg6XHQucmVjdm1zZyA9IHZzb2NrX2Nvbm5lY3RpYmxlX3JlY3Ztc2csXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjYzOS1cdC5tbWFwID0gc29ja19ub19tbWFwLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHZzb2NrX3NlcXBhY2tldF9vcHMgPSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NDgtXHQuYmluZCA9IHZzb2NrX2JpbmQsXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY0OTpcdC5jb25uZWN0ID0gdnNvY2tfY29ubmVjdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjUwLVx0LnNvY2tldHBhaXIgPSBzb2NrX25vX3NvY2tldHBhaXIsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NTYtXHQuc2h1dGRvd24gPSB2c29ja19zaHV0ZG93bixcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjU3Olx0LnNldHNvY2tvcHQgPSB2c29ja19jb25uZWN0aWJsZV9zZXRzb2Nrb3B0LFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2NTg6XHQuZ2V0c29ja29wdF9pdGVyID0gdnNvY2tfY29ubmVjdGlibGVfZ2V0c29ja29wdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjU5Olx0LnNlbmRtc2cgPSB2c29ja19jb25uZWN0aWJsZV9zZW5kbXNnLFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2NjA6XHQucmVjdm1zZyA9IHZzb2NrX2Nvbm5lY3RpYmxlX3JlY3Ztc2csXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY2MS1cdC5tbWFwID0gc29ja19ub19tbWFwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIHZzb2NrIENvbm5lY3Rpb24gRnVuY3Rpb25zKioKCk9rYXksIHNvIGB2c29ja19jb25uZWN0YC4uLiByaWdodCwgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYXMgZXhwZWN0ZWQuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCYjMzk7cyBhbHNvIHRydWUgZm9yIHRoZSBgdnNvY2tfYWNjZXB0YCBmdW5jdGlvbiwgYm90aCBvZiB3aGljaCBhcmUgcmVzaWRpbmcgaW4gYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AuIFRoZSByZWFsIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYW55IG5vbi1zdGF0aWMgd3JhcHBlcnMgZm9yIHRoZXNlIGZ1bmN0aW9ucz8gVGhhdCYjMzk7cyB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBvbiB0byB1bmRlcnN0YW5kIHRoZSBjYWxsaW5nIGNvbnRleHRzLiBMZXQgbWUgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGB2c29ja19hY2NlcHRgIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIG5vbi1zdGF0aWMgY2FsbCBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnNvY2tfYWNjZXB0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9hZl92c29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svYWZfdnNvY2suYz0xNjcyPXN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTg1Ny1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxODU4OnN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTg1OS1cdFx0XHRzdHJ1Y3QgcHJvdG9fYWNjZXB0X2FyZyAqYXJnKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHZzb2NrX3N0cmVhbV9vcHMgPSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MjgtXHQuc29ja2V0cGFpciA9IHNvY2tfbm9fc29ja2V0cGFpcixcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjI5Olx0LmFjY2VwdCA9IHZzb2NrX2FjY2VwdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjMwLVx0LmdldG5hbWUgPSB2c29ja19nZXRuYW1lLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHZzb2NrX3NlcXBhY2tldF9vcHMgPSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NTAtXHQuc29ja2V0cGFpciA9IHNvY2tfbm9fc29ja2V0cGFpcixcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjUxOlx0LmFjY2VwdCA9IHZzb2NrX2FjY2VwdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjUyLVx0LmdldG5hbWUgPSB2c29ja19nZXRuYW1lLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB2c29jayBBUEkgRW50cnlwb2ludHMgZm9yIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBleHBvc2UgdGhlIGB2c29ja2AgZnVuY3Rpb25hbGl0eSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gVGhlIGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBzaW5jZSBgdnNvY2tfY29ubmVjdGAgYW5kIGB2c29ja19hY2NlcHRgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMgZnVuY3Rpb25zLCBzeXprYWxsZXIgd291bGRuJiMzOTt0IGJlIGFibGUgdG8gZGlyZWN0bHkgY2FsbCB0aGVtIGFzIHNlcGFyYXRlIHN5bWJvbHMuIEhvd2V2ZXIsIEkgcmVhbGl6ZSBzeXprYWxsZXIgd2lsbCBmdXp6IGBjb25uZWN0KClgIGFuZCBgYWNjZXB0KClgIG9uIGBBRl9WU09DS2Agc29ja2V0cy4gQnV0IGRvZXMgaXQgdGhlbiBmdXp6IGBjb25uZWN0JHZzb2NrYCBhbmQgYGFjY2VwdCR2c29ja2A/IE15IG1lbnRhbCBtb2RlbCBpcyB0aGF0IGl0IG1hcHMgdG8gYHN5c19jb25uZWN0YCBhbmQgYHN5c19hY2NlcHRgLCB3aGljaCBldmVudHVhbGx5ICpjYWxsKiB0aGVzZSBmdW5jdGlvbnMuCgpUaGVuIEkgcmVjYWxsZWQgdGhlIGd1aWRlbGluZTogcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBpcyBrZXkuIFRoZSBnb29kIG5ld3MgaXMgdGhhdCBgdnNvY2tfY29ubmVjdGAgYW5kIGB2c29ja19hY2NlcHRgIGFyZSBhc3NpZ25lZCB0byB0aGUgYHByb3RvX29wc2Agc3RydWN0cyAoYHZzb2NrX3N0cmVhbV9vcHNgIGFuZCBgdnNvY2tfc2VxcGFja2V0X29wc2ApLiBTaW5jZSB0aGV5JiMzOTtyZSBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gc3RydWN0cywgdGhlIGNvbXBpbGVyICpzaG91bGRuJiMzOTt0KiBpbmxpbmUgdGhlbS4gVGhlaXIgYWRkcmVzc2VzIGFyZSBkZWZpbml0ZWx5IHRha2VuLCBzbyB0aGV5IHNob3VsZCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuCgpCdXQsIGlmIEkgbmVlZCB0byBwcm92aWRlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhcmUgdGhlcmUgYW55PyBUaGVyZSBhcmVuJiMzOTt0IGFueSBleHBsaWNpdCBub24tc3RhdGljIHdyYXBwZXJzIGZvciBgdnNvY2tfY29ubmVjdGAgYW5kIGB2c29ja19hY2NlcHRgOyB0aGV5IGFyZSBkaXJlY3RseSBhc3NpZ25lZCB3aXRoaW4gdGhlIGBwcm90b19vcHNgLiBTbyBpdCBsb29rcyBsaWtlIEkgY2FuIGp1c3QgbGlzdCBgdnNvY2tfY29ubmVjdGAgYW5kIGB2c29ja19hY2NlcHRgLgoKV2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCBgdnNvY2tfcGVuZGluZ193b3JrYD8gVGhpcyBpcyBhIHdvcmtxdWV1ZSBjYWxsYmFjay4gSXQmIzM5O3MgKmFsc28qIHN0YXRpYywgYnV0IGl0cyBhZGRyZXNzIGlzIHRha2VuIHdpdGhpbiBgSU5JVF9ERUxBWUVEX1dPUktgLiBTbywgaXQgd29uJiMzOTt0IGJlIGlubGluZWQgZWl0aGVyISBTbywgSSB0aGluayBJIGNhbiBzYWZlbHkgaW5jbHVkZSBgdnNvY2tfY29ubmVjdGAsIGB2c29ja19hY2NlcHRgLCBhbmQgYHZzb2NrX3BlbmRpbmdfd29ya2AgYXMgc3VpdGFibGUgY2FuZGlkYXRlcy4KCkZpbmFsbHksIEkgc2hvdWxkIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgYEFGX1ZTT0NLYCBzdXBwb3J0IHJlcXVpcmVzIGBDT05GSUdfVlNPQ0tFVFNgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgYnV0IEkmIzM5O2xsIG1ha2Ugc3VyZSBpdCYjMzk7cyBlbmFibGVkIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVlNPQ0tFVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9LY29uZmlnLTUtXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6Njpjb25maWcgVlNPQ0tFVFNcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXQgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMTgtXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6MTk6Y29uZmlnIFZTT0NLRVRTX0RJQUdcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yMC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yOC1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzoyOTpjb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zMC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0cyBsb29wYmFjayB0cmFuc3BvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBWU09DS0VUUyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgYFZTT0NLRVRTYCBzdWJzeXN0ZW0uIFRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSByZWxldmFudCBtb2R1bGUuIExldCYjMzk7cyBzZWUsIHRoYXQgd291bGQgYmUgYG5ldC92bXdfdnNvY2svS2NvbmZpZ2AuIFRoaXMgZmlsZSBzaG91bGQgbGF5IG91dCBldmVyeXRoaW5nIEkgbmVlZCB0byBrbm93IGluIHRlcm1zIG9mIHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzLCBvcHRpb25zLCBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyBuZWVkIHRvIGJlIHByZXNlbnQgb3IgZW5hYmxlZCBmb3IgYFZTT0NLRVRTYCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBwZXJoYXBzIHRoaW5ncyBsaWtlIGh5cGVydmlzb3Igc3BlY2lmaWMgc2V0dGluZ3Mgb3IgY2VydGFpbiBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb25zLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgc29ydCBvZiBkZWJ1Z2dpbmcgb3IgcG9ydGluZyBlZmZvcnQgSSYjMzk7bGwgbmVlZCB0byBkby4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyBpbiB0aGF0IGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVnNvY2sgcHJvdG9jb2xcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFZTT0NLRVRTXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldCBwcm90b2NvbFwmIzM0O1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBWaXJ0dWFsIFNvY2tldCBQcm90b2NvbCBpcyBhIHNvY2tldCBwcm90b2NvbCBzaW1pbGFyIHRvIFRDUC9JUFxuICAxMDpcdFx0ICBhbGxvd2luZyBjb21tdW5pY2F0aW9uIGJldHdlZW4gVmlydHVhbCBNYWNoaW5lcyBhbmQgaHlwZXJ2aXNvclxuICAxMTpcdFx0ICBvciBob3N0LlxuICAxMjpcdFxuICAxMzpcdFx0ICBZb3Ugc2hvdWxkIGFsc28gc2VsZWN0IG9uZSBvciBtb3JlIGh5cGVydmlzb3Itc3BlY2lmaWMgdHJhbnNwb3J0c1xuICAxNDpcdFx0ICBiZWxvdy5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICAxNzpcdFx0ICB3aWxsIGJlIGNhbGxlZCB2c29jay4gSWYgdW5zdXJlLCBzYXkgTi5cbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgVlNPQ0tFVFNfRElBR1xuICAyMDpcdFx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTg4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29uc2lkZXJpbmcgYFZTT0NLRVRTYCBUZXN0aW5nIE9wdGlvbnMqKgoKUmlnaHQsIHNvIGBWU09DS0VUU2AsIGluaGVyZW50bHksIGlzIHN0YW5kLWFsb25lLiBObyBvdGhlciBsaWJyYXJpZXMgYXJlIHJlcXVpcmVkLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgcGx1cyBmb3Iga2VlcGluZyB0aGluZ3MgY2xlYW4uIE5vdywgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0byBhY3R1YWxseSAqdGVzdCogdGhpcy4gVG8gYWN0dWFsbHkgZXhlcmNpc2UgdGhlIGBWU09DS0VUU2AgQVBJLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgYSB0cmFuc3BvcnQgbGF5ZXIsIG9mIGNvdXJzZS4gRm9yIG15IHB1cnBvc2VzLCBwYXJ0aWN1bGFybHkgZm9yIGZ1enppbmcsIGBWU09DS0VUU19MT09QQkFDS2AgaXMgYWN0dWFsbHkgYW4gZXhjZWxsZW50IGNob2ljZS4gTm8gaHlwZXJ2aXNvciBkZXBlbmRlbmNpZXMgbWVhbnMgbGVzcyBvdmVyaGVhZCBhbmQgY29tcGxleGl0eSwgd2hpY2ggaXMgaWRlYWwgd2hlbiBJJiMzOTttIGFpbWluZyBmb3Igc3BlZWQgYW5kIHNpbXBsaWNpdHkgaW4gbXkgZnV6emluZyBzZXR1cC4gVGhpcyBzaG91bGQgYWxsb3cgZm9yIGVmZmljaWVudCBhbmQgZm9jdXNlZCB0ZXN0aW5nIG9mIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMTpcdFx0ZGVwZW5kcyBvbiBWU09DS0VUU1xuICAyMjpcdFx0ZGVmYXVsdCB5XG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFN1cHBvcnQgZm9yIFBGX1ZTT0NLIHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0aGUgc3MgdG9vbC5cbiAgMjU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMjY6XHRcbiAgMjc6XHRcdCAgRW5hYmxlIHRoaXMgbW9kdWxlIHNvIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgY2FuIHF1ZXJ5IG9wZW4gc29ja2V0cy5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcbiAgMzA6XHRcdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0cyBsb29wYmFjayB0cmFuc3BvcnRcJiMzNDtcbiAgMzE6XHRcdGRlcGVuZHMgb24gVlNPQ0tFVFNcbiAgMzI6XHRcdGRlZmF1bHQgeVxuICAzMzpcdFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cbiAgMzQ6XHRcdGhlbHBcbiAgMzU6XHRcdCAgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIGxvb3BiYWNrIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzLFxuICAzNjpcdFx0ICB1c2luZyB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydF9jb21tb24uXG4gIDM3Olx0XG4gIDM4Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgMzk6XHRcdCAgd2lsbCBiZSBjYWxsZWQgdnNvY2tfbG9vcGJhY2suIElmIHVuc3VyZSwgc2F5IE4uXG4gIDQwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTA3CgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDI5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBWU09DSyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgdGhyb3VnaCB0aGUgcHJvcG9zZWQgY2hhbmdlcyB0byB0aGUgVlNPQ0sgc3Vic3lzdGVtLiBJdCBzZWVtcyBsaWtlIGVuYWJsaW5nIGBWU09DS0VUU2AgYW5kIGBWU09DS0VUU19MT09QQkFDS2AgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0ZXN0aW5nLiBJIHF1aWNrbHkgY29uZmlybWVkIHRoYXQgYFZJUlRJT19WU09DS0VUU19DT01NT05gIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYnkgYFZTT0NLRVRTX0xPT1BCQUNLYCwgc28gdGhvc2UgdHdvIGFyZSBhbGwgSSBuZWVkIHRvIGZvY3VzIG9uLgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIHN0cmVhbWxpbmluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGVycm9yIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgcmVtb3ZpbmcgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgLCB3aGljaCBtYWtlcyBzZW5zZSB0byBtZeKAlGl0IGZlZWxzIGxpa2UgYSBzb21ld2hhdCByZWR1bmRhbnQgcGllY2Ugb2Ygc3RhdGUuIFRoZSBjb2RlIG5vdyBoYW5kbGVzIHRoZSByZWplY3Rpb24gbG9naWMgaW4gYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YCBtb3JlIGNvbmNpc2VseS4gSW4gYHZzb2NrX2FjY2VwdGAsIGluc3RlYWQgb2Ygc2V0dGluZyBgdmNvbm5lY3RlZC0mZ3Q7cmVqZWN0ZWQgPSB0cnVlYCwgaXQgbm93IHNpbXBseSByZXR1cm5zIGAtRUFHQUlOYCBpZiB0aGUgY29ubmVjdGlvbiBpc24mIzM5O3QgcmVhZHkuIEFuZCwgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBzd2l0Y2hlZCB0byB1c2luZyBgc29ja19lcnJvcihzaylgIGluIGB2c29ja19jb25uZWN0YCBpbnN0ZWFkIG9mIGRpcmVjdGx5IGFjY2Vzc2luZyBgc2stJmd0O3NrX2VycmAuIFRoZSBwYXRjaCBhbHNvIHNpbXBsaWZpZXMgYHZzb2NrX3BlbmRpbmdfd29ya2AsIHJlbW92aW5nIHRoZSBjaGVjayB0aGF0IGludm9sdmVkIHRoZSBgcmVqZWN0ZWRgIGZpZWxkLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IHRvdWNoaW5nIG9uIGNyaXRpY2FsIGFzcGVjdHMgb2YgdGhlIGNvbm5lY3Rpb24gcHJvY2Vzcy4gR2l2ZW4gdGhlIGNoYW5nZXMgdG8gdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIEkgdGhpbmsgd2Ugc2hvdWxkIGRlZmluaXRlbHkgcHJpb3JpdGl6ZSBmdXp6aW5nIHRoZSBgdnNvY2tfY29ubmVjdGAsIGB2c29ja19hY2NlcHRgLCBhbmQgYHZzb2NrX3BlbmRpbmdfd29ya2AgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGFyb3VuZCBlcnJvciBjb25kaXRpb25zIGFuZCBjb25jdXJyZW50IGNvbm5lY3Rpb24gYXR0ZW1wdHMuIEl0JiMzOTtzIHRpbWUgdG8gZ2VuZXJhdGUgc29tZSB0ZXN0IGNhc2VzLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7VlNPQ0tFVFNfTE9PUEJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2c29ja19jb25uZWN0JiMzNDssCiAgICAmIzM0O3Zzb2NrX2FjY2VwdCYjMzQ7LAogICAgJiMzNDt2c29ja19wZW5kaW5nX3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyBmb3IgQUZfVlNPQ0sgc29ja2V0cy4gSXQgcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBzdGF0ZSBmcm9tIHBlbmRpbmcgc29ja2V0cyBhbmQgY2hhbmdlcyBob3cgYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YCBoYW5kbGUgc29ja2V0IGVycm9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIgZHVyaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTX0xPT1BCQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dnNvY2tfY29ubmVjdCYjMzQ7LAogICAgJiMzNDt2c29ja19hY2NlcHQmIzM0OywKICAgICYjMzQ7dnNvY2tfcGVuZGluZ193b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgZXJyb3IgaGFuZGxpbmcgbG9naWMgZm9yIEFGX1ZTT0NLIHNvY2tldHMuIEl0IHJlbW92ZXMgdGhlIGByZWplY3RlZGAgc3RhdGUgZnJvbSBwZW5kaW5nIHNvY2tldHMgYW5kIGNoYW5nZXMgaG93IGB2c29ja19hY2NlcHRgIGFuZCBgdnNvY2tfY29ubmVjdGAgaGFuZGxlIHNvY2tldCBlcnJvcnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbWVtb3J5IGxlYWtzIG9jY3VyIGR1cmluZyBjb25uZWN0aW9uIGZhaWx1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOTowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE5OjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgIGFuZCBzaW1wbGlmaWVzIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIGB2c29ja19hY2NlcHRgIGFuZCBgdnNvY2tfY29ubmVjdGAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcy4gVGhlIGNoYW5nZXMgZG8gbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgbG9naWMgZXJyb3JzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRiYTU0NmI2MGRlMDhiMGZlMWE3M2FjNDY0ZWY1NmRhY2ZiZTIxMjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxOTowMToxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmggYi9pbmNsdWRlL25ldC9hZl92c29jay5oCmluZGV4IDMwMDQ2YTNjMjBmNzMuLjMzNTdlZTYyZDEwYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaApAQCAtNTIsMTMgJiM0Mzs1MiwxMCBAQCBzdHJ1Y3QgdnNvY2tfc29jayB7CiAJICogVGhlIGxpc3RlbmluZyBzb2NrZXQgaXMgdGhlIGhlYWQgZm9yIGJvdGggbGlzdHMuICBTb2NrZXRzIGNyZWF0ZWQKIAkgKiBmb3IgY29ubmVjdGlvbiByZXF1ZXN0cyBhcmUgcGxhY2VkIGluIHRoZSBwZW5kaW5nIGxpc3QgdW50aWwgdGhleQogCSAqIGFyZSBjb25uZWN0ZWQsIGF0IHdoaWNoIHBvaW50IHRoZXkgYXJlIHB1dCBpbiB0aGUgYWNjZXB0IHF1ZXVlIGxpc3QKLQkgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS4gIElmIGFjY2VwdCgpIGNhbm5vdCBhY2NlcHQgdGhlCi0JICogY29ubmVjdGlvbiwgaXQgaXMgbWFya2VkIGFzIHJlamVjdGVkIHNvIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGtub3dzCi0JICogdG8gY2xlYW4gdXAgdGhlIHNvY2tldC4KJiM0MzsJICogc28gdGhleSBjYW4gYmUgYWNjZXB0ZWQgaW4gYWNjZXB0KCkuCiAJICovCiAJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpbmtzOwogCXN0cnVjdCBsaXN0X2hlYWQgYWNjZXB0X3F1ZXVlOwotCWJvb2wgcmVqZWN0ZWQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBjb25uZWN0X3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBwZW5kaW5nX3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBjbG9zZV93b3JrOwpkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCmluZGV4IDYyMmRiZDA0Njc5OTQuLmU4OWNiODRiOGQ3MzcgMTAwNjQ0Ci0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKQEAgLTM4LDEwICYjNDM7MzgsOSBAQAogICogcGVuZGluZyBzb2NrZXQuICBXaGVuIHRoYXQgc29ja2V0IHJlYWNoZXMgdGhlIGNvbm5lY3RlZCBzdGF0ZSwgaXQgaXMgcmVtb3ZlZAogICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0JiMzOTtzIHBlbmRpbmcgbGlzdCBhbmQgZW5xdWV1ZWQgaW4gdGhlIGxpc3RlbmVyCiAgKiBzb2NrZXQmIzM5O3MgYWNjZXB0IHF1ZXVlLiAgQ2FsbGVycyBvZiBhY2NlcHQoMikgd2lsbCBhY2NlcHQgY29ubmVjdGVkIHNvY2tldHMKLSAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCYjMzk7cyBhY2NlcHQgcXVldWUuICBJZiB0aGUgc29ja2V0IGNhbm5vdCBiZSBhY2NlcHRlZAotICogZm9yIHNvbWUgcmVhc29uIHRoZW4gaXQgaXMgbWFya2VkIHJlamVjdGVkLiAgT25jZSB0aGUgY29ubmVjdGlvbiBpcwotICogYWNjZXB0ZWQsIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cAotICogZmFsbHMgd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy4KJiM0MzsgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQmIzM5O3MgYWNjZXB0IHF1ZXVlLiBPbmNlIHRoZSBjb25uZWN0aW9uIGlzIGFjY2VwdGVkLAomIzQzOyAqIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cCBmYWxscwomIzQzOyAqIHdpdGggdGhhdCB1c2VyIHByb2Nlc3MuCiAgKgogICogLSBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXNlIHBlbmRpbmcgc29ja2V0cyB3aWxsIG5ldmVyIHJlYWNoIHRoZSBjb25uZWN0ZWQKICAqIHN0YXRlOyBpbiBmYWN0LCB3ZSBtYXkgbmV2ZXIgcmVjZWl2ZSBhbm90aGVyIHBhY2tldCBhZnRlciB0aGUgY29ubmVjdGlvbgpAQCAtNDksOSAmIzQzOzQ4LDcgQEAKICAqIGZ1dHVyZSwgYWZ0ZXIgc29tZSBhbW91bnQgb2YgdGltZSBwYXNzZXMgd2hlcmUgYSBjb25uZWN0aW9uIHNob3VsZCBoYXZlIGJlZW4KICAqIGVzdGFibGlzaGVkLiAgVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIHNvY2tldCBpcyBvZmYgYWxsIGxpc3RzIHNvIGl0CiAgKiBjYW5ub3QgYmUgcmV0cmlldmVkLCB0aGVuIGRyb3BzIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBzb2NrZXQgc28gaXQgaXMgY2xlYW5lZAotICogdXAgKHNvY2tfcHV0KCkgLSZndDsgc2tfZnJlZSgpIC0mZ3Q7IG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuICBOb3RlIHRoaXMKLSAqIGZ1bmN0aW9uIHdpbGwgYWxzbyBjbGVhbnVwIHJlamVjdGVkIHNvY2tldHMsIHRob3NlIHRoYXQgcmVhY2ggdGhlIGNvbm5lY3RlZAotICogc3RhdGUgYnV0IGxlYXZlIGl0IGJlZm9yZSB0aGV5IGhhdmUgYmVlbiBhY2NlcHRlZC4KJiM0MzsgKiB1cCAoc29ja19wdXQoKSAtJmd0OyBza19mcmVlKCkgLSZndDsgb3VyIHNrX2Rlc3RydWN0IGltcGxlbWVudGF0aW9uKS4KICAqCiAgKiAtIExvY2sgb3JkZXJpbmcgZm9yIHBlbmRpbmcgb3IgYWNjZXB0IHF1ZXVlIHNvY2tldHMgaXM6CiAgKgpAQCAtNzc0LDExICYjNDM7NzcxLDEwIEBAIHN0YXRpYyB2b2lkIHZzb2NrX3BlbmRpbmdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAKIAlpZiAodnNvY2tfaXNfcGVuZGluZyhzaykpIHsKIAkJdnNvY2tfcmVtb3ZlX3BlbmRpbmcobGlzdGVuZXIsIHNrKTsKLQl9IGVsc2UgaWYgKCF2c2stJmd0O3JlamVjdGVkKSB7Ci0JCS8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBhbmQgYWNjZXB0KCkgZGlkIG5vdCByZWplY3QKLQkJICogdXMsIHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkIGJ5IG91ciB1c2VyIHByb2Nlc3MuICBXZQotCQkgKiBqdXN0IG5lZWQgdG8gZHJvcCBvdXIgcmVmZXJlbmNlcyB0byB0aGUgc29ja2V0cyBhbmQgYmUgb24KLQkJICogb3VyIHdheS4KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBzbyB3ZSBtdXN0IGhhdmUgYmVlbiBhY2NlcHRlZAomIzQzOwkJICogYnkgb3VyIHVzZXIgcHJvY2Vzcy4gV2UganVzdCBuZWVkIHRvIGRyb3Agb3VyIHJlZmVyZW5jZXMgdG8KJiM0MzsJCSAqIHRoZSBzb2NrZXRzIGFuZCBiZSBvbiBvdXIgd2F5LgogCQkgKi8KIAkJY2xlYW51cCA9IGZhbHNlOwogCQlnb3RvIG91dDsKQEAgLTk0Miw3ICYjNDM7OTM4LDYgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpfX3Zzb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJdnNrLSZndDtsaXN0ZW5lciA9IE5VTEw7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDt2c2stJmd0O3BlbmRpbmdfbGlua3MpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7dnNrLSZndDthY2NlcHRfcXVldWUpOwotCXZzay0mZ3Q7cmVqZWN0ZWQgPSBmYWxzZTsKIAl2c2stJmd0O3NlbnRfcmVxdWVzdCA9IGZhbHNlOwogCXZzay0mZ3Q7aWdub3JlX2Nvbm5lY3RpbmdfcnN0ID0gZmFsc2U7CiAJV1JJVEVfT05DRSh2c2stJmd0O3BlZXJfc2h1dGRvd24sIDApOwpAQCAtMTg0NywxMiAmIzQzOzE4NDIsMTAgQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLAogCQlwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCAmYW1wO3dhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJfQogCi0JaWYgKHNrLSZndDtza19lcnIpIHsKLQkJZXJyID0gLXNrLSZndDtza19lcnI7CiYjNDM7CWVyciA9IHNvY2tfZXJyb3Ioc2spOwomIzQzOwlpZiAoZXJyKSB7CiAJCXNrLSZndDtza19zdGF0ZSA9IFRDUF9DTE9TRTsKIAkJc29jay0mZ3Q7c3RhdGUgPSBTU19VTkNPTk5FQ1RFRDsKLQl9IGVsc2UgewotCQllcnIgPSAwOwogCX0KIAogb3V0X3dhaXQ6CkBAIC0xODkzLDcgJiM0MzsxODg2LDcgQEAgc3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywKIAl0aW1lb3V0ID0gc29ja19yY3Z0aW1lbyhsaXN0ZW5lciwgYXJnLSZndDtmbGFncyAmYW1wOyBPX05PTkJMT0NLKTsKIAogCXdoaWxlICgoY29ubmVjdGVkID0gdnNvY2tfZGVxdWV1ZV9hY2NlcHQobGlzdGVuZXIpKSA9PSBOVUxMICZhbXA7JmFtcDsKLQkgICAgICAgbGlzdGVuZXItJmd0O3NrX2VyciA9PSAwICZhbXA7JmFtcDsgdGltZW91dCAhPSAwKSB7CiYjNDM7CQl0aW1lb3V0ICE9IDApIHsKIAkJcHJlcGFyZV90b193YWl0KHNrX3NsZWVwKGxpc3RlbmVyKSwgJmFtcDt3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlyZWxlYXNlX3NvY2sobGlzdGVuZXIpOwogCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKQEAgLTE5MDYsMzggJiM0MzsxODk5LDIzIEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssCiAJCX0KIAl9CiAKLQlpZiAobGlzdGVuZXItJmd0O3NrX2VycikgewotCQllcnIgPSAtbGlzdGVuZXItJmd0O3NrX2VycjsKLQl9IGVsc2UgaWYgKCFjb25uZWN0ZWQpIHsKJiM0MzsJaWYgKCFjb25uZWN0ZWQpIHsKIAkJZXJyID0gLUVBR0FJTjsKLQl9Ci0KLQlpZiAoY29ubmVjdGVkKSB7CiYjNDM7CX0gZWxzZSB7CiAJCXNrX2FjY2VwdHFfcmVtb3ZlZChsaXN0ZW5lcik7CiAKIAkJbG9ja19zb2NrX25lc3RlZChjb25uZWN0ZWQsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAkJdmNvbm5lY3RlZCA9IHZzb2NrX3NrKGNvbm5lY3RlZCk7CiAKLQkJLyogSWYgdGhlIGxpc3RlbmVyIHNvY2tldCBoYXMgcmVjZWl2ZWQgYW4gZXJyb3IsIHRoZW4gd2Ugc2hvdWxkCi0JCSAqIHJlamVjdCB0aGlzIHNvY2tldCBhbmQgcmV0dXJuLiAgTm90ZSB0aGF0IHdlIHNpbXBseSBtYXJrIHRoZQotCQkgKiBzb2NrZXQgcmVqZWN0ZWQsIGRyb3Agb3VyIHJlZmVyZW5jZSwgYW5kIGxldCB0aGUgY2xlYW51cAotCQkgKiBmdW5jdGlvbiBoYW5kbGUgdGhlIGNsZWFudXA7IHRoZSBmYWN0IHRoYXQgd2UgZm91bmQgaXQgaW4KLQkJICogdGhlIGxpc3RlbmVyJiMzOTtzIGFjY2VwdCBxdWV1ZSBndWFyYW50ZWVzIHRoYXQgdGhlIGNsZWFudXAKLQkJICogZnVuY3Rpb24gaGFzbiYjMzk7dCBydW4geWV0LgotCQkgKi8KLQkJaWYgKGVycikgewotCQkJdmNvbm5lY3RlZC0mZ3Q7cmVqZWN0ZWQgPSB0cnVlOwotCQl9IGVsc2UgewotCQkJbmV3c29jay0mZ3Q7c3RhdGUgPSBTU19DT05ORUNURUQ7Ci0JCQlzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7CiYjNDM7CQluZXdzb2NrLSZndDtzdGF0ZSA9IFNTX0NPTk5FQ1RFRDsKJiM0MzsJCXNvY2tfZ3JhZnQoY29ubmVjdGVkLCBuZXdzb2NrKTsKIAotCQkJc2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULAotCQkJCSZhbXA7Y29ubmVjdGVkLSZndDtza19zb2NrZXQtJmd0O2ZsYWdzKTsKJiM0MzsJCXNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwKJiM0MzsJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7CiAKLQkJCWlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLSZndDt0cmFuc3BvcnQpKQotCQkJCXNldF9iaXQoU09DS19TVVBQT1JUX1pDLAotCQkJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7Ci0JCX0KJiM0MzsJCWlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLSZndDt0cmFuc3BvcnQpKQomIzQzOwkJCXNldF9iaXQoU09DS19TVVBQT1JUX1pDLAomIzQzOwkJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7CiAKIAkJcmVsZWFzZV9zb2NrKGNvbm5lY3RlZCk7CiAJCXNvY2tfcHV0KGNvbm5lY3RlZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjgzCgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDU4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSB2c29jayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhZl92c29jay5jYCBhbmQgYGFmX3Zzb2NrLmhgLCBzcGVjaWZpY2FsbHkgcmVtb3ZpbmcgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiAgSSBhbHdheXMgZ28gdGhyb3VnaCB0aGlzIGNoZWNrbGlzdC4KClRoZSBjb2RlIGNoYW5nZXMgYXJlIG1vc3RseSBmb2N1c2VkIG9uIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgdnNvY2tfcGVuZGluZ193b3JrYCwgYHZzb2NrX2Nvbm5lY3RgLCBhbmQgYHZzb2NrX2FjY2VwdGAuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgcmVwbGFjaW5nIGRpcmVjdCBjaGVja3Mgb2YgYHNrLSZndDtza19lcnJgIGFuZCBgbGlzdGVuZXItJmd0O3NrX2VycmAgd2l0aCBgc29ja19lcnJvcihzaylgLiAgQXQgZmlyc3QgZ2xhbmNlLCBubyBuZXcgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludm9sdmVkLCBhbmQgaXQgZG9lc24mIzM5O3Qgc2VlbSBsaWtlIGFueSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgKmJlaW5nKiBleHBvc2VkLiAgVGhlIGNoYW5nZXMgYXBwZWFyIHRvIGJlIHB1cmVseSBsb2dpYy1kcml2ZW4sIHByaW1hcmlseSByZWxhdGVkIHRvIGhvdyBzb2NrZXQgZXJyb3JzIGFuZCBjb25uZWN0aW9uIHJlamVjdGlvbnMgYXJlIGhhbmRsZWQuIEkgZG9uJiMzOTt0IHNlZSBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncy4gVGhpcyBkb2VzbiYjMzk7dCBzZWVtIGxpa2UgdGhlIHNvcnQgb2YgY2hhbmdlIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBzaG91bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcuCgpIb3dldmVyLCBsZXQmIzM5O3Mgem9vbSBpbiBvbiBgdnNvY2tfYWNjZXB0YCDigJMgdGhlcmUmIzM5O3MgYSBkZWZpbml0ZSBsb2dpYyBzaGlmdC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgYHdoaWxlYCBsb29wIGNvbmRpdGlvbiB0aGF0IGNoZWNrZWQgZm9yIGJvdGggYSBjb25uZWN0ZWQgc29ja2V0IGFuZCBgbGlzdGVuZXItJmd0O3NrX2VycmAsIGFuZCB0aGVuIGNoZWNrZWQgYGxpc3RlbmVyLSZndDtza19lcnJgICphZ2FpbiogYWZ0ZXIgdGhlIGxvb3AuIE5vdywgaXQgc2VlbXMgdGhhdCBpZiBgbGlzdGVuZXItJmd0O3NrX2VycmAgaXNuJiMzOTt0IHplcm8sIGl0IHdpbGwgZWl0aGVyIHJldHVybiBgLUVBR0FJTmAgb3IgY29udGludWUgdG8gZXhlY3V0ZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgbG9naWMgY2hhbmdlIGFuZCBuZWVkcyBjYXJlZnVsIHJldmlldywgYnV0IGl0IHN0aWxsIHNlZW1zIHRoYXQgdGhlIGNoYW5nZSBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIGdvIHRocm91Z2ggdGhlIEtNU0FOIHJ1bGVzOiAgRXNzZW50aWFsbHksIEkmIzM5O20gY2hlY2tpbmcgZm9yICpteSogYXJlYXMgb2YgZXhwZXJ0aXNlIC0tIGNhc2VzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG1pZ2h0IHNuZWFrIHRocm91Z2guCjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkPyBOby4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOZWdhdGl2ZS4KNC4gQm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIHdoaWNoIGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGE/IERvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdC4KCkdpdmVuIGFsbCBvZiB0aGlzLCBJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBJdCYjMzk7cyBhIGxvZ2ljIGNoYW5nZSwgbGlrZWx5IHNpbXBsaWZ5aW5nIGVycm9yIGhhbmRsaW5nLCBidXQgbm90IGludHJvZHVjaW5nIGFueSBhcHBhcmVudCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGluIHRoZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBgcmVqZWN0ZWRgIGZpZWxkIGZyb20gYHN0cnVjdCB2c29ja19zb2NrYCBhbmQgc2ltcGxpZmllcyBlcnJvciBoYW5kbGluZyBsb2dpYyBpbiBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGxvZ2ljIGVycm9ycykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdnNvY2tfc29ja2AgYW5kIHNpbXBsaWZpZXMgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBhbnkgbmV3IGFsbG9jYXRpb25zIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBUaGUgY2hhbmdlcyBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBsb2dpYyBlcnJvcnMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MDE6MTcuOTMzNjM5MDg2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA2NzU1NzgxMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnNvY2tfY29ubmVjdFwiLFxuICAgIFwidnNvY2tfYWNjZXB0XCIsXG4gICAgXCJ2c29ja19wZW5kaW5nX3dvcmtcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgIGFuZCBzaW1wbGlmaWVzIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIGB2c29ja19hY2NlcHRgIGFuZCBgdnNvY2tfY29ubmVjdGAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcy4gVGhlIGNoYW5nZXMgZG8gbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgbG9naWMgZXJyb3JzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyBmb3IgQUZfVlNPQ0sgc29ja2V0cy4gSXQgcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBzdGF0ZSBmcm9tIHBlbmRpbmcgc29ja2V0cyBhbmQgY2hhbmdlcyBob3cgYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YCBoYW5kbGUgc29ja2V0IGVycm9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIgZHVyaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjE3LjkzMzY5MTA0NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MjYxODI5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRiYTU0NmI2MGRlMDhiMGZlMWE3M2FjNDY0ZWY1NmRhY2ZiZTIxMjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTk6MDE6MTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaCBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcXG5pbmRleCAzMDA0NmEzYzIwZjczLi4zMzU3ZWU2MmQxMGJmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcXG4rKysgYi9pbmNsdWRlL25ldC9hZl92c29jay5oXFxuQEAgLTUyLDEzICs1MiwxMCBAQCBzdHJ1Y3QgdnNvY2tfc29jayB7XFxuIFxcdCAqIFRoZSBsaXN0ZW5pbmcgc29ja2V0IGlzIHRoZSBoZWFkIGZvciBib3RoIGxpc3RzLiAgU29ja2V0cyBjcmVhdGVkXFxuIFxcdCAqIGZvciBjb25uZWN0aW9uIHJlcXVlc3RzIGFyZSBwbGFjZWQgaW4gdGhlIHBlbmRpbmcgbGlzdCB1bnRpbCB0aGV5XFxuIFxcdCAqIGFyZSBjb25uZWN0ZWQsIGF0IHdoaWNoIHBvaW50IHRoZXkgYXJlIHB1dCBpbiB0aGUgYWNjZXB0IHF1ZXVlIGxpc3RcXG4tXFx0ICogc28gdGhleSBjYW4gYmUgYWNjZXB0ZWQgaW4gYWNjZXB0KCkuICBJZiBhY2NlcHQoKSBjYW5ub3QgYWNjZXB0IHRoZVxcbi1cXHQgKiBjb25uZWN0aW9uLCBpdCBpcyBtYXJrZWQgYXMgcmVqZWN0ZWQgc28gdGhlIGNsZWFudXAgZnVuY3Rpb24ga25vd3NcXG4tXFx0ICogdG8gY2xlYW4gdXAgdGhlIHNvY2tldC5cXG4rXFx0ICogc28gdGhleSBjYW4gYmUgYWNjZXB0ZWQgaW4gYWNjZXB0KCkuXFxuIFxcdCAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIHBlbmRpbmdfbGlua3M7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgYWNjZXB0X3F1ZXVlO1xcbi1cXHRib29sIHJlamVjdGVkO1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIGNvbm5lY3Rfd29yaztcXG4gXFx0c3RydWN0IGRlbGF5ZWRfd29yayBwZW5kaW5nX3dvcms7XFxuIFxcdHN0cnVjdCBkZWxheWVkX3dvcmsgY2xvc2Vfd29yaztcXG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXFxuaW5kZXggNjIyZGJkMDQ2Nzk5NC4uZTg5Y2I4NGI4ZDczNyAxMDA2NDRcXG4tLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcXG4rKysgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcXG5AQCAtMzgsMTAgKzM4LDkgQEBcXG4gICogcGVuZGluZyBzb2NrZXQuICBXaGVuIHRoYXQgc29ja2V0IHJlYWNoZXMgdGhlIGNvbm5lY3RlZCBzdGF0ZSwgaXQgaXMgcmVtb3ZlZFxcbiAgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQncyBwZW5kaW5nIGxpc3QgYW5kIGVucXVldWVkIGluIHRoZSBsaXN0ZW5lclxcbiAgKiBzb2NrZXQncyBhY2NlcHQgcXVldWUuICBDYWxsZXJzIG9mIGFjY2VwdCgyKSB3aWxsIGFjY2VwdCBjb25uZWN0ZWQgc29ja2V0c1xcbi0gKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQncyBhY2NlcHQgcXVldWUuICBJZiB0aGUgc29ja2V0IGNhbm5vdCBiZSBhY2NlcHRlZFxcbi0gKiBmb3Igc29tZSByZWFzb24gdGhlbiBpdCBpcyBtYXJrZWQgcmVqZWN0ZWQuICBPbmNlIHRoZSBjb25uZWN0aW9uIGlzXFxuLSAqIGFjY2VwdGVkLCBpdCBpcyBvd25lZCBieSB0aGUgdXNlciBwcm9jZXNzIGFuZCB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGNsZWFudXBcXG4tICogZmFsbHMgd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy5cXG4rICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0J3MgYWNjZXB0IHF1ZXVlLiBPbmNlIHRoZSBjb25uZWN0aW9uIGlzIGFjY2VwdGVkLFxcbisgKiBpdCBpcyBvd25lZCBieSB0aGUgdXNlciBwcm9jZXNzIGFuZCB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGNsZWFudXAgZmFsbHNcXG4rICogd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy5cXG4gICpcXG4gICogLSBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXNlIHBlbmRpbmcgc29ja2V0cyB3aWxsIG5ldmVyIHJlYWNoIHRoZSBjb25uZWN0ZWRcXG4gICogc3RhdGU7IGluIGZhY3QsIHdlIG1heSBuZXZlciByZWNlaXZlIGFub3RoZXIgcGFja2V0IGFmdGVyIHRoZSBjb25uZWN0aW9uXFxuQEAgLTQ5LDkgKzQ4LDcgQEBcXG4gICogZnV0dXJlLCBhZnRlciBzb21lIGFtb3VudCBvZiB0aW1lIHBhc3NlcyB3aGVyZSBhIGNvbm5lY3Rpb24gc2hvdWxkIGhhdmUgYmVlblxcbiAgKiBlc3RhYmxpc2hlZC4gIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBzb2NrZXQgaXMgb2ZmIGFsbCBsaXN0cyBzbyBpdFxcbiAgKiBjYW5ub3QgYmUgcmV0cmlldmVkLCB0aGVuIGRyb3BzIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBzb2NrZXQgc28gaXQgaXMgY2xlYW5lZFxcbi0gKiB1cCAoc29ja19wdXQoKSAtXFx1MDAzZSBza19mcmVlKCkgLVxcdTAwM2Ugb3VyIHNrX2Rlc3RydWN0IGltcGxlbWVudGF0aW9uKS4gIE5vdGUgdGhpc1xcbi0gKiBmdW5jdGlvbiB3aWxsIGFsc28gY2xlYW51cCByZWplY3RlZCBzb2NrZXRzLCB0aG9zZSB0aGF0IHJlYWNoIHRoZSBjb25uZWN0ZWRcXG4tICogc3RhdGUgYnV0IGxlYXZlIGl0IGJlZm9yZSB0aGV5IGhhdmUgYmVlbiBhY2NlcHRlZC5cXG4rICogdXAgKHNvY2tfcHV0KCkgLVxcdTAwM2Ugc2tfZnJlZSgpIC1cXHUwMDNlIG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuXFxuICAqXFxuICAqIC0gTG9jayBvcmRlcmluZyBmb3IgcGVuZGluZyBvciBhY2NlcHQgcXVldWUgc29ja2V0cyBpczpcXG4gICpcXG5AQCAtNzc0LDExICs3NzEsMTAgQEAgc3RhdGljIHZvaWQgdnNvY2tfcGVuZGluZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFxuIFxcdGlmICh2c29ja19pc19wZW5kaW5nKHNrKSkge1xcbiBcXHRcXHR2c29ja19yZW1vdmVfcGVuZGluZyhsaXN0ZW5lciwgc2spO1xcbi1cXHR9IGVsc2UgaWYgKCF2c2stXFx1MDAzZXJlamVjdGVkKSB7XFxuLVxcdFxcdC8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBhbmQgYWNjZXB0KCkgZGlkIG5vdCByZWplY3RcXG4tXFx0XFx0ICogdXMsIHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkIGJ5IG91ciB1c2VyIHByb2Nlc3MuICBXZVxcbi1cXHRcXHQgKiBqdXN0IG5lZWQgdG8gZHJvcCBvdXIgcmVmZXJlbmNlcyB0byB0aGUgc29ja2V0cyBhbmQgYmUgb25cXG4tXFx0XFx0ICogb3VyIHdheS5cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogV2UgYXJlIG5vdCBvbiB0aGUgcGVuZGluZyBsaXN0IHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkXFxuK1xcdFxcdCAqIGJ5IG91ciB1c2VyIHByb2Nlc3MuIFdlIGp1c3QgbmVlZCB0byBkcm9wIG91ciByZWZlcmVuY2VzIHRvXFxuK1xcdFxcdCAqIHRoZSBzb2NrZXRzIGFuZCBiZSBvbiBvdXIgd2F5LlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0Y2xlYW51cCA9IGZhbHNlO1xcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtOTQyLDcgKzkzOCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHR2c2stXFx1MDAzZWxpc3RlbmVyID0gTlVMTDtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnZzay1cXHUwMDNlcGVuZGluZ19saW5rcyk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ2c2stXFx1MDAzZWFjY2VwdF9xdWV1ZSk7XFxuLVxcdHZzay1cXHUwMDNlcmVqZWN0ZWQgPSBmYWxzZTtcXG4gXFx0dnNrLVxcdTAwM2VzZW50X3JlcXVlc3QgPSBmYWxzZTtcXG4gXFx0dnNrLVxcdTAwM2VpZ25vcmVfY29ubmVjdGluZ19yc3QgPSBmYWxzZTtcXG4gXFx0V1JJVEVfT05DRSh2c2stXFx1MDAzZXBlZXJfc2h1dGRvd24sIDApO1xcbkBAIC0xODQ3LDEyICsxODQyLDEwIEBAIHN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcXG4gXFx0XFx0cHJlcGFyZV90b193YWl0KHNrX3NsZWVwKHNrKSwgXFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChzay1cXHUwMDNlc2tfZXJyKSB7XFxuLVxcdFxcdGVyciA9IC1zay1cXHUwMDNlc2tfZXJyO1xcbitcXHRlcnIgPSBzb2NrX2Vycm9yKHNrKTtcXG4rXFx0aWYgKGVycikge1xcbiBcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBUQ1BfQ0xPU0U7XFxuIFxcdFxcdHNvY2stXFx1MDAzZXN0YXRlID0gU1NfVU5DT05ORUNURUQ7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGVyciA9IDA7XFxuIFxcdH1cXG4gXFxuIG91dF93YWl0OlxcbkBAIC0xODkzLDcgKzE4ODYsNyBAQCBzdGF0aWMgaW50IHZzb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxcbiBcXHR0aW1lb3V0ID0gc29ja19yY3Z0aW1lbyhsaXN0ZW5lciwgYXJnLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9fTk9OQkxPQ0spO1xcbiBcXG4gXFx0d2hpbGUgKChjb25uZWN0ZWQgPSB2c29ja19kZXF1ZXVlX2FjY2VwdChsaXN0ZW5lcikpID09IE5VTEwgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICAgIGxpc3RlbmVyLVxcdTAwM2Vza19lcnIgPT0gMCBcXHUwMDI2XFx1MDAyNiB0aW1lb3V0ICE9IDApIHtcXG4rXFx0XFx0dGltZW91dCAhPSAwKSB7XFxuIFxcdFxcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChsaXN0ZW5lciksIFxcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xcbiBcXHRcXHRyZWxlYXNlX3NvY2sobGlzdGVuZXIpO1xcbiBcXHRcXHR0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTtcXG5AQCAtMTkwNiwzOCArMTg5OSwyMyBAQCBzdGF0aWMgaW50IHZzb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChsaXN0ZW5lci1cXHUwMDNlc2tfZXJyKSB7XFxuLVxcdFxcdGVyciA9IC1saXN0ZW5lci1cXHUwMDNlc2tfZXJyO1xcbi1cXHR9IGVsc2UgaWYgKCFjb25uZWN0ZWQpIHtcXG4rXFx0aWYgKCFjb25uZWN0ZWQpIHtcXG4gXFx0XFx0ZXJyID0gLUVBR0FJTjtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKGNvbm5lY3RlZCkge1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRza19hY2NlcHRxX3JlbW92ZWQobGlzdGVuZXIpO1xcbiBcXG4gXFx0XFx0bG9ja19zb2NrX25lc3RlZChjb25uZWN0ZWQsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4gXFx0XFx0dmNvbm5lY3RlZCA9IHZzb2NrX3NrKGNvbm5lY3RlZCk7XFxuIFxcbi1cXHRcXHQvKiBJZiB0aGUgbGlzdGVuZXIgc29ja2V0IGhhcyByZWNlaXZlZCBhbiBlcnJvciwgdGhlbiB3ZSBzaG91bGRcXG4tXFx0XFx0ICogcmVqZWN0IHRoaXMgc29ja2V0IGFuZCByZXR1cm4uICBOb3RlIHRoYXQgd2Ugc2ltcGx5IG1hcmsgdGhlXFxuLVxcdFxcdCAqIHNvY2tldCByZWplY3RlZCwgZHJvcCBvdXIgcmVmZXJlbmNlLCBhbmQgbGV0IHRoZSBjbGVhbnVwXFxuLVxcdFxcdCAqIGZ1bmN0aW9uIGhhbmRsZSB0aGUgY2xlYW51cDsgdGhlIGZhY3QgdGhhdCB3ZSBmb3VuZCBpdCBpblxcbi1cXHRcXHQgKiB0aGUgbGlzdGVuZXIncyBhY2NlcHQgcXVldWUgZ3VhcmFudGVlcyB0aGF0IHRoZSBjbGVhbnVwXFxuLVxcdFxcdCAqIGZ1bmN0aW9uIGhhc24ndCBydW4geWV0Llxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHR2Y29ubmVjdGVkLVxcdTAwM2VyZWplY3RlZCA9IHRydWU7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdG5ld3NvY2stXFx1MDAzZXN0YXRlID0gU1NfQ09OTkVDVEVEO1xcbi1cXHRcXHRcXHRzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7XFxuK1xcdFxcdG5ld3NvY2stXFx1MDAzZXN0YXRlID0gU1NfQ09OTkVDVEVEO1xcbitcXHRcXHRzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7XFxuIFxcbi1cXHRcXHRcXHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZjb25uZWN0ZWQtXFx1MDAzZXNrX3NvY2tldC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsXFxuK1xcdFxcdFxcdFxcdTAwMjZjb25uZWN0ZWQtXFx1MDAzZXNrX3NvY2tldC1cXHUwMDNlZmxhZ3MpO1xcbiBcXG4tXFx0XFx0XFx0aWYgKHZzb2NrX21zZ3plcm9jb3B5X2FsbG93KHZjb25uZWN0ZWQtXFx1MDAzZXRyYW5zcG9ydCkpXFxuLVxcdFxcdFxcdFxcdHNldF9iaXQoU09DS19TVVBQT1JUX1pDLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2Y29ubmVjdGVkLVxcdTAwM2Vza19zb2NrZXQtXFx1MDAzZWZsYWdzKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAodnNvY2tfbXNnemVyb2NvcHlfYWxsb3codmNvbm5lY3RlZC1cXHUwMDNldHJhbnNwb3J0KSlcXG4rXFx0XFx0XFx0c2V0X2JpdChTT0NLX1NVUFBPUlRfWkMsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZjb25uZWN0ZWQtXFx1MDAzZXNrX3NvY2tldC1cXHUwMDNlZmxhZ3MpO1xcbiBcXG4gXFx0XFx0cmVsZWFzZV9zb2NrKGNvbm5lY3RlZCk7XFxuIFxcdFxcdHNvY2tfcHV0KGNvbm5lY3RlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjE5LjMyNjkxMzg3MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM4MzcwNTU4MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWU09DS0VUU19MT09QQkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZzb2NrX2Nvbm5lY3RcIixcbiAgICBcInZzb2NrX2FjY2VwdFwiLFxuICAgIFwidnNvY2tfcGVuZGluZ193b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyBmb3IgQUZfVlNPQ0sgc29ja2V0cy4gSXQgcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBzdGF0ZSBmcm9tIHBlbmRpbmcgc29ja2V0cyBhbmQgY2hhbmdlcyBob3cgYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YCBoYW5kbGUgc29ja2V0IGVycm9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIgZHVyaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRiYTU0NmI2MGRlMDhiMGZlMWE3M2FjNDY0ZWY1NmRhY2ZiZTIxMjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxOTowMToxNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmggYi9pbmNsdWRlL25ldC9hZl92c29jay5oXG5pbmRleCAzMDA0NmEzYzIwZjczLi4zMzU3ZWU2MmQxMGJmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuKysrIGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuQEAgLTUyLDEzICs1MiwxMCBAQCBzdHJ1Y3QgdnNvY2tfc29jayB7XG4gXHQgKiBUaGUgbGlzdGVuaW5nIHNvY2tldCBpcyB0aGUgaGVhZCBmb3IgYm90aCBsaXN0cy4gIFNvY2tldHMgY3JlYXRlZFxuIFx0ICogZm9yIGNvbm5lY3Rpb24gcmVxdWVzdHMgYXJlIHBsYWNlZCBpbiB0aGUgcGVuZGluZyBsaXN0IHVudGlsIHRoZXlcbiBcdCAqIGFyZSBjb25uZWN0ZWQsIGF0IHdoaWNoIHBvaW50IHRoZXkgYXJlIHB1dCBpbiB0aGUgYWNjZXB0IHF1ZXVlIGxpc3Rcbi1cdCAqIHNvIHRoZXkgY2FuIGJlIGFjY2VwdGVkIGluIGFjY2VwdCgpLiAgSWYgYWNjZXB0KCkgY2Fubm90IGFjY2VwdCB0aGVcbi1cdCAqIGNvbm5lY3Rpb24sIGl0IGlzIG1hcmtlZCBhcyByZWplY3RlZCBzbyB0aGUgY2xlYW51cCBmdW5jdGlvbiBrbm93c1xuLVx0ICogdG8gY2xlYW4gdXAgdGhlIHNvY2tldC5cbitcdCAqIHNvIHRoZXkgY2FuIGJlIGFjY2VwdGVkIGluIGFjY2VwdCgpLlxuIFx0ICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHBlbmRpbmdfbGlua3M7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGFjY2VwdF9xdWV1ZTtcbi1cdGJvb2wgcmVqZWN0ZWQ7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIGNvbm5lY3Rfd29yaztcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgcGVuZGluZ193b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBjbG9zZV93b3JrO1xuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuaW5kZXggNjIyZGJkMDQ2Nzk5NC4uZTg5Y2I4NGI4ZDczNyAxMDA2NDRcbi0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuKysrIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5AQCAtMzgsMTAgKzM4LDkgQEBcbiAgKiBwZW5kaW5nIHNvY2tldC4gIFdoZW4gdGhhdCBzb2NrZXQgcmVhY2hlcyB0aGUgY29ubmVjdGVkIHN0YXRlLCBpdCBpcyByZW1vdmVkXG4gICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0J3MgcGVuZGluZyBsaXN0IGFuZCBlbnF1ZXVlZCBpbiB0aGUgbGlzdGVuZXJcbiAgKiBzb2NrZXQncyBhY2NlcHQgcXVldWUuICBDYWxsZXJzIG9mIGFjY2VwdCgyKSB3aWxsIGFjY2VwdCBjb25uZWN0ZWQgc29ja2V0c1xuLSAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCdzIGFjY2VwdCBxdWV1ZS4gIElmIHRoZSBzb2NrZXQgY2Fubm90IGJlIGFjY2VwdGVkXG4tICogZm9yIHNvbWUgcmVhc29uIHRoZW4gaXQgaXMgbWFya2VkIHJlamVjdGVkLiAgT25jZSB0aGUgY29ubmVjdGlvbiBpc1xuLSAqIGFjY2VwdGVkLCBpdCBpcyBvd25lZCBieSB0aGUgdXNlciBwcm9jZXNzIGFuZCB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGNsZWFudXBcbi0gKiBmYWxscyB3aXRoIHRoYXQgdXNlciBwcm9jZXNzLlxuKyAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCdzIGFjY2VwdCBxdWV1ZS4gT25jZSB0aGUgY29ubmVjdGlvbiBpcyBhY2NlcHRlZCxcbisgKiBpdCBpcyBvd25lZCBieSB0aGUgdXNlciBwcm9jZXNzIGFuZCB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGNsZWFudXAgZmFsbHNcbisgKiB3aXRoIHRoYXQgdXNlciBwcm9jZXNzLlxuICAqXG4gICogLSBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXNlIHBlbmRpbmcgc29ja2V0cyB3aWxsIG5ldmVyIHJlYWNoIHRoZSBjb25uZWN0ZWRcbiAgKiBzdGF0ZTsgaW4gZmFjdCwgd2UgbWF5IG5ldmVyIHJlY2VpdmUgYW5vdGhlciBwYWNrZXQgYWZ0ZXIgdGhlIGNvbm5lY3Rpb25cbkBAIC00OSw5ICs0OCw3IEBAXG4gICogZnV0dXJlLCBhZnRlciBzb21lIGFtb3VudCBvZiB0aW1lIHBhc3NlcyB3aGVyZSBhIGNvbm5lY3Rpb24gc2hvdWxkIGhhdmUgYmVlblxuICAqIGVzdGFibGlzaGVkLiAgVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIHNvY2tldCBpcyBvZmYgYWxsIGxpc3RzIHNvIGl0XG4gICogY2Fubm90IGJlIHJldHJpZXZlZCwgdGhlbiBkcm9wcyBhbGwgcmVmZXJlbmNlcyB0byB0aGUgc29ja2V0IHNvIGl0IGlzIGNsZWFuZWRcbi0gKiB1cCAoc29ja19wdXQoKSAtXHUwMDNlIHNrX2ZyZWUoKSAtXHUwMDNlIG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuICBOb3RlIHRoaXNcbi0gKiBmdW5jdGlvbiB3aWxsIGFsc28gY2xlYW51cCByZWplY3RlZCBzb2NrZXRzLCB0aG9zZSB0aGF0IHJlYWNoIHRoZSBjb25uZWN0ZWRcbi0gKiBzdGF0ZSBidXQgbGVhdmUgaXQgYmVmb3JlIHRoZXkgaGF2ZSBiZWVuIGFjY2VwdGVkLlxuKyAqIHVwIChzb2NrX3B1dCgpIC1cdTAwM2Ugc2tfZnJlZSgpIC1cdTAwM2Ugb3VyIHNrX2Rlc3RydWN0IGltcGxlbWVudGF0aW9uKS5cbiAgKlxuICAqIC0gTG9jayBvcmRlcmluZyBmb3IgcGVuZGluZyBvciBhY2NlcHQgcXVldWUgc29ja2V0cyBpczpcbiAgKlxuQEAgLTc3NCwxMSArNzcxLDEwIEBAIHN0YXRpYyB2b2lkIHZzb2NrX3BlbmRpbmdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gXHRpZiAodnNvY2tfaXNfcGVuZGluZyhzaykpIHtcbiBcdFx0dnNvY2tfcmVtb3ZlX3BlbmRpbmcobGlzdGVuZXIsIHNrKTtcbi1cdH0gZWxzZSBpZiAoIXZzay1cdTAwM2VyZWplY3RlZCkge1xuLVx0XHQvKiBXZSBhcmUgbm90IG9uIHRoZSBwZW5kaW5nIGxpc3QgYW5kIGFjY2VwdCgpIGRpZCBub3QgcmVqZWN0XG4tXHRcdCAqIHVzLCBzbyB3ZSBtdXN0IGhhdmUgYmVlbiBhY2NlcHRlZCBieSBvdXIgdXNlciBwcm9jZXNzLiAgV2Vcbi1cdFx0ICoganVzdCBuZWVkIHRvIGRyb3Agb3VyIHJlZmVyZW5jZXMgdG8gdGhlIHNvY2tldHMgYW5kIGJlIG9uXG4tXHRcdCAqIG91ciB3YXkuXG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBXZSBhcmUgbm90IG9uIHRoZSBwZW5kaW5nIGxpc3Qgc28gd2UgbXVzdCBoYXZlIGJlZW4gYWNjZXB0ZWRcbitcdFx0ICogYnkgb3VyIHVzZXIgcHJvY2Vzcy4gV2UganVzdCBuZWVkIHRvIGRyb3Agb3VyIHJlZmVyZW5jZXMgdG9cbitcdFx0ICogdGhlIHNvY2tldHMgYW5kIGJlIG9uIG91ciB3YXkuXG4gXHRcdCAqL1xuIFx0XHRjbGVhbnVwID0gZmFsc2U7XG4gXHRcdGdvdG8gb3V0O1xuQEAgLTk0Miw3ICs5MzgsNiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKl9fdnNvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdHZzay1cdTAwM2VsaXN0ZW5lciA9IE5VTEw7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2c2stXHUwMDNlcGVuZGluZ19saW5rcyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ2c2stXHUwMDNlYWNjZXB0X3F1ZXVlKTtcbi1cdHZzay1cdTAwM2VyZWplY3RlZCA9IGZhbHNlO1xuIFx0dnNrLVx1MDAzZXNlbnRfcmVxdWVzdCA9IGZhbHNlO1xuIFx0dnNrLVx1MDAzZWlnbm9yZV9jb25uZWN0aW5nX3JzdCA9IGZhbHNlO1xuIFx0V1JJVEVfT05DRSh2c2stXHUwMDNlcGVlcl9zaHV0ZG93biwgMCk7XG5AQCAtMTg0NywxMiArMTg0MiwxMCBAQCBzdGF0aWMgaW50IHZzb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG4gXHRcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChzayksIFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gXHR9XG4gXG4tXHRpZiAoc2stXHUwMDNlc2tfZXJyKSB7XG4tXHRcdGVyciA9IC1zay1cdTAwM2Vza19lcnI7XG4rXHRlcnIgPSBzb2NrX2Vycm9yKHNrKTtcbitcdGlmIChlcnIpIHtcbiBcdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBUQ1BfQ0xPU0U7XG4gXHRcdHNvY2stXHUwMDNlc3RhdGUgPSBTU19VTkNPTk5FQ1RFRDtcbi1cdH0gZWxzZSB7XG4tXHRcdGVyciA9IDA7XG4gXHR9XG4gXG4gb3V0X3dhaXQ6XG5AQCAtMTg5Myw3ICsxODg2LDcgQEAgc3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbiBcdHRpbWVvdXQgPSBzb2NrX3JjdnRpbWVvKGxpc3RlbmVyLCBhcmctXHUwMDNlZmxhZ3MgXHUwMDI2IE9fTk9OQkxPQ0spO1xuIFxuIFx0d2hpbGUgKChjb25uZWN0ZWQgPSB2c29ja19kZXF1ZXVlX2FjY2VwdChsaXN0ZW5lcikpID09IE5VTEwgXHUwMDI2XHUwMDI2XG4tXHQgICAgICAgbGlzdGVuZXItXHUwMDNlc2tfZXJyID09IDAgXHUwMDI2XHUwMDI2IHRpbWVvdXQgIT0gMCkge1xuK1x0XHR0aW1lb3V0ICE9IDApIHtcbiBcdFx0cHJlcGFyZV90b193YWl0KHNrX3NsZWVwKGxpc3RlbmVyKSwgXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcdFx0cmVsZWFzZV9zb2NrKGxpc3RlbmVyKTtcbiBcdFx0dGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7XG5AQCAtMTkwNiwzOCArMTg5OSwyMyBAQCBzdGF0aWMgaW50IHZzb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRpZiAobGlzdGVuZXItXHUwMDNlc2tfZXJyKSB7XG4tXHRcdGVyciA9IC1saXN0ZW5lci1cdTAwM2Vza19lcnI7XG4tXHR9IGVsc2UgaWYgKCFjb25uZWN0ZWQpIHtcbitcdGlmICghY29ubmVjdGVkKSB7XG4gXHRcdGVyciA9IC1FQUdBSU47XG4tXHR9XG4tXG4tXHRpZiAoY29ubmVjdGVkKSB7XG4rXHR9IGVsc2Uge1xuIFx0XHRza19hY2NlcHRxX3JlbW92ZWQobGlzdGVuZXIpO1xuIFxuIFx0XHRsb2NrX3NvY2tfbmVzdGVkKGNvbm5lY3RlZCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuIFx0XHR2Y29ubmVjdGVkID0gdnNvY2tfc2soY29ubmVjdGVkKTtcbiBcbi1cdFx0LyogSWYgdGhlIGxpc3RlbmVyIHNvY2tldCBoYXMgcmVjZWl2ZWQgYW4gZXJyb3IsIHRoZW4gd2Ugc2hvdWxkXG4tXHRcdCAqIHJlamVjdCB0aGlzIHNvY2tldCBhbmQgcmV0dXJuLiAgTm90ZSB0aGF0IHdlIHNpbXBseSBtYXJrIHRoZVxuLVx0XHQgKiBzb2NrZXQgcmVqZWN0ZWQsIGRyb3Agb3VyIHJlZmVyZW5jZSwgYW5kIGxldCB0aGUgY2xlYW51cFxuLVx0XHQgKiBmdW5jdGlvbiBoYW5kbGUgdGhlIGNsZWFudXA7IHRoZSBmYWN0IHRoYXQgd2UgZm91bmQgaXQgaW5cbi1cdFx0ICogdGhlIGxpc3RlbmVyJ3MgYWNjZXB0IHF1ZXVlIGd1YXJhbnRlZXMgdGhhdCB0aGUgY2xlYW51cFxuLVx0XHQgKiBmdW5jdGlvbiBoYXNuJ3QgcnVuIHlldC5cbi1cdFx0ICovXG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHR2Y29ubmVjdGVkLVx1MDAzZXJlamVjdGVkID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRuZXdzb2NrLVx1MDAzZXN0YXRlID0gU1NfQ09OTkVDVEVEO1xuLVx0XHRcdHNvY2tfZ3JhZnQoY29ubmVjdGVkLCBuZXdzb2NrKTtcbitcdFx0bmV3c29jay1cdTAwM2VzdGF0ZSA9IFNTX0NPTk5FQ1RFRDtcbitcdFx0c29ja19ncmFmdChjb25uZWN0ZWQsIG5ld3NvY2spO1xuIFxuLVx0XHRcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCxcbi1cdFx0XHRcdFx1MDAyNmNvbm5lY3RlZC1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuK1x0XHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsXG4rXHRcdFx0XHUwMDI2Y29ubmVjdGVkLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmbGFncyk7XG4gXG4tXHRcdFx0aWYgKHZzb2NrX21zZ3plcm9jb3B5X2FsbG93KHZjb25uZWN0ZWQtXHUwMDNldHJhbnNwb3J0KSlcbi1cdFx0XHRcdHNldF9iaXQoU09DS19TVVBQT1JUX1pDLFxuLVx0XHRcdFx0XHRcdTAwMjZjb25uZWN0ZWQtXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbi1cdFx0fVxuK1x0XHRpZiAodnNvY2tfbXNnemVyb2NvcHlfYWxsb3codmNvbm5lY3RlZC1cdTAwM2V0cmFuc3BvcnQpKVxuK1x0XHRcdHNldF9iaXQoU09DS19TVVBQT1JUX1pDLFxuK1x0XHRcdFx0XHUwMDI2Y29ubmVjdGVkLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmbGFncyk7XG4gXG4gXHRcdHJlbGVhc2Vfc29jayhjb25uZWN0ZWQpO1xuIFx0XHRzb2NrX3B1dChjb25uZWN0ZWQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MDE6MTkuMzI2OTE1MTEyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk2MTQzMzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSB2c29jayBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIHRoZSB2c29jayBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IG1lc3Npbmcgd2l0aCBgbmV0L3Ztd192c29jay9hZl92c29jay5jYCBhbmQgYGluY2x1ZGUvbmV0L2FmX3Zzb2NrLmhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJpbnRyaWd1aW5nLCBsZXQncyBzZWUgd2hhdCdzIGNoYW5nZWQgYW5kIHdoYXQgdGhpcyBtZWFucyBmb3IgdGhlIG5ldHdvcmsgc3Vic3lzdGVtLlwiIEl0IGxvb2tzIGxpa2UgdGhleSdyZSByZW1vdmluZyB0aGUgYHJlamVjdGVkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdnNvY2tfc29ja2AsIGFuZCB0aGF0IGluc3RhbnRseSBmbGFncyBteSBhdHRlbnRpb24uIFRoYXQgYm9vbGVhbiBsaWtlbHkgaGFkIGEgdmVyeSBzcGVjaWZpYyBwdXJwb3NlIGluIHRoZSBlcnJvciBoYW5kbGluZyBvciBjb25uZWN0aW9uIGxpZmVjeWNsZS5cblxuVGhlIGNoYW5nZXMgZm9jdXMgb24gYSBmZXcga2V5IGZ1bmN0aW9uczogYHZzb2NrX3BlbmRpbmdfd29ya2AsIGB2c29ja19jb25uZWN0YCwgYW5kIGB2c29ja19hY2NlcHRgLiBMZXQncyBicmVhayBpdCBkb3duOlxuXG4qICAgKipgdnNvY2tfc29ja2Agc3RydWN0Kio6IEdvbmUgaXMgdGhlIGByZWplY3RlZGAgYm9vbGVhbi4gVGhhdCBpbXBsaWVzIGEgc2hpZnQgaW4gaG93IGNvbm5lY3Rpb25zIGFyZSBtYW5hZ2VkLlxuKiAgICoqYHZzb2NrX3BlbmRpbmdfd29ya2AqKjogVGhlIHBhdGNoIGVsaW1pbmF0ZXMgYSBjaGVjayBmb3IgYCF2c2stXHUwMDNlcmVqZWN0ZWRgLiBUaGlzIGlzIGNvdXBsZWQgdG8gdGhlIGZpcnN0IHBvaW50OyB0aGUgXCJyZWplY3Rpb25cIiBjb25jZXB0IGlzIGdldHRpbmcgYWx0ZXJlZCBvciByZW1vdmVkLlxuKiAgICoqYHZzb2NrX2Nvbm5lY3RgKio6IFRoZSBwYXRjaCBpcyBnb2luZyBmcm9tIGBpZiAoc2stXHUwMDNlc2tfZXJyKWAgdG8gYGVyciA9IHNvY2tfZXJyb3Ioc2spOyBpZiAoZXJyKWAuIFRoaXMgYXBwZWFycyB0byBiZSBhIGNsZWFuZXIgd2F5IHRvIGdldCB0aGUgc29ja2V0IGVycm9yLlxuKiAgICoqYHZzb2NrX2FjY2VwdGAqKjogVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgY2hlY2sgZm9yIGBsaXN0ZW5lci1cdTAwM2Vza19lcnIgPT0gMGAgaW4gdGhlIGB3aGlsZWAgbG9vcCwgcmVtb3ZlcyBoYW5kbGluZyBmb3IgYGxpc3RlbmVyLVx1MDAzZXNrX2VycmAsIGFuZCB0aGUgY29kZSBwYXRoIGhhbmRsaW5nIGB2Y29ubmVjdGVkLVx1MDAzZXJlamVjdGVkID0gdHJ1ZWAuIFRoaXMgcG9pbnRzIHRvIGEgY2hhbmdlIGluIGhvdyB0aGUgYWNjZXB0IHF1ZXVlIGlzIGhhbmRsZWQsIG1heWJlIG1vcmUgbGVuaWVudCBlcnJvciBoYW5kbGluZy5cblxuVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byB2c29jayBjb3JlIGxvZ2ljLCB3aGljaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgZm9yIHRoZSBlZmZlY3RzIG9uIGVycm9yIGhhbmRsaW5nIGluIGBhY2NlcHQoKWAgYW5kIGBjb25uZWN0KClgLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBuZWVkcyBzb21lIHNvbGlkIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMuIFRoZSBmdW5jdGlvbnMgYmVpbmcgdG91Y2hlZCBhcmU6IGB2c29ja19wZW5kaW5nX3dvcmtgLCBgdnNvY2tfY29ubmVjdGAsIGFuZCBgdnNvY2tfYWNjZXB0YC4gVGhleSdyZSAqc3RhdGljKiwgYnV0IGFzc2lnbmVkIHRvIGBzdHJ1Y3QgcHJvdG9fb3BzYC4gQWxyaWdodCwgc28gYHZzb2NrX2Nvbm5lY3RgIGFuZCBgdnNvY2tfYWNjZXB0YCBhcmUgdGhlIGFjdHVhbCwgZGlyZWN0IGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIHdyYXBwZXJzLCBsaWtlIHRoZSB1c3VhbCBgc3lzX2Nvbm5lY3RgIC1cdTAwM2UgYF9fc3lzX2Nvbm5lY3RgIC1cdTAwM2UgYHNvY2stXHUwMDNlb3BzLVx1MDAzZWNvbm5lY3RgIHBhdHRlcm4uIFllcywgYHZzb2NrX2Nvbm5lY3RgIGFuZCBgdnNvY2tfYWNjZXB0YCBhcmUgc3RhdGljIHdpdGhpbiBgbmV0L3Ztd192c29jay9hZl92c29jay5jYCwgc28gdGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuXG5cbkdpdmVuIHRoaXMgdW5kZXJzdGFuZGluZywgSSBjYW4gbm93IGJlZ2luIHRvIG1hcCBvdXQgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY4NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjI4LjI4ODM1MjIwMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzI4MTgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2c29ja19jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC92bXdfdnNvY2svYWZfdnNvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjA5PXN0YXRpYyBERUZJTkVfTVVURVgodnNvY2tfcmVnaXN0ZXJfbXV0ZXgpO1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzNS1cXHQoKChzcmMpLVxcdTAwM2Vzdm1fY2lkIF4gKGRzdCktXFx1MDAzZXN2bV9wb3J0KSAlIFZTT0NLX0hBU0hfU0laRSlcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjM2OiNkZWZpbmUgdnNvY2tfY29ubmVjdGVkX3NvY2tldHMoc3JjLCBkc3QpXFx0XFx0XFxcXFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzc6XFx0KFxcdTAwMjZ2c29ja19jb25uZWN0ZWRfdGFibGVbVlNPQ0tfQ09OTl9IQVNIKHNyYywgZHN0KV0pXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzODojZGVmaW5lIHZzb2NrX2Nvbm5lY3RlZF9zb2NrZXRzX3Zzayh2c2spXFx0XFx0XFx0XFx0XFxcXFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMzk6XFx0dnNvY2tfY29ubmVjdGVkX3NvY2tldHMoXFx1MDAyNih2c2spLVxcdTAwM2VyZW1vdGVfYWRkciwgXFx1MDAyNih2c2spLVxcdTAwM2Vsb2NhbF9hZGRyKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNDAtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjQyPUVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2JpbmRfdGFibGUpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNDM6c3RydWN0IGxpc3RfaGVhZCB2c29ja19jb25uZWN0ZWRfdGFibGVbVlNPQ0tfSEFTSF9TSVpFXTtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjQ0OkVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2Nvbm5lY3RlZF90YWJsZSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0NS1ERUZJTkVfU1BJTkxPQ0sodnNvY2tfdGFibGVfbG9jayk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MjYwPXN0YXRpYyB2b2lkIHZzb2NrX2luaXRfdGFibGVzKHZvaWQpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY2LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjc6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodnNvY2tfY29ubmVjdGVkX3RhYmxlKTsgaSsrKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjg6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnZzb2NrX2Nvbm5lY3RlZF90YWJsZVtpXSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2OS19XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MzIwPV9fdnNvY2tfZmluZF9jb25uZWN0ZWRfc29ja2V0X25ldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYyxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMjQtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjMyNTpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZzaywgdnNvY2tfY29ubmVjdGVkX3NvY2tldHMoc3JjLCBkc3QpLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0zMjYtXFx0XFx0XFx0ICAgIGNvbm5lY3RlZF90YWJsZSkge1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTM0Nj12b2lkIHZzb2NrX2luc2VydF9jb25uZWN0ZWQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaylcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzQ3LXtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MzQ4OlxcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSB2c29ja19jb25uZWN0ZWRfc29ja2V0cyhcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMzQ5LVxcdFxcdFxcdTAwMjZ2c2stXFx1MDAzZXJlbW90ZV9hZGRyLCBcXHUwMDI2dnNrLVxcdTAwM2Vsb2NhbF9hZGRyKTtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz00NTE9dm9pZCB2c29ja19mb3JfZWFjaF9jb25uZWN0ZWRfc29ja2V0KHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy00NTctXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjQ1ODpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh2c29ja19jb25uZWN0ZWRfdGFibGUpOyBpKyspIHtcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNDU5LVxcdFxcdHN0cnVjdCB2c29ja19zb2NrICp2c2s7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjQ2MDpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZzaywgXFx1MDAyNnZzb2NrX2Nvbm5lY3RlZF90YWJsZVtpXSxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNDYxLVxcdFxcdFxcdFxcdCAgICBjb25uZWN0ZWRfdGFibGUpIHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz01Njc9aW50IHZzb2NrX2Fzc2lnbl90cmFuc3BvcnQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywgc3RydWN0IHZzb2NrX3NvY2sgKnBzaylcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy02NDAtXFx0XFx0LyogdHJhbnNwb3J0LVxcdTAwM2VyZWxlYXNlKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBzb2NrIGxvY2sgYWNxdWlyZWQuXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjY0MTpcXHRcXHQgKiBUaGlzIHBhdGggY2FuIG9ubHkgYmUgdGFrZW4gZHVyaW5nIHZzb2NrX2Nvbm5lY3QoKSwgd2hlcmUgd2VcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtNjQyLVxcdFxcdCAqIGhhdmUgYWxyZWFkeSBoZWxkIHRoZSBzb2NrIGxvY2suIEluIHRoZSBvdGhlciBjYXNlcywgdGhpc1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTY1MC1cXHRcXHQgKiBzdGF0ZSwgc2luY2Ugd2UgYXJlIHJlYXNzaWduaW5nIHRoZSBzb2NrZXQgdG8gYSBuZXcgdHJhbnNwb3J0XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjY1MTpcXHRcXHQgKiBkdXJpbmcgdnNvY2tfY29ubmVjdCgpLCBsZXQncyByZXNldCB0aGVzZSBmaWVsZHMgdG8gaGF2ZSBhXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTY1Mi1cXHRcXHQgKiBjbGVhbiBzdGF0ZS5cXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz04NjU9c3RhdGljIGludCBfX3Zzb2NrX2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtOTAxLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo5MDI6c3RhdGljIHZvaWQgdnNvY2tfY29ubmVjdF90aW1lb3V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTkwMy1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9OTA0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk0My1cXHRXUklURV9PTkNFKHZzay1cXHUwMDNlcGVlcl9zaHV0ZG93biwgMCk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjk0NDpcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2dnNrLVxcdTAwM2Vjb25uZWN0X3dvcmssIHZzb2NrX2Nvbm5lY3RfdGltZW91dCk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk0NS1cXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2dnNrLVxcdTAwM2VwZW5kaW5nX3dvcmssIHZzb2NrX3BlbmRpbmdfd29yayk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTA1OD1FWFBPUlRfU1lNQk9MX0dQTCh2c29ja19zdHJlYW1faGFzX2RhdGEpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMDU5LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxMDYwOnM2NCB2c29ja19jb25uZWN0aWJsZV9oYXNfZGF0YShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMDYxLXtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xMDcxLX1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTA3MjpFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19jb25uZWN0aWJsZV9oYXNfZGF0YSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTEwNzMtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9MTY0MD1zdGF0aWMgaW50IHZzb2NrX3RyYW5zcG9ydF9jYW5jZWxfcGt0KHN0cnVjdCB2c29ja19zb2NrICp2c2spXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTY0OS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTY1MDpzdGF0aWMgdm9pZCB2c29ja19jb25uZWN0X3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNjUxLXtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0xNjcxLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxNjcyOnN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTY3My1cXHRcXHRcXHQgaW50IGFkZHJfbGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTgxOS1cXHRcXHQgKiBza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQgaW1wbGllcyB0aGF0IHNvY2tldCBpcyBub3Qgb25cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MTgyMDpcXHRcXHQgKiB2c29ja19jb25uZWN0ZWRfdGFibGUuIFdlIGtlZXAgdGhlIGJpbmRpbmcgYW5kIHRoZSB0cmFuc3BvcnRcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTgyMS1cXHRcXHQgKiBhc3NpZ25lZC5cXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0xOTY2PXN0YXRpYyB2b2lkIHZzb2NrX3VwZGF0ZV9idWZmZXJfc2l6ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE5ODItXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE5ODM6c3RhdGljIGludCB2c29ja19jb25uZWN0aWJsZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE5ODQtXFx0XFx0XFx0XFx0XFx0aW50IGxldmVsLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIwOTYtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIwOTc6c3RhdGljIGludCB2c29ja19jb25uZWN0aWJsZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIwOTgtXFx0XFx0XFx0XFx0XFx0aW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMTU1LVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyMTU2OnN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdGlibGVfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIxNTctXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgbGVuKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzMTctXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzMTg6c3RhdGljIGludCB2c29ja19jb25uZWN0aWJsZV93YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMzE5LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yMzM0LVxcdFxcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChzayksIHdhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjIzMzU6XFx0XFx0ZGF0YSA9IHZzb2NrX2Nvbm5lY3RpYmxlX2hhc19kYXRhKHZzayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTIzMzYtXFx0XFx0aWYgKGRhdGEgIT0gMClcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yMzg1PXN0YXRpYyBpbnQgX192c29ja19zdHJlYW1fcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNDIyLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNDIzOlxcdFxcdGVyciA9IHZzb2NrX2Nvbm5lY3RpYmxlX3dhaXRfZGF0YShzaywgXFx1MDAyNndhaXQsIHRpbWVvdXQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0MjQtXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2cmVjdl9kYXRhLCB0YXJnZXQpO1xcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI0NjQ9c3RhdGljIGludCBfX3Zzb2NrX3NlcXBhY2tldF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0NzgtXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI0Nzk6XFx0ZXJyID0gdnNvY2tfY29ubmVjdGlibGVfd2FpdF9kYXRhKHNrLCBcXHUwMDI2d2FpdCwgdGltZW91dCwgTlVMTCwgMCk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI0ODAtXFx0aWYgKGVyciBcXHUwMDNjPSAwKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI1MTQ9aW50XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI1MTU6X192c29ja19jb25uZWN0aWJsZV9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjUxNi1cXHRcXHRcXHQgICAgaW50IGZsYWdzKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI1ODE9aW50XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI1ODI6dnNvY2tfY29ubmVjdGlibGVfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI1ODMtXFx0XFx0XFx0ICBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjU5My1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjU5NDpcXHRyZXR1cm4gX192c29ja19jb25uZWN0aWJsZV9yZWN2bXNnKHNvY2ssIG1zZywgbGVuLCBmbGFncyk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI1OTUtfVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNTk2OkVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2Nvbm5lY3RpYmxlX3JlY3Ztc2cpO1xcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNTk3LVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI2MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdnNvY2tfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjI2LVxcdC5iaW5kID0gdnNvY2tfYmluZCxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjYyNzpcXHQuY29ubmVjdCA9IHZzb2NrX2Nvbm5lY3QsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MjgtXFx0LnNvY2tldHBhaXIgPSBzb2NrX25vX3NvY2tldHBhaXIsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjYzNC1cXHQuc2h1dGRvd24gPSB2c29ja19zaHV0ZG93bixcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjYzNTpcXHQuc2V0c29ja29wdCA9IHZzb2NrX2Nvbm5lY3RpYmxlX3NldHNvY2tvcHQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2MzY6XFx0LmdldHNvY2tvcHRfaXRlciA9IHZzb2NrX2Nvbm5lY3RpYmxlX2dldHNvY2tvcHQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2Mzc6XFx0LnNlbmRtc2cgPSB2c29ja19jb25uZWN0aWJsZV9zZW5kbXNnLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjM4OlxcdC5yZWN2bXNnID0gdnNvY2tfY29ubmVjdGlibGVfcmVjdm1zZyxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjYzOS1cXHQubW1hcCA9IHNvY2tfbm9fbW1hcCxcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHZzb2NrX3NlcXBhY2tldF9vcHMgPSB7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMjY0OC1cXHQuYmluZCA9IHZzb2NrX2JpbmQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2NDk6XFx0LmNvbm5lY3QgPSB2c29ja19jb25uZWN0LFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjUwLVxcdC5zb2NrZXRwYWlyID0gc29ja19ub19zb2NrZXRwYWlyLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NTYtXFx0LnNodXRkb3duID0gdnNvY2tfc2h1dGRvd24sXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjI2NTc6XFx0LnNldHNvY2tvcHQgPSB2c29ja19jb25uZWN0aWJsZV9zZXRzb2Nrb3B0LFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjU4OlxcdC5nZXRzb2Nrb3B0X2l0ZXIgPSB2c29ja19jb25uZWN0aWJsZV9nZXRzb2Nrb3B0LFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjU5OlxcdC5zZW5kbXNnID0gdnNvY2tfY29ubmVjdGlibGVfc2VuZG1zZyxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6MjY2MDpcXHQucmVjdm1zZyA9IHZzb2NrX2Nvbm5lY3RpYmxlX3JlY3Ztc2csXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NjEtXFx0Lm1tYXAgPSBzb2NrX25vX21tYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjI4LjM0NTYzODgzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyODUzODc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIHZzb2NrIENvbm5lY3Rpb24gRnVuY3Rpb25zKipcblxuT2theSwgc28gYHZzb2NrX2Nvbm5lY3RgLi4uIHJpZ2h0LCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgYXMgZXhwZWN0ZWQuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCdzIGFsc28gdHJ1ZSBmb3IgdGhlIGB2c29ja19hY2NlcHRgIGZ1bmN0aW9uLCBib3RoIG9mIHdoaWNoIGFyZSByZXNpZGluZyBpbiBgbmV0L3Ztd192c29jay9hZl92c29jay5jYC4gVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgbm9uLXN0YXRpYyB3cmFwcGVycyBmb3IgdGhlc2UgZnVuY3Rpb25zPyBUaGF0J3Mgd2hhdCBJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gb24gdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0cy4gTGV0IG1lIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiBgdnNvY2tfYWNjZXB0YCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBub24tc3RhdGljIGNhbGwgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzU2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MDE6MzIuMDc0MTgxMjIyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTIxNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZzb2NrX2FjY2VwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay9hZl92c29jay5jPTE2NzI9c3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE4NTctXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE4NTg6c3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTg1OS1cXHRcXHRcXHRzdHJ1Y3QgcHJvdG9fYWNjZXB0X2FyZyAqYXJnKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI2MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdnNvY2tfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjI4LVxcdC5zb2NrZXRwYWlyID0gc29ja19ub19zb2NrZXRwYWlyLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjI5OlxcdC5hY2NlcHQgPSB2c29ja19hY2NlcHQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MzAtXFx0LmdldG5hbWUgPSB2c29ja19nZXRuYW1lLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI2NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdnNvY2tfc2VxcGFja2V0X29wcyA9IHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjUwLVxcdC5zb2NrZXRwYWlyID0gc29ja19ub19zb2NrZXRwYWlyLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjUxOlxcdC5hY2NlcHQgPSB2c29ja19hY2NlcHQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NTItXFx0LmdldG5hbWUgPSB2c29ja19nZXRuYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOTowMTozMi4xNDI3MDc3MzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzQyNzQ1ODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdnNvY2sgQVBJIEVudHJ5cG9pbnRzIGZvciBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGV4cG9zZSB0aGUgYHZzb2NrYCBmdW5jdGlvbmFsaXR5IGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHNpbmNlIGB2c29ja19jb25uZWN0YCBhbmQgYHZzb2NrX2FjY2VwdGAgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYyBmdW5jdGlvbnMsIHN5emthbGxlciB3b3VsZG4ndCBiZSBhYmxlIHRvIGRpcmVjdGx5IGNhbGwgdGhlbSBhcyBzZXBhcmF0ZSBzeW1ib2xzLiBIb3dldmVyLCBJIHJlYWxpemUgc3l6a2FsbGVyIHdpbGwgZnV6eiBgY29ubmVjdCgpYCBhbmQgYGFjY2VwdCgpYCBvbiBgQUZfVlNPQ0tgIHNvY2tldHMuIEJ1dCBkb2VzIGl0IHRoZW4gZnV6eiBgY29ubmVjdCR2c29ja2AgYW5kIGBhY2NlcHQkdnNvY2tgPyBNeSBtZW50YWwgbW9kZWwgaXMgdGhhdCBpdCBtYXBzIHRvIGBzeXNfY29ubmVjdGAgYW5kIGBzeXNfYWNjZXB0YCwgd2hpY2ggZXZlbnR1YWxseSAqY2FsbCogdGhlc2UgZnVuY3Rpb25zLlxuXG5UaGVuIEkgcmVjYWxsZWQgdGhlIGd1aWRlbGluZTogcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBpcyBrZXkuIFRoZSBnb29kIG5ld3MgaXMgdGhhdCBgdnNvY2tfY29ubmVjdGAgYW5kIGB2c29ja19hY2NlcHRgIGFyZSBhc3NpZ25lZCB0byB0aGUgYHByb3RvX29wc2Agc3RydWN0cyAoYHZzb2NrX3N0cmVhbV9vcHNgIGFuZCBgdnNvY2tfc2VxcGFja2V0X29wc2ApLiBTaW5jZSB0aGV5J3JlIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBzdHJ1Y3RzLCB0aGUgY29tcGlsZXIgKnNob3VsZG4ndCogaW5saW5lIHRoZW0uIFRoZWlyIGFkZHJlc3NlcyBhcmUgZGVmaW5pdGVseSB0YWtlbiwgc28gdGhleSBzaG91bGQgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLlxuXG5CdXQsIGlmIEkgbmVlZCB0byBwcm92aWRlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhcmUgdGhlcmUgYW55PyBUaGVyZSBhcmVuJ3QgYW55IGV4cGxpY2l0IG5vbi1zdGF0aWMgd3JhcHBlcnMgZm9yIGB2c29ja19jb25uZWN0YCBhbmQgYHZzb2NrX2FjY2VwdGA7IHRoZXkgYXJlIGRpcmVjdGx5IGFzc2lnbmVkIHdpdGhpbiB0aGUgYHByb3RvX29wc2AuIFNvIGl0IGxvb2tzIGxpa2UgSSBjYW4ganVzdCBsaXN0IGB2c29ja19jb25uZWN0YCBhbmQgYHZzb2NrX2FjY2VwdGAuXG5cbldhaXQgYSBtaW51dGUsIHdoYXQgYWJvdXQgYHZzb2NrX3BlbmRpbmdfd29ya2A/IFRoaXMgaXMgYSB3b3JrcXVldWUgY2FsbGJhY2suIEl0J3MgKmFsc28qIHN0YXRpYywgYnV0IGl0cyBhZGRyZXNzIGlzIHRha2VuIHdpdGhpbiBgSU5JVF9ERUxBWUVEX1dPUktgLiBTbywgaXQgd29uJ3QgYmUgaW5saW5lZCBlaXRoZXIhIFNvLCBJIHRoaW5rIEkgY2FuIHNhZmVseSBpbmNsdWRlIGB2c29ja19jb25uZWN0YCwgYHZzb2NrX2FjY2VwdGAsIGFuZCBgdnNvY2tfcGVuZGluZ193b3JrYCBhcyBzdWl0YWJsZSBjYW5kaWRhdGVzLlxuXG5GaW5hbGx5LCBJIHNob3VsZCBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGBBRl9WU09DS2Agc3VwcG9ydCByZXF1aXJlcyBgQ09ORklHX1ZTT0NLRVRTYC4gVGhhdCdzIHRoZSBiYXNlbGluZSwgYnV0IEknbGwgbWFrZSBzdXJlIGl0J3MgZW5hYmxlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MDE6MzkuNDg1NDU3NzI3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTk1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWU09DS0VUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay9LY29uZmlnLTUtXFxubmV0L3Ztd192c29jay9LY29uZmlnOjY6Y29uZmlnIFZTT0NLRVRTXFxubmV0L3Ztd192c29jay9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0IHByb3RvY29sXFxcIlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTE4LVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzoxOTpjb25maWcgVlNPQ0tFVFNfRElBR1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTI4LVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzoyOTpjb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMzAtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0cyBsb29wYmFjayB0cmFuc3BvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjM5LjU0NjA1NzA5NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDc5MDEwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBWU09DS0VUUyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBgVlNPQ0tFVFNgIHN1YnN5c3RlbS4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIHJlbGV2YW50IG1vZHVsZS4gTGV0J3Mgc2VlLCB0aGF0IHdvdWxkIGJlIGBuZXQvdm13X3Zzb2NrL0tjb25maWdgLiBUaGlzIGZpbGUgc2hvdWxkIGxheSBvdXQgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBpbiB0ZXJtcyBvZiB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcywgb3B0aW9ucywgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMgbmVlZCB0byBiZSBwcmVzZW50IG9yIGVuYWJsZWQgZm9yIGBWU09DS0VUU2AgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBwZXJoYXBzIHRoaW5ncyBsaWtlIGh5cGVydmlzb3Igc3BlY2lmaWMgc2V0dGluZ3Mgb3IgY2VydGFpbiBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb25zLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsIGZvciBhbnkgc29ydCBvZiBkZWJ1Z2dpbmcgb3IgcG9ydGluZyBlZmZvcnQgSSdsbCBuZWVkIHRvIGRvLiBUaW1lIHRvIHNlZSB3aGF0J3MgaW4gdGhhdCBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUwOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjQzLjM5Mzk2MTI4N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Ztd192c29jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFZzb2NrIHByb3RvY29sXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBWU09DS0VUU1xcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0IHByb3RvY29sXFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBWaXJ0dWFsIFNvY2tldCBQcm90b2NvbCBpcyBhIHNvY2tldCBwcm90b2NvbCBzaW1pbGFyIHRvIFRDUC9JUFxcbiAgMTA6XFx0XFx0ICBhbGxvd2luZyBjb21tdW5pY2F0aW9uIGJldHdlZW4gVmlydHVhbCBNYWNoaW5lcyBhbmQgaHlwZXJ2aXNvclxcbiAgMTE6XFx0XFx0ICBvciBob3N0LlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIFlvdSBzaG91bGQgYWxzbyBzZWxlY3Qgb25lIG9yIG1vcmUgaHlwZXJ2aXNvci1zcGVjaWZpYyB0cmFuc3BvcnRzXFxuICAxNDpcXHRcXHQgIGJlbG93LlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDE3OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdnNvY2suIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBWU09DS0VUU19ESUFHXFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOTowMTo0My4zOTQwNjcyNzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0MjM2MDM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQ29uc2lkZXJpbmcgYFZTT0NLRVRTYCBUZXN0aW5nIE9wdGlvbnMqKlxuXG5SaWdodCwgc28gYFZTT0NLRVRTYCwgaW5oZXJlbnRseSwgaXMgc3RhbmQtYWxvbmUuIE5vIG90aGVyIGxpYnJhcmllcyBhcmUgcmVxdWlyZWQuIFRoYXQncyBhIGRlZmluaXRlIHBsdXMgZm9yIGtlZXBpbmcgdGhpbmdzIGNsZWFuLiBOb3csIEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgdG8gYWN0dWFsbHkgKnRlc3QqIHRoaXMuIFRvIGFjdHVhbGx5IGV4ZXJjaXNlIHRoZSBgVlNPQ0tFVFNgIEFQSSwgSSdtIGdvaW5nIHRvIG5lZWQgYSB0cmFuc3BvcnQgbGF5ZXIsIG9mIGNvdXJzZS4gRm9yIG15IHB1cnBvc2VzLCBwYXJ0aWN1bGFybHkgZm9yIGZ1enppbmcsIGBWU09DS0VUU19MT09QQkFDS2AgaXMgYWN0dWFsbHkgYW4gZXhjZWxsZW50IGNob2ljZS4gTm8gaHlwZXJ2aXNvciBkZXBlbmRlbmNpZXMgbWVhbnMgbGVzcyBvdmVyaGVhZCBhbmQgY29tcGxleGl0eSwgd2hpY2ggaXMgaWRlYWwgd2hlbiBJJ20gYWltaW5nIGZvciBzcGVlZCBhbmQgc2ltcGxpY2l0eSBpbiBteSBmdXp6aW5nIHNldHVwLiBUaGlzIHNob3VsZCBhbGxvdyBmb3IgZWZmaWNpZW50IGFuZCBmb2N1c2VkIHRlc3Rpbmcgb2YgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5ODgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjQ3LjgzNjQzMDY2MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBWU09DS0VUU1xcbiAgMjI6XFx0XFx0ZGVmYXVsdCB5XFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFN1cHBvcnQgZm9yIFBGX1ZTT0NLIHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0aGUgc3MgdG9vbC5cXG4gIDI1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICBFbmFibGUgdGhpcyBtb2R1bGUgc28gdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBjYW4gcXVlcnkgb3BlbiBzb2NrZXRzLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRjb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldHMgbG9vcGJhY2sgdHJhbnNwb3J0XFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBWU09DS0VUU1xcbiAgMzI6XFx0XFx0ZGVmYXVsdCB5XFxuICAzMzpcXHRcXHRzZWxlY3QgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbiAgMzQ6XFx0XFx0aGVscFxcbiAgMzU6XFx0XFx0ICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgbG9vcGJhY2sgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHMsXFxuICAzNjpcXHRcXHQgIHVzaW5nIHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICAzOTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHZzb2NrX2xvb3BiYWNrLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjQ3LjgzNjQ5MDMyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjU2NDgzNzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZTT0NLIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgdGhyb3VnaCB0aGUgcHJvcG9zZWQgY2hhbmdlcyB0byB0aGUgVlNPQ0sgc3Vic3lzdGVtLiBJdCBzZWVtcyBsaWtlIGVuYWJsaW5nIGBWU09DS0VUU2AgYW5kIGBWU09DS0VUU19MT09QQkFDS2AgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0ZXN0aW5nLiBJIHF1aWNrbHkgY29uZmlybWVkIHRoYXQgYFZJUlRJT19WU09DS0VUU19DT01NT05gIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYnkgYFZTT0NLRVRTX0xPT1BCQUNLYCwgc28gdGhvc2UgdHdvIGFyZSBhbGwgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgc3RyZWFtbGluaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgZXJyb3IgaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGV5J3JlIHJlbW92aW5nIHRoZSBgcmVqZWN0ZWRgIGZpZWxkIGZyb20gYHN0cnVjdCB2c29ja19zb2NrYCwgd2hpY2ggbWFrZXMgc2Vuc2UgdG8gbWXigJRpdCBmZWVscyBsaWtlIGEgc29tZXdoYXQgcmVkdW5kYW50IHBpZWNlIG9mIHN0YXRlLiBUaGUgY29kZSBub3cgaGFuZGxlcyB0aGUgcmVqZWN0aW9uIGxvZ2ljIGluIGB2c29ja19hY2NlcHRgIGFuZCBgdnNvY2tfY29ubmVjdGAgbW9yZSBjb25jaXNlbHkuIEluIGB2c29ja19hY2NlcHRgLCBpbnN0ZWFkIG9mIHNldHRpbmcgYHZjb25uZWN0ZWQtXHUwMDNlcmVqZWN0ZWQgPSB0cnVlYCwgaXQgbm93IHNpbXBseSByZXR1cm5zIGAtRUFHQUlOYCBpZiB0aGUgY29ubmVjdGlvbiBpc24ndCByZWFkeS4gQW5kLCBpdCBsb29rcyBsaWtlIHRoZXkndmUgc3dpdGNoZWQgdG8gdXNpbmcgYHNvY2tfZXJyb3Ioc2spYCBpbiBgdnNvY2tfY29ubmVjdGAgaW5zdGVhZCBvZiBkaXJlY3RseSBhY2Nlc3NpbmcgYHNrLVx1MDAzZXNrX2VycmAuIFRoZSBwYXRjaCBhbHNvIHNpbXBsaWZpZXMgYHZzb2NrX3BlbmRpbmdfd29ya2AsIHJlbW92aW5nIHRoZSBjaGVjayB0aGF0IGludm9sdmVkIHRoZSBgcmVqZWN0ZWRgIGZpZWxkLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgdG91Y2hpbmcgb24gY3JpdGljYWwgYXNwZWN0cyBvZiB0aGUgY29ubmVjdGlvbiBwcm9jZXNzLiBHaXZlbiB0aGUgY2hhbmdlcyB0byB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgSSB0aGluayB3ZSBzaG91bGQgZGVmaW5pdGVseSBwcmlvcml0aXplIGZ1enppbmcgdGhlIGB2c29ja19jb25uZWN0YCwgYHZzb2NrX2FjY2VwdGAsIGFuZCBgdnNvY2tfcGVuZGluZ193b3JrYCBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgYXJvdW5kIGVycm9yIGNvbmRpdGlvbnMgYW5kIGNvbmN1cnJlbnQgY29ubmVjdGlvbiBhdHRlbXB0cy4gSXQncyB0aW1lIHRvIGdlbmVyYXRlIHNvbWUgdGVzdCBjYXNlcy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUwNywiT3V0cHV0VG9rZW5zIjoxNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxOTowMTo1Ny40OTI5ODA0NDRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ0ODY0MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWU09DS0VUU19MT09QQkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZzb2NrX2Nvbm5lY3RcIixcbiAgICBcInZzb2NrX2FjY2VwdFwiLFxuICAgIFwidnNvY2tfcGVuZGluZ193b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBlcnJvciBoYW5kbGluZyBsb2dpYyBmb3IgQUZfVlNPQ0sgc29ja2V0cy4gSXQgcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBzdGF0ZSBmcm9tIHBlbmRpbmcgc29ja2V0cyBhbmQgY2hhbmdlcyBob3cgYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YCBoYW5kbGUgc29ja2V0IGVycm9ycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBtZW1vcnkgbGVha3Mgb2NjdXIgZHVyaW5nIGNvbm5lY3Rpb24gZmFpbHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnNvY2tfY29ubmVjdFwiLFxuICAgIFwidnNvY2tfYWNjZXB0XCIsXG4gICAgXCJ2c29ja19wZW5kaW5nX3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGZvciBBRl9WU09DSyBzb2NrZXRzLiBJdCByZW1vdmVzIHRoZSBgcmVqZWN0ZWRgIHN0YXRlIGZyb20gcGVuZGluZyBzb2NrZXRzIGFuZCBjaGFuZ2VzIGhvdyBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgIGhhbmRsZSBzb2NrZXQgZXJyb3JzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG1lbW9yeSBsZWFrcyBvY2N1ciBkdXJpbmcgY29ubmVjdGlvbiBmYWlsdXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MDE6NTcuNjk3NDc3MzkyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDkxMTcyNDczOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjU3LjY5ODUyNTI2MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDkxMDY3MDI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdnNvY2tfc29ja2AgYW5kIHNpbXBsaWZpZXMgZXJyb3IgaGFuZGxpbmcgbG9naWMgaW4gYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBhbnkgbmV3IGFsbG9jYXRpb25zIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBUaGUgY2hhbmdlcyBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBsb2dpYyBlcnJvcnMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYmE1NDZiNjBkZTA4YjBmZTFhNzNhYzQ2NGVmNTZkYWNmYmUyMTIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTk6MDE6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl92c29jay5oIGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuaW5kZXggMzAwNDZhM2MyMGY3My4uMzM1N2VlNjJkMTBiZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbisrKyBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbkBAIC01MiwxMyArNTIsMTAgQEAgc3RydWN0IHZzb2NrX3NvY2sge1xuIFx0ICogVGhlIGxpc3RlbmluZyBzb2NrZXQgaXMgdGhlIGhlYWQgZm9yIGJvdGggbGlzdHMuICBTb2NrZXRzIGNyZWF0ZWRcbiBcdCAqIGZvciBjb25uZWN0aW9uIHJlcXVlc3RzIGFyZSBwbGFjZWQgaW4gdGhlIHBlbmRpbmcgbGlzdCB1bnRpbCB0aGV5XG4gXHQgKiBhcmUgY29ubmVjdGVkLCBhdCB3aGljaCBwb2ludCB0aGV5IGFyZSBwdXQgaW4gdGhlIGFjY2VwdCBxdWV1ZSBsaXN0XG4tXHQgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS4gIElmIGFjY2VwdCgpIGNhbm5vdCBhY2NlcHQgdGhlXG4tXHQgKiBjb25uZWN0aW9uLCBpdCBpcyBtYXJrZWQgYXMgcmVqZWN0ZWQgc28gdGhlIGNsZWFudXAgZnVuY3Rpb24ga25vd3Ncbi1cdCAqIHRvIGNsZWFuIHVwIHRoZSBzb2NrZXQuXG4rXHQgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS5cbiBcdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpbmtzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBhY2NlcHRfcXVldWU7XG4tXHRib29sIHJlamVjdGVkO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBjb25uZWN0X3dvcms7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHBlbmRpbmdfd29yaztcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgY2xvc2Vfd29yaztcbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbmluZGV4IDYyMmRiZDA0Njc5OTQuLmU4OWNiODRiOGQ3MzcgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbisrKyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuQEAgLTM4LDEwICszOCw5IEBAXG4gICogcGVuZGluZyBzb2NrZXQuICBXaGVuIHRoYXQgc29ja2V0IHJlYWNoZXMgdGhlIGNvbm5lY3RlZCBzdGF0ZSwgaXQgaXMgcmVtb3ZlZFxuICAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCdzIHBlbmRpbmcgbGlzdCBhbmQgZW5xdWV1ZWQgaW4gdGhlIGxpc3RlbmVyXG4gICogc29ja2V0J3MgYWNjZXB0IHF1ZXVlLiAgQ2FsbGVycyBvZiBhY2NlcHQoMikgd2lsbCBhY2NlcHQgY29ubmVjdGVkIHNvY2tldHNcbi0gKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQncyBhY2NlcHQgcXVldWUuICBJZiB0aGUgc29ja2V0IGNhbm5vdCBiZSBhY2NlcHRlZFxuLSAqIGZvciBzb21lIHJlYXNvbiB0aGVuIGl0IGlzIG1hcmtlZCByZWplY3RlZC4gIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXNcbi0gKiBhY2NlcHRlZCwgaXQgaXMgb3duZWQgYnkgdGhlIHVzZXIgcHJvY2VzcyBhbmQgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBjbGVhbnVwXG4tICogZmFsbHMgd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy5cbisgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQncyBhY2NlcHQgcXVldWUuIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgYWNjZXB0ZWQsXG4rICogaXQgaXMgb3duZWQgYnkgdGhlIHVzZXIgcHJvY2VzcyBhbmQgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBjbGVhbnVwIGZhbGxzXG4rICogd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy5cbiAgKlxuICAqIC0gSXQgaXMgcG9zc2libGUgdGhhdCB0aGVzZSBwZW5kaW5nIHNvY2tldHMgd2lsbCBuZXZlciByZWFjaCB0aGUgY29ubmVjdGVkXG4gICogc3RhdGU7IGluIGZhY3QsIHdlIG1heSBuZXZlciByZWNlaXZlIGFub3RoZXIgcGFja2V0IGFmdGVyIHRoZSBjb25uZWN0aW9uXG5AQCAtNDksOSArNDgsNyBAQFxuICAqIGZ1dHVyZSwgYWZ0ZXIgc29tZSBhbW91bnQgb2YgdGltZSBwYXNzZXMgd2hlcmUgYSBjb25uZWN0aW9uIHNob3VsZCBoYXZlIGJlZW5cbiAgKiBlc3RhYmxpc2hlZC4gIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBzb2NrZXQgaXMgb2ZmIGFsbCBsaXN0cyBzbyBpdFxuICAqIGNhbm5vdCBiZSByZXRyaWV2ZWQsIHRoZW4gZHJvcHMgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIHNvY2tldCBzbyBpdCBpcyBjbGVhbmVkXG4tICogdXAgKHNvY2tfcHV0KCkgLVx1MDAzZSBza19mcmVlKCkgLVx1MDAzZSBvdXIgc2tfZGVzdHJ1Y3QgaW1wbGVtZW50YXRpb24pLiAgTm90ZSB0aGlzXG4tICogZnVuY3Rpb24gd2lsbCBhbHNvIGNsZWFudXAgcmVqZWN0ZWQgc29ja2V0cywgdGhvc2UgdGhhdCByZWFjaCB0aGUgY29ubmVjdGVkXG4tICogc3RhdGUgYnV0IGxlYXZlIGl0IGJlZm9yZSB0aGV5IGhhdmUgYmVlbiBhY2NlcHRlZC5cbisgKiB1cCAoc29ja19wdXQoKSAtXHUwMDNlIHNrX2ZyZWUoKSAtXHUwMDNlIG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuXG4gICpcbiAgKiAtIExvY2sgb3JkZXJpbmcgZm9yIHBlbmRpbmcgb3IgYWNjZXB0IHF1ZXVlIHNvY2tldHMgaXM6XG4gICpcbkBAIC03NzQsMTEgKzc3MSwxMCBAQCBzdGF0aWMgdm9pZCB2c29ja19wZW5kaW5nX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIFx0aWYgKHZzb2NrX2lzX3BlbmRpbmcoc2spKSB7XG4gXHRcdHZzb2NrX3JlbW92ZV9wZW5kaW5nKGxpc3RlbmVyLCBzayk7XG4tXHR9IGVsc2UgaWYgKCF2c2stXHUwMDNlcmVqZWN0ZWQpIHtcbi1cdFx0LyogV2UgYXJlIG5vdCBvbiB0aGUgcGVuZGluZyBsaXN0IGFuZCBhY2NlcHQoKSBkaWQgbm90IHJlamVjdFxuLVx0XHQgKiB1cywgc28gd2UgbXVzdCBoYXZlIGJlZW4gYWNjZXB0ZWQgYnkgb3VyIHVzZXIgcHJvY2Vzcy4gIFdlXG4tXHRcdCAqIGp1c3QgbmVlZCB0byBkcm9wIG91ciByZWZlcmVuY2VzIHRvIHRoZSBzb2NrZXRzIGFuZCBiZSBvblxuLVx0XHQgKiBvdXIgd2F5LlxuK1x0fSBlbHNlIHtcbitcdFx0LyogV2UgYXJlIG5vdCBvbiB0aGUgcGVuZGluZyBsaXN0IHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkXG4rXHRcdCAqIGJ5IG91ciB1c2VyIHByb2Nlc3MuIFdlIGp1c3QgbmVlZCB0byBkcm9wIG91ciByZWZlcmVuY2VzIHRvXG4rXHRcdCAqIHRoZSBzb2NrZXRzIGFuZCBiZSBvbiBvdXIgd2F5LlxuIFx0XHQgKi9cbiBcdFx0Y2xlYW51cCA9IGZhbHNlO1xuIFx0XHRnb3RvIG91dDtcbkBAIC05NDIsNyArOTM4LDYgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpfX3Zzb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHR2c2stXHUwMDNlbGlzdGVuZXIgPSBOVUxMO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dnNrLVx1MDAzZXBlbmRpbmdfbGlua3MpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dnNrLVx1MDAzZWFjY2VwdF9xdWV1ZSk7XG4tXHR2c2stXHUwMDNlcmVqZWN0ZWQgPSBmYWxzZTtcbiBcdHZzay1cdTAwM2VzZW50X3JlcXVlc3QgPSBmYWxzZTtcbiBcdHZzay1cdTAwM2VpZ25vcmVfY29ubmVjdGluZ19yc3QgPSBmYWxzZTtcbiBcdFdSSVRFX09OQ0UodnNrLVx1MDAzZXBlZXJfc2h1dGRvd24sIDApO1xuQEAgLTE4NDcsMTIgKzE4NDIsMTAgQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuIFx0XHRwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCBcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xuIFx0fVxuIFxuLVx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuLVx0XHRlcnIgPSAtc2stXHUwMDNlc2tfZXJyO1xuK1x0ZXJyID0gc29ja19lcnJvcihzayk7XG4rXHRpZiAoZXJyKSB7XG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gVENQX0NMT1NFO1xuIFx0XHRzb2NrLVx1MDAzZXN0YXRlID0gU1NfVU5DT05ORUNURUQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRlcnIgPSAwO1xuIFx0fVxuIFxuIG91dF93YWl0OlxuQEAgLTE4OTMsNyArMTg4Niw3IEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHR0aW1lb3V0ID0gc29ja19yY3Z0aW1lbyhsaXN0ZW5lciwgYXJnLVx1MDAzZWZsYWdzIFx1MDAyNiBPX05PTkJMT0NLKTtcbiBcbiBcdHdoaWxlICgoY29ubmVjdGVkID0gdnNvY2tfZGVxdWV1ZV9hY2NlcHQobGlzdGVuZXIpKSA9PSBOVUxMIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIGxpc3RlbmVyLVx1MDAzZXNrX2VyciA9PSAwIFx1MDAyNlx1MDAyNiB0aW1lb3V0ICE9IDApIHtcbitcdFx0dGltZW91dCAhPSAwKSB7XG4gXHRcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChsaXN0ZW5lciksIFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gXHRcdHJlbGVhc2Vfc29jayhsaXN0ZW5lcik7XG4gXHRcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xuQEAgLTE5MDYsMzggKzE4OTksMjMgQEAgc3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKGxpc3RlbmVyLVx1MDAzZXNrX2Vycikge1xuLVx0XHRlcnIgPSAtbGlzdGVuZXItXHUwMDNlc2tfZXJyO1xuLVx0fSBlbHNlIGlmICghY29ubmVjdGVkKSB7XG4rXHRpZiAoIWNvbm5lY3RlZCkge1xuIFx0XHRlcnIgPSAtRUFHQUlOO1xuLVx0fVxuLVxuLVx0aWYgKGNvbm5lY3RlZCkge1xuK1x0fSBlbHNlIHtcbiBcdFx0c2tfYWNjZXB0cV9yZW1vdmVkKGxpc3RlbmVyKTtcbiBcbiBcdFx0bG9ja19zb2NrX25lc3RlZChjb25uZWN0ZWQsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiBcdFx0dmNvbm5lY3RlZCA9IHZzb2NrX3NrKGNvbm5lY3RlZCk7XG4gXG4tXHRcdC8qIElmIHRoZSBsaXN0ZW5lciBzb2NrZXQgaGFzIHJlY2VpdmVkIGFuIGVycm9yLCB0aGVuIHdlIHNob3VsZFxuLVx0XHQgKiByZWplY3QgdGhpcyBzb2NrZXQgYW5kIHJldHVybi4gIE5vdGUgdGhhdCB3ZSBzaW1wbHkgbWFyayB0aGVcbi1cdFx0ICogc29ja2V0IHJlamVjdGVkLCBkcm9wIG91ciByZWZlcmVuY2UsIGFuZCBsZXQgdGhlIGNsZWFudXBcbi1cdFx0ICogZnVuY3Rpb24gaGFuZGxlIHRoZSBjbGVhbnVwOyB0aGUgZmFjdCB0aGF0IHdlIGZvdW5kIGl0IGluXG4tXHRcdCAqIHRoZSBsaXN0ZW5lcidzIGFjY2VwdCBxdWV1ZSBndWFyYW50ZWVzIHRoYXQgdGhlIGNsZWFudXBcbi1cdFx0ICogZnVuY3Rpb24gaGFzbid0IHJ1biB5ZXQuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0dmNvbm5lY3RlZC1cdTAwM2VyZWplY3RlZCA9IHRydWU7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0bmV3c29jay1cdTAwM2VzdGF0ZSA9IFNTX0NPTk5FQ1RFRDtcbi1cdFx0XHRzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7XG4rXHRcdG5ld3NvY2stXHUwMDNlc3RhdGUgPSBTU19DT05ORUNURUQ7XG4rXHRcdHNvY2tfZ3JhZnQoY29ubmVjdGVkLCBuZXdzb2NrKTtcbiBcbi1cdFx0XHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsXG4tXHRcdFx0XHRcdTAwMjZjb25uZWN0ZWQtXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbitcdFx0c2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULFxuK1x0XHRcdFx1MDAyNmNvbm5lY3RlZC1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuIFxuLVx0XHRcdGlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLVx1MDAzZXRyYW5zcG9ydCkpXG4tXHRcdFx0XHRzZXRfYml0KFNPQ0tfU1VQUE9SVF9aQyxcbi1cdFx0XHRcdFx0XHUwMDI2Y29ubmVjdGVkLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmbGFncyk7XG4tXHRcdH1cbitcdFx0aWYgKHZzb2NrX21zZ3plcm9jb3B5X2FsbG93KHZjb25uZWN0ZWQtXHUwMDNldHJhbnNwb3J0KSlcbitcdFx0XHRzZXRfYml0KFNPQ0tfU1VQUE9SVF9aQyxcbitcdFx0XHRcdFx1MDAyNmNvbm5lY3RlZC1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuIFxuIFx0XHRyZWxlYXNlX3NvY2soY29ubmVjdGVkKTtcbiBcdFx0c29ja19wdXQoY29ubmVjdGVkKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE5OjAxOjU3LjY5ODUyODQxMloiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDkxMDYzNTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSB2c29jayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYWZfdnNvY2suY2AgYW5kIGBhZl92c29jay5oYCwgc3BlY2lmaWNhbGx5IHJlbW92aW5nIHRoZSBgcmVqZWN0ZWRgIGZpZWxkIGZyb20gYHN0cnVjdCB2c29ja19zb2NrYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gIEkgYWx3YXlzIGdvIHRocm91Z2ggdGhpcyBjaGVja2xpc3QuXG5cblRoZSBjb2RlIGNoYW5nZXMgYXJlIG1vc3RseSBmb2N1c2VkIG9uIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgdnNvY2tfcGVuZGluZ193b3JrYCwgYHZzb2NrX2Nvbm5lY3RgLCBhbmQgYHZzb2NrX2FjY2VwdGAuIEl0IGxvb2tzIGxpa2UgaXQncyByZXBsYWNpbmcgZGlyZWN0IGNoZWNrcyBvZiBgc2stXHUwMDNlc2tfZXJyYCBhbmQgYGxpc3RlbmVyLVx1MDAzZXNrX2VycmAgd2l0aCBgc29ja19lcnJvcihzaylgLiAgQXQgZmlyc3QgZ2xhbmNlLCBubyBuZXcgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludm9sdmVkLCBhbmQgaXQgZG9lc24ndCBzZWVtIGxpa2UgYW55IHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSAqYmVpbmcqIGV4cG9zZWQuICBUaGUgY2hhbmdlcyBhcHBlYXIgdG8gYmUgcHVyZWx5IGxvZ2ljLWRyaXZlbiwgcHJpbWFyaWx5IHJlbGF0ZWQgdG8gaG93IHNvY2tldCBlcnJvcnMgYW5kIGNvbm5lY3Rpb24gcmVqZWN0aW9ucyBhcmUgaGFuZGxlZC4gSSBkb24ndCBzZWUgYW55IGltbWVkaWF0ZSByZWQgZmxhZ3MuIFRoaXMgZG9lc24ndCBzZWVtIGxpa2UgdGhlIHNvcnQgb2YgY2hhbmdlIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBzaG91bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIHRlc3RpbmcuXG5cbkhvd2V2ZXIsIGxldCdzIHpvb20gaW4gb24gYHZzb2NrX2FjY2VwdGAg4oCTIHRoZXJlJ3MgYSBkZWZpbml0ZSBsb2dpYyBzaGlmdC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgYHdoaWxlYCBsb29wIGNvbmRpdGlvbiB0aGF0IGNoZWNrZWQgZm9yIGJvdGggYSBjb25uZWN0ZWQgc29ja2V0IGFuZCBgbGlzdGVuZXItXHUwMDNlc2tfZXJyYCwgYW5kIHRoZW4gY2hlY2tlZCBgbGlzdGVuZXItXHUwMDNlc2tfZXJyYCAqYWdhaW4qIGFmdGVyIHRoZSBsb29wLiBOb3csIGl0IHNlZW1zIHRoYXQgaWYgYGxpc3RlbmVyLVx1MDAzZXNrX2VycmAgaXNuJ3QgemVybywgaXQgd2lsbCBlaXRoZXIgcmV0dXJuIGAtRUFHQUlOYCBvciBjb250aW51ZSB0byBleGVjdXRlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBsb2dpYyBjaGFuZ2UgYW5kIG5lZWRzIGNhcmVmdWwgcmV2aWV3LCBidXQgaXQgc3RpbGwgc2VlbXMgdGhhdCB0aGUgY2hhbmdlIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIGdvIHRocm91Z2ggdGhlIEtNU0FOIHJ1bGVzOiAgRXNzZW50aWFsbHksIEknbSBjaGVja2luZyBmb3IgKm15KiBhcmVhcyBvZiBleHBlcnRpc2UgLS0gY2FzZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgbWlnaHQgc25lYWsgdGhyb3VnaC5cbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkPyBOby5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/IE5lZ2F0aXZlLlxuNC4gQm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIHdoaWNoIGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGE/IERvZXNuJ3QgbG9vayBsaWtlIGl0LlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBJdCdzIGEgbG9naWMgY2hhbmdlLCBsaWtlbHkgc2ltcGxpZnlpbmcgZXJyb3IgaGFuZGxpbmcsIGJ1dCBub3QgaW50cm9kdWNpbmcgYW55IGFwcGFyZW50IG1lbW9yeSBzYWZldHkgY29uY2VybnMgaW4gdGhlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2ODMsIk91dHB1dFRva2VucyI6MTQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTk6MDI6MDguNjA5MTY4ODQxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBgcmVqZWN0ZWRgIGZpZWxkIGZyb20gYHN0cnVjdCB2c29ja19zb2NrYCBhbmQgc2ltcGxpZmllcyBlcnJvciBoYW5kbGluZyBsb2dpYyBpbiBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGFueSBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGxvZ2ljIGVycm9ycykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgIGFuZCBzaW1wbGlmaWVzIGVycm9yIGhhbmRsaW5nIGxvZ2ljIGluIGB2c29ja19hY2NlcHRgIGFuZCBgdnNvY2tfY29ubmVjdGAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgYW55IG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcy4gVGhlIGNoYW5nZXMgZG8gbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgbG9naWMgZXJyb3JzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjtjnz[1] Phase: Succeeded StartedAt: 2026-08-13 19:02:20 +0000 UTC FinishedAt: 2026-08-13 19:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 19:02:20 +0000 UTC FinishedAt: 2026-08-13 19:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2] Phase: Succeeded StartedAt: 2026-08-13 19:02:20 +0000 UTC FinishedAt: 2026-08-13 22:50:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 19:02:20 +0000 UTC FinishedAt: 2026-08-13 22:50:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 19:02:20 +0000 UTC FinishedAt: 2026-08-13 19:02:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 19:02:20 +0000 UTC FinishedAt: 2026-08-13 19:02:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjtjnz/series-workflowjtjnz-convert-artifact-1334881843/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 19:02:30 +0000 UTC FinishedAt: 2026-08-13 19:22:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 19:02:30 +0000 UTC FinishedAt: 2026-08-13 19:22:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d478535d-4b25-43e4-8cfe-a743bdfd095f,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-workflowjtjnz/series-workflowjtjnz-convert-artifact-1334881843/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": "8663e8be-154c-43fe-81ca-1bd1aecd1480", "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-workflowjtjnz/series-workflowjtjnz-build-action-183949537/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 19:02:30 +0000 UTC FinishedAt: 2026-08-13 19:22:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d478535d-4b25-43e4-8cfe-a743bdfd095f,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-workflowjtjnz/series-workflowjtjnz-convert-artifact-1334881843/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": "8663e8be-154c-43fe-81ca-1bd1aecd1480", "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-workflowjtjnz/series-workflowjtjnz-build-action-183949537/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 19:22:39 +0000 UTC FinishedAt: 2026-08-13 19:22:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 19:22:39 +0000 UTC FinishedAt: 2026-08-13 19:22:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 19:22:39 +0000 UTC FinishedAt: 2026-08-13 19:23:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 19:22:39 +0000 UTC FinishedAt: 2026-08-13 19:22:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjtjnz/series-workflowjtjnz-convert-artifact-2147552042/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 19:23:04 +0000 UTC FinishedAt: 2026-08-13 19:25:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 19:23:04 +0000 UTC FinishedAt: 2026-08-13 19:24:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8663e8be-154c-43fe-81ca-1bd1aecd1480,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-workflowjtjnz/series-workflowjtjnz-build-action-183949537/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-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 19:25:08 +0000 UTC FinishedAt: 2026-08-13 19:25:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 19:25:08 +0000 UTC FinishedAt: 2026-08-13 19:25:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 19:25:08 +0000 UTC FinishedAt: 2026-08-13 19:45:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 19:25:08 +0000 UTC FinishedAt: 2026-08-13 19:45:26 +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:*d478535d-4b25-43e4-8cfe-a743bdfd095f,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-workflowjtjnz/series-workflowjtjnz-convert-artifact-2147552042/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": "c4d7b91a-91d2-487c-9fec-075c23c6907f", "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-workflowjtjnz/series-workflowjtjnz-build-action-168174158/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 19:25:08 +0000 UTC FinishedAt: 2026-08-13 19:45:16 +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:*d478535d-4b25-43e4-8cfe-a743bdfd095f,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-workflowjtjnz/series-workflowjtjnz-convert-artifact-2147552042/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": "c4d7b91a-91d2-487c-9fec-075c23c6907f", "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-workflowjtjnz/series-workflowjtjnz-build-action-168174158/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 19:45:26 +0000 UTC FinishedAt: 2026-08-13 19:45:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 19:45:26 +0000 UTC FinishedAt: 2026-08-13 19:45:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 19:45:26 +0000 UTC FinishedAt: 2026-08-13 19:47:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 19:45:26 +0000 UTC FinishedAt: 2026-08-13 19:47:08 +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:*c4d7b91a-91d2-487c-9fec-075c23c6907f,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-workflowjtjnz/series-workflowjtjnz-build-action-168174158/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-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 19:47:18 +0000 UTC FinishedAt: 2026-08-13 22:50:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 19:47:18 +0000 UTC FinishedAt: 2026-08-13 22:50:13 +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":["vsock_connect","vsock_accept","vsock_pending_work"],"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:*8663e8be-154c-43fe-81ca-1bd1aecd1480,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c4d7b91a-91d2-487c-9fec-075c23c6907f,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-workflowjtjnz/series-workflowjtjnz-build-action-183949537/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-workflowjtjnz/series-workflowjtjnz-build-action-168174158/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 19:47:18 +0000 UTC FinishedAt: 2026-08-13 19:47:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 19:47:18 +0000 UTC FinishedAt: 2026-08-13 19:47:22 +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":["vsock_connect","vsock_accept","vsock_pending_work"],"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-workflowjtjnz/series-workflowjtjnz-convert-artifact-611007423/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 19:47:18 +0000 UTC FinishedAt: 2026-08-13 19:47:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 19:47:18 +0000 UTC FinishedAt: 2026-08-13 19:47:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 19:47:18 +0000 UTC FinishedAt: 2026-08-13 19:47:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 19:47:28 +0000 UTC FinishedAt: 2026-08-13 22:50:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjtjnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"09190c59cd101e0bf87a1c5a32ebae25c91e6d81","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"80df64d6-9537-4c9f-ad2c-8c83aebe9ce6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 19:47:28 +0000 UTC FinishedAt: 2026-08-13 22:50:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8663e8be-154c-43fe-81ca-1bd1aecd1480,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c4d7b91a-91d2-487c-9fec-075c23c6907f,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-workflowjtjnz/series-workflowjtjnz-build-action-183949537/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-workflowjtjnz/series-workflowjtjnz-build-action-168174158/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-workflowjtjnz/series-workflowjtjnz-convert-artifact-611007423/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,}