Name: series-workflowxgcdm Phase: Succeeded StartedAt: 2026-08-25 02:49:34 +0000 UTC FinishedAt: 2026-08-25 07:15:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[0] Phase: Succeeded StartedAt: 2026-08-25 02:49:34 +0000 UTC FinishedAt: 2026-08-25 03:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 02:49:34 +0000 UTC FinishedAt: 2026-08-25 03:34:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "b70b7b71561f2be1183b6046964d950c2b203bfc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "MPTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "b70b7b71561f2be1183b6046964d950c2b203bfc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "MPTCP" ], "series_id": "b07ffe60-8d36-4afa-aa48-37a554e791ab" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_send_active_reset", "tcp_disconnect", "tcp_abort" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQmIzM0OywKICAgICYjMzQ7dGNwX2Rpc2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7dGNwX2Fib3J0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYGdmcF90IHByaW9yaXR5YCBhcmd1bWVudCBmcm9tIGB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoKWAgYW5kIGhhcmRjb2RlcyBgR0ZQX0FUT01JQ2AgZm9yIHRoZSBTS0IgYWxsb2NhdGlvbiBhbmQgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGEgc2ltcGxlIHJlZmFjdG9yaW5nIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBidWZmZXIgbGVuZ3Rocywgb3IgYWx0ZXIgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGFsbG9jYXRpb24gZmxhZ3MgZm9yIHNlbmRpbmcgYWN0aXZlIFRDUCByZXNldHMgdG8gYWx3YXlzIHVzZSBHRlBfQVRPTUlDLCBhbHRlcmluZyBjb3JlIFRDUCBhbmQgTVBUQ1AgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYzJkMTJiZTk5NzM0NDY1YmNjNTY3YzhkNDQ2YzZlZDQ5MDlkZTc5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDM6MzM6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaFxuaW5kZXggNjcwYzIwODc2ZjI2NS4uNDM2NDk1ZmYyMjcxZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC90Y3AuaFxuQEAgLTc2NSw4ICYjNDM7NzY1LDcgQEAgaW50IHRjcF9mcmFnbWVudChzdHJ1Y3Qgc29jayAqc2ssIGVudW0gdGNwX3F1ZXVlIHRjcF9xdWV1ZSxcbiB2b2lkIHRjcF9zZW5kX3Byb2JlMChzdHJ1Y3Qgc29jayAqKTtcbiBpbnQgdGNwX3dyaXRlX3dha2V1cChzdHJ1Y3Qgc29jayAqLCBpbnQgbWliKTtcbiB2b2lkIHRjcF9zZW5kX2ZpbihzdHJ1Y3Qgc29jayAqc2spO1xuLXZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZ2ZwX3QgcHJpb3JpdHksXG4tXHRcdFx0ICAgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbik7XG4mIzQzO3ZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbik7XG4gaW50IHRjcF9zZW5kX3N5bmFjayhzdHJ1Y3Qgc29jayAqKTtcbiB2b2lkIHRjcF9wdXNoX29uZShzdHJ1Y3Qgc29jayAqLCB1bnNpZ25lZCBpbnQgbXNzX25vdyk7XG4gdm9pZCBfX3RjcF9zZW5kX2FjayhzdHJ1Y3Qgc29jayAqc2ssIHUzMiByY3Zfbnh0LCB1MTYgZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IGI0MjM3ZDBlOTk0ZDYuLjkzZDcyM2Q4YzEwOTggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmNcbkBAIC0zMTgyLDggJiM0MzszMTgyLDcgQEAgdm9pZCBfX3RjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcbiBcdFx0LyogVW5yZWFkIGRhdGEgd2FzIHRvc3NlZCwgemFwIHRoZSBjb25uZWN0aW9uLiAqL1xuIFx0XHRORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUEFCT1JUT05DTE9TRSk7XG4gXHRcdHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XG4tXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgc2stXHUwMDNlc2tfYWxsb2NhdGlvbixcbi1cdFx0XHRcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX0NMT1NFKTtcbiYjNDM7XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpO1xuIFx0fSBlbHNlIGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfTElOR0VSKSBcdTAwMjZcdTAwMjYgIXNrLVx1MDAzZXNrX2xpbmdlcnRpbWUpIHtcbiBcdFx0LyogQ2hlY2sgemVybyBsaW5nZXIgX2FmdGVyXyBjaGVja2luZyBmb3IgdW5yZWFkIGRhdGEuICovXG4gXHRcdHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlzY29ubmVjdChzaywgMCk7XG5AQCAtMzI1Nyw3ICYjNDM7MzI1Niw3IEBAIHZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG4gXHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuIFx0XHRpZiAoUkVBRF9PTkNFKHRwLVx1MDAzZWxpbmdlcjIpIFx1MDAzYyAwKSB7XG4gXHRcdFx0dGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcbi1cdFx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsXG4mIzQzO1x0XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcbiBcdFx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fTElOR0VSKTtcbiBcdFx0XHRfX05FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLFxuIFx0XHRcdFx0XHRMSU5VWF9NSUJfVENQQUJPUlRPTkxJTkdFUik7XG5AQCAtMzI3Niw3ICYjNDM7MzI3NSw3IEBAIHZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG4gXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0NMT1NFKSB7XG4gXHRcdGlmICh0Y3BfY2hlY2tfb29tKHNrLCAwKSkge1xuIFx0XHRcdHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XG4tXHRcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLFxuJiM0MztcdFx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssXG4gXHRcdFx0XHRcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX01FTU9SWSk7XG4gXHRcdFx0X19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcbiBcdFx0XHRcdFx0TElOVVhfTUlCX1RDUEFCT1JUT05NRU1PUlkpO1xuQEAgLTMzNzcsMTQgJiM0MzszMzc2LDE0IEBAIGludCB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbiBcdH0gZWxzZSBpZiAodW5saWtlbHkodHAtXHUwMDNlcmVwYWlyKSkge1xuIFx0XHRXUklURV9PTkNFKHNrLVx1MDAzZXNrX2VyciwgRUNPTk5BQk9SVEVEKTtcbiBcdH0gZWxzZSBpZiAodGNwX25lZWRfcmVzZXQob2xkX3N0YXRlKSkge1xuLVx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIGdmcF9hbnkoKSwgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpO1xuJiM0MztcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XG4gXHRcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfZXJyLCBFQ09OTlJFU0VUKTtcbiBcdH0gZWxzZSBpZiAodHAtXHUwMDNlc25kX254dCAhPSB0cC1cdTAwM2V3cml0ZV9zZXEgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICgxIFx1MDAzY1x1MDAzYyBvbGRfc3RhdGUpIFx1MDAyNiAoVENQRl9DTE9TSU5HIHwgVENQRl9MQVNUX0FDSykpIHtcbiBcdFx0LyogVGhlIGxhc3QgY2hlY2sgYWRqdXN0cyBmb3IgZGlzY3JlcGFuY3kgb2YgTGludXggd3J0LiBSRkNcbiBcdFx0ICogc3RhdGVzXG4gXHRcdCAqL1xuLVx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIGdmcF9hbnkoKSxcbiYjNDM7XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcbiBcdFx0XHRcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0RJU0NPTk5FQ1RfV0lUSF9EQVRBKTtcbiBcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19lcnIsIEVDT05OUkVTRVQpO1xuIFx0fSBlbHNlIGlmIChvbGRfc3RhdGUgPT0gVENQX1NZTl9TRU5UKVxuQEAgLTUxNDcsOCAmIzQzOzUxNDYsNyBAQCBpbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcbiBcdGJoX2xvY2tfc29jayhzayk7XG4gXG4gXHRpZiAodGNwX25lZWRfcmVzZXQoc2stXHUwMDNlc2tfc3RhdGUpKVxuLVx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsXG4tXHRcdFx0XHQgICAgICBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XG4mIzQzO1x0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTtcbiBcdHRjcF9kb25lX3dpdGhfZXJyb3Ioc2ssIGVycik7XG4gXG4gXHRiaF91bmxvY2tfc29jayhzayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5pbmRleCBmMjcwOWQ1ODVlZGJkLi4xOWE3OTllNWQ1Y2UzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcbkBAIC0zODQ5LDE1ICYjNDM7Mzg0OSwxNCBAQCB2b2lkIHRjcF9zZW5kX2ZpbihzdHJ1Y3Qgc29jayAqc2spXG4gICogd2FzIHVucmVhZCBkYXRhIGluIHRoZSByZWNlaXZlIHF1ZXVlLiAgVGhpcyBiZWhhdmlvciBpcyByZWNvbW1lbmRlZFxuICAqIGJ5IFJGQyAyNTI1LCBzZWN0aW9uIDIuMTcuICAtRGF2ZU1cbiAgKi9cbi12b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IHByaW9yaXR5LFxuLVx0XHRcdCAgIGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb24pXG4mIzQzO3ZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbilcbiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuIFx0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfT1VUUlNUUyk7XG4gXG4gXHQvKiBOT1RFOiBObyBUQ1Agb3B0aW9ucyBhdHRhY2hlZCBhbmQgd2UgbmV2ZXIgcmV0cmFuc21pdCB0aGlzLiAqL1xuLVx0c2tiID0gYWxsb2Nfc2tiKE1BWF9UQ1BfSEVBREVSLCBwcmlvcml0eSk7XG4mIzQzO1x0c2tiID0gYWxsb2Nfc2tiKE1BWF9UQ1BfSEVBREVSLCBHRlBfQVRPTUlDKTtcbiBcdGlmICghc2tiKSB7XG4gXHRcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRGQUlMRUQpO1xuIFx0XHRyZXR1cm47XG5AQCAtMzg2OSw3ICYjNDM7Mzg2OCw3IEBAIHZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZ2ZwX3QgcHJpb3JpdHksXG4gXHRcdFx0ICAgICBUQ1BIRFJfQUNLIHwgVENQSERSX1JTVCk7XG4gXHR0Y3BfbXN0YW1wX3JlZnJlc2godGNwX3NrKHNrKSk7XG4gXHQvKiBTZW5kIGl0IG9mZi4gKi9cbi1cdGlmICh0Y3BfdHJhbnNtaXRfc2tiKHNrLCBza2IsIDAsIHByaW9yaXR5KSlcbiYjNDM7XHRpZiAodGNwX3RyYW5zbWl0X3NrYihzaywgc2tiLCAwLCBHRlBfQVRPTUlDKSlcbiBcdFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVEZBSUxFRCk7XG4gXG4gXHQvKiBza2Igb2YgdHJhY2VfdGNwX3NlbmRfcmVzZXQoKSBrZWVwcyB0aGUgc2tiIHRoYXQgY2F1c2VkIFJTVCxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jXG5pbmRleCAxMDM4ZTdiYTljMmViLi5lNTZlYWU0YmMzNDFlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX3RpbWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF90aW1lci5jXG5AQCAtMTI2LDcgJiM0MzsxMjYsNyBAQCBzdGF0aWMgaW50IHRjcF9vdXRfb2ZfcmVzb3VyY2VzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBkb19yZXNldClcbiBcdFx0ICAgICghdHAtXHUwMDNlc25kX3duZCBcdTAwMjZcdTAwMjYgIXRwLVx1MDAzZXBhY2tldHNfb3V0KSlcbiBcdFx0XHRkb19yZXNldCA9IHRydWU7XG4gXHRcdGlmIChkb19yZXNldClcbi1cdFx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsXG4mIzQzO1x0XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcbiBcdFx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fTUVNT1JZKTtcbiBcdFx0dGNwX2RvbmUoc2spO1xuIFx0XHRfX05FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRPTk1FTU9SWSk7XG5AQCAtODA5LDcgJiM0Mzs4MDksNyBAQCBzdGF0aWMgdm9pZCB0Y3Bfa2VlcGFsaXZlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0XHRcdFx0Z290byBvdXQ7XG4gXHRcdFx0fVxuIFx0XHR9XG4tXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQywgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpO1xuJiM0MztcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XG4gXHRcdGdvdG8gZGVhdGg7XG4gXHR9XG4gXG5AQCAtODM2LDcgJiM0Mzs4MzYsNyBAQCBzdGF0aWMgdm9pZCB0Y3Bfa2VlcGFsaXZlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0XHQgICAgaWNzay1cdTAwM2VpY3NrX3Byb2Jlc19vdXQgXHUwMDNlIDApIHx8XG4gXHRcdCAgICAodXNlcl90aW1lb3V0ID09IDAgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBpY3NrLVx1MDAzZWljc2tfcHJvYmVzX291dCBcdTAwM2U9IGtlZXBhbGl2ZV9wcm9iZXModHApKSkge1xuLVx0XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQyxcbiYjNDM7XHRcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLFxuIFx0XHRcdFx0XHQgICAgICBTS19SU1RfUkVBU09OX1RDUF9LRUVQQUxJVkVfVElNRU9VVCk7XG4gXHRcdFx0dGNwX3dyaXRlX2Vycihzayk7XG4gXHRcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggYjQ3NGQwMzYyMGE3NS4uZTFmMDhmNzFjZGIxNiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTMxMDksOCAmIzQzOzMxMDksNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF9kb19mYXN0Y2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHQgKi9cbiBcdFx0aW5ldF9jc2soc3NrKS1cdTAwM2VpY3NrX2Fjay5yY3ZfbXNzID0gVENQX01JTl9NU1M7XG4gXG4tXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzc2ssIHNzay1cdTAwM2Vza19hbGxvY2F0aW9uLFxuLVx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpO1xuJiM0MztcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNzaywgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpO1xuIHVubG9jazpcbiBcdFx0cmVsZWFzZV9zb2NrKHNzayk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggMDZhMTA3ZDRlODM5Mi4uODdjY2I4NGU5OTI3YyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTY5MCw3ICYjNDM7NjkwLDcgQEAgbXB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXRfcmVhc29uKHN0cnVjdCBzb2NrICpzaylcbiBcdGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb247XG4gXG4gXHRyZWFzb24gPSBza19yc3RfY29udmVydF9tcHRjcF9yZWFzb24oc3ViZmxvdy1cdTAwM2VyZXNldF9yZWFzb24pO1xuLVx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLCByZWFzb24pO1xuJiM0MztcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgcmVhc29uKTtcbiB9XG4gXG4gLyogTWFkZSB0aGUgZndkIG1lbSBjYXJyaWVkIGJ5IHRoZSBnaXZlbiBza2IgYXZhaWxhYmxlIHRvIHRoZSBtc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQmIzM0OywKICAgICYjMzQ7dGNwX2Rpc2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7dGNwX2Fib3J0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhbGxvY2F0aW9uIGZsYWdzIGZvciBzZW5kaW5nIGFjdGl2ZSBUQ1AgcmVzZXRzIHRvIGFsd2F5cyB1c2UgR0ZQX0FUT01JQywgYWx0ZXJpbmcgY29yZSBUQ1AgYW5kIE1QVENQIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWMyZDEyYmU5OTczNDQ2NWJjYzU2N2M4ZDQ0NmM2ZWQ0OTA5ZGU3OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDAzOjMzOjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCA2NzBjMjA4NzZmMjY1Li40MzY0OTVmZjIyNzFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtNzY1LDggJiM0Mzs3NjUsNyBAQCBpbnQgdGNwX2ZyYWdtZW50KHN0cnVjdCBzb2NrICpzaywgZW51bSB0Y3BfcXVldWUgdGNwX3F1ZXVlLAogdm9pZCB0Y3Bfc2VuZF9wcm9iZTAoc3RydWN0IHNvY2sgKik7CiBpbnQgdGNwX3dyaXRlX3dha2V1cChzdHJ1Y3Qgc29jayAqLCBpbnQgbWliKTsKIHZvaWQgdGNwX3NlbmRfZmluKHN0cnVjdCBzb2NrICpzayk7Ci12b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IHByaW9yaXR5LAotCQkJICAgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbik7CiYjNDM7dm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHNrX3JzdF9yZWFzb24gcmVhc29uKTsKIGludCB0Y3Bfc2VuZF9zeW5hY2soc3RydWN0IHNvY2sgKik7CiB2b2lkIHRjcF9wdXNoX29uZShzdHJ1Y3Qgc29jayAqLCB1bnNpZ25lZCBpbnQgbXNzX25vdyk7CiB2b2lkIF9fdGNwX3NlbmRfYWNrKHN0cnVjdCBzb2NrICpzaywgdTMyIHJjdl9ueHQsIHUxNiBmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IGI0MjM3ZDBlOTk0ZDYuLjkzZDcyM2Q4YzEwOTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jCkBAIC0zMTgyLDggJiM0MzszMTgyLDcgQEAgdm9pZCBfX3RjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dCkKIAkJLyogVW5yZWFkIGRhdGEgd2FzIHRvc3NlZCwgemFwIHRoZSBjb25uZWN0aW9uLiAqLwogCQlORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUEFCT1JUT05DTE9TRSk7CiAJCXRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7Ci0JCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgc2stJmd0O3NrX2FsbG9jYXRpb24sCi0JCQkJICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpOwomIzQzOwkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9DTE9TRSk7CiAJfSBlbHNlIGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfTElOR0VSKSAmYW1wOyZhbXA7ICFzay0mZ3Q7c2tfbGluZ2VydGltZSkgewogCQkvKiBDaGVjayB6ZXJvIGxpbmdlciBfYWZ0ZXJfIGNoZWNraW5nIGZvciB1bnJlYWQgZGF0YS4gKi8KIAkJc2stJmd0O3NrX3Byb3QtJmd0O2Rpc2Nvbm5lY3Qoc2ssIDApOwpAQCAtMzI1Nyw3ICYjNDM7MzI1Niw3IEBAIHZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCiAJCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCQlpZiAoUkVBRF9PTkNFKHRwLSZndDtsaW5nZXIyKSAmbHQ7IDApIHsKIAkJCXRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7Ci0JCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsCiYjNDM7CQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLAogCQkJCQkgICAgICBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9MSU5HRVIpOwogCQkJX19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwKIAkJCQkJTElOVVhfTUlCX1RDUEFCT1JUT05MSU5HRVIpOwpAQCAtMzI3Niw3ICYjNDM7MzI3NSw3IEBAIHZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCiAJaWYgKHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfQ0xPU0UpIHsKIAkJaWYgKHRjcF9jaGVja19vb20oc2ssIDApKSB7CiAJCQl0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpOwotCQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLAomIzQzOwkJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywKIAkJCQkJICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fTUVNT1JZKTsKIAkJCV9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksCiAJCQkJCUxJTlVYX01JQl9UQ1BBQk9SVE9OTUVNT1JZKTsKQEAgLTMzNzcsMTQgJiM0MzszMzc2LDE0IEBAIGludCB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncykKIAl9IGVsc2UgaWYgKHVubGlrZWx5KHRwLSZndDtyZXBhaXIpKSB7CiAJCVdSSVRFX09OQ0Uoc2stJmd0O3NrX2VyciwgRUNPTk5BQk9SVEVEKTsKIAl9IGVsc2UgaWYgKHRjcF9uZWVkX3Jlc2V0KG9sZF9zdGF0ZSkpIHsKLQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBnZnBfYW55KCksIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTsKJiM0MzsJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpOwogCQlXUklURV9PTkNFKHNrLSZndDtza19lcnIsIEVDT05OUkVTRVQpOwogCX0gZWxzZSBpZiAodHAtJmd0O3NuZF9ueHQgIT0gdHAtJmd0O3dyaXRlX3NlcSAmYW1wOyZhbXA7CiAJCSAgICgxICZsdDsmbHQ7IG9sZF9zdGF0ZSkgJmFtcDsgKFRDUEZfQ0xPU0lORyB8IFRDUEZfTEFTVF9BQ0spKSB7CiAJCS8qIFRoZSBsYXN0IGNoZWNrIGFkanVzdHMgZm9yIGRpc2NyZXBhbmN5IG9mIExpbnV4IHdydC4gUkZDCiAJCSAqIHN0YXRlcwogCQkgKi8KLQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBnZnBfYW55KCksCiYjNDM7CQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssCiAJCQkJICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfRElTQ09OTkVDVF9XSVRIX0RBVEEpOwogCQlXUklURV9PTkNFKHNrLSZndDtza19lcnIsIEVDT05OUkVTRVQpOwogCX0gZWxzZSBpZiAob2xkX3N0YXRlID09IFRDUF9TWU5fU0VOVCkKQEAgLTUxNDcsOCAmIzQzOzUxNDYsNyBAQCBpbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycikKIAliaF9sb2NrX3NvY2soc2spOwogCiAJaWYgKHRjcF9uZWVkX3Jlc2V0KHNrLSZndDtza19zdGF0ZSkpCi0JCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQywKLQkJCQkgICAgICBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7CiYjNDM7CQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTsKIAl0Y3BfZG9uZV93aXRoX2Vycm9yKHNrLCBlcnIpOwogCiAJYmhfdW5sb2NrX3NvY2soc2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IGYyNzA5ZDU4NWVkYmQuLjE5YTc5OWU1ZDVjZTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTM4NDksMTUgJiM0MzszODQ5LDE0IEBAIHZvaWQgdGNwX3NlbmRfZmluKHN0cnVjdCBzb2NrICpzaykKICAqIHdhcyB1bnJlYWQgZGF0YSBpbiB0aGUgcmVjZWl2ZSBxdWV1ZS4gIFRoaXMgYmVoYXZpb3IgaXMgcmVjb21tZW5kZWQKICAqIGJ5IFJGQyAyNTI1LCBzZWN0aW9uIDIuMTcuICAtRGF2ZU0KICAqLwotdm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBnZnBfdCBwcmlvcml0eSwKLQkJCSAgIGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb24pCiYjNDM7dm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHNrX3JzdF9yZWFzb24gcmVhc29uKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9PVVRSU1RTKTsKIAogCS8qIE5PVEU6IE5vIFRDUCBvcHRpb25zIGF0dGFjaGVkIGFuZCB3ZSBuZXZlciByZXRyYW5zbWl0IHRoaXMuICovCi0Jc2tiID0gYWxsb2Nfc2tiKE1BWF9UQ1BfSEVBREVSLCBwcmlvcml0eSk7CiYjNDM7CXNrYiA9IGFsbG9jX3NrYihNQVhfVENQX0hFQURFUiwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpIHsKIAkJTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVEZBSUxFRCk7CiAJCXJldHVybjsKQEAgLTM4NjksNyAmIzQzOzM4NjgsNyBAQCB2b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IHByaW9yaXR5LAogCQkJICAgICBUQ1BIRFJfQUNLIHwgVENQSERSX1JTVCk7CiAJdGNwX21zdGFtcF9yZWZyZXNoKHRjcF9zayhzaykpOwogCS8qIFNlbmQgaXQgb2ZmLiAqLwotCWlmICh0Y3BfdHJhbnNtaXRfc2tiKHNrLCBza2IsIDAsIHByaW9yaXR5KSkKJiM0MzsJaWYgKHRjcF90cmFuc21pdF9za2Ioc2ssIHNrYiwgMCwgR0ZQX0FUT01JQykpCiAJCU5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRGQUlMRUQpOwogCiAJLyogc2tiIG9mIHRyYWNlX3RjcF9zZW5kX3Jlc2V0KCkga2VlcHMgdGhlIHNrYiB0aGF0IGNhdXNlZCBSU1QsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jCmluZGV4IDEwMzhlN2JhOWMyZWIuLmU1NmVhZTRiYzM0MWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF90aW1lci5jCkBAIC0xMjYsNyAmIzQzOzEyNiw3IEBAIHN0YXRpYyBpbnQgdGNwX291dF9vZl9yZXNvdXJjZXMoc3RydWN0IHNvY2sgKnNrLCBib29sIGRvX3Jlc2V0KQogCQkgICAgKCF0cC0mZ3Q7c25kX3duZCAmYW1wOyZhbXA7ICF0cC0mZ3Q7cGFja2V0c19vdXQpKQogCQkJZG9fcmVzZXQgPSB0cnVlOwogCQlpZiAoZG9fcmVzZXQpCi0JCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsCiYjNDM7CQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLAogCQkJCQkgICAgICBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9NRU1PUlkpOwogCQl0Y3BfZG9uZShzayk7CiAJCV9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVE9OTUVNT1JZKTsKQEAgLTgwOSw3ICYjNDM7ODA5LDcgQEAgc3RhdGljIHZvaWQgdGNwX2tlZXBhbGl2ZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQotCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTsKJiM0MzsJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpOwogCQlnb3RvIGRlYXRoOwogCX0KIApAQCAtODM2LDcgJiM0Mzs4MzYsNyBAQCBzdGF0aWMgdm9pZCB0Y3Bfa2VlcGFsaXZlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCQkgICAgaWNzay0mZ3Q7aWNza19wcm9iZXNfb3V0ICZndDsgMCkgfHwKIAkJICAgICh1c2VyX3RpbWVvdXQgPT0gMCAmYW1wOyZhbXA7CiAJCSAgICBpY3NrLSZndDtpY3NrX3Byb2Jlc19vdXQgJmd0Oz0ga2VlcGFsaXZlX3Byb2Jlcyh0cCkpKSB7Ci0JCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsCiYjNDM7CQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLAogCQkJCQkgICAgICBTS19SU1RfUkVBU09OX1RDUF9LRUVQQUxJVkVfVElNRU9VVCk7CiAJCQl0Y3Bfd3JpdGVfZXJyKHNrKTsKIAkJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwppbmRleCBiNDc0ZDAzNjIwYTc1Li5lMWYwOGY3MWNkYjE2IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwpAQCAtMzEwOSw4ICYjNDM7MzEwOSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2RvX2Zhc3RjbG9zZShzdHJ1Y3Qgc29jayAqc2spCiAJCSAqLwogCQlpbmV0X2Nzayhzc2spLSZndDtpY3NrX2Fjay5yY3ZfbXNzID0gVENQX01JTl9NU1M7CiAKLQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNzaywgc3NrLSZndDtza19hbGxvY2F0aW9uLAotCQkJCSAgICAgIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX0NMT1NFKTsKJiM0MzsJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzc2ssIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX0NMT1NFKTsKIHVubG9jazoKIAkJcmVsZWFzZV9zb2NrKHNzayk7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaAppbmRleCAwNmExMDdkNGU4MzkyLi44N2NjYjg0ZTk5MjdjIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaApAQCAtNjkwLDcgJiM0Mzs2OTAsNyBAQCBtcHRjcF9zZW5kX2FjdGl2ZV9yZXNldF9yZWFzb24oc3RydWN0IHNvY2sgKnNrKQogCWVudW0gc2tfcnN0X3JlYXNvbiByZWFzb247CiAKIAlyZWFzb24gPSBza19yc3RfY29udmVydF9tcHRjcF9yZWFzb24oc3ViZmxvdy0mZ3Q7cmVzZXRfcmVhc29uKTsKLQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsIHJlYXNvbik7CiYjNDM7CXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgcmVhc29uKTsKIH0KIAogLyogTWFkZSB0aGUgZndkIG1lbSBjYXJyaWVkIGJ5IHRoZSBnaXZlbiBza2IgYXZhaWxhYmxlIHRvIHRoZSBtc2ssCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MzcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGEgVENQL01QVENQIFBhdGNoOiBXb3J0aCBGdXp6aW5nPyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIG1vZGlmeWluZyBgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0YCBpbiBgbmV0L2lwdjQvdGNwX291dHB1dC5jYC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIHJlbW92aW5nIHRoZSBgcHJpb3JpdHlgIGFyZ3VtZW50ICh3aGljaCB3YXMgYSBgZ2ZwX3RgIHZhbHVlKSBhbmQgaGFyZGNvZGluZyBgR0ZQX0FUT01JQ2AgaW5zaWRlIHRoZSBmdW5jdGlvbi4gIEl0IHVwZGF0ZXMgYWxsIHRoZSBjYWxsZXJzIGluIGBuZXQvaXB2NC90Y3AuY2AsIGBuZXQvaXB2NC90Y3BfdGltZXIuY2AsIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AsIGFuZCBgbmV0L21wdGNwL3Byb3RvY29sLmhgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UuIFByZXZpb3VzbHksIGB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXRgIHdhcyBjYWxsZWQgd2l0aCBhIHZhcmlldHkgb2YgYGdmcF90YCB2YWx1ZXMsIGluY2x1ZGluZyBgc2stJmd0O3NrX2FsbG9jYXRpb25gICh3aGljaCBjb3VsZCBiZSBgR0ZQX0tFUk5FTGAgb3IgYEdGUF9VU0VSYCksIGFuZCBgR0ZQX0FUT01JQ2AgZXhwbGljaXRseS4gIE5vdywgaXQgKmFsd2F5cyogdXNlcyBgR0ZQX0FUT01JQ2AuIFRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgaXQgYWx0ZXJzIHRoZSBhbGxvY2F0aW9uIGZsYWdzIHVzZWQgYnkgYGFsbG9jX3NrYmAgYW5kIGB0Y3BfdHJhbnNtaXRfc2tiYC4KClRoZSBrZXkgY29uY2VybiBpcyB0aGF0IGJ5IGhhcmRjb2RpbmcgYEdGUF9BVE9NSUNgLCB3ZSYjMzk7cmUgcG90ZW50aWFsbHkgaW50cm9kdWNpbmcgbW9yZSBhbGxvY2F0aW9uIGZhaWx1cmVzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gIE9yLCBwZXJoYXBzLCBpdCYjMzk7cyBhIHZhbGlkIHNpbXBsaWZpY2F0aW9uIHRoYXQganVzdCBoYXJkY29kZXMgYSB2YWx1ZSBhbHJlYWR5IGZyZXF1ZW50bHkgdXNlZCBpbiB0aGVzZSBjb250ZXh0cy4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIHRoaXMgd29ydGggZnV6emluZz8gIEl0ICpkb2VzKiBtb2RpZnkgY29yZSBUQ1AgbG9naWMsIHNwZWNpZmljYWxseSBob3cgYWN0aXZlIHJlc2V0cyBhcmUgc2VudC4gIEhvd2V2ZXIsIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgbG9naWMuIEl0IHNpbXBseSBjaGFuZ2VzIGFuIGFsbG9jYXRpb24gZmxhZywgYSBzZWVtaW5nbHkgc2ltcGxlIGNoYW5nZS4gIEJ1dCwgd2FpdCwgYWNjb3JkaW5nIHRvIHRoZSBydWxlLCAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi4gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93JiMzNDsuIENoYW5naW5nIGBnZnBfdGAgZnJvbSBgc2stJmd0O3NrX2FsbG9jYXRpb25gIHRvIGBHRlBfQVRPTUlDYCBtaWdodCwgaW4gc29tZSB2ZXJ5IG5hcnJvdyBlZGdlIGNhc2VzLCBhZmZlY3QgdGhlIGV4ZWN1dGlvbiBmbG93IGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLiBHaXZlbiB0aGUgc2ltcGxpY2l0eSBvZiB0aGUgY2hhbmdlIGJ1dCB0aGUgY29yZSBsb2NhdGlvbiwgSSBuZWVkIHRvIGxvb2sgY2xvc2VyLgoKT2theSwgbGV0IG1lIHJlLWV4YW1pbmUgdGhlIHBhdGNoLiAgSXQmIzM5O3MganVzdCB0aGUgcmVtb3ZhbCBvZiB0aGUgYHByaW9yaXR5YCBwYXJhbWV0ZXIgYW5kIHRoZSBoYXJkY29kaW5nLiBgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0YCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdXNlZCBpbiB2YXJpb3VzIHBhcnRzLgoKQ29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlcywgaXMgaXQgd29ydGggZnV6emluZz8gIFllcywgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBjb3JlIFRDUCBhbmQgTVBUQ1AuIEZ1enppbmcgbWlnaHQgbm90ICpzcGVjaWZpY2FsbHkqIHRhcmdldCB0aGUgYEdGUF9BVE9NSUNgIGNoYW5nZSwgYnV0IGl04oCZcyBhIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGFuZCBpdOKAmXMgYmV0dGVyIHRvIGJlIHNhZmUuIEnigJltIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4KClRoZXJlZm9yZSwgSSYjMzk7bGwgYmUgZm9jdXNpbmcgb24gdGhlIHN5bWJvbHMgYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAsIGB0Y3BfZGlzY29ubmVjdGAsIGFuZCB0byBhIGxlc3NlciBkZWdyZWUgYG1wdGNwX2RvX2Zhc3RjbG9zZWAuICBJIG5lZWQgdG8gY2hlY2sgdGhlaXIgdmlzaWJpbGl0eS4gYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAgaXMgZ2xvYmFsbHkgdmlzaWJsZS4gIGBtcHRjcF9kb19mYXN0Y2xvc2VgIGlzIHN0YXRpYywgc28gSSBjYW4gaWdub3JlIGl0IGZvciBmdXp6aW5nIHB1cnBvc2VzLiAgYHRjcF9kaXNjb25uZWN0YCBhbmQgYHRjcF9hYm9ydGAgYXJlIGdsb2JhbGx5IHZpc2libGUuCgpGb3IgY29uZmlndXJhdGlvbnMsIEkmIzM5O2xsIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgaW52b2x2ZXMgYm90aCBgTVBUQ1BgIGFuZCBgSU5FVGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9NzY3PXZvaWQgdGNwX3NlbmRfZmluKHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC90Y3AuaDo3Njg6dm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHNrX3JzdF9yZWFzb24gcmVhc29uKTtcbmluY2x1ZGUvbmV0L3RjcC5oLTc2OS1pbnQgdGNwX3NlbmRfc3luYWNrKHN0cnVjdCBzb2NrICopO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0zODAxPXZvaWQgdGNwX3NlbmRfZmluKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzg1MS0gKi9cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozODUyOnZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbilcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zODUzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTg5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIE5ldHdvcmsgRGlzY29ubmVjdGlvbiBWaXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHZpc2liaWxpdHkgb2YgYSBuZXR3b3JrIGRpc2Nvbm5lY3Rpb24uIFRoaXMgc2l0dWF0aW9uIGlzIHNvbWV0aGluZyBJIGtub3cgaXMgZ29pbmcgdG8gYmUgZ2xvYmFsbHkgdmlzaWJsZS4gU28sIHRoZSBxdWVzdGlvbiB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgaG93IGNhbiBJIGNoZWNrIGl0PyBMZXQgbWUgY2hlY2sgdGhlIHNwZWNpZmljcyBieSBsb29raW5nIGF0IGB0Y3BfZGlzY29ubmVjdGAuIEkgY2FuIGxvb2sgdGhlcmUgdG8gZmluZCB0aGUgaW5mb3JtYXRpb24gYW5kIGtub3cgaG93IHRvIGZpbmQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHRjcF9kaXNjb25uZWN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTU3Nz1zdHJ1Y3Qgc2tfYnVmZiAqdGNwX21ha2Vfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTU4MS1cdFx0XHRcdHN0cnVjdCBza19idWZmICpzeW5fc2tiKTtcbmluY2x1ZGUvbmV0L3RjcC5oOjU4MjppbnQgdGNwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpO1xuaW5jbHVkZS9uZXQvdGNwLmgtNTgzLVxuLS1cbm5ldC9pcHY0L3RjcC5jPTMzNDU9dm9pZCB0Y3Bfd3JpdGVfcXVldWVfcHVyZ2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTMzNjAtXG5uZXQvaXB2NC90Y3AuYzozMzYxOmludCB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbm5ldC9pcHY0L3RjcC5jLTMzNjIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MjYKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgdGNwX2Fib3J0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYHRjcF9hYm9ydGAuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIGhhbmRsaW5nIGNvbm5lY3Rpb24gdGVybWluYXRpb24sIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBiZWhhdmlvciBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBBIHF1aWNrIGludmVzdGlnYXRpb24gb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBzZWVtcyB3YXJyYW50ZWQuIFRpbWUgdG8gZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB0Y3BfYWJvcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9MTcwND12b2lkIHRjcF9kb25lKHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC90Y3AuaDoxNzA1OmludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKTtcbmluY2x1ZGUvbmV0L3RjcC5oLTE3MDYtXG4tLVxubmV0L2lwdjQvdGNwLmM9NTA3OT12b2lkIHRjcF9kb25lKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3AuYy01MTA0LVxubmV0L2lwdjQvdGNwLmM6NTEwNTppbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcbm5ldC9pcHY0L3RjcC5jLTUxMDYte1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjA5Nj1zdGF0aWMgdm9pZCB0Y3BfcmVsZWFzZV9jYl9vdmVycmlkZShzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjExMS1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MjExMjpzdGF0aWMgaW50IHRjcF9hYm9ydF9vdmVycmlkZShzdHJ1Y3Qgc29jayAqc3NrLCBpbnQgZXJyKVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTEzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzIzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBtcHRjcF9kb19mYXN0Y2xvc2VgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gJiMzNDtMZXQmIzM5O3MgY2hlY2sgYG1wdGNwX2RvX2Zhc3RjbG9zZWAuJiMzNDsgVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbnRhbCBtYXAgb2YgaG93IE1QVENQJiMzOTtzIGZhc3QgY2xvc2UgbWVjaGFuaXNtIHdvcmtzLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMsIGJvdHRsZW5lY2tzLCBvciBhcmVhcyB0aGF0IG1pZ2h0IGJlIG1pc2JlaGF2aW5nIGJhc2VkIG9uIHNvbWUgcmVjZW50IG9ic2VydmF0aW9ucyBvciBidWcgcmVwb3J0cy4gSeKAmWxsIGJlIHRoaW5raW5nIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgTVBUQ1Agc3RhY2ssIGVzcGVjaWFsbHkgY29ubmVjdGlvbiB0ZWFyZG93biBhbmQgc3RhdGUgdHJhbnNpdGlvbnMuIEnigJlsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBzdWJ0bGV0aWVzIG9mIHRoZSBoYW5kc2hha2UgYW5kIGRhdGEgdHJhbnNmZXIgcGhhc2VzIGluIHJlbGF0aW9uIHRvIHRoZSBmYXN0IGNsb3NlIG9wZXJhdGlvbi4gV2hlcmXigJlzIHRoYXQgZG9jdW1lbnRhdGlvbj8gQW5kIEkgbWlnaHQgYmUgbG9va2luZyBpbnRvIHNvbWUgdGVzdCBzY2VuYXJpb3MgdG8gcmVwbGljYXRlIGlzc3VlcyBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjb2RlIGNoYW5nZXMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW50ZXJlc3RpbmcuIFRpbWUgdG8gZGl2ZSBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBtcHRjcF9kb19mYXN0Y2xvc2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9MzA2NT1zdGF0aWMgdm9pZCBtcHRjcF9iYWNrbG9nX3B1cmdlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMDgyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzA4MzpzdGF0aWMgdm9pZCBtcHRjcF9kb19mYXN0Y2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzA4NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NzkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBhIFBvdGVudGlhbCBTdGF0aWMgQ29uZGl0aW9uKioKCk9rYXksIHRoaXMgZmVlbHMgc3RhdGljLCBkb2VzbiYjMzk7dCBpdD8gU29tZXRoaW5nJiMzOTtzIHN0dWNrLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHdoeS4gU2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbiBNUFRDUCBjb250ZXh0LCBhbmQgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgYW4gdW5jaGFuZ2luZyBzdGF0ZSwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgdG8gbWluZCBpcyB0aGUgcmVzZXQgaGFuZGxpbmcgZHVyaW5nIHRoZSBhY3RpdmUgcGF0aCBzZWxlY3Rpb24uIExldCYjMzk7cyBzZWUgaWYgdGhlIHJlYXNvbiBmb3IgdGhlIGxhY2sgb2YgY2hhbmdlLCB0aGUgYmxvY2thZ2UsIGNhbiBiZSBmb3VuZCB3aXRoaW4gdGhlIGBtcHRjcF9zZW5kX2FjdGl2ZV9yZXNldF9yZWFzb25gIGZ1bmN0aW9uLCBhcyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBwYXRoIGNvdWxkIHN0YWxsLiBUaGF0IHNlZW1zIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3NlbmRfYWN0aXZlX3Jlc2V0X3JlYXNvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0yODA1PXN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2Zhc3RjbG9zZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4MjAtXHRcdGlmICh0Y3Bfc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0NMT1NFKSB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyODIxOlx0XHRcdG1wdGNwX3NlbmRfYWN0aXZlX3Jlc2V0X3JlYXNvbih0Y3Bfc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMjgyMi1cdFx0XHR0Y3Bfc2V0X3N0YXRlKHRjcF9zaywgVENQX0NMT1NFKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD02ODY9c3RhdGljIGlubGluZSB2b2lkXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo2ODc6bXB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXRfcmVhc29uKHN0cnVjdCBzb2NrICpzaylcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTY4OC17XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz00Mjc9dm9pZCBtcHRjcF9zdWJmbG93X3Jlc2V0KHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy00NDAtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjQ0MTpcdG1wdGNwX3NlbmRfYWN0aXZlX3Jlc2V0X3JlYXNvbihzc2spO1xubmV0L21wdGNwL3N1YmZsb3cuYy00NDItXHR0Y3BfZG9uZShzc2spO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTM1Nj1zdGF0aWMgYm9vbCBzdWJmbG93X2NoZWNrX2RhdGFfYXZhaWwoc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE0MzctXHRcdFx0XHRza19lYXRfc2tiKHNzaywgc2tiKTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTQzODpcdFx0XHRtcHRjcF9zZW5kX2FjdGl2ZV9yZXNldF9yZWFzb24oc3NrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTQzOS1cdFx0XHRXUklURV9PTkNFKHN1YmZsb3ctXHUwMDNlZGF0YV9hdmFpbCwgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzIyCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN0YXRpYyBJbmxpbmUgRnVuY3Rpb25zIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyB1c2luZyBhIGBzdGF0aWMgaW5saW5lYCBjb25zdHJ1Y3QuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgY2VydGFpbiBmdW5jdGlvbiBzeW1ib2xzIGFzIGNyaXRpY2FsLCBwYXJ0aWN1bGFybHkgYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAsIGB0Y3BfZGlzY29ubmVjdGAsIGFuZCBgdGNwX2Fib3J0YC4gVGhvc2UgYXJlIHRoZSBvbmVzIEkgbmVlZCB0byBmb2N1cyBvbiBmb3IgdGhpcyBhbmFseXNpcywga25vd2luZyB0aGV5IG1pZ2h0IGJlIGhlYXZpbHkgb3B0aW1pemVkLgoKTm93LCBjb25zaWRlcmluZyB0aGUgZW52aXJvbm1lbnQsIEkmIzM5O20gcHJldHR5IHN1cmUgYElORVRgIGlzIGluIHBsYXkgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBUQ1AuIEJ1dCBtb3JlIGltcG9ydGFudGx5LCB0aGUgcHJlc2VuY2Ugb2YgdGhlc2UgVENQLXJlbGF0ZWQgZnVuY3Rpb25zIGxpa2VseSBpbmRpY2F0ZXMgdGhhdCBgTVBUQ1BgIGlzIGFsc28gY29uZmlndXJlZC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYE1QVENQYCBpcyBpbmRlZWQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gbmFtZSB0byBjb25maXJtIHRoaXMgaW50dWl0aW9uIGFuZCBlbnN1cmUgSSYjMzk7bSB0YXJnZXRpbmcgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnLTEtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxubmV0L21wdGNwL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7TVBUQ1A6IE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXG4tLVxubmV0L21wdGNwL0tjb25maWctMTktXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxubmV0L21wdGNwL0tjb25maWctMjEtXHRib29sIFwmIzM0O01QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cdHRyaXN0YXRlIFwmIzM0O1RoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3OTMKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYE1QVENQYCBpcyB0aGUgY29ycmVjdCBwcm90b2NvbCBoZXJlLiBHb29kLCBnb29kLiBOb3csIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGZsb2F0aW5nIGFyb3VuZC4gSSBuZWVkIHRvIGJlIHRob3JvdWdoOyBJIGhhdmUgdG8gYWNjb3VudCBmb3IgYW55IHBvc3NpYmlsaXRpZXMuIEhtbSwgd2FpdCBhIG1pbnV0ZSwgYFRDUGAgaXRzZWxmIGlzbiYjMzk7dCBhICpjb25maWcqLCBpdCYjMzk7cyB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgcHJvdG9jb2wuIEl0JiMzOTtzIG1vcmUgYWJvdXQgYElORVRgIGxheWVyLiBHb3QgaXQuIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1Rcbi0tXG5uZXQvS2NvbmZpZy0xMTMtXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcbm5ldC9LY29uZmlnLTExNS1cdGJvb2wgXCYjMzQ7VENQL0lQIG5ldHdvcmtpbmdcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTMzMD1jb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMzgtXG5uZXQvaXB2NC9LY29uZmlnOjMzOTpjb25maWcgSU5FVF9BSFxubmV0L2lwdjQvS2NvbmZpZy0zNDAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogQUggdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cbm5ldC9pcHY0L0tjb25maWc6MzU0OmNvbmZpZyBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNjgtXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXG5uZXQvaXB2NC9LY29uZmlnLTM4My1cdGJvb2wgXCYjMzQ7SVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zOTMtXG5uZXQvaXB2NC9LY29uZmlnOjM5NDpjb25maWcgSU5FVF9JUENPTVBcbm5ldC9pcHY0L0tjb25maWctMzk1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IElQQ29tcCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDAzLVxubmV0L2lwdjQvS2NvbmZpZzo0MDQ6Y29uZmlnIElORVRfVEFCTEVfUEVSVFVSQl9PUkRFUlxubmV0L2lwdjQvS2NvbmZpZy00MDUtXHRpbnQgXCYjMzQ7SU5FVDogU291cmNlIHBvcnQgcGVydHVyYmF0aW9uIHRhYmxlIHNpemUgKGFzIHBvd2VyIG9mIDIpXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9pcHY0L0tjb25maWctNDEzLVxubmV0L2lwdjQvS2NvbmZpZzo0MTQ6Y29uZmlnIElORVRfWEZSTV9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWctNDE1LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQxOC1cbm5ldC9pcHY0L0tjb25maWc6NDE5OmNvbmZpZyBJTkVUX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy00MjAtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY0L0tjb25maWctNDIyLVxubmV0L2lwdjQvS2NvbmZpZzo0MjM6Y29uZmlnIElORVRfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00MjQtXHR0cmlzdGF0ZSBcJiMzNDtJTkVUOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQzNC1cbm5ldC9pcHY0L0tjb25maWc6NDM1OmNvbmZpZyBJTkVUX1RDUF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MzgtXG5uZXQvaXB2NC9LY29uZmlnOjQzOTpjb25maWcgSU5FVF9VRFBfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00NDAtXHR0cmlzdGF0ZSBcJiMzNDtVRFA6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDQ2LVxubmV0L2lwdjQvS2NvbmZpZzo0NDc6Y29uZmlnIElORVRfUkFXX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDQ4LVx0dHJpc3RhdGUgXCYjMzQ7UkFXOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQ1NC1cbm5ldC9pcHY0L0tjb25maWc6NDU1OmNvbmZpZyBJTkVUX0RJQUdfREVTVFJPWVxubmV0L2lwdjQvS2NvbmZpZy00NTYtXHRib29sIFwmIzM0O0lORVQ6IGFsbG93IHByaXZpbGVnZWQgcHJvY2VzcyB0byBhZG1pbmlzdHJhdGl2ZWx5IGNsb3NlIHNvY2tldHNcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTM5PWNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXG4tLVxubmV0L2lwdjYvS2NvbmZpZy00Ni1cbm5ldC9pcHY2L0tjb25maWc6NDc6Y29uZmlnIElORVQ2X0FIXG5uZXQvaXB2Ni9LY29uZmlnLTQ4LVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogQUggdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTYxLVxubmV0L2lwdjYvS2NvbmZpZzo2Mjpjb25maWcgSU5FVDZfRVNQXG5uZXQvaXB2Ni9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy03Ni1cbm5ldC9pcHY2L0tjb25maWc6Nzc6Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXG5uZXQvaXB2Ni9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTg5LVxubmV0L2lwdjYvS2NvbmZpZzo5MDpjb25maWcgSU5FVDZfRVNQSU5UQ1Bcbm5ldC9pcHY2L0tjb25maWctOTEtXHRib29sIFwmIzM0O0lQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMDEtXG5uZXQvaXB2Ni9LY29uZmlnOjEwMjpjb25maWcgSU5FVDZfSVBDT01QXG5uZXQvaXB2Ni9LY29uZmlnLTEwMy1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQQ29tcCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTIwPWNvbmZpZyBJUFY2X0lMQVxuLS1cbm5ldC9pcHY2L0tjb25maWctMTQwLVxubmV0L2lwdjYvS2NvbmZpZzoxNDE6Y29uZmlnIElORVQ2X1hGUk1fVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTE0Mi1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNDUtXG5uZXQvaXB2Ni9LY29uZmlnOjE0Njpjb25maWcgSU5FVDZfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlXG4tLVxubmV0L21wdGNwL0tjb25maWc9MTQ9aWYgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTE1LVxubmV0L21wdGNwL0tjb25maWc6MTY6Y29uZmlnIElORVRfTVBUQ1BfRElBR1xubmV0L21wdGNwL0tjb25maWctMTctXHRkZXBlbmRzIG9uIElORVRfRElBR1xuLS1cbm5ldC9wc3AvS2NvbmZpZy00LSNcbm5ldC9wc3AvS2NvbmZpZzo1OmNvbmZpZyBJTkVUX1BTUFxubmV0L3BzcC9LY29uZmlnLTYtXHRib29sIFwmIzM0O1BTUCBTZWN1cml0eSBQcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3NjdHAvS2NvbmZpZz02OD1lbmRjaG9pY2Vcbm5ldC9zY3RwL0tjb25maWctNjktXG5uZXQvc2N0cC9LY29uZmlnOjcwOmNvbmZpZyBJTkVUX1NDVFBfRElBR1xubmV0L3NjdHAvS2NvbmZpZy03MS1cdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDY4CgkJCQkJCQlvdXRwdXQ6IDg4CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBUQ1AgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgVENQIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSB0aGUgYElORVRgIG1vZHVsZS4gTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGtleSB0YWtlYXdheXMuIFRoaXMgY2hhbmdlIGlzIGRlZW1lZCBgV29ydGhGdXp6aW5nYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYSBwb3RlbnRpYWwgYXJlYSBmb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBzbyBpdCB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBUaGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgaG93IGFjdGl2ZSBUQ1AgcmVzZXRzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHksIGhvdyBhbGxvY2F0aW9uIGZsYWdzIGFyZSB1c2VkIHdoZW4gdGhleSYjMzk7cmUgc2VudC4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFRDUCBhbmQgTVBUQ1AgbG9naWMgdG8gKmFsd2F5cyogdXNlIGBHRlBfQVRPTUlDYCBmb3IgdGhlc2UgYWxsb2NhdGlvbnMuCgpNeSByZWFzb25pbmcgc3VnZ2VzdHMgdGhhdCB0aGlzIGNoYW5nZSBpbiBhbGxvY2F0aW9uIGZsYWdzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBzdWJ0bGUgaXNzdWVzLCBlc3BlY2lhbGx5IGluIGhpZ2gtbG9hZCBvciByZXNvdXJjZS1jb25zdHJhaW5lZCBlbnZpcm9ubWVudHMuIFdlIHJlYWxseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBzd2l0Y2hpbmcgdG8gYEdGUF9BVE9NSUNgIGZvciB0aGVzZSBjcml0aWNhbCBuZXR3b3JrIG9wZXJhdGlvbnMuCgpUaGUgZnVuY3Rpb25zIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBhcmUgYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAsIGB0Y3BfZGlzY29ubmVjdGAsIGFuZCBgdGNwX2Fib3J0YC4gSSYjMzk7bGwgd2FudCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBzZWUgaG93IHRoaXMgbmV3IGBHRlBfQVRPTUlDYCB1c2FnZSBpbXBhY3RzIHRoZW0uCgpUaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIHRvIHJlcHJvZHVjZSB0aGUgdGFyZ2V0IGFyZSBgSU5FVGAgYW5kIGBNUFRDUGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3NlbmRfYWN0aXZlX3Jlc2V0JiMzNDssCiAgICAmIzM0O3RjcF9kaXNjb25uZWN0JiMzNDssCiAgICAmIzM0O3RjcF9hYm9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWxsb2NhdGlvbiBmbGFncyBmb3Igc2VuZGluZyBhY3RpdmUgVENQIHJlc2V0cyB0byBhbHdheXMgdXNlIEdGUF9BVE9NSUMsIGFsdGVyaW5nIGNvcmUgVENQIGFuZCBNUFRDUCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9zZW5kX2FjdGl2ZV9yZXNldCYjMzQ7LAogICAgJiMzNDt0Y3BfZGlzY29ubmVjdCYjMzQ7LAogICAgJiMzNDt0Y3BfYWJvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGFsbG9jYXRpb24gZmxhZ3MgZm9yIHNlbmRpbmcgYWN0aXZlIFRDUCByZXNldHMgdG8gYWx3YXlzIHVzZSBHRlBfQVRPTUlDLCBhbHRlcmluZyBjb3JlIFRDUCBhbmQgTVBUQ1AgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYGdmcF90IHByaW9yaXR5YCBhcmd1bWVudCBmcm9tIGB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoKWAgYW5kIGhhcmRjb2RlcyBgR0ZQX0FUT01JQ2AgZm9yIHRoZSBTS0IgYWxsb2NhdGlvbiBhbmQgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGEgc2ltcGxlIHJlZmFjdG9yaW5nIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBidWZmZXIgbGVuZ3Rocywgb3IgYWx0ZXIgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWMyZDEyYmU5OTczNDQ2NWJjYzU2N2M4ZDQ0NmM2ZWQ0OTA5ZGU3OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDAzOjMzOjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCA2NzBjMjA4NzZmMjY1Li40MzY0OTVmZjIyNzFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtNzY1LDggJiM0Mzs3NjUsNyBAQCBpbnQgdGNwX2ZyYWdtZW50KHN0cnVjdCBzb2NrICpzaywgZW51bSB0Y3BfcXVldWUgdGNwX3F1ZXVlLAogdm9pZCB0Y3Bfc2VuZF9wcm9iZTAoc3RydWN0IHNvY2sgKik7CiBpbnQgdGNwX3dyaXRlX3dha2V1cChzdHJ1Y3Qgc29jayAqLCBpbnQgbWliKTsKIHZvaWQgdGNwX3NlbmRfZmluKHN0cnVjdCBzb2NrICpzayk7Ci12b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IHByaW9yaXR5LAotCQkJICAgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbik7CiYjNDM7dm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHNrX3JzdF9yZWFzb24gcmVhc29uKTsKIGludCB0Y3Bfc2VuZF9zeW5hY2soc3RydWN0IHNvY2sgKik7CiB2b2lkIHRjcF9wdXNoX29uZShzdHJ1Y3Qgc29jayAqLCB1bnNpZ25lZCBpbnQgbXNzX25vdyk7CiB2b2lkIF9fdGNwX3NlbmRfYWNrKHN0cnVjdCBzb2NrICpzaywgdTMyIHJjdl9ueHQsIHUxNiBmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IGI0MjM3ZDBlOTk0ZDYuLjkzZDcyM2Q4YzEwOTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jCkBAIC0zMTgyLDggJiM0MzszMTgyLDcgQEAgdm9pZCBfX3RjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dCkKIAkJLyogVW5yZWFkIGRhdGEgd2FzIHRvc3NlZCwgemFwIHRoZSBjb25uZWN0aW9uLiAqLwogCQlORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUEFCT1JUT05DTE9TRSk7CiAJCXRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7Ci0JCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgc2stJmd0O3NrX2FsbG9jYXRpb24sCi0JCQkJICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpOwomIzQzOwkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9DTE9TRSk7CiAJfSBlbHNlIGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfTElOR0VSKSAmYW1wOyZhbXA7ICFzay0mZ3Q7c2tfbGluZ2VydGltZSkgewogCQkvKiBDaGVjayB6ZXJvIGxpbmdlciBfYWZ0ZXJfIGNoZWNraW5nIGZvciB1bnJlYWQgZGF0YS4gKi8KIAkJc2stJmd0O3NrX3Byb3QtJmd0O2Rpc2Nvbm5lY3Qoc2ssIDApOwpAQCAtMzI1Nyw3ICYjNDM7MzI1Niw3IEBAIHZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCiAJCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCQlpZiAoUkVBRF9PTkNFKHRwLSZndDtsaW5nZXIyKSAmbHQ7IDApIHsKIAkJCXRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7Ci0JCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsCiYjNDM7CQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLAogCQkJCQkgICAgICBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9MSU5HRVIpOwogCQkJX19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwKIAkJCQkJTElOVVhfTUlCX1RDUEFCT1JUT05MSU5HRVIpOwpAQCAtMzI3Niw3ICYjNDM7MzI3NSw3IEBAIHZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCiAJaWYgKHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfQ0xPU0UpIHsKIAkJaWYgKHRjcF9jaGVja19vb20oc2ssIDApKSB7CiAJCQl0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpOwotCQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLAomIzQzOwkJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywKIAkJCQkJICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fTUVNT1JZKTsKIAkJCV9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksCiAJCQkJCUxJTlVYX01JQl9UQ1BBQk9SVE9OTUVNT1JZKTsKQEAgLTMzNzcsMTQgJiM0MzszMzc2LDE0IEBAIGludCB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncykKIAl9IGVsc2UgaWYgKHVubGlrZWx5KHRwLSZndDtyZXBhaXIpKSB7CiAJCVdSSVRFX09OQ0Uoc2stJmd0O3NrX2VyciwgRUNPTk5BQk9SVEVEKTsKIAl9IGVsc2UgaWYgKHRjcF9uZWVkX3Jlc2V0KG9sZF9zdGF0ZSkpIHsKLQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBnZnBfYW55KCksIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTsKJiM0MzsJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpOwogCQlXUklURV9PTkNFKHNrLSZndDtza19lcnIsIEVDT05OUkVTRVQpOwogCX0gZWxzZSBpZiAodHAtJmd0O3NuZF9ueHQgIT0gdHAtJmd0O3dyaXRlX3NlcSAmYW1wOyZhbXA7CiAJCSAgICgxICZsdDsmbHQ7IG9sZF9zdGF0ZSkgJmFtcDsgKFRDUEZfQ0xPU0lORyB8IFRDUEZfTEFTVF9BQ0spKSB7CiAJCS8qIFRoZSBsYXN0IGNoZWNrIGFkanVzdHMgZm9yIGRpc2NyZXBhbmN5IG9mIExpbnV4IHdydC4gUkZDCiAJCSAqIHN0YXRlcwogCQkgKi8KLQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBnZnBfYW55KCksCiYjNDM7CQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssCiAJCQkJICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfRElTQ09OTkVDVF9XSVRIX0RBVEEpOwogCQlXUklURV9PTkNFKHNrLSZndDtza19lcnIsIEVDT05OUkVTRVQpOwogCX0gZWxzZSBpZiAob2xkX3N0YXRlID09IFRDUF9TWU5fU0VOVCkKQEAgLTUxNDcsOCAmIzQzOzUxNDYsNyBAQCBpbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycikKIAliaF9sb2NrX3NvY2soc2spOwogCiAJaWYgKHRjcF9uZWVkX3Jlc2V0KHNrLSZndDtza19zdGF0ZSkpCi0JCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQywKLQkJCQkgICAgICBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7CiYjNDM7CQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTsKIAl0Y3BfZG9uZV93aXRoX2Vycm9yKHNrLCBlcnIpOwogCiAJYmhfdW5sb2NrX3NvY2soc2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IGYyNzA5ZDU4NWVkYmQuLjE5YTc5OWU1ZDVjZTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTM4NDksMTUgJiM0MzszODQ5LDE0IEBAIHZvaWQgdGNwX3NlbmRfZmluKHN0cnVjdCBzb2NrICpzaykKICAqIHdhcyB1bnJlYWQgZGF0YSBpbiB0aGUgcmVjZWl2ZSBxdWV1ZS4gIFRoaXMgYmVoYXZpb3IgaXMgcmVjb21tZW5kZWQKICAqIGJ5IFJGQyAyNTI1LCBzZWN0aW9uIDIuMTcuICAtRGF2ZU0KICAqLwotdm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBnZnBfdCBwcmlvcml0eSwKLQkJCSAgIGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb24pCiYjNDM7dm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHNrX3JzdF9yZWFzb24gcmVhc29uKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9PVVRSU1RTKTsKIAogCS8qIE5PVEU6IE5vIFRDUCBvcHRpb25zIGF0dGFjaGVkIGFuZCB3ZSBuZXZlciByZXRyYW5zbWl0IHRoaXMuICovCi0Jc2tiID0gYWxsb2Nfc2tiKE1BWF9UQ1BfSEVBREVSLCBwcmlvcml0eSk7CiYjNDM7CXNrYiA9IGFsbG9jX3NrYihNQVhfVENQX0hFQURFUiwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpIHsKIAkJTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVEZBSUxFRCk7CiAJCXJldHVybjsKQEAgLTM4NjksNyAmIzQzOzM4NjgsNyBAQCB2b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IHByaW9yaXR5LAogCQkJICAgICBUQ1BIRFJfQUNLIHwgVENQSERSX1JTVCk7CiAJdGNwX21zdGFtcF9yZWZyZXNoKHRjcF9zayhzaykpOwogCS8qIFNlbmQgaXQgb2ZmLiAqLwotCWlmICh0Y3BfdHJhbnNtaXRfc2tiKHNrLCBza2IsIDAsIHByaW9yaXR5KSkKJiM0MzsJaWYgKHRjcF90cmFuc21pdF9za2Ioc2ssIHNrYiwgMCwgR0ZQX0FUT01JQykpCiAJCU5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRGQUlMRUQpOwogCiAJLyogc2tiIG9mIHRyYWNlX3RjcF9zZW5kX3Jlc2V0KCkga2VlcHMgdGhlIHNrYiB0aGF0IGNhdXNlZCBSU1QsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jCmluZGV4IDEwMzhlN2JhOWMyZWIuLmU1NmVhZTRiYzM0MWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF90aW1lci5jCkBAIC0xMjYsNyAmIzQzOzEyNiw3IEBAIHN0YXRpYyBpbnQgdGNwX291dF9vZl9yZXNvdXJjZXMoc3RydWN0IHNvY2sgKnNrLCBib29sIGRvX3Jlc2V0KQogCQkgICAgKCF0cC0mZ3Q7c25kX3duZCAmYW1wOyZhbXA7ICF0cC0mZ3Q7cGFja2V0c19vdXQpKQogCQkJZG9fcmVzZXQgPSB0cnVlOwogCQlpZiAoZG9fcmVzZXQpCi0JCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsCiYjNDM7CQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLAogCQkJCQkgICAgICBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9NRU1PUlkpOwogCQl0Y3BfZG9uZShzayk7CiAJCV9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVE9OTUVNT1JZKTsKQEAgLTgwOSw3ICYjNDM7ODA5LDcgQEAgc3RhdGljIHZvaWQgdGNwX2tlZXBhbGl2ZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQotCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTsKJiM0MzsJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpOwogCQlnb3RvIGRlYXRoOwogCX0KIApAQCAtODM2LDcgJiM0Mzs4MzYsNyBAQCBzdGF0aWMgdm9pZCB0Y3Bfa2VlcGFsaXZlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCQkgICAgaWNzay0mZ3Q7aWNza19wcm9iZXNfb3V0ICZndDsgMCkgfHwKIAkJICAgICh1c2VyX3RpbWVvdXQgPT0gMCAmYW1wOyZhbXA7CiAJCSAgICBpY3NrLSZndDtpY3NrX3Byb2Jlc19vdXQgJmd0Oz0ga2VlcGFsaXZlX3Byb2Jlcyh0cCkpKSB7Ci0JCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsCiYjNDM7CQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLAogCQkJCQkgICAgICBTS19SU1RfUkVBU09OX1RDUF9LRUVQQUxJVkVfVElNRU9VVCk7CiAJCQl0Y3Bfd3JpdGVfZXJyKHNrKTsKIAkJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwppbmRleCBiNDc0ZDAzNjIwYTc1Li5lMWYwOGY3MWNkYjE2IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwpAQCAtMzEwOSw4ICYjNDM7MzEwOSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2RvX2Zhc3RjbG9zZShzdHJ1Y3Qgc29jayAqc2spCiAJCSAqLwogCQlpbmV0X2Nzayhzc2spLSZndDtpY3NrX2Fjay5yY3ZfbXNzID0gVENQX01JTl9NU1M7CiAKLQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNzaywgc3NrLSZndDtza19hbGxvY2F0aW9uLAotCQkJCSAgICAgIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX0NMT1NFKTsKJiM0MzsJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzc2ssIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX0NMT1NFKTsKIHVubG9jazoKIAkJcmVsZWFzZV9zb2NrKHNzayk7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaAppbmRleCAwNmExMDdkNGU4MzkyLi44N2NjYjg0ZTk5MjdjIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaApAQCAtNjkwLDcgJiM0Mzs2OTAsNyBAQCBtcHRjcF9zZW5kX2FjdGl2ZV9yZXNldF9yZWFzb24oc3RydWN0IHNvY2sgKnNrKQogCWVudW0gc2tfcnN0X3JlYXNvbiByZWFzb247CiAKIAlyZWFzb24gPSBza19yc3RfY29udmVydF9tcHRjcF9yZWFzb24oc3ViZmxvdy0mZ3Q7cmVzZXRfcmVhc29uKTsKLQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsIHJlYXNvbik7CiYjNDM7CXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgcmVhc29uKTsKIH0KIAogLyogTWFkZSB0aGUgZndkIG1lbSBjYXJyaWVkIGJ5IHRoZSBnaXZlbiBza2IgYXZhaWxhYmxlIHRvIHRoZSBtc2ssCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjM0CgkJCQkJCQlvdXRwdXQ6IDEzMwoJCQkJCQkJdGhvdWdodHM6IDUyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgVENQIFJlc2V0IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAgZnVuY3Rpb24mIzM5O3Mgc2lnbmF0dXJlIGlzIGJlaW5nIHN0cmVhbWxpbmVkLiBUaGUgYGdmcF90IHByaW9yaXR5YCBwYXJhbWV0ZXIgaXMgYmVpbmcgZHJvcHBlZC4gSW5zdGVhZCBvZiBkeW5hbWljYWxseSBwYXNzaW5nIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcmlvcml0eSBmbGFnIHRvIGBhbGxvY19za2JgIGFuZCBgdGNwX3RyYW5zbWl0X3NrYmAsIHRoZSBwYXRjaCBoYXJkY29kZXMgYEdGUF9BVE9NSUNgLgoKU3BlY2lmaWNhbGx5LCB0aGUgZGlmZnMgc2hvdzogdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBpdHNlbGYgaXMgY2hhbmdpbmcsIGFuZCBpbnNpZGUgYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAsIHRoZSBgYWxsb2Nfc2tiYCBjYWxsIGFuZCB0aGUgYHRjcF90cmFuc21pdF9za2JgIGNhbGwgbm93IHVzZSB0aGUgaGFyZGNvZGVkIGBHRlBfQVRPTUlDYC4gTmF0dXJhbGx5LCBhbGwgdGhlIGNhbGxpbmcgc2l0ZXMgZm9yIHRoaXMgZnVuY3Rpb24gaGF2ZSBhbHNvIGJlZW4gdXBkYXRlZCB0byByZWZsZWN0IHRoZSBzaWduYXR1cmUgY2hhbmdlLCByZW1vdmluZyB0aGUgbm93LXVubmVjZXNzYXJ5IGBwcmlvcml0eWAgYXJndW1lbnQuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXM/IEFmdGVyIGxvb2tpbmcgaXQgb3ZlciBjYXJlZnVsbHksIHRoZSBhbnN3ZXIgaXMgbm8uIFRoaXMgcGF0Y2ggKm9ubHkqIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIHVzZWQgYnkgdGhlIFNLQi4gSXTigJlzIGEgcHVyZSByZWZhY3RvcmluZyBhbmQgc2ltcGxpZmljYXRpb24sIHJlcGxhY2luZyBhIHZhcmlhYmxlIHdpdGggYSBjb25zdGFudC4gSXQmIzM5O3Mgbm90IGludHJvZHVjaW5nIGFueSBuZXcgZmllbGRzLCBtb2RpZnlpbmcgZGF0YSBzdHJ1Y3R1cmVzIG9yIHNpemVzLCBvciBjaGFuZ2luZyBob3cgZGF0YSBpcyBpbml0aWFsaXplZC4gSSYjMzk7bSBzYXRpc2ZpZWQgdGhhdCB0aGUgZXhpc3RpbmcgU0tCIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2ssIHdoaWNoIGhhbmRsZXMgaGVhZGVyIGNyZWF0aW9uIGFuZCBkYXRhIHNldHVwLCBpc24mIzM5O3QgYmVpbmcgYWx0ZXJlZCwganVzdCB0aGUgYWxsb2NhdGlvbiBjb250ZXh0LiBgYWxsb2Nfc2tiYCBpdHNlbGYgZG9lc24mIzM5O3QgemVybyB0aGUgZGF0YSwgYnV0IHRoZSBzdWJzZXF1ZW50IGNhbGxzIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjayBndWFyYW50ZWUgdGhhdCBldmVyeXRoaW5nIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB0cmFuc21pc3Npb24uCgpUaGVyZWZvcmUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbiYjMzk7dCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgaXNzdWVzIHRoaXMgcmVmYWN0b3JpbmcgKmNvdWxkKiBpbnRyb2R1Y2UgLSB0aG91Z2ggSSBkb24mIzM5O3Qgc2VlIGFueSByZWFsIHJpc2suIFRoZSBwYXRjaCBwcmltYXJpbHkgYWx0ZXJzIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIHdpdGhpbiBhIHdlbGwtZXN0YWJsaXNoZWQgYW5kIHRlc3RlZCBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBnZnBfdCBwcmlvcml0eWAgYXJndW1lbnQgZnJvbSBgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KClgIGFuZCBoYXJkY29kZXMgYEdGUF9BVE9NSUNgIGZvciB0aGUgU0tCIGFsbG9jYXRpb24gYW5kIHRyYW5zbWlzc2lvbi4gVGhpcyBpcyBhIHNpbXBsZSByZWZhY3RvcmluZyBvZiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYnVmZmVyIGxlbmd0aHMsIG9yIGFsdGVyIGluaXRpYWxpemF0aW9uIGxvZ2ljLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgaXQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgcGVyZmVjdGx5IGFkZXF1YXRlIHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2UuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBgZ2ZwX3QgcHJpb3JpdHlgIGFyZ3VtZW50IGZyb20gYHRjcF9zZW5kX2FjdGl2ZV9yZXNldCgpYCBhbmQgaGFyZGNvZGVzIGBHRlBfQVRPTUlDYCBmb3IgdGhlIFNLQiBhbGxvY2F0aW9uIGFuZCB0cmFuc21pc3Npb24uIFRoaXMgaXMgYSBzaW1wbGUgcmVmYWN0b3Jpbmcgb2YgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJ1ZmZlciBsZW5ndGhzLCBvciBhbHRlciBpbml0aWFsaXphdGlvbiBsb2dpYy4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzaW5nIGl0IGluIGNvbnRyb2wgZmxvdy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHBlcmZlY3RseSBhZGVxdWF0ZSB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozMzozNi4xMjY1NzA3OTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTY3MTg1MjgzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9zZW5kX2FjdGl2ZV9yZXNldFwiLFxuICAgIFwidGNwX2Rpc2Nvbm5lY3RcIixcbiAgICBcInRjcF9hYm9ydFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYGdmcF90IHByaW9yaXR5YCBhcmd1bWVudCBmcm9tIGB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoKWAgYW5kIGhhcmRjb2RlcyBgR0ZQX0FUT01JQ2AgZm9yIHRoZSBTS0IgYWxsb2NhdGlvbiBhbmQgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGEgc2ltcGxlIHJlZmFjdG9yaW5nIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBidWZmZXIgbGVuZ3Rocywgb3IgYWx0ZXIgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWxsb2NhdGlvbiBmbGFncyBmb3Igc2VuZGluZyBhY3RpdmUgVENQIHJlc2V0cyB0byBhbHdheXMgdXNlIEdGUF9BVE9NSUMsIGFsdGVyaW5nIGNvcmUgVENQIGFuZCBNUFRDUCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6MzYuMTI2NTc1OTM1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc3NDQxODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWMyZDEyYmU5OTczNDQ2NWJjYzU2N2M4ZDQ0NmM2ZWQ0OTA5ZGU3OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwMzozMzozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oXFxuaW5kZXggNjcwYzIwODc2ZjI2NS4uNDM2NDk1ZmYyMjcxZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC90Y3AuaFxcbisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oXFxuQEAgLTc2NSw4ICs3NjUsNyBAQCBpbnQgdGNwX2ZyYWdtZW50KHN0cnVjdCBzb2NrICpzaywgZW51bSB0Y3BfcXVldWUgdGNwX3F1ZXVlLFxcbiB2b2lkIHRjcF9zZW5kX3Byb2JlMChzdHJ1Y3Qgc29jayAqKTtcXG4gaW50IHRjcF93cml0ZV93YWtldXAoc3RydWN0IHNvY2sgKiwgaW50IG1pYik7XFxuIHZvaWQgdGNwX3NlbmRfZmluKHN0cnVjdCBzb2NrICpzayk7XFxuLXZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZ2ZwX3QgcHJpb3JpdHksXFxuLVxcdFxcdFxcdCAgIGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb24pO1xcbit2b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb24pO1xcbiBpbnQgdGNwX3NlbmRfc3luYWNrKHN0cnVjdCBzb2NrICopO1xcbiB2b2lkIHRjcF9wdXNoX29uZShzdHJ1Y3Qgc29jayAqLCB1bnNpZ25lZCBpbnQgbXNzX25vdyk7XFxuIHZvaWQgX190Y3Bfc2VuZF9hY2soc3RydWN0IHNvY2sgKnNrLCB1MzIgcmN2X254dCwgdTE2IGZsYWdzKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xcbmluZGV4IGI0MjM3ZDBlOTk0ZDYuLjkzZDcyM2Q4YzEwOTggMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xcbkBAIC0zMTgyLDggKzMxODIsNyBAQCB2b2lkIF9fdGNwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KVxcbiBcXHRcXHQvKiBVbnJlYWQgZGF0YSB3YXMgdG9zc2VkLCB6YXAgdGhlIGNvbm5lY3Rpb24uICovXFxuIFxcdFxcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRPTkNMT1NFKTtcXG4gXFx0XFx0dGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcXG4tXFx0XFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBzay1cXHUwMDNlc2tfYWxsb2NhdGlvbixcXG4tXFx0XFx0XFx0XFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpO1xcbitcXHRcXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX0NMT1NFKTtcXG4gXFx0fSBlbHNlIGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfTElOR0VSKSBcXHUwMDI2XFx1MDAyNiAhc2stXFx1MDAzZXNrX2xpbmdlcnRpbWUpIHtcXG4gXFx0XFx0LyogQ2hlY2sgemVybyBsaW5nZXIgX2FmdGVyXyBjaGVja2luZyBmb3IgdW5yZWFkIGRhdGEuICovXFxuIFxcdFxcdHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkaXNjb25uZWN0KHNrLCAwKTtcXG5AQCAtMzI1Nyw3ICszMjU2LDcgQEAgdm9pZCBfX3RjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcXG4gXFx0XFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuIFxcdFxcdGlmIChSRUFEX09OQ0UodHAtXFx1MDAzZWxpbmdlcjIpIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHR0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xcbi1cXHRcXHRcXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsXFxuK1xcdFxcdFxcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fTElOR0VSKTtcXG4gXFx0XFx0XFx0X19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcXG4gXFx0XFx0XFx0XFx0XFx0TElOVVhfTUlCX1RDUEFCT1JUT05MSU5HRVIpO1xcbkBAIC0zMjc2LDcgKzMyNzUsNyBAQCB2b2lkIF9fdGNwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KVxcbiBcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TRSkge1xcbiBcXHRcXHRpZiAodGNwX2NoZWNrX29vbShzaywgMCkpIHtcXG4gXFx0XFx0XFx0dGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcXG4tXFx0XFx0XFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLFxcbitcXHRcXHRcXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX01FTU9SWSk7XFxuIFxcdFxcdFxcdF9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksXFxuIFxcdFxcdFxcdFxcdFxcdExJTlVYX01JQl9UQ1BBQk9SVE9OTUVNT1JZKTtcXG5AQCAtMzM3NywxNCArMzM3NiwxNCBAQCBpbnQgdGNwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxuIFxcdH0gZWxzZSBpZiAodW5saWtlbHkodHAtXFx1MDAzZXJlcGFpcikpIHtcXG4gXFx0XFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfZXJyLCBFQ09OTkFCT1JURUQpO1xcbiBcXHR9IGVsc2UgaWYgKHRjcF9uZWVkX3Jlc2V0KG9sZF9zdGF0ZSkpIHtcXG4tXFx0XFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBnZnBfYW55KCksIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTtcXG4rXFx0XFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XFxuIFxcdFxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX2VyciwgRUNPTk5SRVNFVCk7XFxuIFxcdH0gZWxzZSBpZiAodHAtXFx1MDAzZXNuZF9ueHQgIT0gdHAtXFx1MDAzZXdyaXRlX3NlcSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAoMSBcXHUwMDNjXFx1MDAzYyBvbGRfc3RhdGUpIFxcdTAwMjYgKFRDUEZfQ0xPU0lORyB8IFRDUEZfTEFTVF9BQ0spKSB7XFxuIFxcdFxcdC8qIFRoZSBsYXN0IGNoZWNrIGFkanVzdHMgZm9yIGRpc2NyZXBhbmN5IG9mIExpbnV4IHdydC4gUkZDXFxuIFxcdFxcdCAqIHN0YXRlc1xcbiBcXHRcXHQgKi9cXG4tXFx0XFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBnZnBfYW55KCksXFxuK1xcdFxcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcXG4gXFx0XFx0XFx0XFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfRElTQ09OTkVDVF9XSVRIX0RBVEEpO1xcbiBcXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19lcnIsIEVDT05OUkVTRVQpO1xcbiBcXHR9IGVsc2UgaWYgKG9sZF9zdGF0ZSA9PSBUQ1BfU1lOX1NFTlQpXFxuQEAgLTUxNDcsOCArNTE0Niw3IEBAIGludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxcbiBcXHRiaF9sb2NrX3NvY2soc2spO1xcbiBcXG4gXFx0aWYgKHRjcF9uZWVkX3Jlc2V0KHNrLVxcdTAwM2Vza19zdGF0ZSkpXFxuLVxcdFxcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpO1xcbitcXHRcXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTtcXG4gXFx0dGNwX2RvbmVfd2l0aF9lcnJvcihzaywgZXJyKTtcXG4gXFxuIFxcdGJoX3VubG9ja19zb2NrKHNrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXFxuaW5kZXggZjI3MDlkNTg1ZWRiZC4uMTlhNzk5ZTVkNWNlMyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcXG4rKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcXG5AQCAtMzg0OSwxNSArMzg0OSwxNCBAQCB2b2lkIHRjcF9zZW5kX2ZpbihzdHJ1Y3Qgc29jayAqc2spXFxuICAqIHdhcyB1bnJlYWQgZGF0YSBpbiB0aGUgcmVjZWl2ZSBxdWV1ZS4gIFRoaXMgYmVoYXZpb3IgaXMgcmVjb21tZW5kZWRcXG4gICogYnkgUkZDIDI1MjUsIHNlY3Rpb24gMi4xNy4gIC1EYXZlTVxcbiAgKi9cXG4tdm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBnZnBfdCBwcmlvcml0eSxcXG4tXFx0XFx0XFx0ICAgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbilcXG4rdm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHNrX3JzdF9yZWFzb24gcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcbiBcXHRUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9PVVRSU1RTKTtcXG4gXFxuIFxcdC8qIE5PVEU6IE5vIFRDUCBvcHRpb25zIGF0dGFjaGVkIGFuZCB3ZSBuZXZlciByZXRyYW5zbWl0IHRoaXMuICovXFxuLVxcdHNrYiA9IGFsbG9jX3NrYihNQVhfVENQX0hFQURFUiwgcHJpb3JpdHkpO1xcbitcXHRza2IgPSBhbGxvY19za2IoTUFYX1RDUF9IRUFERVIsIEdGUF9BVE9NSUMpO1xcbiBcXHRpZiAoIXNrYikge1xcbiBcXHRcXHRORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUEFCT1JURkFJTEVEKTtcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0zODY5LDcgKzM4NjgsNyBAQCB2b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IHByaW9yaXR5LFxcbiBcXHRcXHRcXHQgICAgIFRDUEhEUl9BQ0sgfCBUQ1BIRFJfUlNUKTtcXG4gXFx0dGNwX21zdGFtcF9yZWZyZXNoKHRjcF9zayhzaykpO1xcbiBcXHQvKiBTZW5kIGl0IG9mZi4gKi9cXG4tXFx0aWYgKHRjcF90cmFuc21pdF9za2Ioc2ssIHNrYiwgMCwgcHJpb3JpdHkpKVxcbitcXHRpZiAodGNwX3RyYW5zbWl0X3NrYihzaywgc2tiLCAwLCBHRlBfQVRPTUlDKSlcXG4gXFx0XFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVEZBSUxFRCk7XFxuIFxcbiBcXHQvKiBza2Igb2YgdHJhY2VfdGNwX3NlbmRfcmVzZXQoKSBrZWVwcyB0aGUgc2tiIHRoYXQgY2F1c2VkIFJTVCxcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMgYi9uZXQvaXB2NC90Y3BfdGltZXIuY1xcbmluZGV4IDEwMzhlN2JhOWMyZWIuLmU1NmVhZTRiYzM0MWUgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwX3RpbWVyLmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfdGltZXIuY1xcbkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIGludCB0Y3Bfb3V0X29mX3Jlc291cmNlcyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZG9fcmVzZXQpXFxuIFxcdFxcdCAgICAoIXRwLVxcdTAwM2VzbmRfd25kIFxcdTAwMjZcXHUwMDI2ICF0cC1cXHUwMDNlcGFja2V0c19vdXQpKVxcbiBcXHRcXHRcXHRkb19yZXNldCA9IHRydWU7XFxuIFxcdFxcdGlmIChkb19yZXNldClcXG4tXFx0XFx0XFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLFxcbitcXHRcXHRcXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX01FTU9SWSk7XFxuIFxcdFxcdHRjcF9kb25lKHNrKTtcXG4gXFx0XFx0X19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUEFCT1JUT05NRU1PUlkpO1xcbkBAIC04MDksNyArODA5LDcgQEAgc3RhdGljIHZvaWQgdGNwX2tlZXBhbGl2ZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4gXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbi1cXHRcXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTtcXG4rXFx0XFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XFxuIFxcdFxcdGdvdG8gZGVhdGg7XFxuIFxcdH1cXG4gXFxuQEAgLTgzNiw3ICs4MzYsNyBAQCBzdGF0aWMgdm9pZCB0Y3Bfa2VlcGFsaXZlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiBcXHRcXHQgICAgaWNzay1cXHUwMDNlaWNza19wcm9iZXNfb3V0IFxcdTAwM2UgMCkgfHxcXG4gXFx0XFx0ICAgICh1c2VyX3RpbWVvdXQgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgaWNzay1cXHUwMDNlaWNza19wcm9iZXNfb3V0IFxcdTAwM2U9IGtlZXBhbGl2ZV9wcm9iZXModHApKSkge1xcbi1cXHRcXHRcXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsXFxuK1xcdFxcdFxcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfS0VFUEFMSVZFX1RJTUVPVVQpO1xcbiBcXHRcXHRcXHR0Y3Bfd3JpdGVfZXJyKHNrKTtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5pbmRleCBiNDc0ZDAzNjIwYTc1Li5lMWYwOGY3MWNkYjE2IDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5AQCAtMzEwOSw4ICszMTA5LDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfZG9fZmFzdGNsb3NlKHN0cnVjdCBzb2NrICpzaylcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGluZXRfY3NrKHNzayktXFx1MDAzZWljc2tfYWNrLnJjdl9tc3MgPSBUQ1BfTUlOX01TUztcXG4gXFxuLVxcdFxcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzc2ssIHNzay1cXHUwMDNlc2tfYWxsb2NhdGlvbixcXG4tXFx0XFx0XFx0XFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpO1xcbitcXHRcXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3NrLCBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9DTE9TRSk7XFxuIHVubG9jazpcXG4gXFx0XFx0cmVsZWFzZV9zb2NrKHNzayk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxcbmluZGV4IDA2YTEwN2Q0ZTgzOTIuLjg3Y2NiODRlOTkyN2MgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmhcXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxcbkBAIC02OTAsNyArNjkwLDcgQEAgbXB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXRfcmVhc29uKHN0cnVjdCBzb2NrICpzaylcXG4gXFx0ZW51bSBza19yc3RfcmVhc29uIHJlYXNvbjtcXG4gXFxuIFxcdHJlYXNvbiA9IHNrX3JzdF9jb252ZXJ0X21wdGNwX3JlYXNvbihzdWJmbG93LVxcdTAwM2VyZXNldF9yZWFzb24pO1xcbi1cXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsIHJlYXNvbik7XFxuK1xcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgcmVhc29uKTtcXG4gfVxcbiBcXG4gLyogTWFkZSB0aGUgZndkIG1lbSBjYXJyaWVkIGJ5IHRoZSBnaXZlbiBza2IgYXZhaWxhYmxlIHRvIHRoZSBtc2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjMzOjM3LjYwNDg1MTc2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUwMjI0NDMwOTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3NlbmRfYWN0aXZlX3Jlc2V0XCIsXG4gICAgXCJ0Y3BfZGlzY29ubmVjdFwiLFxuICAgIFwidGNwX2Fib3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGFsbG9jYXRpb24gZmxhZ3MgZm9yIHNlbmRpbmcgYWN0aXZlIFRDUCByZXNldHMgdG8gYWx3YXlzIHVzZSBHRlBfQVRPTUlDLCBhbHRlcmluZyBjb3JlIFRDUCBhbmQgTVBUQ1AgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFjMmQxMmJlOTk3MzQ0NjViY2M1NjdjOGQ0NDZjNmVkNDkwOWRlNzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwMzozMzozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmhcbmluZGV4IDY3MGMyMDg3NmYyNjUuLjQzNjQ5NWZmMjI3MWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC90Y3AuaFxuKysrIGIvaW5jbHVkZS9uZXQvdGNwLmhcbkBAIC03NjUsOCArNzY1LDcgQEAgaW50IHRjcF9mcmFnbWVudChzdHJ1Y3Qgc29jayAqc2ssIGVudW0gdGNwX3F1ZXVlIHRjcF9xdWV1ZSxcbiB2b2lkIHRjcF9zZW5kX3Byb2JlMChzdHJ1Y3Qgc29jayAqKTtcbiBpbnQgdGNwX3dyaXRlX3dha2V1cChzdHJ1Y3Qgc29jayAqLCBpbnQgbWliKTtcbiB2b2lkIHRjcF9zZW5kX2ZpbihzdHJ1Y3Qgc29jayAqc2spO1xuLXZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZ2ZwX3QgcHJpb3JpdHksXG4tXHRcdFx0ICAgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbik7XG4rdm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHNrX3JzdF9yZWFzb24gcmVhc29uKTtcbiBpbnQgdGNwX3NlbmRfc3luYWNrKHN0cnVjdCBzb2NrICopO1xuIHZvaWQgdGNwX3B1c2hfb25lKHN0cnVjdCBzb2NrICosIHVuc2lnbmVkIGludCBtc3Nfbm93KTtcbiB2b2lkIF9fdGNwX3NlbmRfYWNrKHN0cnVjdCBzb2NrICpzaywgdTMyIHJjdl9ueHQsIHUxNiBmbGFncyk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggYjQyMzdkMGU5OTRkNi4uOTNkNzIzZDhjMTA5OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTMxODIsOCArMzE4Miw3IEBAIHZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG4gXHRcdC8qIFVucmVhZCBkYXRhIHdhcyB0b3NzZWQsIHphcCB0aGUgY29ubmVjdGlvbi4gKi9cbiBcdFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVE9OQ0xPU0UpO1xuIFx0XHR0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xuLVx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIHNrLVx1MDAzZXNrX2FsbG9jYXRpb24sXG4tXHRcdFx0XHQgICAgICBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9DTE9TRSk7XG4rXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpO1xuIFx0fSBlbHNlIGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfTElOR0VSKSBcdTAwMjZcdTAwMjYgIXNrLVx1MDAzZXNrX2xpbmdlcnRpbWUpIHtcbiBcdFx0LyogQ2hlY2sgemVybyBsaW5nZXIgX2FmdGVyXyBjaGVja2luZyBmb3IgdW5yZWFkIGRhdGEuICovXG4gXHRcdHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlzY29ubmVjdChzaywgMCk7XG5AQCAtMzI1Nyw3ICszMjU2LDcgQEAgdm9pZCBfX3RjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcbiBcdFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4gXHRcdGlmIChSRUFEX09OQ0UodHAtXHUwMDNlbGluZ2VyMikgXHUwMDNjIDApIHtcbiBcdFx0XHR0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xuLVx0XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQyxcbitcdFx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssXG4gXHRcdFx0XHRcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX0xJTkdFUik7XG4gXHRcdFx0X19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcbiBcdFx0XHRcdFx0TElOVVhfTUlCX1RDUEFCT1JUT05MSU5HRVIpO1xuQEAgLTMyNzYsNyArMzI3NSw3IEBAIHZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG4gXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0NMT1NFKSB7XG4gXHRcdGlmICh0Y3BfY2hlY2tfb29tKHNrLCAwKSkge1xuIFx0XHRcdHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XG4tXHRcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLFxuK1x0XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcbiBcdFx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fTUVNT1JZKTtcbiBcdFx0XHRfX05FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLFxuIFx0XHRcdFx0XHRMSU5VWF9NSUJfVENQQUJPUlRPTk1FTU9SWSk7XG5AQCAtMzM3NywxNCArMzM3NiwxNCBAQCBpbnQgdGNwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXG4gXHR9IGVsc2UgaWYgKHVubGlrZWx5KHRwLVx1MDAzZXJlcGFpcikpIHtcbiBcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19lcnIsIEVDT05OQUJPUlRFRCk7XG4gXHR9IGVsc2UgaWYgKHRjcF9uZWVkX3Jlc2V0KG9sZF9zdGF0ZSkpIHtcbi1cdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBnZnBfYW55KCksIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTtcbitcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XG4gXHRcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfZXJyLCBFQ09OTlJFU0VUKTtcbiBcdH0gZWxzZSBpZiAodHAtXHUwMDNlc25kX254dCAhPSB0cC1cdTAwM2V3cml0ZV9zZXEgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICgxIFx1MDAzY1x1MDAzYyBvbGRfc3RhdGUpIFx1MDAyNiAoVENQRl9DTE9TSU5HIHwgVENQRl9MQVNUX0FDSykpIHtcbiBcdFx0LyogVGhlIGxhc3QgY2hlY2sgYWRqdXN0cyBmb3IgZGlzY3JlcGFuY3kgb2YgTGludXggd3J0LiBSRkNcbiBcdFx0ICogc3RhdGVzXG4gXHRcdCAqL1xuLVx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIGdmcF9hbnkoKSxcbitcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLFxuIFx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfRElTQ09OTkVDVF9XSVRIX0RBVEEpO1xuIFx0XHRXUklURV9PTkNFKHNrLVx1MDAzZXNrX2VyciwgRUNPTk5SRVNFVCk7XG4gXHR9IGVsc2UgaWYgKG9sZF9zdGF0ZSA9PSBUQ1BfU1lOX1NFTlQpXG5AQCAtNTE0Nyw4ICs1MTQ2LDcgQEAgaW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXG4gXHRiaF9sb2NrX3NvY2soc2spO1xuIFxuIFx0aWYgKHRjcF9uZWVkX3Jlc2V0KHNrLVx1MDAzZXNrX3N0YXRlKSlcbi1cdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLFxuLVx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpO1xuK1x0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTtcbiBcdHRjcF9kb25lX3dpdGhfZXJyb3Ioc2ssIGVycik7XG4gXG4gXHRiaF91bmxvY2tfc29jayhzayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5pbmRleCBmMjcwOWQ1ODVlZGJkLi4xOWE3OTllNWQ1Y2UzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jXG4rKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcbkBAIC0zODQ5LDE1ICszODQ5LDE0IEBAIHZvaWQgdGNwX3NlbmRfZmluKHN0cnVjdCBzb2NrICpzaylcbiAgKiB3YXMgdW5yZWFkIGRhdGEgaW4gdGhlIHJlY2VpdmUgcXVldWUuICBUaGlzIGJlaGF2aW9yIGlzIHJlY29tbWVuZGVkXG4gICogYnkgUkZDIDI1MjUsIHNlY3Rpb24gMi4xNy4gIC1EYXZlTVxuICAqL1xuLXZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZ2ZwX3QgcHJpb3JpdHksXG4tXHRcdFx0ICAgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbilcbit2b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb24pXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbiBcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX09VVFJTVFMpO1xuIFxuIFx0LyogTk9URTogTm8gVENQIG9wdGlvbnMgYXR0YWNoZWQgYW5kIHdlIG5ldmVyIHJldHJhbnNtaXQgdGhpcy4gKi9cbi1cdHNrYiA9IGFsbG9jX3NrYihNQVhfVENQX0hFQURFUiwgcHJpb3JpdHkpO1xuK1x0c2tiID0gYWxsb2Nfc2tiKE1BWF9UQ1BfSEVBREVSLCBHRlBfQVRPTUlDKTtcbiBcdGlmICghc2tiKSB7XG4gXHRcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRGQUlMRUQpO1xuIFx0XHRyZXR1cm47XG5AQCAtMzg2OSw3ICszODY4LDcgQEAgdm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBnZnBfdCBwcmlvcml0eSxcbiBcdFx0XHQgICAgIFRDUEhEUl9BQ0sgfCBUQ1BIRFJfUlNUKTtcbiBcdHRjcF9tc3RhbXBfcmVmcmVzaCh0Y3Bfc2soc2spKTtcbiBcdC8qIFNlbmQgaXQgb2ZmLiAqL1xuLVx0aWYgKHRjcF90cmFuc21pdF9za2Ioc2ssIHNrYiwgMCwgcHJpb3JpdHkpKVxuK1x0aWYgKHRjcF90cmFuc21pdF9za2Ioc2ssIHNrYiwgMCwgR0ZQX0FUT01JQykpXG4gXHRcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRGQUlMRUQpO1xuIFxuIFx0Lyogc2tiIG9mIHRyYWNlX3RjcF9zZW5kX3Jlc2V0KCkga2VlcHMgdGhlIHNrYiB0aGF0IGNhdXNlZCBSU1QsXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMgYi9uZXQvaXB2NC90Y3BfdGltZXIuY1xuaW5kZXggMTAzOGU3YmE5YzJlYi4uZTU2ZWFlNGJjMzQxZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jXG4rKysgYi9uZXQvaXB2NC90Y3BfdGltZXIuY1xuQEAgLTEyNiw3ICsxMjYsNyBAQCBzdGF0aWMgaW50IHRjcF9vdXRfb2ZfcmVzb3VyY2VzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBkb19yZXNldClcbiBcdFx0ICAgICghdHAtXHUwMDNlc25kX3duZCBcdTAwMjZcdTAwMjYgIXRwLVx1MDAzZXBhY2tldHNfb3V0KSlcbiBcdFx0XHRkb19yZXNldCA9IHRydWU7XG4gXHRcdGlmIChkb19yZXNldClcbi1cdFx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsXG4rXHRcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLFxuIFx0XHRcdFx0XHQgICAgICBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9NRU1PUlkpO1xuIFx0XHR0Y3BfZG9uZShzayk7XG4gXHRcdF9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVE9OTUVNT1JZKTtcbkBAIC04MDksNyArODA5LDcgQEAgc3RhdGljIHZvaWQgdGNwX2tlZXBhbGl2ZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdH1cbiBcdFx0fVxuLVx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTtcbitcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XG4gXHRcdGdvdG8gZGVhdGg7XG4gXHR9XG4gXG5AQCAtODM2LDcgKzgzNiw3IEBAIHN0YXRpYyB2b2lkIHRjcF9rZWVwYWxpdmVfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRcdCAgICBpY3NrLVx1MDAzZWljc2tfcHJvYmVzX291dCBcdTAwM2UgMCkgfHxcbiBcdFx0ICAgICh1c2VyX3RpbWVvdXQgPT0gMCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGljc2stXHUwMDNlaWNza19wcm9iZXNfb3V0IFx1MDAzZT0ga2VlcGFsaXZlX3Byb2Jlcyh0cCkpKSB7XG4tXHRcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLFxuK1x0XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcbiBcdFx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfS0VFUEFMSVZFX1RJTUVPVVQpO1xuIFx0XHRcdHRjcF93cml0ZV9lcnIoc2spO1xuIFx0XHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbmluZGV4IGI0NzRkMDM2MjBhNzUuLmUxZjA4ZjcxY2RiMTYgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbkBAIC0zMTA5LDggKzMxMDksNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF9kb19mYXN0Y2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHQgKi9cbiBcdFx0aW5ldF9jc2soc3NrKS1cdTAwM2VpY3NrX2Fjay5yY3ZfbXNzID0gVENQX01JTl9NU1M7XG4gXG4tXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzc2ssIHNzay1cdTAwM2Vza19hbGxvY2F0aW9uLFxuLVx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpO1xuK1x0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3NrLCBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9DTE9TRSk7XG4gdW5sb2NrOlxuIFx0XHRyZWxlYXNlX3NvY2soc3NrKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5pbmRleCAwNmExMDdkNGU4MzkyLi44N2NjYjg0ZTk5MjdjIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmhcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5AQCAtNjkwLDcgKzY5MCw3IEBAIG1wdGNwX3NlbmRfYWN0aXZlX3Jlc2V0X3JlYXNvbihzdHJ1Y3Qgc29jayAqc2spXG4gXHRlbnVtIHNrX3JzdF9yZWFzb24gcmVhc29uO1xuIFxuIFx0cmVhc29uID0gc2tfcnN0X2NvbnZlcnRfbXB0Y3BfcmVhc29uKHN1YmZsb3ctXHUwMDNlcmVzZXRfcmVhc29uKTtcbi1cdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQywgcmVhc29uKTtcbitcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgcmVhc29uKTtcbiB9XG4gXG4gLyogTWFkZSB0aGUgZndkIG1lbSBjYXJyaWVkIGJ5IHRoZSBnaXZlbiBza2IgYXZhaWxhYmxlIHRvIHRoZSBtc2ssXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozMzozNy42MDQ4NTMwMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDAzNzkzNDc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBhIFRDUC9NUFRDUCBQYXRjaDogV29ydGggRnV6emluZz8qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBtb2RpZnlpbmcgYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAgaW4gYG5ldC9pcHY0L3RjcF9vdXRwdXQuY2AuIEVzc2VudGlhbGx5LCBpdCdzIHJlbW92aW5nIHRoZSBgcHJpb3JpdHlgIGFyZ3VtZW50ICh3aGljaCB3YXMgYSBgZ2ZwX3RgIHZhbHVlKSBhbmQgaGFyZGNvZGluZyBgR0ZQX0FUT01JQ2AgaW5zaWRlIHRoZSBmdW5jdGlvbi4gIEl0IHVwZGF0ZXMgYWxsIHRoZSBjYWxsZXJzIGluIGBuZXQvaXB2NC90Y3AuY2AsIGBuZXQvaXB2NC90Y3BfdGltZXIuY2AsIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AsIGFuZCBgbmV0L21wdGNwL3Byb3RvY29sLmhgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZS4gUHJldmlvdXNseSwgYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAgd2FzIGNhbGxlZCB3aXRoIGEgdmFyaWV0eSBvZiBgZ2ZwX3RgIHZhbHVlcywgaW5jbHVkaW5nIGBzay1cdTAwM2Vza19hbGxvY2F0aW9uYCAod2hpY2ggY291bGQgYmUgYEdGUF9LRVJORUxgIG9yIGBHRlBfVVNFUmApLCBhbmQgYEdGUF9BVE9NSUNgIGV4cGxpY2l0bHkuICBOb3csIGl0ICphbHdheXMqIHVzZXMgYEdGUF9BVE9NSUNgLiBUaGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0IGFsdGVycyB0aGUgYWxsb2NhdGlvbiBmbGFncyB1c2VkIGJ5IGBhbGxvY19za2JgIGFuZCBgdGNwX3RyYW5zbWl0X3NrYmAuXG5cblRoZSBrZXkgY29uY2VybiBpcyB0aGF0IGJ5IGhhcmRjb2RpbmcgYEdGUF9BVE9NSUNgLCB3ZSdyZSBwb3RlbnRpYWxseSBpbnRyb2R1Y2luZyBtb3JlIGFsbG9jYXRpb24gZmFpbHVyZXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiAgT3IsIHBlcmhhcHMsIGl0J3MgYSB2YWxpZCBzaW1wbGlmaWNhdGlvbiB0aGF0IGp1c3QgaGFyZGNvZGVzIGEgdmFsdWUgYWxyZWFkeSBmcmVxdWVudGx5IHVzZWQgaW4gdGhlc2UgY29udGV4dHMuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIHRoaXMgd29ydGggZnV6emluZz8gIEl0ICpkb2VzKiBtb2RpZnkgY29yZSBUQ1AgbG9naWMsIHNwZWNpZmljYWxseSBob3cgYWN0aXZlIHJlc2V0cyBhcmUgc2VudC4gIEhvd2V2ZXIsIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBsb2dpYy4gSXQgc2ltcGx5IGNoYW5nZXMgYW4gYWxsb2NhdGlvbiBmbGFnLCBhIHNlZW1pbmdseSBzaW1wbGUgY2hhbmdlLiAgQnV0LCB3YWl0LCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGUsIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLiBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3dcIi4gQ2hhbmdpbmcgYGdmcF90YCBmcm9tIGBzay1cdTAwM2Vza19hbGxvY2F0aW9uYCB0byBgR0ZQX0FUT01JQ2AgbWlnaHQsIGluIHNvbWUgdmVyeSBuYXJyb3cgZWRnZSBjYXNlcywgYWZmZWN0IHRoZSBleGVjdXRpb24gZmxvdyBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscy4gR2l2ZW4gdGhlIHNpbXBsaWNpdHkgb2YgdGhlIGNoYW5nZSBidXQgdGhlIGNvcmUgbG9jYXRpb24sIEkgbmVlZCB0byBsb29rIGNsb3Nlci5cblxuT2theSwgbGV0IG1lIHJlLWV4YW1pbmUgdGhlIHBhdGNoLiAgSXQncyBqdXN0IHRoZSByZW1vdmFsIG9mIHRoZSBgcHJpb3JpdHlgIHBhcmFtZXRlciBhbmQgdGhlIGhhcmRjb2RpbmcuIGB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXRgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCB1c2VkIGluIHZhcmlvdXMgcGFydHMuXG5cbkNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGFsbG9jYXRpb24gZmFpbHVyZXMsIGlzIGl0IHdvcnRoIGZ1enppbmc/ICBZZXMsIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gY29yZSBUQ1AgYW5kIE1QVENQLiBGdXp6aW5nIG1pZ2h0IG5vdCAqc3BlY2lmaWNhbGx5KiB0YXJnZXQgdGhlIGBHRlBfQVRPTUlDYCBjaGFuZ2UsIGJ1dCBpdOKAmXMgYSBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgaXTigJlzIGJldHRlciB0byBiZSBzYWZlLiBJ4oCZbSBzZXR0aW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblRoZXJlZm9yZSwgSSdsbCBiZSBmb2N1c2luZyBvbiB0aGUgc3ltYm9scyBgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0YCwgYHRjcF9kaXNjb25uZWN0YCwgYW5kIHRvIGEgbGVzc2VyIGRlZ3JlZSBgbXB0Y3BfZG9fZmFzdGNsb3NlYC4gIEkgbmVlZCB0byBjaGVjayB0aGVpciB2aXNpYmlsaXR5LiBgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0YCBpcyBnbG9iYWxseSB2aXNpYmxlLiAgYG1wdGNwX2RvX2Zhc3RjbG9zZWAgaXMgc3RhdGljLCBzbyBJIGNhbiBpZ25vcmUgaXQgZm9yIGZ1enppbmcgcHVycG9zZXMuICBgdGNwX2Rpc2Nvbm5lY3RgIGFuZCBgdGNwX2Fib3J0YCBhcmUgZ2xvYmFsbHkgdmlzaWJsZS5cblxuRm9yIGNvbmZpZ3VyYXRpb25zLCBJJ2xsIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgaW52b2x2ZXMgYm90aCBgTVBUQ1BgIGFuZCBgSU5FVGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MzcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDE3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6NTEuNjQyNzkxMTg2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTUzNTM4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9NzY3PXZvaWQgdGNwX3NlbmRfZmluKHN0cnVjdCBzb2NrICpzayk7XFxuaW5jbHVkZS9uZXQvdGNwLmg6NzY4OnZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbik7XFxuaW5jbHVkZS9uZXQvdGNwLmgtNzY5LWludCB0Y3Bfc2VuZF9zeW5hY2soc3RydWN0IHNvY2sgKik7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzgwMT12b2lkIHRjcF9zZW5kX2ZpbihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzg1MS0gKi9cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6Mzg1Mjp2b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb24pXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM4NTMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozMzo1My4xOTgxNTE3OTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMxMzgyNDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTmV0d29yayBEaXNjb25uZWN0aW9uIFZpc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHZpc2liaWxpdHkgb2YgYSBuZXR3b3JrIGRpc2Nvbm5lY3Rpb24uIFRoaXMgc2l0dWF0aW9uIGlzIHNvbWV0aGluZyBJIGtub3cgaXMgZ29pbmcgdG8gYmUgZ2xvYmFsbHkgdmlzaWJsZS4gU28sIHRoZSBxdWVzdGlvbiB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgaG93IGNhbiBJIGNoZWNrIGl0PyBMZXQgbWUgY2hlY2sgdGhlIHNwZWNpZmljcyBieSBsb29raW5nIGF0IGB0Y3BfZGlzY29ubmVjdGAuIEkgY2FuIGxvb2sgdGhlcmUgdG8gZmluZCB0aGUgaW5mb3JtYXRpb24gYW5kIGtub3cgaG93IHRvIGZpbmQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1ODksIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozMzo1Ni41Mjk1MzY0MzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxNDg0ODg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdGNwX2Rpc2Nvbm5lY3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9NTc3PXN0cnVjdCBza19idWZmICp0Y3BfbWFrZV9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC01ODEtXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnN5bl9za2IpO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjU4MjppbnQgdGNwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTU4My1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTMzNDU9dm9pZCB0Y3Bfd3JpdGVfcXVldWVfcHVyZ2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMzM2MC1cXG5uZXQvaXB2NC90Y3AuYzozMzYxOmludCB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcXG5uZXQvaXB2NC90Y3AuYy0zMzYyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6NTguNzQ0Mzg5NTUxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY5NDI0NzMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYHRjcF9hYm9ydGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGB0Y3BfYWJvcnRgLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIGhhbmRsaW5nIGNvbm5lY3Rpb24gdGVybWluYXRpb24sIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBiZWhhdmlvciBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBBIHF1aWNrIGludmVzdGlnYXRpb24gb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBzZWVtcyB3YXJyYW50ZWQuIFRpbWUgdG8gZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTI2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDowMS40Mzg2Mzg4NzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNDM1NjA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdGNwX2Fib3J0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTE3MDQ9dm9pZCB0Y3BfZG9uZShzdHJ1Y3Qgc29jayAqc2spO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjE3MDU6aW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTE3MDYtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz01MDc5PXZvaWQgdGNwX2RvbmUoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNTEwNC1cXG5uZXQvaXB2NC90Y3AuYzo1MTA1OmludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxcbm5ldC9pcHY0L3RjcC5jLTUxMDYte1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMDk2PXN0YXRpYyB2b2lkIHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxMTEtXFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTEyOnN0YXRpYyBpbnQgdGNwX2Fib3J0X292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2ssIGludCBlcnIpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTEzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6MDIuOTcyOTk4NjQxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwNTgzMTUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYG1wdGNwX2RvX2Zhc3RjbG9zZWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIFwiTGV0J3MgY2hlY2sgYG1wdGNwX2RvX2Zhc3RjbG9zZWAuXCIgVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiBob3cgTVBUQ1AncyBmYXN0IGNsb3NlIG1lY2hhbmlzbSB3b3Jrcy4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMsIGJvdHRsZW5lY2tzLCBvciBhcmVhcyB0aGF0IG1pZ2h0IGJlIG1pc2JlaGF2aW5nIGJhc2VkIG9uIHNvbWUgcmVjZW50IG9ic2VydmF0aW9ucyBvciBidWcgcmVwb3J0cy4gSeKAmWxsIGJlIHRoaW5raW5nIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgTVBUQ1Agc3RhY2ssIGVzcGVjaWFsbHkgY29ubmVjdGlvbiB0ZWFyZG93biBhbmQgc3RhdGUgdHJhbnNpdGlvbnMuIEnigJlsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBzdWJ0bGV0aWVzIG9mIHRoZSBoYW5kc2hha2UgYW5kIGRhdGEgdHJhbnNmZXIgcGhhc2VzIGluIHJlbGF0aW9uIHRvIHRoZSBmYXN0IGNsb3NlIG9wZXJhdGlvbi4gV2hlcmXigJlzIHRoYXQgZG9jdW1lbnRhdGlvbj8gQW5kIEkgbWlnaHQgYmUgbG9va2luZyBpbnRvIHNvbWUgdGVzdCBzY2VuYXJpb3MgdG8gcmVwbGljYXRlIGlzc3VlcyBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjb2RlIGNoYW5nZXMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW50ZXJlc3RpbmcuIFRpbWUgdG8gZGl2ZSBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NzMyMywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjA2LjY3ODgzMjQwN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NTg5OTQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIG1wdGNwX2RvX2Zhc3RjbG9zZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMDY1PXN0YXRpYyB2b2lkIG1wdGNwX2JhY2tsb2dfcHVyZ2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzA4Mi1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMDgzOnN0YXRpYyB2b2lkIG1wdGNwX2RvX2Zhc3RjbG9zZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzA4NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjA4LjE1NDczNzU0NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTY4MjIwNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBTdGF0aWMgQ29uZGl0aW9uKipcblxuT2theSwgdGhpcyBmZWVscyBzdGF0aWMsIGRvZXNuJ3QgaXQ/IFNvbWV0aGluZydzIHN0dWNrLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgd2h5LiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gTVBUQ1AgY29udGV4dCwgYW5kIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIGFuIHVuY2hhbmdpbmcgc3RhdGUsIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIHRvIG1pbmQgaXMgdGhlIHJlc2V0IGhhbmRsaW5nIGR1cmluZyB0aGUgYWN0aXZlIHBhdGggc2VsZWN0aW9uLiBMZXQncyBzZWUgaWYgdGhlIHJlYXNvbiBmb3IgdGhlIGxhY2sgb2YgY2hhbmdlLCB0aGUgYmxvY2thZ2UsIGNhbiBiZSBmb3VuZCB3aXRoaW4gdGhlIGBtcHRjcF9zZW5kX2FjdGl2ZV9yZXNldF9yZWFzb25gIGZ1bmN0aW9uLCBhcyB0aGF0J3Mgd2hlcmUgdGhlIHBhdGggY291bGQgc3RhbGwuIFRoYXQgc2VlbXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY3OSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjExLjEyMjk2MDQ0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NzQ5MjE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9zZW5kX2FjdGl2ZV9yZXNldF9yZWFzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9MjgwNT1zdGF0aWMgdm9pZCBtcHRjcF9jaGVja19mYXN0Y2xvc2Uoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4MjAtXFx0XFx0aWYgKHRjcF9zay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0NMT1NFKSB7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjgyMTpcXHRcXHRcXHRtcHRjcF9zZW5kX2FjdGl2ZV9yZXNldF9yZWFzb24odGNwX3NrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODIyLVxcdFxcdFxcdHRjcF9zZXRfc3RhdGUodGNwX3NrLCBUQ1BfQ0xPU0UpO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9Njg2PXN0YXRpYyBpbmxpbmUgdm9pZFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjY4NzptcHRjcF9zZW5kX2FjdGl2ZV9yZXNldF9yZWFzb24oc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTY4OC17XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTQyNz12b2lkIG1wdGNwX3N1YmZsb3dfcmVzZXQoc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNDQwLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6NDQxOlxcdG1wdGNwX3NlbmRfYWN0aXZlX3Jlc2V0X3JlYXNvbihzc2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtNDQyLVxcdHRjcF9kb25lKHNzayk7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTEzNTY9c3RhdGljIGJvb2wgc3ViZmxvd19jaGVja19kYXRhX2F2YWlsKHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE0MzctXFx0XFx0XFx0XFx0c2tfZWF0X3NrYihzc2ssIHNrYik7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNDM4OlxcdFxcdFxcdG1wdGNwX3NlbmRfYWN0aXZlX3Jlc2V0X3JlYXNvbihzc2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTQzOS1cXHRcXHRcXHRXUklURV9PTkNFKHN1YmZsb3ctXFx1MDAzZWRhdGFfYXZhaWwsIGZhbHNlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6MTIuNTgwNDU3MzcxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjQ0NDk3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN0YXRpYyBJbmxpbmUgRnVuY3Rpb25zIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyB1c2luZyBhIGBzdGF0aWMgaW5saW5lYCBjb25zdHJ1Y3QuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgY2VydGFpbiBmdW5jdGlvbiBzeW1ib2xzIGFzIGNyaXRpY2FsLCBwYXJ0aWN1bGFybHkgYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAsIGB0Y3BfZGlzY29ubmVjdGAsIGFuZCBgdGNwX2Fib3J0YC4gVGhvc2UgYXJlIHRoZSBvbmVzIEkgbmVlZCB0byBmb2N1cyBvbiBmb3IgdGhpcyBhbmFseXNpcywga25vd2luZyB0aGV5IG1pZ2h0IGJlIGhlYXZpbHkgb3B0aW1pemVkLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBlbnZpcm9ubWVudCwgSSdtIHByZXR0eSBzdXJlIGBJTkVUYCBpcyBpbiBwbGF5IHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBUQ1AuIEJ1dCBtb3JlIGltcG9ydGFudGx5LCB0aGUgcHJlc2VuY2Ugb2YgdGhlc2UgVENQLXJlbGF0ZWQgZnVuY3Rpb25zIGxpa2VseSBpbmRpY2F0ZXMgdGhhdCBgTVBUQ1BgIGlzIGFsc28gY29uZmlndXJlZC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYE1QVENQYCBpcyBpbmRlZWQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gbmFtZSB0byBjb25maXJtIHRoaXMgaW50dWl0aW9uIGFuZCBlbnN1cmUgSSdtIHRhcmdldGluZyB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzIyLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6MTYuNTQ0OTA4OTk1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAzNjIxMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNUFRDUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvS2NvbmZpZy0xLVxcbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXFxubmV0L21wdGNwL0tjb25maWctMy1cXHRib29sIFxcXCJNUFRDUDogTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxcbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XFxubmV0L21wdGNwL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiTVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxcbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxubmV0L21wdGNwL0tjb25maWctMjYtXFx0dHJpc3RhdGUgXFxcIlRoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDoxOC4wNDg1MzY4NDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5MzEyMjgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBNUFRDUGAgaXMgdGhlIGNvcnJlY3QgcHJvdG9jb2wgaGVyZS4gR29vZCwgZ29vZC4gTm93LCBsZXQncyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgZmxvYXRpbmcgYXJvdW5kLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2g7IEkgaGF2ZSB0byBhY2NvdW50IGZvciBhbnkgcG9zc2liaWxpdGllcy4gSG1tLCB3YWl0IGEgbWludXRlLCBgVENQYCBpdHNlbGYgaXNuJ3QgYSAqY29uZmlnKiwgaXQncyB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgcHJvdG9jb2wuIEl0J3MgbW9yZSBhYm91dCBgSU5FVGAgbGF5ZXIuIEdvdCBpdC4gSSdtIG9uIHRoZSByaWdodCB0cmFjayBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzkzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6MjEuMTQxNjYxNTk5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM2NzEwOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9LY29uZmlnLTExMy1cXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcXG5uZXQvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTMzMD1jb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTMzOC1cXG5uZXQvaXB2NC9LY29uZmlnOjMzOTpjb25maWcgSU5FVF9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQwLVxcdHRyaXN0YXRlIFxcXCJJUDogQUggdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1BcXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzY4LVxcbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzgxLVxcbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXFx0Ym9vbCBcXFwiSVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zOTMtXFxubmV0L2lwdjQvS2NvbmZpZzozOTQ6Y29uZmlnIElORVRfSVBDT01QXFxubmV0L2lwdjQvS2NvbmZpZy0zOTUtXFx0dHJpc3RhdGUgXFxcIklQOiBJUENvbXAgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQwMy1cXG5uZXQvaXB2NC9LY29uZmlnOjQwNDpjb25maWcgSU5FVF9UQUJMRV9QRVJUVVJCX09SREVSXFxubmV0L2lwdjQvS2NvbmZpZy00MDUtXFx0aW50IFxcXCJJTkVUOiBTb3VyY2UgcG9ydCBwZXJ0dXJiYXRpb24gdGFibGUgc2l6ZSAoYXMgcG93ZXIgb2YgMilcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTMtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTQ6Y29uZmlnIElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnLTQxNS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTgtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTk6Y29uZmlnIElORVRfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy00MjAtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDIyLVxcbm5ldC9pcHY0L0tjb25maWc6NDIzOmNvbmZpZyBJTkVUX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQyNC1cXHR0cmlzdGF0ZSBcXFwiSU5FVDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzQtXFxubmV0L2lwdjQvS2NvbmZpZzo0MzU6Y29uZmlnIElORVRfVENQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cXHRkZXBlbmRzIG9uIElORVRfRElBR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzgtXFxubmV0L2lwdjQvS2NvbmZpZzo0Mzk6Y29uZmlnIElORVRfVURQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQ0MC1cXHR0cmlzdGF0ZSBcXFwiVURQOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQ0Ni1cXG5uZXQvaXB2NC9LY29uZmlnOjQ0Nzpjb25maWcgSU5FVF9SQVdfRElBR1xcbm5ldC9pcHY0L0tjb25maWctNDQ4LVxcdHRyaXN0YXRlIFxcXCJSQVc6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDU0LVxcbm5ldC9pcHY0L0tjb25maWc6NDU1OmNvbmZpZyBJTkVUX0RJQUdfREVTVFJPWVxcbm5ldC9pcHY0L0tjb25maWctNDU2LVxcdGJvb2wgXFxcIklORVQ6IGFsbG93IHByaXZpbGVnZWQgcHJvY2VzcyB0byBhZG1pbmlzdHJhdGl2ZWx5IGNsb3NlIHNvY2tldHNcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTM5PWNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTQ2LVxcbm5ldC9pcHY2L0tjb25maWc6NDc6Y29uZmlnIElORVQ2X0FIXFxubmV0L2lwdjYvS2NvbmZpZy00OC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogQUggdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTYxLVxcbm5ldC9pcHY2L0tjb25maWc6NjI6Y29uZmlnIElORVQ2X0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNzYtXFxubmV0L2lwdjYvS2NvbmZpZzo3Nzpjb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG5uZXQvaXB2Ni9LY29uZmlnLTc4LVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctODktXFxubmV0L2lwdjYvS2NvbmZpZzo5MDpjb25maWcgSU5FVDZfRVNQSU5UQ1BcXG5uZXQvaXB2Ni9LY29uZmlnLTkxLVxcdGJvb2wgXFxcIklQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMDEtXFxubmV0L2lwdjYvS2NvbmZpZzoxMDI6Y29uZmlnIElORVQ2X0lQQ09NUFxcbm5ldC9pcHY2L0tjb25maWctMTAzLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUENvbXAgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTEyMD1jb25maWcgSVBWNl9JTEFcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTQwLVxcbm5ldC9pcHY2L0tjb25maWc6MTQxOmNvbmZpZyBJTkVUNl9YRlJNX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMTQyLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE0NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE0Njpjb25maWcgSU5FVDZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0xNDctXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnPTE0PWlmIE1QVENQXFxubmV0L21wdGNwL0tjb25maWctMTUtXFxubmV0L21wdGNwL0tjb25maWc6MTY6Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbm5ldC9tcHRjcC9LY29uZmlnLTE3LVxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuLS1cXG5uZXQvcHNwL0tjb25maWctNC0jXFxubmV0L3BzcC9LY29uZmlnOjU6Y29uZmlnIElORVRfUFNQXFxubmV0L3BzcC9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiUFNQIFNlY3VyaXR5IFByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvc2N0cC9LY29uZmlnPTY4PWVuZGNob2ljZVxcbm5ldC9zY3RwL0tjb25maWctNjktXFxubmV0L3NjdHAvS2NvbmZpZzo3MDpjb25maWcgSU5FVF9TQ1RQX0RJQUdcXG5uZXQvc2N0cC9LY29uZmlnLTcxLVxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjIyLjU3ODM3NzA5N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTc3Mzg0NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgVENQIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgVENQIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSB0aGUgYElORVRgIG1vZHVsZS4gTGV0J3MgYnJlYWsgZG93biB0aGUga2V5IHRha2Vhd2F5cy4gVGhpcyBjaGFuZ2UgaXMgZGVlbWVkIGBXb3J0aEZ1enppbmdgLCB3aGljaCBtZWFucyBpdCdzIGEgcG90ZW50aWFsIGFyZWEgZm9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgc28gaXQgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGhvdyBhY3RpdmUgVENQIHJlc2V0cyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5LCBob3cgYWxsb2NhdGlvbiBmbGFncyBhcmUgdXNlZCB3aGVuIHRoZXkncmUgc2VudC4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFRDUCBhbmQgTVBUQ1AgbG9naWMgdG8gKmFsd2F5cyogdXNlIGBHRlBfQVRPTUlDYCBmb3IgdGhlc2UgYWxsb2NhdGlvbnMuXG5cbk15IHJlYXNvbmluZyBzdWdnZXN0cyB0aGF0IHRoaXMgY2hhbmdlIGluIGFsbG9jYXRpb24gZmxhZ3MgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSBpc3N1ZXMsIGVzcGVjaWFsbHkgaW4gaGlnaC1sb2FkIG9yIHJlc291cmNlLWNvbnN0cmFpbmVkIGVudmlyb25tZW50cy4gV2UgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHN3aXRjaGluZyB0byBgR0ZQX0FUT01JQ2AgZm9yIHRoZXNlIGNyaXRpY2FsIG5ldHdvcmsgb3BlcmF0aW9ucy5cblxuVGhlIGZ1bmN0aW9ucyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYXJlIGB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXRgLCBgdGNwX2Rpc2Nvbm5lY3RgLCBhbmQgYHRjcF9hYm9ydGAuIEknbGwgd2FudCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBzZWUgaG93IHRoaXMgbmV3IGBHRlBfQVRPTUlDYCB1c2FnZSBpbXBhY3RzIHRoZW0uXG5cblRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgdG8gcmVwcm9kdWNlIHRoZSB0YXJnZXQgYXJlIGBJTkVUYCBhbmQgYE1QVENQYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NjgsIk91dHB1dFRva2VucyI6ODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDoyNy43NTU3NjQxODdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzUxNTA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3Bfc2VuZF9hY3RpdmVfcmVzZXRcIixcbiAgICBcInRjcF9kaXNjb25uZWN0XCIsXG4gICAgXCJ0Y3BfYWJvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWxsb2NhdGlvbiBmbGFncyBmb3Igc2VuZGluZyBhY3RpdmUgVENQIHJlc2V0cyB0byBhbHdheXMgdXNlIEdGUF9BVE9NSUMsIGFsdGVyaW5nIGNvcmUgVENQIGFuZCBNUFRDUCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9zZW5kX2FjdGl2ZV9yZXNldFwiLFxuICAgIFwidGNwX2Rpc2Nvbm5lY3RcIixcbiAgICBcInRjcF9hYm9ydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhbGxvY2F0aW9uIGZsYWdzIGZvciBzZW5kaW5nIGFjdGl2ZSBUQ1AgcmVzZXRzIHRvIGFsd2F5cyB1c2UgR0ZQX0FUT01JQywgYWx0ZXJpbmcgY29yZSBUQ1AgYW5kIE1QVENQIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDoyNy44MjkyODYyOTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NjkxMjg2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDoyNy44Mjk3NDAxMDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTk2ODY3MDgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYGdmcF90IHByaW9yaXR5YCBhcmd1bWVudCBmcm9tIGB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoKWAgYW5kIGhhcmRjb2RlcyBgR0ZQX0FUT01JQ2AgZm9yIHRoZSBTS0IgYWxsb2NhdGlvbiBhbmQgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGEgc2ltcGxlIHJlZmFjdG9yaW5nIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBidWZmZXIgbGVuZ3Rocywgb3IgYWx0ZXIgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYzJkMTJiZTk5NzM0NDY1YmNjNTY3YzhkNDQ2YzZlZDQ5MDlkZTc5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDM6MzM6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oXG5pbmRleCA2NzBjMjA4NzZmMjY1Li40MzY0OTVmZjIyNzFkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmhcbisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oXG5AQCAtNzY1LDggKzc2NSw3IEBAIGludCB0Y3BfZnJhZ21lbnQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHRjcF9xdWV1ZSB0Y3BfcXVldWUsXG4gdm9pZCB0Y3Bfc2VuZF9wcm9iZTAoc3RydWN0IHNvY2sgKik7XG4gaW50IHRjcF93cml0ZV93YWtldXAoc3RydWN0IHNvY2sgKiwgaW50IG1pYik7XG4gdm9pZCB0Y3Bfc2VuZF9maW4oc3RydWN0IHNvY2sgKnNrKTtcbi12b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IHByaW9yaXR5LFxuLVx0XHRcdCAgIGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb24pO1xuK3ZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbik7XG4gaW50IHRjcF9zZW5kX3N5bmFjayhzdHJ1Y3Qgc29jayAqKTtcbiB2b2lkIHRjcF9wdXNoX29uZShzdHJ1Y3Qgc29jayAqLCB1bnNpZ25lZCBpbnQgbXNzX25vdyk7XG4gdm9pZCBfX3RjcF9zZW5kX2FjayhzdHJ1Y3Qgc29jayAqc2ssIHUzMiByY3Zfbnh0LCB1MTYgZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IGI0MjM3ZDBlOTk0ZDYuLjkzZDcyM2Q4YzEwOTggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuKysrIGIvbmV0L2lwdjQvdGNwLmNcbkBAIC0zMTgyLDggKzMxODIsNyBAQCB2b2lkIF9fdGNwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KVxuIFx0XHQvKiBVbnJlYWQgZGF0YSB3YXMgdG9zc2VkLCB6YXAgdGhlIGNvbm5lY3Rpb24uICovXG4gXHRcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRPTkNMT1NFKTtcbiBcdFx0dGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcbi1cdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBzay1cdTAwM2Vza19hbGxvY2F0aW9uLFxuLVx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpO1xuK1x0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX0NMT1NFKTtcbiBcdH0gZWxzZSBpZiAoc29ja19mbGFnKHNrLCBTT0NLX0xJTkdFUikgXHUwMDI2XHUwMDI2ICFzay1cdTAwM2Vza19saW5nZXJ0aW1lKSB7XG4gXHRcdC8qIENoZWNrIHplcm8gbGluZ2VyIF9hZnRlcl8gY2hlY2tpbmcgZm9yIHVucmVhZCBkYXRhLiAqL1xuIFx0XHRzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpc2Nvbm5lY3Qoc2ssIDApO1xuQEAgLTMyNTcsNyArMzI1Niw3IEBAIHZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG4gXHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuIFx0XHRpZiAoUkVBRF9PTkNFKHRwLVx1MDAzZWxpbmdlcjIpIFx1MDAzYyAwKSB7XG4gXHRcdFx0dGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcbi1cdFx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsXG4rXHRcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLFxuIFx0XHRcdFx0XHQgICAgICBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9MSU5HRVIpO1xuIFx0XHRcdF9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksXG4gXHRcdFx0XHRcdExJTlVYX01JQl9UQ1BBQk9SVE9OTElOR0VSKTtcbkBAIC0zMjc2LDcgKzMyNzUsNyBAQCB2b2lkIF9fdGNwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KVxuIFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TRSkge1xuIFx0XHRpZiAodGNwX2NoZWNrX29vbShzaywgMCkpIHtcbiBcdFx0XHR0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xuLVx0XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQyxcbitcdFx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssXG4gXHRcdFx0XHRcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX01FTU9SWSk7XG4gXHRcdFx0X19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcbiBcdFx0XHRcdFx0TElOVVhfTUlCX1RDUEFCT1JUT05NRU1PUlkpO1xuQEAgLTMzNzcsMTQgKzMzNzYsMTQgQEAgaW50IHRjcF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxuIFx0fSBlbHNlIGlmICh1bmxpa2VseSh0cC1cdTAwM2VyZXBhaXIpKSB7XG4gXHRcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfZXJyLCBFQ09OTkFCT1JURUQpO1xuIFx0fSBlbHNlIGlmICh0Y3BfbmVlZF9yZXNldChvbGRfc3RhdGUpKSB7XG4tXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgZ2ZwX2FueSgpLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XG4rXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpO1xuIFx0XHRXUklURV9PTkNFKHNrLVx1MDAzZXNrX2VyciwgRUNPTk5SRVNFVCk7XG4gXHR9IGVsc2UgaWYgKHRwLVx1MDAzZXNuZF9ueHQgIT0gdHAtXHUwMDNld3JpdGVfc2VxIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAoMSBcdTAwM2NcdTAwM2Mgb2xkX3N0YXRlKSBcdTAwMjYgKFRDUEZfQ0xPU0lORyB8IFRDUEZfTEFTVF9BQ0spKSB7XG4gXHRcdC8qIFRoZSBsYXN0IGNoZWNrIGFkanVzdHMgZm9yIGRpc2NyZXBhbmN5IG9mIExpbnV4IHdydC4gUkZDXG4gXHRcdCAqIHN0YXRlc1xuIFx0XHQgKi9cbi1cdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBnZnBfYW55KCksXG4rXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcbiBcdFx0XHRcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0RJU0NPTk5FQ1RfV0lUSF9EQVRBKTtcbiBcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19lcnIsIEVDT05OUkVTRVQpO1xuIFx0fSBlbHNlIGlmIChvbGRfc3RhdGUgPT0gVENQX1NZTl9TRU5UKVxuQEAgLTUxNDcsOCArNTE0Niw3IEBAIGludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxuIFx0YmhfbG9ja19zb2NrKHNrKTtcbiBcbiBcdGlmICh0Y3BfbmVlZF9yZXNldChzay1cdTAwM2Vza19zdGF0ZSkpXG4tXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQyxcbi1cdFx0XHRcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTtcbitcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XG4gXHR0Y3BfZG9uZV93aXRoX2Vycm9yKHNrLCBlcnIpO1xuIFxuIFx0YmhfdW5sb2NrX3NvY2soc2spO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuaW5kZXggZjI3MDlkNTg1ZWRiZC4uMTlhNzk5ZTVkNWNlMyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5AQCAtMzg0OSwxNSArMzg0OSwxNCBAQCB2b2lkIHRjcF9zZW5kX2ZpbihzdHJ1Y3Qgc29jayAqc2spXG4gICogd2FzIHVucmVhZCBkYXRhIGluIHRoZSByZWNlaXZlIHF1ZXVlLiAgVGhpcyBiZWhhdmlvciBpcyByZWNvbW1lbmRlZFxuICAqIGJ5IFJGQyAyNTI1LCBzZWN0aW9uIDIuMTcuICAtRGF2ZU1cbiAgKi9cbi12b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IHByaW9yaXR5LFxuLVx0XHRcdCAgIGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb24pXG4rdm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHNrX3JzdF9yZWFzb24gcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4gXHRUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9PVVRSU1RTKTtcbiBcbiBcdC8qIE5PVEU6IE5vIFRDUCBvcHRpb25zIGF0dGFjaGVkIGFuZCB3ZSBuZXZlciByZXRyYW5zbWl0IHRoaXMuICovXG4tXHRza2IgPSBhbGxvY19za2IoTUFYX1RDUF9IRUFERVIsIHByaW9yaXR5KTtcbitcdHNrYiA9IGFsbG9jX3NrYihNQVhfVENQX0hFQURFUiwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIXNrYikge1xuIFx0XHRORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUEFCT1JURkFJTEVEKTtcbiBcdFx0cmV0dXJuO1xuQEAgLTM4NjksNyArMzg2OCw3IEBAIHZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZ2ZwX3QgcHJpb3JpdHksXG4gXHRcdFx0ICAgICBUQ1BIRFJfQUNLIHwgVENQSERSX1JTVCk7XG4gXHR0Y3BfbXN0YW1wX3JlZnJlc2godGNwX3NrKHNrKSk7XG4gXHQvKiBTZW5kIGl0IG9mZi4gKi9cbi1cdGlmICh0Y3BfdHJhbnNtaXRfc2tiKHNrLCBza2IsIDAsIHByaW9yaXR5KSlcbitcdGlmICh0Y3BfdHJhbnNtaXRfc2tiKHNrLCBza2IsIDAsIEdGUF9BVE9NSUMpKVxuIFx0XHRORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUEFCT1JURkFJTEVEKTtcbiBcbiBcdC8qIHNrYiBvZiB0cmFjZV90Y3Bfc2VuZF9yZXNldCgpIGtlZXBzIHRoZSBza2IgdGhhdCBjYXVzZWQgUlNULFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF90aW1lci5jIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmNcbmluZGV4IDEwMzhlN2JhOWMyZWIuLmU1NmVhZTRiYzM0MWUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfdGltZXIuY1xuKysrIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmNcbkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIGludCB0Y3Bfb3V0X29mX3Jlc291cmNlcyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZG9fcmVzZXQpXG4gXHRcdCAgICAoIXRwLVx1MDAzZXNuZF93bmQgXHUwMDI2XHUwMDI2ICF0cC1cdTAwM2VwYWNrZXRzX291dCkpXG4gXHRcdFx0ZG9fcmVzZXQgPSB0cnVlO1xuIFx0XHRpZiAoZG9fcmVzZXQpXG4tXHRcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLFxuK1x0XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcbiBcdFx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fTUVNT1JZKTtcbiBcdFx0dGNwX2RvbmUoc2spO1xuIFx0XHRfX05FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRPTk1FTU9SWSk7XG5AQCAtODA5LDcgKzgwOSw3IEBAIHN0YXRpYyB2b2lkIHRjcF9rZWVwYWxpdmVfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHR9XG4gXHRcdH1cbi1cdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XG4rXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpO1xuIFx0XHRnb3RvIGRlYXRoO1xuIFx0fVxuIFxuQEAgLTgzNiw3ICs4MzYsNyBAQCBzdGF0aWMgdm9pZCB0Y3Bfa2VlcGFsaXZlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0XHQgICAgaWNzay1cdTAwM2VpY3NrX3Byb2Jlc19vdXQgXHUwMDNlIDApIHx8XG4gXHRcdCAgICAodXNlcl90aW1lb3V0ID09IDAgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBpY3NrLVx1MDAzZWljc2tfcHJvYmVzX291dCBcdTAwM2U9IGtlZXBhbGl2ZV9wcm9iZXModHApKSkge1xuLVx0XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQyxcbitcdFx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssXG4gXHRcdFx0XHRcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0tFRVBBTElWRV9USU1FT1VUKTtcbiBcdFx0XHR0Y3Bfd3JpdGVfZXJyKHNrKTtcbiBcdFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCBiNDc0ZDAzNjIwYTc1Li5lMWYwOGY3MWNkYjE2IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtMzEwOSw4ICszMTA5LDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfZG9fZmFzdGNsb3NlKHN0cnVjdCBzb2NrICpzaylcbiBcdFx0ICovXG4gXHRcdGluZXRfY3NrKHNzayktXHUwMDNlaWNza19hY2sucmN2X21zcyA9IFRDUF9NSU5fTVNTO1xuIFxuLVx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3NrLCBzc2stXHUwMDNlc2tfYWxsb2NhdGlvbixcbi1cdFx0XHRcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX0NMT1NFKTtcbitcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNzaywgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpO1xuIHVubG9jazpcbiBcdFx0cmVsZWFzZV9zb2NrKHNzayk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggMDZhMTA3ZDRlODM5Mi4uODdjY2I4NGU5OTI3YyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTY5MCw3ICs2OTAsNyBAQCBtcHRjcF9zZW5kX2FjdGl2ZV9yZXNldF9yZWFzb24oc3RydWN0IHNvY2sgKnNrKVxuIFx0ZW51bSBza19yc3RfcmVhc29uIHJlYXNvbjtcbiBcbiBcdHJlYXNvbiA9IHNrX3JzdF9jb252ZXJ0X21wdGNwX3JlYXNvbihzdWJmbG93LVx1MDAzZXJlc2V0X3JlYXNvbik7XG4tXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsIHJlYXNvbik7XG4rXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIHJlYXNvbik7XG4gfVxuIFxuIC8qIE1hZGUgdGhlIGZ3ZCBtZW0gY2FycmllZCBieSB0aGUgZ2l2ZW4gc2tiIGF2YWlsYWJsZSB0byB0aGUgbXNrLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6MjcuODI5NzQxMTY1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5Njg2NDY4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFRDUCBSZXNldCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBFc3NlbnRpYWxseSwgSSdtIHNlZWluZyB0aGF0IHRoZSBgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0YCBmdW5jdGlvbidzIHNpZ25hdHVyZSBpcyBiZWluZyBzdHJlYW1saW5lZC4gVGhlIGBnZnBfdCBwcmlvcml0eWAgcGFyYW1ldGVyIGlzIGJlaW5nIGRyb3BwZWQuIEluc3RlYWQgb2YgZHluYW1pY2FsbHkgcGFzc2luZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJpb3JpdHkgZmxhZyB0byBgYWxsb2Nfc2tiYCBhbmQgYHRjcF90cmFuc21pdF9za2JgLCB0aGUgcGF0Y2ggaGFyZGNvZGVzIGBHRlBfQVRPTUlDYC5cblxuU3BlY2lmaWNhbGx5LCB0aGUgZGlmZnMgc2hvdzogdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBpdHNlbGYgaXMgY2hhbmdpbmcsIGFuZCBpbnNpZGUgYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAsIHRoZSBgYWxsb2Nfc2tiYCBjYWxsIGFuZCB0aGUgYHRjcF90cmFuc21pdF9za2JgIGNhbGwgbm93IHVzZSB0aGUgaGFyZGNvZGVkIGBHRlBfQVRPTUlDYC4gTmF0dXJhbGx5LCBhbGwgdGhlIGNhbGxpbmcgc2l0ZXMgZm9yIHRoaXMgZnVuY3Rpb24gaGF2ZSBhbHNvIGJlZW4gdXBkYXRlZCB0byByZWZsZWN0IHRoZSBzaWduYXR1cmUgY2hhbmdlLCByZW1vdmluZyB0aGUgbm93LXVubmVjZXNzYXJ5IGBwcmlvcml0eWAgYXJndW1lbnQuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcz8gQWZ0ZXIgbG9va2luZyBpdCBvdmVyIGNhcmVmdWxseSwgdGhlIGFuc3dlciBpcyBuby4gVGhpcyBwYXRjaCAqb25seSogY2hhbmdlcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgdXNlZCBieSB0aGUgU0tCLiBJdOKAmXMgYSBwdXJlIHJlZmFjdG9yaW5nIGFuZCBzaW1wbGlmaWNhdGlvbiwgcmVwbGFjaW5nIGEgdmFyaWFibGUgd2l0aCBhIGNvbnN0YW50LiBJdCdzIG5vdCBpbnRyb2R1Y2luZyBhbnkgbmV3IGZpZWxkcywgbW9kaWZ5aW5nIGRhdGEgc3RydWN0dXJlcyBvciBzaXplcywgb3IgY2hhbmdpbmcgaG93IGRhdGEgaXMgaW5pdGlhbGl6ZWQuIEknbSBzYXRpc2ZpZWQgdGhhdCB0aGUgZXhpc3RpbmcgU0tCIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2ssIHdoaWNoIGhhbmRsZXMgaGVhZGVyIGNyZWF0aW9uIGFuZCBkYXRhIHNldHVwLCBpc24ndCBiZWluZyBhbHRlcmVkLCBqdXN0IHRoZSBhbGxvY2F0aW9uIGNvbnRleHQuIGBhbGxvY19za2JgIGl0c2VsZiBkb2Vzbid0IHplcm8gdGhlIGRhdGEsIGJ1dCB0aGUgc3Vic2VxdWVudCBjYWxscyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2sgZ3VhcmFudGVlIHRoYXQgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdHJhbnNtaXNzaW9uLlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbid0IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHBlcmZlY3RseSBhZGVxdWF0ZSB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgdGhpcyByZWZhY3RvcmluZyAqY291bGQqIGludHJvZHVjZSAtIHRob3VnaCBJIGRvbid0IHNlZSBhbnkgcmVhbCByaXNrLiBUaGUgcGF0Y2ggcHJpbWFyaWx5IGFsdGVycyBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyB3aXRoaW4gYSB3ZWxsLWVzdGFibGlzaGVkIGFuZCB0ZXN0ZWQgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjM0LCJPdXRwdXRUb2tlbnMiOjEzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjM3Ljc5ODM5MTMxM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYGdmcF90IHByaW9yaXR5YCBhcmd1bWVudCBmcm9tIGB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoKWAgYW5kIGhhcmRjb2RlcyBgR0ZQX0FUT01JQ2AgZm9yIHRoZSBTS0IgYWxsb2NhdGlvbiBhbmQgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGEgc2ltcGxlIHJlZmFjdG9yaW5nIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBidWZmZXIgbGVuZ3Rocywgb3IgYWx0ZXIgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBgZ2ZwX3QgcHJpb3JpdHlgIGFyZ3VtZW50IGZyb20gYHRjcF9zZW5kX2FjdGl2ZV9yZXNldCgpYCBhbmQgaGFyZGNvZGVzIGBHRlBfQVRPTUlDYCBmb3IgdGhlIFNLQiBhbGxvY2F0aW9uIGFuZCB0cmFuc21pc3Npb24uIFRoaXMgaXMgYSBzaW1wbGUgcmVmYWN0b3Jpbmcgb2YgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJ1ZmZlciBsZW5ndGhzLCBvciBhbHRlciBpbml0aWFsaXphdGlvbiBsb2dpYy4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzaW5nIGl0IGluIGNvbnRyb2wgZmxvdy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHBlcmZlY3RseSBhZGVxdWF0ZSB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxgcdm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 02:49:34 +0000 UTC FinishedAt: 2026-08-25 03:34:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "b70b7b71561f2be1183b6046964d950c2b203bfc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "MPTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "b70b7b71561f2be1183b6046964d950c2b203bfc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "MPTCP" ], "series_id": "b07ffe60-8d36-4afa-aa48-37a554e791ab" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_send_active_reset", "tcp_disconnect", "tcp_abort" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQmIzM0OywKICAgICYjMzQ7dGNwX2Rpc2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7dGNwX2Fib3J0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYGdmcF90IHByaW9yaXR5YCBhcmd1bWVudCBmcm9tIGB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoKWAgYW5kIGhhcmRjb2RlcyBgR0ZQX0FUT01JQ2AgZm9yIHRoZSBTS0IgYWxsb2NhdGlvbiBhbmQgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGEgc2ltcGxlIHJlZmFjdG9yaW5nIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBidWZmZXIgbGVuZ3Rocywgb3IgYWx0ZXIgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGFsbG9jYXRpb24gZmxhZ3MgZm9yIHNlbmRpbmcgYWN0aXZlIFRDUCByZXNldHMgdG8gYWx3YXlzIHVzZSBHRlBfQVRPTUlDLCBhbHRlcmluZyBjb3JlIFRDUCBhbmQgTVBUQ1AgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYzJkMTJiZTk5NzM0NDY1YmNjNTY3YzhkNDQ2YzZlZDQ5MDlkZTc5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDM6MzM6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaFxuaW5kZXggNjcwYzIwODc2ZjI2NS4uNDM2NDk1ZmYyMjcxZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC90Y3AuaFxuQEAgLTc2NSw4ICYjNDM7NzY1LDcgQEAgaW50IHRjcF9mcmFnbWVudChzdHJ1Y3Qgc29jayAqc2ssIGVudW0gdGNwX3F1ZXVlIHRjcF9xdWV1ZSxcbiB2b2lkIHRjcF9zZW5kX3Byb2JlMChzdHJ1Y3Qgc29jayAqKTtcbiBpbnQgdGNwX3dyaXRlX3dha2V1cChzdHJ1Y3Qgc29jayAqLCBpbnQgbWliKTtcbiB2b2lkIHRjcF9zZW5kX2ZpbihzdHJ1Y3Qgc29jayAqc2spO1xuLXZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZ2ZwX3QgcHJpb3JpdHksXG4tXHRcdFx0ICAgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbik7XG4mIzQzO3ZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbik7XG4gaW50IHRjcF9zZW5kX3N5bmFjayhzdHJ1Y3Qgc29jayAqKTtcbiB2b2lkIHRjcF9wdXNoX29uZShzdHJ1Y3Qgc29jayAqLCB1bnNpZ25lZCBpbnQgbXNzX25vdyk7XG4gdm9pZCBfX3RjcF9zZW5kX2FjayhzdHJ1Y3Qgc29jayAqc2ssIHUzMiByY3Zfbnh0LCB1MTYgZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IGI0MjM3ZDBlOTk0ZDYuLjkzZDcyM2Q4YzEwOTggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmNcbkBAIC0zMTgyLDggJiM0MzszMTgyLDcgQEAgdm9pZCBfX3RjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcbiBcdFx0LyogVW5yZWFkIGRhdGEgd2FzIHRvc3NlZCwgemFwIHRoZSBjb25uZWN0aW9uLiAqL1xuIFx0XHRORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUEFCT1JUT05DTE9TRSk7XG4gXHRcdHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XG4tXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgc2stXHUwMDNlc2tfYWxsb2NhdGlvbixcbi1cdFx0XHRcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX0NMT1NFKTtcbiYjNDM7XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpO1xuIFx0fSBlbHNlIGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfTElOR0VSKSBcdTAwMjZcdTAwMjYgIXNrLVx1MDAzZXNrX2xpbmdlcnRpbWUpIHtcbiBcdFx0LyogQ2hlY2sgemVybyBsaW5nZXIgX2FmdGVyXyBjaGVja2luZyBmb3IgdW5yZWFkIGRhdGEuICovXG4gXHRcdHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlzY29ubmVjdChzaywgMCk7XG5AQCAtMzI1Nyw3ICYjNDM7MzI1Niw3IEBAIHZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG4gXHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuIFx0XHRpZiAoUkVBRF9PTkNFKHRwLVx1MDAzZWxpbmdlcjIpIFx1MDAzYyAwKSB7XG4gXHRcdFx0dGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcbi1cdFx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsXG4mIzQzO1x0XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcbiBcdFx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fTElOR0VSKTtcbiBcdFx0XHRfX05FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLFxuIFx0XHRcdFx0XHRMSU5VWF9NSUJfVENQQUJPUlRPTkxJTkdFUik7XG5AQCAtMzI3Niw3ICYjNDM7MzI3NSw3IEBAIHZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG4gXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0NMT1NFKSB7XG4gXHRcdGlmICh0Y3BfY2hlY2tfb29tKHNrLCAwKSkge1xuIFx0XHRcdHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XG4tXHRcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLFxuJiM0MztcdFx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssXG4gXHRcdFx0XHRcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX01FTU9SWSk7XG4gXHRcdFx0X19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcbiBcdFx0XHRcdFx0TElOVVhfTUlCX1RDUEFCT1JUT05NRU1PUlkpO1xuQEAgLTMzNzcsMTQgJiM0MzszMzc2LDE0IEBAIGludCB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbiBcdH0gZWxzZSBpZiAodW5saWtlbHkodHAtXHUwMDNlcmVwYWlyKSkge1xuIFx0XHRXUklURV9PTkNFKHNrLVx1MDAzZXNrX2VyciwgRUNPTk5BQk9SVEVEKTtcbiBcdH0gZWxzZSBpZiAodGNwX25lZWRfcmVzZXQob2xkX3N0YXRlKSkge1xuLVx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIGdmcF9hbnkoKSwgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpO1xuJiM0MztcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XG4gXHRcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfZXJyLCBFQ09OTlJFU0VUKTtcbiBcdH0gZWxzZSBpZiAodHAtXHUwMDNlc25kX254dCAhPSB0cC1cdTAwM2V3cml0ZV9zZXEgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICgxIFx1MDAzY1x1MDAzYyBvbGRfc3RhdGUpIFx1MDAyNiAoVENQRl9DTE9TSU5HIHwgVENQRl9MQVNUX0FDSykpIHtcbiBcdFx0LyogVGhlIGxhc3QgY2hlY2sgYWRqdXN0cyBmb3IgZGlzY3JlcGFuY3kgb2YgTGludXggd3J0LiBSRkNcbiBcdFx0ICogc3RhdGVzXG4gXHRcdCAqL1xuLVx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIGdmcF9hbnkoKSxcbiYjNDM7XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcbiBcdFx0XHRcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0RJU0NPTk5FQ1RfV0lUSF9EQVRBKTtcbiBcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19lcnIsIEVDT05OUkVTRVQpO1xuIFx0fSBlbHNlIGlmIChvbGRfc3RhdGUgPT0gVENQX1NZTl9TRU5UKVxuQEAgLTUxNDcsOCAmIzQzOzUxNDYsNyBAQCBpbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcbiBcdGJoX2xvY2tfc29jayhzayk7XG4gXG4gXHRpZiAodGNwX25lZWRfcmVzZXQoc2stXHUwMDNlc2tfc3RhdGUpKVxuLVx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsXG4tXHRcdFx0XHQgICAgICBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XG4mIzQzO1x0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTtcbiBcdHRjcF9kb25lX3dpdGhfZXJyb3Ioc2ssIGVycik7XG4gXG4gXHRiaF91bmxvY2tfc29jayhzayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5pbmRleCBmMjcwOWQ1ODVlZGJkLi4xOWE3OTllNWQ1Y2UzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcbkBAIC0zODQ5LDE1ICYjNDM7Mzg0OSwxNCBAQCB2b2lkIHRjcF9zZW5kX2ZpbihzdHJ1Y3Qgc29jayAqc2spXG4gICogd2FzIHVucmVhZCBkYXRhIGluIHRoZSByZWNlaXZlIHF1ZXVlLiAgVGhpcyBiZWhhdmlvciBpcyByZWNvbW1lbmRlZFxuICAqIGJ5IFJGQyAyNTI1LCBzZWN0aW9uIDIuMTcuICAtRGF2ZU1cbiAgKi9cbi12b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IHByaW9yaXR5LFxuLVx0XHRcdCAgIGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb24pXG4mIzQzO3ZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbilcbiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuIFx0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfT1VUUlNUUyk7XG4gXG4gXHQvKiBOT1RFOiBObyBUQ1Agb3B0aW9ucyBhdHRhY2hlZCBhbmQgd2UgbmV2ZXIgcmV0cmFuc21pdCB0aGlzLiAqL1xuLVx0c2tiID0gYWxsb2Nfc2tiKE1BWF9UQ1BfSEVBREVSLCBwcmlvcml0eSk7XG4mIzQzO1x0c2tiID0gYWxsb2Nfc2tiKE1BWF9UQ1BfSEVBREVSLCBHRlBfQVRPTUlDKTtcbiBcdGlmICghc2tiKSB7XG4gXHRcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRGQUlMRUQpO1xuIFx0XHRyZXR1cm47XG5AQCAtMzg2OSw3ICYjNDM7Mzg2OCw3IEBAIHZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZ2ZwX3QgcHJpb3JpdHksXG4gXHRcdFx0ICAgICBUQ1BIRFJfQUNLIHwgVENQSERSX1JTVCk7XG4gXHR0Y3BfbXN0YW1wX3JlZnJlc2godGNwX3NrKHNrKSk7XG4gXHQvKiBTZW5kIGl0IG9mZi4gKi9cbi1cdGlmICh0Y3BfdHJhbnNtaXRfc2tiKHNrLCBza2IsIDAsIHByaW9yaXR5KSlcbiYjNDM7XHRpZiAodGNwX3RyYW5zbWl0X3NrYihzaywgc2tiLCAwLCBHRlBfQVRPTUlDKSlcbiBcdFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVEZBSUxFRCk7XG4gXG4gXHQvKiBza2Igb2YgdHJhY2VfdGNwX3NlbmRfcmVzZXQoKSBrZWVwcyB0aGUgc2tiIHRoYXQgY2F1c2VkIFJTVCxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jXG5pbmRleCAxMDM4ZTdiYTljMmViLi5lNTZlYWU0YmMzNDFlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX3RpbWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF90aW1lci5jXG5AQCAtMTI2LDcgJiM0MzsxMjYsNyBAQCBzdGF0aWMgaW50IHRjcF9vdXRfb2ZfcmVzb3VyY2VzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBkb19yZXNldClcbiBcdFx0ICAgICghdHAtXHUwMDNlc25kX3duZCBcdTAwMjZcdTAwMjYgIXRwLVx1MDAzZXBhY2tldHNfb3V0KSlcbiBcdFx0XHRkb19yZXNldCA9IHRydWU7XG4gXHRcdGlmIChkb19yZXNldClcbi1cdFx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsXG4mIzQzO1x0XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcbiBcdFx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fTUVNT1JZKTtcbiBcdFx0dGNwX2RvbmUoc2spO1xuIFx0XHRfX05FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRPTk1FTU9SWSk7XG5AQCAtODA5LDcgJiM0Mzs4MDksNyBAQCBzdGF0aWMgdm9pZCB0Y3Bfa2VlcGFsaXZlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0XHRcdFx0Z290byBvdXQ7XG4gXHRcdFx0fVxuIFx0XHR9XG4tXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQywgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpO1xuJiM0MztcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XG4gXHRcdGdvdG8gZGVhdGg7XG4gXHR9XG4gXG5AQCAtODM2LDcgJiM0Mzs4MzYsNyBAQCBzdGF0aWMgdm9pZCB0Y3Bfa2VlcGFsaXZlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0XHQgICAgaWNzay1cdTAwM2VpY3NrX3Byb2Jlc19vdXQgXHUwMDNlIDApIHx8XG4gXHRcdCAgICAodXNlcl90aW1lb3V0ID09IDAgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBpY3NrLVx1MDAzZWljc2tfcHJvYmVzX291dCBcdTAwM2U9IGtlZXBhbGl2ZV9wcm9iZXModHApKSkge1xuLVx0XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQyxcbiYjNDM7XHRcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLFxuIFx0XHRcdFx0XHQgICAgICBTS19SU1RfUkVBU09OX1RDUF9LRUVQQUxJVkVfVElNRU9VVCk7XG4gXHRcdFx0dGNwX3dyaXRlX2Vycihzayk7XG4gXHRcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggYjQ3NGQwMzYyMGE3NS4uZTFmMDhmNzFjZGIxNiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTMxMDksOCAmIzQzOzMxMDksNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF9kb19mYXN0Y2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHQgKi9cbiBcdFx0aW5ldF9jc2soc3NrKS1cdTAwM2VpY3NrX2Fjay5yY3ZfbXNzID0gVENQX01JTl9NU1M7XG4gXG4tXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzc2ssIHNzay1cdTAwM2Vza19hbGxvY2F0aW9uLFxuLVx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpO1xuJiM0MztcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNzaywgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpO1xuIHVubG9jazpcbiBcdFx0cmVsZWFzZV9zb2NrKHNzayk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggMDZhMTA3ZDRlODM5Mi4uODdjY2I4NGU5OTI3YyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTY5MCw3ICYjNDM7NjkwLDcgQEAgbXB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXRfcmVhc29uKHN0cnVjdCBzb2NrICpzaylcbiBcdGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb247XG4gXG4gXHRyZWFzb24gPSBza19yc3RfY29udmVydF9tcHRjcF9yZWFzb24oc3ViZmxvdy1cdTAwM2VyZXNldF9yZWFzb24pO1xuLVx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLCByZWFzb24pO1xuJiM0MztcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgcmVhc29uKTtcbiB9XG4gXG4gLyogTWFkZSB0aGUgZndkIG1lbSBjYXJyaWVkIGJ5IHRoZSBnaXZlbiBza2IgYXZhaWxhYmxlIHRvIHRoZSBtc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQmIzM0OywKICAgICYjMzQ7dGNwX2Rpc2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7dGNwX2Fib3J0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhbGxvY2F0aW9uIGZsYWdzIGZvciBzZW5kaW5nIGFjdGl2ZSBUQ1AgcmVzZXRzIHRvIGFsd2F5cyB1c2UgR0ZQX0FUT01JQywgYWx0ZXJpbmcgY29yZSBUQ1AgYW5kIE1QVENQIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWMyZDEyYmU5OTczNDQ2NWJjYzU2N2M4ZDQ0NmM2ZWQ0OTA5ZGU3OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDAzOjMzOjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCA2NzBjMjA4NzZmMjY1Li40MzY0OTVmZjIyNzFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtNzY1LDggJiM0Mzs3NjUsNyBAQCBpbnQgdGNwX2ZyYWdtZW50KHN0cnVjdCBzb2NrICpzaywgZW51bSB0Y3BfcXVldWUgdGNwX3F1ZXVlLAogdm9pZCB0Y3Bfc2VuZF9wcm9iZTAoc3RydWN0IHNvY2sgKik7CiBpbnQgdGNwX3dyaXRlX3dha2V1cChzdHJ1Y3Qgc29jayAqLCBpbnQgbWliKTsKIHZvaWQgdGNwX3NlbmRfZmluKHN0cnVjdCBzb2NrICpzayk7Ci12b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IHByaW9yaXR5LAotCQkJICAgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbik7CiYjNDM7dm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHNrX3JzdF9yZWFzb24gcmVhc29uKTsKIGludCB0Y3Bfc2VuZF9zeW5hY2soc3RydWN0IHNvY2sgKik7CiB2b2lkIHRjcF9wdXNoX29uZShzdHJ1Y3Qgc29jayAqLCB1bnNpZ25lZCBpbnQgbXNzX25vdyk7CiB2b2lkIF9fdGNwX3NlbmRfYWNrKHN0cnVjdCBzb2NrICpzaywgdTMyIHJjdl9ueHQsIHUxNiBmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IGI0MjM3ZDBlOTk0ZDYuLjkzZDcyM2Q4YzEwOTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jCkBAIC0zMTgyLDggJiM0MzszMTgyLDcgQEAgdm9pZCBfX3RjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dCkKIAkJLyogVW5yZWFkIGRhdGEgd2FzIHRvc3NlZCwgemFwIHRoZSBjb25uZWN0aW9uLiAqLwogCQlORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUEFCT1JUT05DTE9TRSk7CiAJCXRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7Ci0JCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgc2stJmd0O3NrX2FsbG9jYXRpb24sCi0JCQkJICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpOwomIzQzOwkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9DTE9TRSk7CiAJfSBlbHNlIGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfTElOR0VSKSAmYW1wOyZhbXA7ICFzay0mZ3Q7c2tfbGluZ2VydGltZSkgewogCQkvKiBDaGVjayB6ZXJvIGxpbmdlciBfYWZ0ZXJfIGNoZWNraW5nIGZvciB1bnJlYWQgZGF0YS4gKi8KIAkJc2stJmd0O3NrX3Byb3QtJmd0O2Rpc2Nvbm5lY3Qoc2ssIDApOwpAQCAtMzI1Nyw3ICYjNDM7MzI1Niw3IEBAIHZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCiAJCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCQlpZiAoUkVBRF9PTkNFKHRwLSZndDtsaW5nZXIyKSAmbHQ7IDApIHsKIAkJCXRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7Ci0JCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsCiYjNDM7CQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLAogCQkJCQkgICAgICBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9MSU5HRVIpOwogCQkJX19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwKIAkJCQkJTElOVVhfTUlCX1RDUEFCT1JUT05MSU5HRVIpOwpAQCAtMzI3Niw3ICYjNDM7MzI3NSw3IEBAIHZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCiAJaWYgKHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfQ0xPU0UpIHsKIAkJaWYgKHRjcF9jaGVja19vb20oc2ssIDApKSB7CiAJCQl0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpOwotCQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLAomIzQzOwkJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywKIAkJCQkJICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fTUVNT1JZKTsKIAkJCV9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksCiAJCQkJCUxJTlVYX01JQl9UQ1BBQk9SVE9OTUVNT1JZKTsKQEAgLTMzNzcsMTQgJiM0MzszMzc2LDE0IEBAIGludCB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncykKIAl9IGVsc2UgaWYgKHVubGlrZWx5KHRwLSZndDtyZXBhaXIpKSB7CiAJCVdSSVRFX09OQ0Uoc2stJmd0O3NrX2VyciwgRUNPTk5BQk9SVEVEKTsKIAl9IGVsc2UgaWYgKHRjcF9uZWVkX3Jlc2V0KG9sZF9zdGF0ZSkpIHsKLQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBnZnBfYW55KCksIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTsKJiM0MzsJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpOwogCQlXUklURV9PTkNFKHNrLSZndDtza19lcnIsIEVDT05OUkVTRVQpOwogCX0gZWxzZSBpZiAodHAtJmd0O3NuZF9ueHQgIT0gdHAtJmd0O3dyaXRlX3NlcSAmYW1wOyZhbXA7CiAJCSAgICgxICZsdDsmbHQ7IG9sZF9zdGF0ZSkgJmFtcDsgKFRDUEZfQ0xPU0lORyB8IFRDUEZfTEFTVF9BQ0spKSB7CiAJCS8qIFRoZSBsYXN0IGNoZWNrIGFkanVzdHMgZm9yIGRpc2NyZXBhbmN5IG9mIExpbnV4IHdydC4gUkZDCiAJCSAqIHN0YXRlcwogCQkgKi8KLQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBnZnBfYW55KCksCiYjNDM7CQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssCiAJCQkJICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfRElTQ09OTkVDVF9XSVRIX0RBVEEpOwogCQlXUklURV9PTkNFKHNrLSZndDtza19lcnIsIEVDT05OUkVTRVQpOwogCX0gZWxzZSBpZiAob2xkX3N0YXRlID09IFRDUF9TWU5fU0VOVCkKQEAgLTUxNDcsOCAmIzQzOzUxNDYsNyBAQCBpbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycikKIAliaF9sb2NrX3NvY2soc2spOwogCiAJaWYgKHRjcF9uZWVkX3Jlc2V0KHNrLSZndDtza19zdGF0ZSkpCi0JCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQywKLQkJCQkgICAgICBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7CiYjNDM7CQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTsKIAl0Y3BfZG9uZV93aXRoX2Vycm9yKHNrLCBlcnIpOwogCiAJYmhfdW5sb2NrX3NvY2soc2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IGYyNzA5ZDU4NWVkYmQuLjE5YTc5OWU1ZDVjZTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTM4NDksMTUgJiM0MzszODQ5LDE0IEBAIHZvaWQgdGNwX3NlbmRfZmluKHN0cnVjdCBzb2NrICpzaykKICAqIHdhcyB1bnJlYWQgZGF0YSBpbiB0aGUgcmVjZWl2ZSBxdWV1ZS4gIFRoaXMgYmVoYXZpb3IgaXMgcmVjb21tZW5kZWQKICAqIGJ5IFJGQyAyNTI1LCBzZWN0aW9uIDIuMTcuICAtRGF2ZU0KICAqLwotdm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBnZnBfdCBwcmlvcml0eSwKLQkJCSAgIGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb24pCiYjNDM7dm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHNrX3JzdF9yZWFzb24gcmVhc29uKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9PVVRSU1RTKTsKIAogCS8qIE5PVEU6IE5vIFRDUCBvcHRpb25zIGF0dGFjaGVkIGFuZCB3ZSBuZXZlciByZXRyYW5zbWl0IHRoaXMuICovCi0Jc2tiID0gYWxsb2Nfc2tiKE1BWF9UQ1BfSEVBREVSLCBwcmlvcml0eSk7CiYjNDM7CXNrYiA9IGFsbG9jX3NrYihNQVhfVENQX0hFQURFUiwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpIHsKIAkJTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVEZBSUxFRCk7CiAJCXJldHVybjsKQEAgLTM4NjksNyAmIzQzOzM4NjgsNyBAQCB2b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IHByaW9yaXR5LAogCQkJICAgICBUQ1BIRFJfQUNLIHwgVENQSERSX1JTVCk7CiAJdGNwX21zdGFtcF9yZWZyZXNoKHRjcF9zayhzaykpOwogCS8qIFNlbmQgaXQgb2ZmLiAqLwotCWlmICh0Y3BfdHJhbnNtaXRfc2tiKHNrLCBza2IsIDAsIHByaW9yaXR5KSkKJiM0MzsJaWYgKHRjcF90cmFuc21pdF9za2Ioc2ssIHNrYiwgMCwgR0ZQX0FUT01JQykpCiAJCU5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRGQUlMRUQpOwogCiAJLyogc2tiIG9mIHRyYWNlX3RjcF9zZW5kX3Jlc2V0KCkga2VlcHMgdGhlIHNrYiB0aGF0IGNhdXNlZCBSU1QsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jCmluZGV4IDEwMzhlN2JhOWMyZWIuLmU1NmVhZTRiYzM0MWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF90aW1lci5jCkBAIC0xMjYsNyAmIzQzOzEyNiw3IEBAIHN0YXRpYyBpbnQgdGNwX291dF9vZl9yZXNvdXJjZXMoc3RydWN0IHNvY2sgKnNrLCBib29sIGRvX3Jlc2V0KQogCQkgICAgKCF0cC0mZ3Q7c25kX3duZCAmYW1wOyZhbXA7ICF0cC0mZ3Q7cGFja2V0c19vdXQpKQogCQkJZG9fcmVzZXQgPSB0cnVlOwogCQlpZiAoZG9fcmVzZXQpCi0JCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsCiYjNDM7CQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLAogCQkJCQkgICAgICBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9NRU1PUlkpOwogCQl0Y3BfZG9uZShzayk7CiAJCV9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVE9OTUVNT1JZKTsKQEAgLTgwOSw3ICYjNDM7ODA5LDcgQEAgc3RhdGljIHZvaWQgdGNwX2tlZXBhbGl2ZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQotCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTsKJiM0MzsJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpOwogCQlnb3RvIGRlYXRoOwogCX0KIApAQCAtODM2LDcgJiM0Mzs4MzYsNyBAQCBzdGF0aWMgdm9pZCB0Y3Bfa2VlcGFsaXZlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCQkgICAgaWNzay0mZ3Q7aWNza19wcm9iZXNfb3V0ICZndDsgMCkgfHwKIAkJICAgICh1c2VyX3RpbWVvdXQgPT0gMCAmYW1wOyZhbXA7CiAJCSAgICBpY3NrLSZndDtpY3NrX3Byb2Jlc19vdXQgJmd0Oz0ga2VlcGFsaXZlX3Byb2Jlcyh0cCkpKSB7Ci0JCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsCiYjNDM7CQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLAogCQkJCQkgICAgICBTS19SU1RfUkVBU09OX1RDUF9LRUVQQUxJVkVfVElNRU9VVCk7CiAJCQl0Y3Bfd3JpdGVfZXJyKHNrKTsKIAkJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwppbmRleCBiNDc0ZDAzNjIwYTc1Li5lMWYwOGY3MWNkYjE2IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwpAQCAtMzEwOSw4ICYjNDM7MzEwOSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2RvX2Zhc3RjbG9zZShzdHJ1Y3Qgc29jayAqc2spCiAJCSAqLwogCQlpbmV0X2Nzayhzc2spLSZndDtpY3NrX2Fjay5yY3ZfbXNzID0gVENQX01JTl9NU1M7CiAKLQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNzaywgc3NrLSZndDtza19hbGxvY2F0aW9uLAotCQkJCSAgICAgIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX0NMT1NFKTsKJiM0MzsJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzc2ssIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX0NMT1NFKTsKIHVubG9jazoKIAkJcmVsZWFzZV9zb2NrKHNzayk7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaAppbmRleCAwNmExMDdkNGU4MzkyLi44N2NjYjg0ZTk5MjdjIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaApAQCAtNjkwLDcgJiM0Mzs2OTAsNyBAQCBtcHRjcF9zZW5kX2FjdGl2ZV9yZXNldF9yZWFzb24oc3RydWN0IHNvY2sgKnNrKQogCWVudW0gc2tfcnN0X3JlYXNvbiByZWFzb247CiAKIAlyZWFzb24gPSBza19yc3RfY29udmVydF9tcHRjcF9yZWFzb24oc3ViZmxvdy0mZ3Q7cmVzZXRfcmVhc29uKTsKLQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsIHJlYXNvbik7CiYjNDM7CXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgcmVhc29uKTsKIH0KIAogLyogTWFkZSB0aGUgZndkIG1lbSBjYXJyaWVkIGJ5IHRoZSBnaXZlbiBza2IgYXZhaWxhYmxlIHRvIHRoZSBtc2ssCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MzcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGEgVENQL01QVENQIFBhdGNoOiBXb3J0aCBGdXp6aW5nPyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIG1vZGlmeWluZyBgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0YCBpbiBgbmV0L2lwdjQvdGNwX291dHB1dC5jYC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIHJlbW92aW5nIHRoZSBgcHJpb3JpdHlgIGFyZ3VtZW50ICh3aGljaCB3YXMgYSBgZ2ZwX3RgIHZhbHVlKSBhbmQgaGFyZGNvZGluZyBgR0ZQX0FUT01JQ2AgaW5zaWRlIHRoZSBmdW5jdGlvbi4gIEl0IHVwZGF0ZXMgYWxsIHRoZSBjYWxsZXJzIGluIGBuZXQvaXB2NC90Y3AuY2AsIGBuZXQvaXB2NC90Y3BfdGltZXIuY2AsIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AsIGFuZCBgbmV0L21wdGNwL3Byb3RvY29sLmhgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UuIFByZXZpb3VzbHksIGB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXRgIHdhcyBjYWxsZWQgd2l0aCBhIHZhcmlldHkgb2YgYGdmcF90YCB2YWx1ZXMsIGluY2x1ZGluZyBgc2stJmd0O3NrX2FsbG9jYXRpb25gICh3aGljaCBjb3VsZCBiZSBgR0ZQX0tFUk5FTGAgb3IgYEdGUF9VU0VSYCksIGFuZCBgR0ZQX0FUT01JQ2AgZXhwbGljaXRseS4gIE5vdywgaXQgKmFsd2F5cyogdXNlcyBgR0ZQX0FUT01JQ2AuIFRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgaXQgYWx0ZXJzIHRoZSBhbGxvY2F0aW9uIGZsYWdzIHVzZWQgYnkgYGFsbG9jX3NrYmAgYW5kIGB0Y3BfdHJhbnNtaXRfc2tiYC4KClRoZSBrZXkgY29uY2VybiBpcyB0aGF0IGJ5IGhhcmRjb2RpbmcgYEdGUF9BVE9NSUNgLCB3ZSYjMzk7cmUgcG90ZW50aWFsbHkgaW50cm9kdWNpbmcgbW9yZSBhbGxvY2F0aW9uIGZhaWx1cmVzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gIE9yLCBwZXJoYXBzLCBpdCYjMzk7cyBhIHZhbGlkIHNpbXBsaWZpY2F0aW9uIHRoYXQganVzdCBoYXJkY29kZXMgYSB2YWx1ZSBhbHJlYWR5IGZyZXF1ZW50bHkgdXNlZCBpbiB0aGVzZSBjb250ZXh0cy4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIHRoaXMgd29ydGggZnV6emluZz8gIEl0ICpkb2VzKiBtb2RpZnkgY29yZSBUQ1AgbG9naWMsIHNwZWNpZmljYWxseSBob3cgYWN0aXZlIHJlc2V0cyBhcmUgc2VudC4gIEhvd2V2ZXIsIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgbG9naWMuIEl0IHNpbXBseSBjaGFuZ2VzIGFuIGFsbG9jYXRpb24gZmxhZywgYSBzZWVtaW5nbHkgc2ltcGxlIGNoYW5nZS4gIEJ1dCwgd2FpdCwgYWNjb3JkaW5nIHRvIHRoZSBydWxlLCAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi4gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93JiMzNDsuIENoYW5naW5nIGBnZnBfdGAgZnJvbSBgc2stJmd0O3NrX2FsbG9jYXRpb25gIHRvIGBHRlBfQVRPTUlDYCBtaWdodCwgaW4gc29tZSB2ZXJ5IG5hcnJvdyBlZGdlIGNhc2VzLCBhZmZlY3QgdGhlIGV4ZWN1dGlvbiBmbG93IGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLiBHaXZlbiB0aGUgc2ltcGxpY2l0eSBvZiB0aGUgY2hhbmdlIGJ1dCB0aGUgY29yZSBsb2NhdGlvbiwgSSBuZWVkIHRvIGxvb2sgY2xvc2VyLgoKT2theSwgbGV0IG1lIHJlLWV4YW1pbmUgdGhlIHBhdGNoLiAgSXQmIzM5O3MganVzdCB0aGUgcmVtb3ZhbCBvZiB0aGUgYHByaW9yaXR5YCBwYXJhbWV0ZXIgYW5kIHRoZSBoYXJkY29kaW5nLiBgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0YCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdXNlZCBpbiB2YXJpb3VzIHBhcnRzLgoKQ29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlcywgaXMgaXQgd29ydGggZnV6emluZz8gIFllcywgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBjb3JlIFRDUCBhbmQgTVBUQ1AuIEZ1enppbmcgbWlnaHQgbm90ICpzcGVjaWZpY2FsbHkqIHRhcmdldCB0aGUgYEdGUF9BVE9NSUNgIGNoYW5nZSwgYnV0IGl04oCZcyBhIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGFuZCBpdOKAmXMgYmV0dGVyIHRvIGJlIHNhZmUuIEnigJltIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4KClRoZXJlZm9yZSwgSSYjMzk7bGwgYmUgZm9jdXNpbmcgb24gdGhlIHN5bWJvbHMgYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAsIGB0Y3BfZGlzY29ubmVjdGAsIGFuZCB0byBhIGxlc3NlciBkZWdyZWUgYG1wdGNwX2RvX2Zhc3RjbG9zZWAuICBJIG5lZWQgdG8gY2hlY2sgdGhlaXIgdmlzaWJpbGl0eS4gYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAgaXMgZ2xvYmFsbHkgdmlzaWJsZS4gIGBtcHRjcF9kb19mYXN0Y2xvc2VgIGlzIHN0YXRpYywgc28gSSBjYW4gaWdub3JlIGl0IGZvciBmdXp6aW5nIHB1cnBvc2VzLiAgYHRjcF9kaXNjb25uZWN0YCBhbmQgYHRjcF9hYm9ydGAgYXJlIGdsb2JhbGx5IHZpc2libGUuCgpGb3IgY29uZmlndXJhdGlvbnMsIEkmIzM5O2xsIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgaW52b2x2ZXMgYm90aCBgTVBUQ1BgIGFuZCBgSU5FVGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9NzY3PXZvaWQgdGNwX3NlbmRfZmluKHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC90Y3AuaDo3Njg6dm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHNrX3JzdF9yZWFzb24gcmVhc29uKTtcbmluY2x1ZGUvbmV0L3RjcC5oLTc2OS1pbnQgdGNwX3NlbmRfc3luYWNrKHN0cnVjdCBzb2NrICopO1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0zODAxPXZvaWQgdGNwX3NlbmRfZmluKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzg1MS0gKi9cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozODUyOnZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbilcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zODUzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTg5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIE5ldHdvcmsgRGlzY29ubmVjdGlvbiBWaXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHZpc2liaWxpdHkgb2YgYSBuZXR3b3JrIGRpc2Nvbm5lY3Rpb24uIFRoaXMgc2l0dWF0aW9uIGlzIHNvbWV0aGluZyBJIGtub3cgaXMgZ29pbmcgdG8gYmUgZ2xvYmFsbHkgdmlzaWJsZS4gU28sIHRoZSBxdWVzdGlvbiB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgaG93IGNhbiBJIGNoZWNrIGl0PyBMZXQgbWUgY2hlY2sgdGhlIHNwZWNpZmljcyBieSBsb29raW5nIGF0IGB0Y3BfZGlzY29ubmVjdGAuIEkgY2FuIGxvb2sgdGhlcmUgdG8gZmluZCB0aGUgaW5mb3JtYXRpb24gYW5kIGtub3cgaG93IHRvIGZpbmQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHRjcF9kaXNjb25uZWN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTU3Nz1zdHJ1Y3Qgc2tfYnVmZiAqdGNwX21ha2Vfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTU4MS1cdFx0XHRcdHN0cnVjdCBza19idWZmICpzeW5fc2tiKTtcbmluY2x1ZGUvbmV0L3RjcC5oOjU4MjppbnQgdGNwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpO1xuaW5jbHVkZS9uZXQvdGNwLmgtNTgzLVxuLS1cbm5ldC9pcHY0L3RjcC5jPTMzNDU9dm9pZCB0Y3Bfd3JpdGVfcXVldWVfcHVyZ2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTMzNjAtXG5uZXQvaXB2NC90Y3AuYzozMzYxOmludCB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbm5ldC9pcHY0L3RjcC5jLTMzNjIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MjYKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgdGNwX2Fib3J0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYHRjcF9hYm9ydGAuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIGhhbmRsaW5nIGNvbm5lY3Rpb24gdGVybWluYXRpb24sIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBiZWhhdmlvciBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBBIHF1aWNrIGludmVzdGlnYXRpb24gb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBzZWVtcyB3YXJyYW50ZWQuIFRpbWUgdG8gZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB0Y3BfYWJvcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9MTcwND12b2lkIHRjcF9kb25lKHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC90Y3AuaDoxNzA1OmludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKTtcbmluY2x1ZGUvbmV0L3RjcC5oLTE3MDYtXG4tLVxubmV0L2lwdjQvdGNwLmM9NTA3OT12b2lkIHRjcF9kb25lKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3AuYy01MTA0LVxubmV0L2lwdjQvdGNwLmM6NTEwNTppbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycilcbm5ldC9pcHY0L3RjcC5jLTUxMDYte1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjA5Nj1zdGF0aWMgdm9pZCB0Y3BfcmVsZWFzZV9jYl9vdmVycmlkZShzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjExMS1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MjExMjpzdGF0aWMgaW50IHRjcF9hYm9ydF9vdmVycmlkZShzdHJ1Y3Qgc29jayAqc3NrLCBpbnQgZXJyKVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTEzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzIzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBtcHRjcF9kb19mYXN0Y2xvc2VgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gJiMzNDtMZXQmIzM5O3MgY2hlY2sgYG1wdGNwX2RvX2Zhc3RjbG9zZWAuJiMzNDsgVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbnRhbCBtYXAgb2YgaG93IE1QVENQJiMzOTtzIGZhc3QgY2xvc2UgbWVjaGFuaXNtIHdvcmtzLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMsIGJvdHRsZW5lY2tzLCBvciBhcmVhcyB0aGF0IG1pZ2h0IGJlIG1pc2JlaGF2aW5nIGJhc2VkIG9uIHNvbWUgcmVjZW50IG9ic2VydmF0aW9ucyBvciBidWcgcmVwb3J0cy4gSeKAmWxsIGJlIHRoaW5raW5nIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgTVBUQ1Agc3RhY2ssIGVzcGVjaWFsbHkgY29ubmVjdGlvbiB0ZWFyZG93biBhbmQgc3RhdGUgdHJhbnNpdGlvbnMuIEnigJlsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBzdWJ0bGV0aWVzIG9mIHRoZSBoYW5kc2hha2UgYW5kIGRhdGEgdHJhbnNmZXIgcGhhc2VzIGluIHJlbGF0aW9uIHRvIHRoZSBmYXN0IGNsb3NlIG9wZXJhdGlvbi4gV2hlcmXigJlzIHRoYXQgZG9jdW1lbnRhdGlvbj8gQW5kIEkgbWlnaHQgYmUgbG9va2luZyBpbnRvIHNvbWUgdGVzdCBzY2VuYXJpb3MgdG8gcmVwbGljYXRlIGlzc3VlcyBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjb2RlIGNoYW5nZXMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW50ZXJlc3RpbmcuIFRpbWUgdG8gZGl2ZSBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBtcHRjcF9kb19mYXN0Y2xvc2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9MzA2NT1zdGF0aWMgdm9pZCBtcHRjcF9iYWNrbG9nX3B1cmdlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMDgyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzA4MzpzdGF0aWMgdm9pZCBtcHRjcF9kb19mYXN0Y2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzA4NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NzkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBhIFBvdGVudGlhbCBTdGF0aWMgQ29uZGl0aW9uKioKCk9rYXksIHRoaXMgZmVlbHMgc3RhdGljLCBkb2VzbiYjMzk7dCBpdD8gU29tZXRoaW5nJiMzOTtzIHN0dWNrLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHdoeS4gU2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbiBNUFRDUCBjb250ZXh0LCBhbmQgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgYW4gdW5jaGFuZ2luZyBzdGF0ZSwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgdG8gbWluZCBpcyB0aGUgcmVzZXQgaGFuZGxpbmcgZHVyaW5nIHRoZSBhY3RpdmUgcGF0aCBzZWxlY3Rpb24uIExldCYjMzk7cyBzZWUgaWYgdGhlIHJlYXNvbiBmb3IgdGhlIGxhY2sgb2YgY2hhbmdlLCB0aGUgYmxvY2thZ2UsIGNhbiBiZSBmb3VuZCB3aXRoaW4gdGhlIGBtcHRjcF9zZW5kX2FjdGl2ZV9yZXNldF9yZWFzb25gIGZ1bmN0aW9uLCBhcyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBwYXRoIGNvdWxkIHN0YWxsLiBUaGF0IHNlZW1zIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3NlbmRfYWN0aXZlX3Jlc2V0X3JlYXNvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0yODA1PXN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2Zhc3RjbG9zZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4MjAtXHRcdGlmICh0Y3Bfc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0NMT1NFKSB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyODIxOlx0XHRcdG1wdGNwX3NlbmRfYWN0aXZlX3Jlc2V0X3JlYXNvbih0Y3Bfc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMjgyMi1cdFx0XHR0Y3Bfc2V0X3N0YXRlKHRjcF9zaywgVENQX0NMT1NFKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD02ODY9c3RhdGljIGlubGluZSB2b2lkXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo2ODc6bXB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXRfcmVhc29uKHN0cnVjdCBzb2NrICpzaylcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTY4OC17XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz00Mjc9dm9pZCBtcHRjcF9zdWJmbG93X3Jlc2V0KHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy00NDAtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjQ0MTpcdG1wdGNwX3NlbmRfYWN0aXZlX3Jlc2V0X3JlYXNvbihzc2spO1xubmV0L21wdGNwL3N1YmZsb3cuYy00NDItXHR0Y3BfZG9uZShzc2spO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTM1Nj1zdGF0aWMgYm9vbCBzdWJmbG93X2NoZWNrX2RhdGFfYXZhaWwoc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE0MzctXHRcdFx0XHRza19lYXRfc2tiKHNzaywgc2tiKTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTQzODpcdFx0XHRtcHRjcF9zZW5kX2FjdGl2ZV9yZXNldF9yZWFzb24oc3NrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTQzOS1cdFx0XHRXUklURV9PTkNFKHN1YmZsb3ctXHUwMDNlZGF0YV9hdmFpbCwgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzIyCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN0YXRpYyBJbmxpbmUgRnVuY3Rpb25zIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyB1c2luZyBhIGBzdGF0aWMgaW5saW5lYCBjb25zdHJ1Y3QuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgY2VydGFpbiBmdW5jdGlvbiBzeW1ib2xzIGFzIGNyaXRpY2FsLCBwYXJ0aWN1bGFybHkgYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAsIGB0Y3BfZGlzY29ubmVjdGAsIGFuZCBgdGNwX2Fib3J0YC4gVGhvc2UgYXJlIHRoZSBvbmVzIEkgbmVlZCB0byBmb2N1cyBvbiBmb3IgdGhpcyBhbmFseXNpcywga25vd2luZyB0aGV5IG1pZ2h0IGJlIGhlYXZpbHkgb3B0aW1pemVkLgoKTm93LCBjb25zaWRlcmluZyB0aGUgZW52aXJvbm1lbnQsIEkmIzM5O20gcHJldHR5IHN1cmUgYElORVRgIGlzIGluIHBsYXkgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBUQ1AuIEJ1dCBtb3JlIGltcG9ydGFudGx5LCB0aGUgcHJlc2VuY2Ugb2YgdGhlc2UgVENQLXJlbGF0ZWQgZnVuY3Rpb25zIGxpa2VseSBpbmRpY2F0ZXMgdGhhdCBgTVBUQ1BgIGlzIGFsc28gY29uZmlndXJlZC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYE1QVENQYCBpcyBpbmRlZWQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gbmFtZSB0byBjb25maXJtIHRoaXMgaW50dWl0aW9uIGFuZCBlbnN1cmUgSSYjMzk7bSB0YXJnZXRpbmcgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1QVENQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnLTEtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxubmV0L21wdGNwL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7TVBUQ1A6IE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXG4tLVxubmV0L21wdGNwL0tjb25maWctMTktXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxubmV0L21wdGNwL0tjb25maWctMjEtXHRib29sIFwmIzM0O01QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cdHRyaXN0YXRlIFwmIzM0O1RoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3OTMKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYE1QVENQYCBpcyB0aGUgY29ycmVjdCBwcm90b2NvbCBoZXJlLiBHb29kLCBnb29kLiBOb3csIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGZsb2F0aW5nIGFyb3VuZC4gSSBuZWVkIHRvIGJlIHRob3JvdWdoOyBJIGhhdmUgdG8gYWNjb3VudCBmb3IgYW55IHBvc3NpYmlsaXRpZXMuIEhtbSwgd2FpdCBhIG1pbnV0ZSwgYFRDUGAgaXRzZWxmIGlzbiYjMzk7dCBhICpjb25maWcqLCBpdCYjMzk7cyB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgcHJvdG9jb2wuIEl0JiMzOTtzIG1vcmUgYWJvdXQgYElORVRgIGxheWVyLiBHb3QgaXQuIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1Rcbi0tXG5uZXQvS2NvbmZpZy0xMTMtXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcbm5ldC9LY29uZmlnLTExNS1cdGJvb2wgXCYjMzQ7VENQL0lQIG5ldHdvcmtpbmdcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTMzMD1jb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMzgtXG5uZXQvaXB2NC9LY29uZmlnOjMzOTpjb25maWcgSU5FVF9BSFxubmV0L2lwdjQvS2NvbmZpZy0zNDAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogQUggdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cbm5ldC9pcHY0L0tjb25maWc6MzU0OmNvbmZpZyBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNjgtXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXG5uZXQvaXB2NC9LY29uZmlnLTM4My1cdGJvb2wgXCYjMzQ7SVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zOTMtXG5uZXQvaXB2NC9LY29uZmlnOjM5NDpjb25maWcgSU5FVF9JUENPTVBcbm5ldC9pcHY0L0tjb25maWctMzk1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IElQQ29tcCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDAzLVxubmV0L2lwdjQvS2NvbmZpZzo0MDQ6Y29uZmlnIElORVRfVEFCTEVfUEVSVFVSQl9PUkRFUlxubmV0L2lwdjQvS2NvbmZpZy00MDUtXHRpbnQgXCYjMzQ7SU5FVDogU291cmNlIHBvcnQgcGVydHVyYmF0aW9uIHRhYmxlIHNpemUgKGFzIHBvd2VyIG9mIDIpXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9pcHY0L0tjb25maWctNDEzLVxubmV0L2lwdjQvS2NvbmZpZzo0MTQ6Y29uZmlnIElORVRfWEZSTV9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWctNDE1LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQxOC1cbm5ldC9pcHY0L0tjb25maWc6NDE5OmNvbmZpZyBJTkVUX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy00MjAtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY0L0tjb25maWctNDIyLVxubmV0L2lwdjQvS2NvbmZpZzo0MjM6Y29uZmlnIElORVRfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00MjQtXHR0cmlzdGF0ZSBcJiMzNDtJTkVUOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQzNC1cbm5ldC9pcHY0L0tjb25maWc6NDM1OmNvbmZpZyBJTkVUX1RDUF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MzgtXG5uZXQvaXB2NC9LY29uZmlnOjQzOTpjb25maWcgSU5FVF9VRFBfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00NDAtXHR0cmlzdGF0ZSBcJiMzNDtVRFA6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDQ2LVxubmV0L2lwdjQvS2NvbmZpZzo0NDc6Y29uZmlnIElORVRfUkFXX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDQ4LVx0dHJpc3RhdGUgXCYjMzQ7UkFXOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQ1NC1cbm5ldC9pcHY0L0tjb25maWc6NDU1OmNvbmZpZyBJTkVUX0RJQUdfREVTVFJPWVxubmV0L2lwdjQvS2NvbmZpZy00NTYtXHRib29sIFwmIzM0O0lORVQ6IGFsbG93IHByaXZpbGVnZWQgcHJvY2VzcyB0byBhZG1pbmlzdHJhdGl2ZWx5IGNsb3NlIHNvY2tldHNcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTM5PWNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXG4tLVxubmV0L2lwdjYvS2NvbmZpZy00Ni1cbm5ldC9pcHY2L0tjb25maWc6NDc6Y29uZmlnIElORVQ2X0FIXG5uZXQvaXB2Ni9LY29uZmlnLTQ4LVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogQUggdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTYxLVxubmV0L2lwdjYvS2NvbmZpZzo2Mjpjb25maWcgSU5FVDZfRVNQXG5uZXQvaXB2Ni9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy03Ni1cbm5ldC9pcHY2L0tjb25maWc6Nzc6Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXG5uZXQvaXB2Ni9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTg5LVxubmV0L2lwdjYvS2NvbmZpZzo5MDpjb25maWcgSU5FVDZfRVNQSU5UQ1Bcbm5ldC9pcHY2L0tjb25maWctOTEtXHRib29sIFwmIzM0O0lQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMDEtXG5uZXQvaXB2Ni9LY29uZmlnOjEwMjpjb25maWcgSU5FVDZfSVBDT01QXG5uZXQvaXB2Ni9LY29uZmlnLTEwMy1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQQ29tcCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTIwPWNvbmZpZyBJUFY2X0lMQVxuLS1cbm5ldC9pcHY2L0tjb25maWctMTQwLVxubmV0L2lwdjYvS2NvbmZpZzoxNDE6Y29uZmlnIElORVQ2X1hGUk1fVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTE0Mi1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNDUtXG5uZXQvaXB2Ni9LY29uZmlnOjE0Njpjb25maWcgSU5FVDZfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlXG4tLVxubmV0L21wdGNwL0tjb25maWc9MTQ9aWYgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTE1LVxubmV0L21wdGNwL0tjb25maWc6MTY6Y29uZmlnIElORVRfTVBUQ1BfRElBR1xubmV0L21wdGNwL0tjb25maWctMTctXHRkZXBlbmRzIG9uIElORVRfRElBR1xuLS1cbm5ldC9wc3AvS2NvbmZpZy00LSNcbm5ldC9wc3AvS2NvbmZpZzo1OmNvbmZpZyBJTkVUX1BTUFxubmV0L3BzcC9LY29uZmlnLTYtXHRib29sIFwmIzM0O1BTUCBTZWN1cml0eSBQcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3NjdHAvS2NvbmZpZz02OD1lbmRjaG9pY2Vcbm5ldC9zY3RwL0tjb25maWctNjktXG5uZXQvc2N0cC9LY29uZmlnOjcwOmNvbmZpZyBJTkVUX1NDVFBfRElBR1xubmV0L3NjdHAvS2NvbmZpZy03MS1cdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDY4CgkJCQkJCQlvdXRwdXQ6IDg4CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBUQ1AgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgVENQIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSB0aGUgYElORVRgIG1vZHVsZS4gTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGtleSB0YWtlYXdheXMuIFRoaXMgY2hhbmdlIGlzIGRlZW1lZCBgV29ydGhGdXp6aW5nYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYSBwb3RlbnRpYWwgYXJlYSBmb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBzbyBpdCB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBUaGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgaG93IGFjdGl2ZSBUQ1AgcmVzZXRzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHksIGhvdyBhbGxvY2F0aW9uIGZsYWdzIGFyZSB1c2VkIHdoZW4gdGhleSYjMzk7cmUgc2VudC4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFRDUCBhbmQgTVBUQ1AgbG9naWMgdG8gKmFsd2F5cyogdXNlIGBHRlBfQVRPTUlDYCBmb3IgdGhlc2UgYWxsb2NhdGlvbnMuCgpNeSByZWFzb25pbmcgc3VnZ2VzdHMgdGhhdCB0aGlzIGNoYW5nZSBpbiBhbGxvY2F0aW9uIGZsYWdzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBzdWJ0bGUgaXNzdWVzLCBlc3BlY2lhbGx5IGluIGhpZ2gtbG9hZCBvciByZXNvdXJjZS1jb25zdHJhaW5lZCBlbnZpcm9ubWVudHMuIFdlIHJlYWxseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBzd2l0Y2hpbmcgdG8gYEdGUF9BVE9NSUNgIGZvciB0aGVzZSBjcml0aWNhbCBuZXR3b3JrIG9wZXJhdGlvbnMuCgpUaGUgZnVuY3Rpb25zIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBhcmUgYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAsIGB0Y3BfZGlzY29ubmVjdGAsIGFuZCBgdGNwX2Fib3J0YC4gSSYjMzk7bGwgd2FudCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBzZWUgaG93IHRoaXMgbmV3IGBHRlBfQVRPTUlDYCB1c2FnZSBpbXBhY3RzIHRoZW0uCgpUaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIHRvIHJlcHJvZHVjZSB0aGUgdGFyZ2V0IGFyZSBgSU5FVGAgYW5kIGBNUFRDUGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3NlbmRfYWN0aXZlX3Jlc2V0JiMzNDssCiAgICAmIzM0O3RjcF9kaXNjb25uZWN0JiMzNDssCiAgICAmIzM0O3RjcF9hYm9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWxsb2NhdGlvbiBmbGFncyBmb3Igc2VuZGluZyBhY3RpdmUgVENQIHJlc2V0cyB0byBhbHdheXMgdXNlIEdGUF9BVE9NSUMsIGFsdGVyaW5nIGNvcmUgVENQIGFuZCBNUFRDUCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9zZW5kX2FjdGl2ZV9yZXNldCYjMzQ7LAogICAgJiMzNDt0Y3BfZGlzY29ubmVjdCYjMzQ7LAogICAgJiMzNDt0Y3BfYWJvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGFsbG9jYXRpb24gZmxhZ3MgZm9yIHNlbmRpbmcgYWN0aXZlIFRDUCByZXNldHMgdG8gYWx3YXlzIHVzZSBHRlBfQVRPTUlDLCBhbHRlcmluZyBjb3JlIFRDUCBhbmQgTVBUQ1AgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYGdmcF90IHByaW9yaXR5YCBhcmd1bWVudCBmcm9tIGB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoKWAgYW5kIGhhcmRjb2RlcyBgR0ZQX0FUT01JQ2AgZm9yIHRoZSBTS0IgYWxsb2NhdGlvbiBhbmQgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGEgc2ltcGxlIHJlZmFjdG9yaW5nIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBidWZmZXIgbGVuZ3Rocywgb3IgYWx0ZXIgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWMyZDEyYmU5OTczNDQ2NWJjYzU2N2M4ZDQ0NmM2ZWQ0OTA5ZGU3OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDAzOjMzOjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCA2NzBjMjA4NzZmMjY1Li40MzY0OTVmZjIyNzFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtNzY1LDggJiM0Mzs3NjUsNyBAQCBpbnQgdGNwX2ZyYWdtZW50KHN0cnVjdCBzb2NrICpzaywgZW51bSB0Y3BfcXVldWUgdGNwX3F1ZXVlLAogdm9pZCB0Y3Bfc2VuZF9wcm9iZTAoc3RydWN0IHNvY2sgKik7CiBpbnQgdGNwX3dyaXRlX3dha2V1cChzdHJ1Y3Qgc29jayAqLCBpbnQgbWliKTsKIHZvaWQgdGNwX3NlbmRfZmluKHN0cnVjdCBzb2NrICpzayk7Ci12b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IHByaW9yaXR5LAotCQkJICAgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbik7CiYjNDM7dm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHNrX3JzdF9yZWFzb24gcmVhc29uKTsKIGludCB0Y3Bfc2VuZF9zeW5hY2soc3RydWN0IHNvY2sgKik7CiB2b2lkIHRjcF9wdXNoX29uZShzdHJ1Y3Qgc29jayAqLCB1bnNpZ25lZCBpbnQgbXNzX25vdyk7CiB2b2lkIF9fdGNwX3NlbmRfYWNrKHN0cnVjdCBzb2NrICpzaywgdTMyIHJjdl9ueHQsIHUxNiBmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IGI0MjM3ZDBlOTk0ZDYuLjkzZDcyM2Q4YzEwOTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jCkBAIC0zMTgyLDggJiM0MzszMTgyLDcgQEAgdm9pZCBfX3RjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dCkKIAkJLyogVW5yZWFkIGRhdGEgd2FzIHRvc3NlZCwgemFwIHRoZSBjb25uZWN0aW9uLiAqLwogCQlORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUEFCT1JUT05DTE9TRSk7CiAJCXRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7Ci0JCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgc2stJmd0O3NrX2FsbG9jYXRpb24sCi0JCQkJICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpOwomIzQzOwkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9DTE9TRSk7CiAJfSBlbHNlIGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfTElOR0VSKSAmYW1wOyZhbXA7ICFzay0mZ3Q7c2tfbGluZ2VydGltZSkgewogCQkvKiBDaGVjayB6ZXJvIGxpbmdlciBfYWZ0ZXJfIGNoZWNraW5nIGZvciB1bnJlYWQgZGF0YS4gKi8KIAkJc2stJmd0O3NrX3Byb3QtJmd0O2Rpc2Nvbm5lY3Qoc2ssIDApOwpAQCAtMzI1Nyw3ICYjNDM7MzI1Niw3IEBAIHZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCiAJCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCQlpZiAoUkVBRF9PTkNFKHRwLSZndDtsaW5nZXIyKSAmbHQ7IDApIHsKIAkJCXRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7Ci0JCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsCiYjNDM7CQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLAogCQkJCQkgICAgICBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9MSU5HRVIpOwogCQkJX19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwKIAkJCQkJTElOVVhfTUlCX1RDUEFCT1JUT05MSU5HRVIpOwpAQCAtMzI3Niw3ICYjNDM7MzI3NSw3IEBAIHZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCiAJaWYgKHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfQ0xPU0UpIHsKIAkJaWYgKHRjcF9jaGVja19vb20oc2ssIDApKSB7CiAJCQl0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpOwotCQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLAomIzQzOwkJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywKIAkJCQkJICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fTUVNT1JZKTsKIAkJCV9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksCiAJCQkJCUxJTlVYX01JQl9UQ1BBQk9SVE9OTUVNT1JZKTsKQEAgLTMzNzcsMTQgJiM0MzszMzc2LDE0IEBAIGludCB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncykKIAl9IGVsc2UgaWYgKHVubGlrZWx5KHRwLSZndDtyZXBhaXIpKSB7CiAJCVdSSVRFX09OQ0Uoc2stJmd0O3NrX2VyciwgRUNPTk5BQk9SVEVEKTsKIAl9IGVsc2UgaWYgKHRjcF9uZWVkX3Jlc2V0KG9sZF9zdGF0ZSkpIHsKLQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBnZnBfYW55KCksIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTsKJiM0MzsJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpOwogCQlXUklURV9PTkNFKHNrLSZndDtza19lcnIsIEVDT05OUkVTRVQpOwogCX0gZWxzZSBpZiAodHAtJmd0O3NuZF9ueHQgIT0gdHAtJmd0O3dyaXRlX3NlcSAmYW1wOyZhbXA7CiAJCSAgICgxICZsdDsmbHQ7IG9sZF9zdGF0ZSkgJmFtcDsgKFRDUEZfQ0xPU0lORyB8IFRDUEZfTEFTVF9BQ0spKSB7CiAJCS8qIFRoZSBsYXN0IGNoZWNrIGFkanVzdHMgZm9yIGRpc2NyZXBhbmN5IG9mIExpbnV4IHdydC4gUkZDCiAJCSAqIHN0YXRlcwogCQkgKi8KLQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBnZnBfYW55KCksCiYjNDM7CQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssCiAJCQkJICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfRElTQ09OTkVDVF9XSVRIX0RBVEEpOwogCQlXUklURV9PTkNFKHNrLSZndDtza19lcnIsIEVDT05OUkVTRVQpOwogCX0gZWxzZSBpZiAob2xkX3N0YXRlID09IFRDUF9TWU5fU0VOVCkKQEAgLTUxNDcsOCAmIzQzOzUxNDYsNyBAQCBpbnQgdGNwX2Fib3J0KHN0cnVjdCBzb2NrICpzaywgaW50IGVycikKIAliaF9sb2NrX3NvY2soc2spOwogCiAJaWYgKHRjcF9uZWVkX3Jlc2V0KHNrLSZndDtza19zdGF0ZSkpCi0JCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQywKLQkJCQkgICAgICBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7CiYjNDM7CQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTsKIAl0Y3BfZG9uZV93aXRoX2Vycm9yKHNrLCBlcnIpOwogCiAJYmhfdW5sb2NrX3NvY2soc2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IGYyNzA5ZDU4NWVkYmQuLjE5YTc5OWU1ZDVjZTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTM4NDksMTUgJiM0MzszODQ5LDE0IEBAIHZvaWQgdGNwX3NlbmRfZmluKHN0cnVjdCBzb2NrICpzaykKICAqIHdhcyB1bnJlYWQgZGF0YSBpbiB0aGUgcmVjZWl2ZSBxdWV1ZS4gIFRoaXMgYmVoYXZpb3IgaXMgcmVjb21tZW5kZWQKICAqIGJ5IFJGQyAyNTI1LCBzZWN0aW9uIDIuMTcuICAtRGF2ZU0KICAqLwotdm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBnZnBfdCBwcmlvcml0eSwKLQkJCSAgIGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb24pCiYjNDM7dm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHNrX3JzdF9yZWFzb24gcmVhc29uKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9PVVRSU1RTKTsKIAogCS8qIE5PVEU6IE5vIFRDUCBvcHRpb25zIGF0dGFjaGVkIGFuZCB3ZSBuZXZlciByZXRyYW5zbWl0IHRoaXMuICovCi0Jc2tiID0gYWxsb2Nfc2tiKE1BWF9UQ1BfSEVBREVSLCBwcmlvcml0eSk7CiYjNDM7CXNrYiA9IGFsbG9jX3NrYihNQVhfVENQX0hFQURFUiwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpIHsKIAkJTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVEZBSUxFRCk7CiAJCXJldHVybjsKQEAgLTM4NjksNyAmIzQzOzM4NjgsNyBAQCB2b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IHByaW9yaXR5LAogCQkJICAgICBUQ1BIRFJfQUNLIHwgVENQSERSX1JTVCk7CiAJdGNwX21zdGFtcF9yZWZyZXNoKHRjcF9zayhzaykpOwogCS8qIFNlbmQgaXQgb2ZmLiAqLwotCWlmICh0Y3BfdHJhbnNtaXRfc2tiKHNrLCBza2IsIDAsIHByaW9yaXR5KSkKJiM0MzsJaWYgKHRjcF90cmFuc21pdF9za2Ioc2ssIHNrYiwgMCwgR0ZQX0FUT01JQykpCiAJCU5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRGQUlMRUQpOwogCiAJLyogc2tiIG9mIHRyYWNlX3RjcF9zZW5kX3Jlc2V0KCkga2VlcHMgdGhlIHNrYiB0aGF0IGNhdXNlZCBSU1QsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jCmluZGV4IDEwMzhlN2JhOWMyZWIuLmU1NmVhZTRiYzM0MWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF90aW1lci5jCkBAIC0xMjYsNyAmIzQzOzEyNiw3IEBAIHN0YXRpYyBpbnQgdGNwX291dF9vZl9yZXNvdXJjZXMoc3RydWN0IHNvY2sgKnNrLCBib29sIGRvX3Jlc2V0KQogCQkgICAgKCF0cC0mZ3Q7c25kX3duZCAmYW1wOyZhbXA7ICF0cC0mZ3Q7cGFja2V0c19vdXQpKQogCQkJZG9fcmVzZXQgPSB0cnVlOwogCQlpZiAoZG9fcmVzZXQpCi0JCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsCiYjNDM7CQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLAogCQkJCQkgICAgICBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9NRU1PUlkpOwogCQl0Y3BfZG9uZShzayk7CiAJCV9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVE9OTUVNT1JZKTsKQEAgLTgwOSw3ICYjNDM7ODA5LDcgQEAgc3RhdGljIHZvaWQgdGNwX2tlZXBhbGl2ZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQotCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTsKJiM0MzsJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpOwogCQlnb3RvIGRlYXRoOwogCX0KIApAQCAtODM2LDcgJiM0Mzs4MzYsNyBAQCBzdGF0aWMgdm9pZCB0Y3Bfa2VlcGFsaXZlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCQkgICAgaWNzay0mZ3Q7aWNza19wcm9iZXNfb3V0ICZndDsgMCkgfHwKIAkJICAgICh1c2VyX3RpbWVvdXQgPT0gMCAmYW1wOyZhbXA7CiAJCSAgICBpY3NrLSZndDtpY3NrX3Byb2Jlc19vdXQgJmd0Oz0ga2VlcGFsaXZlX3Byb2Jlcyh0cCkpKSB7Ci0JCQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsCiYjNDM7CQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLAogCQkJCQkgICAgICBTS19SU1RfUkVBU09OX1RDUF9LRUVQQUxJVkVfVElNRU9VVCk7CiAJCQl0Y3Bfd3JpdGVfZXJyKHNrKTsKIAkJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwppbmRleCBiNDc0ZDAzNjIwYTc1Li5lMWYwOGY3MWNkYjE2IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwpAQCAtMzEwOSw4ICYjNDM7MzEwOSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2RvX2Zhc3RjbG9zZShzdHJ1Y3Qgc29jayAqc2spCiAJCSAqLwogCQlpbmV0X2Nzayhzc2spLSZndDtpY3NrX2Fjay5yY3ZfbXNzID0gVENQX01JTl9NU1M7CiAKLQkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNzaywgc3NrLSZndDtza19hbGxvY2F0aW9uLAotCQkJCSAgICAgIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX0NMT1NFKTsKJiM0MzsJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzc2ssIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX0NMT1NFKTsKIHVubG9jazoKIAkJcmVsZWFzZV9zb2NrKHNzayk7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaAppbmRleCAwNmExMDdkNGU4MzkyLi44N2NjYjg0ZTk5MjdjIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaApAQCAtNjkwLDcgJiM0Mzs2OTAsNyBAQCBtcHRjcF9zZW5kX2FjdGl2ZV9yZXNldF9yZWFzb24oc3RydWN0IHNvY2sgKnNrKQogCWVudW0gc2tfcnN0X3JlYXNvbiByZWFzb247CiAKIAlyZWFzb24gPSBza19yc3RfY29udmVydF9tcHRjcF9yZWFzb24oc3ViZmxvdy0mZ3Q7cmVzZXRfcmVhc29uKTsKLQl0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsIHJlYXNvbik7CiYjNDM7CXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgcmVhc29uKTsKIH0KIAogLyogTWFkZSB0aGUgZndkIG1lbSBjYXJyaWVkIGJ5IHRoZSBnaXZlbiBza2IgYXZhaWxhYmxlIHRvIHRoZSBtc2ssCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjM0CgkJCQkJCQlvdXRwdXQ6IDEzMwoJCQkJCQkJdGhvdWdodHM6IDUyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgVENQIFJlc2V0IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAgZnVuY3Rpb24mIzM5O3Mgc2lnbmF0dXJlIGlzIGJlaW5nIHN0cmVhbWxpbmVkLiBUaGUgYGdmcF90IHByaW9yaXR5YCBwYXJhbWV0ZXIgaXMgYmVpbmcgZHJvcHBlZC4gSW5zdGVhZCBvZiBkeW5hbWljYWxseSBwYXNzaW5nIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcmlvcml0eSBmbGFnIHRvIGBhbGxvY19za2JgIGFuZCBgdGNwX3RyYW5zbWl0X3NrYmAsIHRoZSBwYXRjaCBoYXJkY29kZXMgYEdGUF9BVE9NSUNgLgoKU3BlY2lmaWNhbGx5LCB0aGUgZGlmZnMgc2hvdzogdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBpdHNlbGYgaXMgY2hhbmdpbmcsIGFuZCBpbnNpZGUgYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAsIHRoZSBgYWxsb2Nfc2tiYCBjYWxsIGFuZCB0aGUgYHRjcF90cmFuc21pdF9za2JgIGNhbGwgbm93IHVzZSB0aGUgaGFyZGNvZGVkIGBHRlBfQVRPTUlDYC4gTmF0dXJhbGx5LCBhbGwgdGhlIGNhbGxpbmcgc2l0ZXMgZm9yIHRoaXMgZnVuY3Rpb24gaGF2ZSBhbHNvIGJlZW4gdXBkYXRlZCB0byByZWZsZWN0IHRoZSBzaWduYXR1cmUgY2hhbmdlLCByZW1vdmluZyB0aGUgbm93LXVubmVjZXNzYXJ5IGBwcmlvcml0eWAgYXJndW1lbnQuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXM/IEFmdGVyIGxvb2tpbmcgaXQgb3ZlciBjYXJlZnVsbHksIHRoZSBhbnN3ZXIgaXMgbm8uIFRoaXMgcGF0Y2ggKm9ubHkqIGNoYW5nZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIHVzZWQgYnkgdGhlIFNLQi4gSXTigJlzIGEgcHVyZSByZWZhY3RvcmluZyBhbmQgc2ltcGxpZmljYXRpb24sIHJlcGxhY2luZyBhIHZhcmlhYmxlIHdpdGggYSBjb25zdGFudC4gSXQmIzM5O3Mgbm90IGludHJvZHVjaW5nIGFueSBuZXcgZmllbGRzLCBtb2RpZnlpbmcgZGF0YSBzdHJ1Y3R1cmVzIG9yIHNpemVzLCBvciBjaGFuZ2luZyBob3cgZGF0YSBpcyBpbml0aWFsaXplZC4gSSYjMzk7bSBzYXRpc2ZpZWQgdGhhdCB0aGUgZXhpc3RpbmcgU0tCIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2ssIHdoaWNoIGhhbmRsZXMgaGVhZGVyIGNyZWF0aW9uIGFuZCBkYXRhIHNldHVwLCBpc24mIzM5O3QgYmVpbmcgYWx0ZXJlZCwganVzdCB0aGUgYWxsb2NhdGlvbiBjb250ZXh0LiBgYWxsb2Nfc2tiYCBpdHNlbGYgZG9lc24mIzM5O3QgemVybyB0aGUgZGF0YSwgYnV0IHRoZSBzdWJzZXF1ZW50IGNhbGxzIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjayBndWFyYW50ZWUgdGhhdCBldmVyeXRoaW5nIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB0cmFuc21pc3Npb24uCgpUaGVyZWZvcmUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbiYjMzk7dCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgaXNzdWVzIHRoaXMgcmVmYWN0b3JpbmcgKmNvdWxkKiBpbnRyb2R1Y2UgLSB0aG91Z2ggSSBkb24mIzM5O3Qgc2VlIGFueSByZWFsIHJpc2suIFRoZSBwYXRjaCBwcmltYXJpbHkgYWx0ZXJzIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIHdpdGhpbiBhIHdlbGwtZXN0YWJsaXNoZWQgYW5kIHRlc3RlZCBjb2RlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBnZnBfdCBwcmlvcml0eWAgYXJndW1lbnQgZnJvbSBgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KClgIGFuZCBoYXJkY29kZXMgYEdGUF9BVE9NSUNgIGZvciB0aGUgU0tCIGFsbG9jYXRpb24gYW5kIHRyYW5zbWlzc2lvbi4gVGhpcyBpcyBhIHNpbXBsZSByZWZhY3RvcmluZyBvZiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgYnVmZmVyIGxlbmd0aHMsIG9yIGFsdGVyIGluaXRpYWxpemF0aW9uIGxvZ2ljLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgaXQgaW4gY29udHJvbCBmbG93LiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgcGVyZmVjdGx5IGFkZXF1YXRlIHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2UuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBgZ2ZwX3QgcHJpb3JpdHlgIGFyZ3VtZW50IGZyb20gYHRjcF9zZW5kX2FjdGl2ZV9yZXNldCgpYCBhbmQgaGFyZGNvZGVzIGBHRlBfQVRPTUlDYCBmb3IgdGhlIFNLQiBhbGxvY2F0aW9uIGFuZCB0cmFuc21pc3Npb24uIFRoaXMgaXMgYSBzaW1wbGUgcmVmYWN0b3Jpbmcgb2YgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJ1ZmZlciBsZW5ndGhzLCBvciBhbHRlciBpbml0aWFsaXphdGlvbiBsb2dpYy4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzaW5nIGl0IGluIGNvbnRyb2wgZmxvdy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHBlcmZlY3RseSBhZGVxdWF0ZSB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozMzozNi4xMjY1NzA3OTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTY3MTg1MjgzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9zZW5kX2FjdGl2ZV9yZXNldFwiLFxuICAgIFwidGNwX2Rpc2Nvbm5lY3RcIixcbiAgICBcInRjcF9hYm9ydFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYGdmcF90IHByaW9yaXR5YCBhcmd1bWVudCBmcm9tIGB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoKWAgYW5kIGhhcmRjb2RlcyBgR0ZQX0FUT01JQ2AgZm9yIHRoZSBTS0IgYWxsb2NhdGlvbiBhbmQgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGEgc2ltcGxlIHJlZmFjdG9yaW5nIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBidWZmZXIgbGVuZ3Rocywgb3IgYWx0ZXIgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWxsb2NhdGlvbiBmbGFncyBmb3Igc2VuZGluZyBhY3RpdmUgVENQIHJlc2V0cyB0byBhbHdheXMgdXNlIEdGUF9BVE9NSUMsIGFsdGVyaW5nIGNvcmUgVENQIGFuZCBNUFRDUCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6MzYuMTI2NTc1OTM1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc3NDQxODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWMyZDEyYmU5OTczNDQ2NWJjYzU2N2M4ZDQ0NmM2ZWQ0OTA5ZGU3OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwMzozMzozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oXFxuaW5kZXggNjcwYzIwODc2ZjI2NS4uNDM2NDk1ZmYyMjcxZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC90Y3AuaFxcbisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oXFxuQEAgLTc2NSw4ICs3NjUsNyBAQCBpbnQgdGNwX2ZyYWdtZW50KHN0cnVjdCBzb2NrICpzaywgZW51bSB0Y3BfcXVldWUgdGNwX3F1ZXVlLFxcbiB2b2lkIHRjcF9zZW5kX3Byb2JlMChzdHJ1Y3Qgc29jayAqKTtcXG4gaW50IHRjcF93cml0ZV93YWtldXAoc3RydWN0IHNvY2sgKiwgaW50IG1pYik7XFxuIHZvaWQgdGNwX3NlbmRfZmluKHN0cnVjdCBzb2NrICpzayk7XFxuLXZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZ2ZwX3QgcHJpb3JpdHksXFxuLVxcdFxcdFxcdCAgIGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb24pO1xcbit2b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb24pO1xcbiBpbnQgdGNwX3NlbmRfc3luYWNrKHN0cnVjdCBzb2NrICopO1xcbiB2b2lkIHRjcF9wdXNoX29uZShzdHJ1Y3Qgc29jayAqLCB1bnNpZ25lZCBpbnQgbXNzX25vdyk7XFxuIHZvaWQgX190Y3Bfc2VuZF9hY2soc3RydWN0IHNvY2sgKnNrLCB1MzIgcmN2X254dCwgdTE2IGZsYWdzKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xcbmluZGV4IGI0MjM3ZDBlOTk0ZDYuLjkzZDcyM2Q4YzEwOTggMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xcbkBAIC0zMTgyLDggKzMxODIsNyBAQCB2b2lkIF9fdGNwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KVxcbiBcXHRcXHQvKiBVbnJlYWQgZGF0YSB3YXMgdG9zc2VkLCB6YXAgdGhlIGNvbm5lY3Rpb24uICovXFxuIFxcdFxcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRPTkNMT1NFKTtcXG4gXFx0XFx0dGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcXG4tXFx0XFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBzay1cXHUwMDNlc2tfYWxsb2NhdGlvbixcXG4tXFx0XFx0XFx0XFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpO1xcbitcXHRcXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX0NMT1NFKTtcXG4gXFx0fSBlbHNlIGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfTElOR0VSKSBcXHUwMDI2XFx1MDAyNiAhc2stXFx1MDAzZXNrX2xpbmdlcnRpbWUpIHtcXG4gXFx0XFx0LyogQ2hlY2sgemVybyBsaW5nZXIgX2FmdGVyXyBjaGVja2luZyBmb3IgdW5yZWFkIGRhdGEuICovXFxuIFxcdFxcdHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkaXNjb25uZWN0KHNrLCAwKTtcXG5AQCAtMzI1Nyw3ICszMjU2LDcgQEAgdm9pZCBfX3RjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcXG4gXFx0XFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuIFxcdFxcdGlmIChSRUFEX09OQ0UodHAtXFx1MDAzZWxpbmdlcjIpIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHR0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xcbi1cXHRcXHRcXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsXFxuK1xcdFxcdFxcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fTElOR0VSKTtcXG4gXFx0XFx0XFx0X19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcXG4gXFx0XFx0XFx0XFx0XFx0TElOVVhfTUlCX1RDUEFCT1JUT05MSU5HRVIpO1xcbkBAIC0zMjc2LDcgKzMyNzUsNyBAQCB2b2lkIF9fdGNwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KVxcbiBcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TRSkge1xcbiBcXHRcXHRpZiAodGNwX2NoZWNrX29vbShzaywgMCkpIHtcXG4gXFx0XFx0XFx0dGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcXG4tXFx0XFx0XFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLFxcbitcXHRcXHRcXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX01FTU9SWSk7XFxuIFxcdFxcdFxcdF9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksXFxuIFxcdFxcdFxcdFxcdFxcdExJTlVYX01JQl9UQ1BBQk9SVE9OTUVNT1JZKTtcXG5AQCAtMzM3NywxNCArMzM3NiwxNCBAQCBpbnQgdGNwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxuIFxcdH0gZWxzZSBpZiAodW5saWtlbHkodHAtXFx1MDAzZXJlcGFpcikpIHtcXG4gXFx0XFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfZXJyLCBFQ09OTkFCT1JURUQpO1xcbiBcXHR9IGVsc2UgaWYgKHRjcF9uZWVkX3Jlc2V0KG9sZF9zdGF0ZSkpIHtcXG4tXFx0XFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBnZnBfYW55KCksIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTtcXG4rXFx0XFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XFxuIFxcdFxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX2VyciwgRUNPTk5SRVNFVCk7XFxuIFxcdH0gZWxzZSBpZiAodHAtXFx1MDAzZXNuZF9ueHQgIT0gdHAtXFx1MDAzZXdyaXRlX3NlcSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAoMSBcXHUwMDNjXFx1MDAzYyBvbGRfc3RhdGUpIFxcdTAwMjYgKFRDUEZfQ0xPU0lORyB8IFRDUEZfTEFTVF9BQ0spKSB7XFxuIFxcdFxcdC8qIFRoZSBsYXN0IGNoZWNrIGFkanVzdHMgZm9yIGRpc2NyZXBhbmN5IG9mIExpbnV4IHdydC4gUkZDXFxuIFxcdFxcdCAqIHN0YXRlc1xcbiBcXHRcXHQgKi9cXG4tXFx0XFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBnZnBfYW55KCksXFxuK1xcdFxcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcXG4gXFx0XFx0XFx0XFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfRElTQ09OTkVDVF9XSVRIX0RBVEEpO1xcbiBcXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19lcnIsIEVDT05OUkVTRVQpO1xcbiBcXHR9IGVsc2UgaWYgKG9sZF9zdGF0ZSA9PSBUQ1BfU1lOX1NFTlQpXFxuQEAgLTUxNDcsOCArNTE0Niw3IEBAIGludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxcbiBcXHRiaF9sb2NrX3NvY2soc2spO1xcbiBcXG4gXFx0aWYgKHRjcF9uZWVkX3Jlc2V0KHNrLVxcdTAwM2Vza19zdGF0ZSkpXFxuLVxcdFxcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpO1xcbitcXHRcXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTtcXG4gXFx0dGNwX2RvbmVfd2l0aF9lcnJvcihzaywgZXJyKTtcXG4gXFxuIFxcdGJoX3VubG9ja19zb2NrKHNrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXFxuaW5kZXggZjI3MDlkNTg1ZWRiZC4uMTlhNzk5ZTVkNWNlMyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcXG4rKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcXG5AQCAtMzg0OSwxNSArMzg0OSwxNCBAQCB2b2lkIHRjcF9zZW5kX2ZpbihzdHJ1Y3Qgc29jayAqc2spXFxuICAqIHdhcyB1bnJlYWQgZGF0YSBpbiB0aGUgcmVjZWl2ZSBxdWV1ZS4gIFRoaXMgYmVoYXZpb3IgaXMgcmVjb21tZW5kZWRcXG4gICogYnkgUkZDIDI1MjUsIHNlY3Rpb24gMi4xNy4gIC1EYXZlTVxcbiAgKi9cXG4tdm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBnZnBfdCBwcmlvcml0eSxcXG4tXFx0XFx0XFx0ICAgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbilcXG4rdm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHNrX3JzdF9yZWFzb24gcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcbiBcXHRUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9PVVRSU1RTKTtcXG4gXFxuIFxcdC8qIE5PVEU6IE5vIFRDUCBvcHRpb25zIGF0dGFjaGVkIGFuZCB3ZSBuZXZlciByZXRyYW5zbWl0IHRoaXMuICovXFxuLVxcdHNrYiA9IGFsbG9jX3NrYihNQVhfVENQX0hFQURFUiwgcHJpb3JpdHkpO1xcbitcXHRza2IgPSBhbGxvY19za2IoTUFYX1RDUF9IRUFERVIsIEdGUF9BVE9NSUMpO1xcbiBcXHRpZiAoIXNrYikge1xcbiBcXHRcXHRORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUEFCT1JURkFJTEVEKTtcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0zODY5LDcgKzM4NjgsNyBAQCB2b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IHByaW9yaXR5LFxcbiBcXHRcXHRcXHQgICAgIFRDUEhEUl9BQ0sgfCBUQ1BIRFJfUlNUKTtcXG4gXFx0dGNwX21zdGFtcF9yZWZyZXNoKHRjcF9zayhzaykpO1xcbiBcXHQvKiBTZW5kIGl0IG9mZi4gKi9cXG4tXFx0aWYgKHRjcF90cmFuc21pdF9za2Ioc2ssIHNrYiwgMCwgcHJpb3JpdHkpKVxcbitcXHRpZiAodGNwX3RyYW5zbWl0X3NrYihzaywgc2tiLCAwLCBHRlBfQVRPTUlDKSlcXG4gXFx0XFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVEZBSUxFRCk7XFxuIFxcbiBcXHQvKiBza2Igb2YgdHJhY2VfdGNwX3NlbmRfcmVzZXQoKSBrZWVwcyB0aGUgc2tiIHRoYXQgY2F1c2VkIFJTVCxcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMgYi9uZXQvaXB2NC90Y3BfdGltZXIuY1xcbmluZGV4IDEwMzhlN2JhOWMyZWIuLmU1NmVhZTRiYzM0MWUgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwX3RpbWVyLmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfdGltZXIuY1xcbkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIGludCB0Y3Bfb3V0X29mX3Jlc291cmNlcyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZG9fcmVzZXQpXFxuIFxcdFxcdCAgICAoIXRwLVxcdTAwM2VzbmRfd25kIFxcdTAwMjZcXHUwMDI2ICF0cC1cXHUwMDNlcGFja2V0c19vdXQpKVxcbiBcXHRcXHRcXHRkb19yZXNldCA9IHRydWU7XFxuIFxcdFxcdGlmIChkb19yZXNldClcXG4tXFx0XFx0XFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLFxcbitcXHRcXHRcXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX01FTU9SWSk7XFxuIFxcdFxcdHRjcF9kb25lKHNrKTtcXG4gXFx0XFx0X19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUEFCT1JUT05NRU1PUlkpO1xcbkBAIC04MDksNyArODA5LDcgQEAgc3RhdGljIHZvaWQgdGNwX2tlZXBhbGl2ZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4gXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbi1cXHRcXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTtcXG4rXFx0XFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XFxuIFxcdFxcdGdvdG8gZGVhdGg7XFxuIFxcdH1cXG4gXFxuQEAgLTgzNiw3ICs4MzYsNyBAQCBzdGF0aWMgdm9pZCB0Y3Bfa2VlcGFsaXZlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiBcXHRcXHQgICAgaWNzay1cXHUwMDNlaWNza19wcm9iZXNfb3V0IFxcdTAwM2UgMCkgfHxcXG4gXFx0XFx0ICAgICh1c2VyX3RpbWVvdXQgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgaWNzay1cXHUwMDNlaWNza19wcm9iZXNfb3V0IFxcdTAwM2U9IGtlZXBhbGl2ZV9wcm9iZXModHApKSkge1xcbi1cXHRcXHRcXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsXFxuK1xcdFxcdFxcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfS0VFUEFMSVZFX1RJTUVPVVQpO1xcbiBcXHRcXHRcXHR0Y3Bfd3JpdGVfZXJyKHNrKTtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5pbmRleCBiNDc0ZDAzNjIwYTc1Li5lMWYwOGY3MWNkYjE2IDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5AQCAtMzEwOSw4ICszMTA5LDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfZG9fZmFzdGNsb3NlKHN0cnVjdCBzb2NrICpzaylcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGluZXRfY3NrKHNzayktXFx1MDAzZWljc2tfYWNrLnJjdl9tc3MgPSBUQ1BfTUlOX01TUztcXG4gXFxuLVxcdFxcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzc2ssIHNzay1cXHUwMDNlc2tfYWxsb2NhdGlvbixcXG4tXFx0XFx0XFx0XFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpO1xcbitcXHRcXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3NrLCBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9DTE9TRSk7XFxuIHVubG9jazpcXG4gXFx0XFx0cmVsZWFzZV9zb2NrKHNzayk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxcbmluZGV4IDA2YTEwN2Q0ZTgzOTIuLjg3Y2NiODRlOTkyN2MgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmhcXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxcbkBAIC02OTAsNyArNjkwLDcgQEAgbXB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXRfcmVhc29uKHN0cnVjdCBzb2NrICpzaylcXG4gXFx0ZW51bSBza19yc3RfcmVhc29uIHJlYXNvbjtcXG4gXFxuIFxcdHJlYXNvbiA9IHNrX3JzdF9jb252ZXJ0X21wdGNwX3JlYXNvbihzdWJmbG93LVxcdTAwM2VyZXNldF9yZWFzb24pO1xcbi1cXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsIHJlYXNvbik7XFxuK1xcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgcmVhc29uKTtcXG4gfVxcbiBcXG4gLyogTWFkZSB0aGUgZndkIG1lbSBjYXJyaWVkIGJ5IHRoZSBnaXZlbiBza2IgYXZhaWxhYmxlIHRvIHRoZSBtc2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjMzOjM3LjYwNDg1MTc2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUwMjI0NDMwOTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3NlbmRfYWN0aXZlX3Jlc2V0XCIsXG4gICAgXCJ0Y3BfZGlzY29ubmVjdFwiLFxuICAgIFwidGNwX2Fib3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGFsbG9jYXRpb24gZmxhZ3MgZm9yIHNlbmRpbmcgYWN0aXZlIFRDUCByZXNldHMgdG8gYWx3YXlzIHVzZSBHRlBfQVRPTUlDLCBhbHRlcmluZyBjb3JlIFRDUCBhbmQgTVBUQ1AgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFjMmQxMmJlOTk3MzQ0NjViY2M1NjdjOGQ0NDZjNmVkNDkwOWRlNzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwMzozMzozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmhcbmluZGV4IDY3MGMyMDg3NmYyNjUuLjQzNjQ5NWZmMjI3MWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC90Y3AuaFxuKysrIGIvaW5jbHVkZS9uZXQvdGNwLmhcbkBAIC03NjUsOCArNzY1LDcgQEAgaW50IHRjcF9mcmFnbWVudChzdHJ1Y3Qgc29jayAqc2ssIGVudW0gdGNwX3F1ZXVlIHRjcF9xdWV1ZSxcbiB2b2lkIHRjcF9zZW5kX3Byb2JlMChzdHJ1Y3Qgc29jayAqKTtcbiBpbnQgdGNwX3dyaXRlX3dha2V1cChzdHJ1Y3Qgc29jayAqLCBpbnQgbWliKTtcbiB2b2lkIHRjcF9zZW5kX2ZpbihzdHJ1Y3Qgc29jayAqc2spO1xuLXZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZ2ZwX3QgcHJpb3JpdHksXG4tXHRcdFx0ICAgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbik7XG4rdm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHNrX3JzdF9yZWFzb24gcmVhc29uKTtcbiBpbnQgdGNwX3NlbmRfc3luYWNrKHN0cnVjdCBzb2NrICopO1xuIHZvaWQgdGNwX3B1c2hfb25lKHN0cnVjdCBzb2NrICosIHVuc2lnbmVkIGludCBtc3Nfbm93KTtcbiB2b2lkIF9fdGNwX3NlbmRfYWNrKHN0cnVjdCBzb2NrICpzaywgdTMyIHJjdl9ueHQsIHUxNiBmbGFncyk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggYjQyMzdkMGU5OTRkNi4uOTNkNzIzZDhjMTA5OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTMxODIsOCArMzE4Miw3IEBAIHZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG4gXHRcdC8qIFVucmVhZCBkYXRhIHdhcyB0b3NzZWQsIHphcCB0aGUgY29ubmVjdGlvbi4gKi9cbiBcdFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVE9OQ0xPU0UpO1xuIFx0XHR0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xuLVx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIHNrLVx1MDAzZXNrX2FsbG9jYXRpb24sXG4tXHRcdFx0XHQgICAgICBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9DTE9TRSk7XG4rXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpO1xuIFx0fSBlbHNlIGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfTElOR0VSKSBcdTAwMjZcdTAwMjYgIXNrLVx1MDAzZXNrX2xpbmdlcnRpbWUpIHtcbiBcdFx0LyogQ2hlY2sgemVybyBsaW5nZXIgX2FmdGVyXyBjaGVja2luZyBmb3IgdW5yZWFkIGRhdGEuICovXG4gXHRcdHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGlzY29ubmVjdChzaywgMCk7XG5AQCAtMzI1Nyw3ICszMjU2LDcgQEAgdm9pZCBfX3RjcF9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dClcbiBcdFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4gXHRcdGlmIChSRUFEX09OQ0UodHAtXHUwMDNlbGluZ2VyMikgXHUwMDNjIDApIHtcbiBcdFx0XHR0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xuLVx0XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQyxcbitcdFx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssXG4gXHRcdFx0XHRcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX0xJTkdFUik7XG4gXHRcdFx0X19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcbiBcdFx0XHRcdFx0TElOVVhfTUlCX1RDUEFCT1JUT05MSU5HRVIpO1xuQEAgLTMyNzYsNyArMzI3NSw3IEBAIHZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG4gXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0NMT1NFKSB7XG4gXHRcdGlmICh0Y3BfY2hlY2tfb29tKHNrLCAwKSkge1xuIFx0XHRcdHRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7XG4tXHRcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLFxuK1x0XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcbiBcdFx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fTUVNT1JZKTtcbiBcdFx0XHRfX05FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLFxuIFx0XHRcdFx0XHRMSU5VWF9NSUJfVENQQUJPUlRPTk1FTU9SWSk7XG5AQCAtMzM3NywxNCArMzM3NiwxNCBAQCBpbnQgdGNwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXG4gXHR9IGVsc2UgaWYgKHVubGlrZWx5KHRwLVx1MDAzZXJlcGFpcikpIHtcbiBcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19lcnIsIEVDT05OQUJPUlRFRCk7XG4gXHR9IGVsc2UgaWYgKHRjcF9uZWVkX3Jlc2V0KG9sZF9zdGF0ZSkpIHtcbi1cdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBnZnBfYW55KCksIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTtcbitcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XG4gXHRcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfZXJyLCBFQ09OTlJFU0VUKTtcbiBcdH0gZWxzZSBpZiAodHAtXHUwMDNlc25kX254dCAhPSB0cC1cdTAwM2V3cml0ZV9zZXEgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICgxIFx1MDAzY1x1MDAzYyBvbGRfc3RhdGUpIFx1MDAyNiAoVENQRl9DTE9TSU5HIHwgVENQRl9MQVNUX0FDSykpIHtcbiBcdFx0LyogVGhlIGxhc3QgY2hlY2sgYWRqdXN0cyBmb3IgZGlzY3JlcGFuY3kgb2YgTGludXggd3J0LiBSRkNcbiBcdFx0ICogc3RhdGVzXG4gXHRcdCAqL1xuLVx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIGdmcF9hbnkoKSxcbitcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLFxuIFx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfRElTQ09OTkVDVF9XSVRIX0RBVEEpO1xuIFx0XHRXUklURV9PTkNFKHNrLVx1MDAzZXNrX2VyciwgRUNPTk5SRVNFVCk7XG4gXHR9IGVsc2UgaWYgKG9sZF9zdGF0ZSA9PSBUQ1BfU1lOX1NFTlQpXG5AQCAtNTE0Nyw4ICs1MTQ2LDcgQEAgaW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpXG4gXHRiaF9sb2NrX3NvY2soc2spO1xuIFxuIFx0aWYgKHRjcF9uZWVkX3Jlc2V0KHNrLVx1MDAzZXNrX3N0YXRlKSlcbi1cdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLFxuLVx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpO1xuK1x0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTtcbiBcdHRjcF9kb25lX3dpdGhfZXJyb3Ioc2ssIGVycik7XG4gXG4gXHRiaF91bmxvY2tfc29jayhzayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5pbmRleCBmMjcwOWQ1ODVlZGJkLi4xOWE3OTllNWQ1Y2UzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jXG4rKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmNcbkBAIC0zODQ5LDE1ICszODQ5LDE0IEBAIHZvaWQgdGNwX3NlbmRfZmluKHN0cnVjdCBzb2NrICpzaylcbiAgKiB3YXMgdW5yZWFkIGRhdGEgaW4gdGhlIHJlY2VpdmUgcXVldWUuICBUaGlzIGJlaGF2aW9yIGlzIHJlY29tbWVuZGVkXG4gICogYnkgUkZDIDI1MjUsIHNlY3Rpb24gMi4xNy4gIC1EYXZlTVxuICAqL1xuLXZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZ2ZwX3QgcHJpb3JpdHksXG4tXHRcdFx0ICAgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbilcbit2b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb24pXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbiBcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX09VVFJTVFMpO1xuIFxuIFx0LyogTk9URTogTm8gVENQIG9wdGlvbnMgYXR0YWNoZWQgYW5kIHdlIG5ldmVyIHJldHJhbnNtaXQgdGhpcy4gKi9cbi1cdHNrYiA9IGFsbG9jX3NrYihNQVhfVENQX0hFQURFUiwgcHJpb3JpdHkpO1xuK1x0c2tiID0gYWxsb2Nfc2tiKE1BWF9UQ1BfSEVBREVSLCBHRlBfQVRPTUlDKTtcbiBcdGlmICghc2tiKSB7XG4gXHRcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRGQUlMRUQpO1xuIFx0XHRyZXR1cm47XG5AQCAtMzg2OSw3ICszODY4LDcgQEAgdm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBnZnBfdCBwcmlvcml0eSxcbiBcdFx0XHQgICAgIFRDUEhEUl9BQ0sgfCBUQ1BIRFJfUlNUKTtcbiBcdHRjcF9tc3RhbXBfcmVmcmVzaCh0Y3Bfc2soc2spKTtcbiBcdC8qIFNlbmQgaXQgb2ZmLiAqL1xuLVx0aWYgKHRjcF90cmFuc21pdF9za2Ioc2ssIHNrYiwgMCwgcHJpb3JpdHkpKVxuK1x0aWYgKHRjcF90cmFuc21pdF9za2Ioc2ssIHNrYiwgMCwgR0ZQX0FUT01JQykpXG4gXHRcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRGQUlMRUQpO1xuIFxuIFx0Lyogc2tiIG9mIHRyYWNlX3RjcF9zZW5kX3Jlc2V0KCkga2VlcHMgdGhlIHNrYiB0aGF0IGNhdXNlZCBSU1QsXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMgYi9uZXQvaXB2NC90Y3BfdGltZXIuY1xuaW5kZXggMTAzOGU3YmE5YzJlYi4uZTU2ZWFlNGJjMzQxZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jXG4rKysgYi9uZXQvaXB2NC90Y3BfdGltZXIuY1xuQEAgLTEyNiw3ICsxMjYsNyBAQCBzdGF0aWMgaW50IHRjcF9vdXRfb2ZfcmVzb3VyY2VzKHN0cnVjdCBzb2NrICpzaywgYm9vbCBkb19yZXNldClcbiBcdFx0ICAgICghdHAtXHUwMDNlc25kX3duZCBcdTAwMjZcdTAwMjYgIXRwLVx1MDAzZXBhY2tldHNfb3V0KSlcbiBcdFx0XHRkb19yZXNldCA9IHRydWU7XG4gXHRcdGlmIChkb19yZXNldClcbi1cdFx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsXG4rXHRcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLFxuIFx0XHRcdFx0XHQgICAgICBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9NRU1PUlkpO1xuIFx0XHR0Y3BfZG9uZShzayk7XG4gXHRcdF9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BBQk9SVE9OTUVNT1JZKTtcbkBAIC04MDksNyArODA5LDcgQEAgc3RhdGljIHZvaWQgdGNwX2tlZXBhbGl2ZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdH1cbiBcdFx0fVxuLVx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTtcbitcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XG4gXHRcdGdvdG8gZGVhdGg7XG4gXHR9XG4gXG5AQCAtODM2LDcgKzgzNiw3IEBAIHN0YXRpYyB2b2lkIHRjcF9rZWVwYWxpdmVfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRcdCAgICBpY3NrLVx1MDAzZWljc2tfcHJvYmVzX291dCBcdTAwM2UgMCkgfHxcbiBcdFx0ICAgICh1c2VyX3RpbWVvdXQgPT0gMCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGljc2stXHUwMDNlaWNza19wcm9iZXNfb3V0IFx1MDAzZT0ga2VlcGFsaXZlX3Byb2Jlcyh0cCkpKSB7XG4tXHRcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLFxuK1x0XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcbiBcdFx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfS0VFUEFMSVZFX1RJTUVPVVQpO1xuIFx0XHRcdHRjcF93cml0ZV9lcnIoc2spO1xuIFx0XHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbmluZGV4IGI0NzRkMDM2MjBhNzUuLmUxZjA4ZjcxY2RiMTYgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbkBAIC0zMTA5LDggKzMxMDksNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF9kb19mYXN0Y2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHQgKi9cbiBcdFx0aW5ldF9jc2soc3NrKS1cdTAwM2VpY3NrX2Fjay5yY3ZfbXNzID0gVENQX01JTl9NU1M7XG4gXG4tXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzc2ssIHNzay1cdTAwM2Vza19hbGxvY2F0aW9uLFxuLVx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpO1xuK1x0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3NrLCBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9DTE9TRSk7XG4gdW5sb2NrOlxuIFx0XHRyZWxlYXNlX3NvY2soc3NrKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5pbmRleCAwNmExMDdkNGU4MzkyLi44N2NjYjg0ZTk5MjdjIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmhcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5AQCAtNjkwLDcgKzY5MCw3IEBAIG1wdGNwX3NlbmRfYWN0aXZlX3Jlc2V0X3JlYXNvbihzdHJ1Y3Qgc29jayAqc2spXG4gXHRlbnVtIHNrX3JzdF9yZWFzb24gcmVhc29uO1xuIFxuIFx0cmVhc29uID0gc2tfcnN0X2NvbnZlcnRfbXB0Y3BfcmVhc29uKHN1YmZsb3ctXHUwMDNlcmVzZXRfcmVhc29uKTtcbi1cdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQywgcmVhc29uKTtcbitcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgcmVhc29uKTtcbiB9XG4gXG4gLyogTWFkZSB0aGUgZndkIG1lbSBjYXJyaWVkIGJ5IHRoZSBnaXZlbiBza2IgYXZhaWxhYmxlIHRvIHRoZSBtc2ssXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozMzozNy42MDQ4NTMwMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDAzNzkzNDc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBhIFRDUC9NUFRDUCBQYXRjaDogV29ydGggRnV6emluZz8qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBtb2RpZnlpbmcgYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAgaW4gYG5ldC9pcHY0L3RjcF9vdXRwdXQuY2AuIEVzc2VudGlhbGx5LCBpdCdzIHJlbW92aW5nIHRoZSBgcHJpb3JpdHlgIGFyZ3VtZW50ICh3aGljaCB3YXMgYSBgZ2ZwX3RgIHZhbHVlKSBhbmQgaGFyZGNvZGluZyBgR0ZQX0FUT01JQ2AgaW5zaWRlIHRoZSBmdW5jdGlvbi4gIEl0IHVwZGF0ZXMgYWxsIHRoZSBjYWxsZXJzIGluIGBuZXQvaXB2NC90Y3AuY2AsIGBuZXQvaXB2NC90Y3BfdGltZXIuY2AsIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AsIGFuZCBgbmV0L21wdGNwL3Byb3RvY29sLmhgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZS4gUHJldmlvdXNseSwgYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAgd2FzIGNhbGxlZCB3aXRoIGEgdmFyaWV0eSBvZiBgZ2ZwX3RgIHZhbHVlcywgaW5jbHVkaW5nIGBzay1cdTAwM2Vza19hbGxvY2F0aW9uYCAod2hpY2ggY291bGQgYmUgYEdGUF9LRVJORUxgIG9yIGBHRlBfVVNFUmApLCBhbmQgYEdGUF9BVE9NSUNgIGV4cGxpY2l0bHkuICBOb3csIGl0ICphbHdheXMqIHVzZXMgYEdGUF9BVE9NSUNgLiBUaGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0IGFsdGVycyB0aGUgYWxsb2NhdGlvbiBmbGFncyB1c2VkIGJ5IGBhbGxvY19za2JgIGFuZCBgdGNwX3RyYW5zbWl0X3NrYmAuXG5cblRoZSBrZXkgY29uY2VybiBpcyB0aGF0IGJ5IGhhcmRjb2RpbmcgYEdGUF9BVE9NSUNgLCB3ZSdyZSBwb3RlbnRpYWxseSBpbnRyb2R1Y2luZyBtb3JlIGFsbG9jYXRpb24gZmFpbHVyZXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiAgT3IsIHBlcmhhcHMsIGl0J3MgYSB2YWxpZCBzaW1wbGlmaWNhdGlvbiB0aGF0IGp1c3QgaGFyZGNvZGVzIGEgdmFsdWUgYWxyZWFkeSBmcmVxdWVudGx5IHVzZWQgaW4gdGhlc2UgY29udGV4dHMuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIHRoaXMgd29ydGggZnV6emluZz8gIEl0ICpkb2VzKiBtb2RpZnkgY29yZSBUQ1AgbG9naWMsIHNwZWNpZmljYWxseSBob3cgYWN0aXZlIHJlc2V0cyBhcmUgc2VudC4gIEhvd2V2ZXIsIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBsb2dpYy4gSXQgc2ltcGx5IGNoYW5nZXMgYW4gYWxsb2NhdGlvbiBmbGFnLCBhIHNlZW1pbmdseSBzaW1wbGUgY2hhbmdlLiAgQnV0LCB3YWl0LCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGUsIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLiBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3dcIi4gQ2hhbmdpbmcgYGdmcF90YCBmcm9tIGBzay1cdTAwM2Vza19hbGxvY2F0aW9uYCB0byBgR0ZQX0FUT01JQ2AgbWlnaHQsIGluIHNvbWUgdmVyeSBuYXJyb3cgZWRnZSBjYXNlcywgYWZmZWN0IHRoZSBleGVjdXRpb24gZmxvdyBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscy4gR2l2ZW4gdGhlIHNpbXBsaWNpdHkgb2YgdGhlIGNoYW5nZSBidXQgdGhlIGNvcmUgbG9jYXRpb24sIEkgbmVlZCB0byBsb29rIGNsb3Nlci5cblxuT2theSwgbGV0IG1lIHJlLWV4YW1pbmUgdGhlIHBhdGNoLiAgSXQncyBqdXN0IHRoZSByZW1vdmFsIG9mIHRoZSBgcHJpb3JpdHlgIHBhcmFtZXRlciBhbmQgdGhlIGhhcmRjb2RpbmcuIGB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXRgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCB1c2VkIGluIHZhcmlvdXMgcGFydHMuXG5cbkNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGFsbG9jYXRpb24gZmFpbHVyZXMsIGlzIGl0IHdvcnRoIGZ1enppbmc/ICBZZXMsIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gY29yZSBUQ1AgYW5kIE1QVENQLiBGdXp6aW5nIG1pZ2h0IG5vdCAqc3BlY2lmaWNhbGx5KiB0YXJnZXQgdGhlIGBHRlBfQVRPTUlDYCBjaGFuZ2UsIGJ1dCBpdOKAmXMgYSBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgaXTigJlzIGJldHRlciB0byBiZSBzYWZlLiBJ4oCZbSBzZXR0aW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblRoZXJlZm9yZSwgSSdsbCBiZSBmb2N1c2luZyBvbiB0aGUgc3ltYm9scyBgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0YCwgYHRjcF9kaXNjb25uZWN0YCwgYW5kIHRvIGEgbGVzc2VyIGRlZ3JlZSBgbXB0Y3BfZG9fZmFzdGNsb3NlYC4gIEkgbmVlZCB0byBjaGVjayB0aGVpciB2aXNpYmlsaXR5LiBgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0YCBpcyBnbG9iYWxseSB2aXNpYmxlLiAgYG1wdGNwX2RvX2Zhc3RjbG9zZWAgaXMgc3RhdGljLCBzbyBJIGNhbiBpZ25vcmUgaXQgZm9yIGZ1enppbmcgcHVycG9zZXMuICBgdGNwX2Rpc2Nvbm5lY3RgIGFuZCBgdGNwX2Fib3J0YCBhcmUgZ2xvYmFsbHkgdmlzaWJsZS5cblxuRm9yIGNvbmZpZ3VyYXRpb25zLCBJJ2xsIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgaW52b2x2ZXMgYm90aCBgTVBUQ1BgIGFuZCBgSU5FVGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MzcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDE3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6NTEuNjQyNzkxMTg2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTUzNTM4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9NzY3PXZvaWQgdGNwX3NlbmRfZmluKHN0cnVjdCBzb2NrICpzayk7XFxuaW5jbHVkZS9uZXQvdGNwLmg6NzY4OnZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbik7XFxuaW5jbHVkZS9uZXQvdGNwLmgtNzY5LWludCB0Y3Bfc2VuZF9zeW5hY2soc3RydWN0IHNvY2sgKik7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9MzgwMT12b2lkIHRjcF9zZW5kX2ZpbihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzg1MS0gKi9cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6Mzg1Mjp2b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb24pXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM4NTMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozMzo1My4xOTgxNTE3OTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMxMzgyNDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTmV0d29yayBEaXNjb25uZWN0aW9uIFZpc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHZpc2liaWxpdHkgb2YgYSBuZXR3b3JrIGRpc2Nvbm5lY3Rpb24uIFRoaXMgc2l0dWF0aW9uIGlzIHNvbWV0aGluZyBJIGtub3cgaXMgZ29pbmcgdG8gYmUgZ2xvYmFsbHkgdmlzaWJsZS4gU28sIHRoZSBxdWVzdGlvbiB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgaG93IGNhbiBJIGNoZWNrIGl0PyBMZXQgbWUgY2hlY2sgdGhlIHNwZWNpZmljcyBieSBsb29raW5nIGF0IGB0Y3BfZGlzY29ubmVjdGAuIEkgY2FuIGxvb2sgdGhlcmUgdG8gZmluZCB0aGUgaW5mb3JtYXRpb24gYW5kIGtub3cgaG93IHRvIGZpbmQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1ODksIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozMzo1Ni41Mjk1MzY0MzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxNDg0ODg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdGNwX2Rpc2Nvbm5lY3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9NTc3PXN0cnVjdCBza19idWZmICp0Y3BfbWFrZV9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC01ODEtXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnN5bl9za2IpO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjU4MjppbnQgdGNwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTU4My1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTMzNDU9dm9pZCB0Y3Bfd3JpdGVfcXVldWVfcHVyZ2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMzM2MC1cXG5uZXQvaXB2NC90Y3AuYzozMzYxOmludCB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcXG5uZXQvaXB2NC90Y3AuYy0zMzYyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6NTguNzQ0Mzg5NTUxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY5NDI0NzMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYHRjcF9hYm9ydGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGB0Y3BfYWJvcnRgLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIGhhbmRsaW5nIGNvbm5lY3Rpb24gdGVybWluYXRpb24sIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBiZWhhdmlvciBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBBIHF1aWNrIGludmVzdGlnYXRpb24gb2YgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBzZWVtcyB3YXJyYW50ZWQuIFRpbWUgdG8gZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTI2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDowMS40Mzg2Mzg4NzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNDM1NjA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdGNwX2Fib3J0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTE3MDQ9dm9pZCB0Y3BfZG9uZShzdHJ1Y3Qgc29jayAqc2spO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjE3MDU6aW50IHRjcF9hYm9ydChzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIpO1xcbmluY2x1ZGUvbmV0L3RjcC5oLTE3MDYtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz01MDc5PXZvaWQgdGNwX2RvbmUoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNTEwNC1cXG5uZXQvaXB2NC90Y3AuYzo1MTA1OmludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxcbm5ldC9pcHY0L3RjcC5jLTUxMDYte1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMDk2PXN0YXRpYyB2b2lkIHRjcF9yZWxlYXNlX2NiX292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxMTEtXFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTEyOnN0YXRpYyBpbnQgdGNwX2Fib3J0X292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2ssIGludCBlcnIpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTEzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6MDIuOTcyOTk4NjQxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwNTgzMTUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYG1wdGNwX2RvX2Zhc3RjbG9zZWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIFwiTGV0J3MgY2hlY2sgYG1wdGNwX2RvX2Zhc3RjbG9zZWAuXCIgVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiBob3cgTVBUQ1AncyBmYXN0IGNsb3NlIG1lY2hhbmlzbSB3b3Jrcy4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMsIGJvdHRsZW5lY2tzLCBvciBhcmVhcyB0aGF0IG1pZ2h0IGJlIG1pc2JlaGF2aW5nIGJhc2VkIG9uIHNvbWUgcmVjZW50IG9ic2VydmF0aW9ucyBvciBidWcgcmVwb3J0cy4gSeKAmWxsIGJlIHRoaW5raW5nIGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgTVBUQ1Agc3RhY2ssIGVzcGVjaWFsbHkgY29ubmVjdGlvbiB0ZWFyZG93biBhbmQgc3RhdGUgdHJhbnNpdGlvbnMuIEnigJlsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBzdWJ0bGV0aWVzIG9mIHRoZSBoYW5kc2hha2UgYW5kIGRhdGEgdHJhbnNmZXIgcGhhc2VzIGluIHJlbGF0aW9uIHRvIHRoZSBmYXN0IGNsb3NlIG9wZXJhdGlvbi4gV2hlcmXigJlzIHRoYXQgZG9jdW1lbnRhdGlvbj8gQW5kIEkgbWlnaHQgYmUgbG9va2luZyBpbnRvIHNvbWUgdGVzdCBzY2VuYXJpb3MgdG8gcmVwbGljYXRlIGlzc3VlcyBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjb2RlIGNoYW5nZXMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW50ZXJlc3RpbmcuIFRpbWUgdG8gZGl2ZSBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NzMyMywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjA2LjY3ODgzMjQwN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NTg5OTQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIG1wdGNwX2RvX2Zhc3RjbG9zZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMDY1PXN0YXRpYyB2b2lkIG1wdGNwX2JhY2tsb2dfcHVyZ2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzA4Mi1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMDgzOnN0YXRpYyB2b2lkIG1wdGNwX2RvX2Zhc3RjbG9zZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzA4NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjA4LjE1NDczNzU0NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTY4MjIwNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBTdGF0aWMgQ29uZGl0aW9uKipcblxuT2theSwgdGhpcyBmZWVscyBzdGF0aWMsIGRvZXNuJ3QgaXQ/IFNvbWV0aGluZydzIHN0dWNrLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgd2h5LiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gTVBUQ1AgY29udGV4dCwgYW5kIHRoZSBwcm9ibGVtIHNlZW1zIHRvIGJlIGFuIHVuY2hhbmdpbmcgc3RhdGUsIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIHRvIG1pbmQgaXMgdGhlIHJlc2V0IGhhbmRsaW5nIGR1cmluZyB0aGUgYWN0aXZlIHBhdGggc2VsZWN0aW9uLiBMZXQncyBzZWUgaWYgdGhlIHJlYXNvbiBmb3IgdGhlIGxhY2sgb2YgY2hhbmdlLCB0aGUgYmxvY2thZ2UsIGNhbiBiZSBmb3VuZCB3aXRoaW4gdGhlIGBtcHRjcF9zZW5kX2FjdGl2ZV9yZXNldF9yZWFzb25gIGZ1bmN0aW9uLCBhcyB0aGF0J3Mgd2hlcmUgdGhlIHBhdGggY291bGQgc3RhbGwuIFRoYXQgc2VlbXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY3OSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjExLjEyMjk2MDQ0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NzQ5MjE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9zZW5kX2FjdGl2ZV9yZXNldF9yZWFzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9MjgwNT1zdGF0aWMgdm9pZCBtcHRjcF9jaGVja19mYXN0Y2xvc2Uoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4MjAtXFx0XFx0aWYgKHRjcF9zay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0NMT1NFKSB7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjgyMTpcXHRcXHRcXHRtcHRjcF9zZW5kX2FjdGl2ZV9yZXNldF9yZWFzb24odGNwX3NrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODIyLVxcdFxcdFxcdHRjcF9zZXRfc3RhdGUodGNwX3NrLCBUQ1BfQ0xPU0UpO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9Njg2PXN0YXRpYyBpbmxpbmUgdm9pZFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjY4NzptcHRjcF9zZW5kX2FjdGl2ZV9yZXNldF9yZWFzb24oc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTY4OC17XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTQyNz12b2lkIG1wdGNwX3N1YmZsb3dfcmVzZXQoc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNDQwLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6NDQxOlxcdG1wdGNwX3NlbmRfYWN0aXZlX3Jlc2V0X3JlYXNvbihzc2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtNDQyLVxcdHRjcF9kb25lKHNzayk7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTEzNTY9c3RhdGljIGJvb2wgc3ViZmxvd19jaGVja19kYXRhX2F2YWlsKHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE0MzctXFx0XFx0XFx0XFx0c2tfZWF0X3NrYihzc2ssIHNrYik7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNDM4OlxcdFxcdFxcdG1wdGNwX3NlbmRfYWN0aXZlX3Jlc2V0X3JlYXNvbihzc2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTQzOS1cXHRcXHRcXHRXUklURV9PTkNFKHN1YmZsb3ctXFx1MDAzZWRhdGFfYXZhaWwsIGZhbHNlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6MTIuNTgwNDU3MzcxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjQ0NDk3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN0YXRpYyBJbmxpbmUgRnVuY3Rpb25zIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyB1c2luZyBhIGBzdGF0aWMgaW5saW5lYCBjb25zdHJ1Y3QuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgY2VydGFpbiBmdW5jdGlvbiBzeW1ib2xzIGFzIGNyaXRpY2FsLCBwYXJ0aWN1bGFybHkgYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAsIGB0Y3BfZGlzY29ubmVjdGAsIGFuZCBgdGNwX2Fib3J0YC4gVGhvc2UgYXJlIHRoZSBvbmVzIEkgbmVlZCB0byBmb2N1cyBvbiBmb3IgdGhpcyBhbmFseXNpcywga25vd2luZyB0aGV5IG1pZ2h0IGJlIGhlYXZpbHkgb3B0aW1pemVkLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBlbnZpcm9ubWVudCwgSSdtIHByZXR0eSBzdXJlIGBJTkVUYCBpcyBpbiBwbGF5IHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBUQ1AuIEJ1dCBtb3JlIGltcG9ydGFudGx5LCB0aGUgcHJlc2VuY2Ugb2YgdGhlc2UgVENQLXJlbGF0ZWQgZnVuY3Rpb25zIGxpa2VseSBpbmRpY2F0ZXMgdGhhdCBgTVBUQ1BgIGlzIGFsc28gY29uZmlndXJlZC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYE1QVENQYCBpcyBpbmRlZWQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gbmFtZSB0byBjb25maXJtIHRoaXMgaW50dWl0aW9uIGFuZCBlbnN1cmUgSSdtIHRhcmdldGluZyB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzIyLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6MTYuNTQ0OTA4OTk1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAzNjIxMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNUFRDUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvS2NvbmZpZy0xLVxcbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXFxubmV0L21wdGNwL0tjb25maWctMy1cXHRib29sIFxcXCJNUFRDUDogTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxcbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XFxubmV0L21wdGNwL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiTVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxcbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxubmV0L21wdGNwL0tjb25maWctMjYtXFx0dHJpc3RhdGUgXFxcIlRoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDoxOC4wNDg1MzY4NDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5MzEyMjgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBNUFRDUGAgaXMgdGhlIGNvcnJlY3QgcHJvdG9jb2wgaGVyZS4gR29vZCwgZ29vZC4gTm93LCBsZXQncyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgZmxvYXRpbmcgYXJvdW5kLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2g7IEkgaGF2ZSB0byBhY2NvdW50IGZvciBhbnkgcG9zc2liaWxpdGllcy4gSG1tLCB3YWl0IGEgbWludXRlLCBgVENQYCBpdHNlbGYgaXNuJ3QgYSAqY29uZmlnKiwgaXQncyB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgcHJvdG9jb2wuIEl0J3MgbW9yZSBhYm91dCBgSU5FVGAgbGF5ZXIuIEdvdCBpdC4gSSdtIG9uIHRoZSByaWdodCB0cmFjayBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzkzLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6MjEuMTQxNjYxNTk5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM2NzEwOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9LY29uZmlnLTExMy1cXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcXG5uZXQvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTMzMD1jb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTMzOC1cXG5uZXQvaXB2NC9LY29uZmlnOjMzOTpjb25maWcgSU5FVF9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQwLVxcdHRyaXN0YXRlIFxcXCJJUDogQUggdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1BcXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzY4LVxcbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzgxLVxcbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXFx0Ym9vbCBcXFwiSVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zOTMtXFxubmV0L2lwdjQvS2NvbmZpZzozOTQ6Y29uZmlnIElORVRfSVBDT01QXFxubmV0L2lwdjQvS2NvbmZpZy0zOTUtXFx0dHJpc3RhdGUgXFxcIklQOiBJUENvbXAgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQwMy1cXG5uZXQvaXB2NC9LY29uZmlnOjQwNDpjb25maWcgSU5FVF9UQUJMRV9QRVJUVVJCX09SREVSXFxubmV0L2lwdjQvS2NvbmZpZy00MDUtXFx0aW50IFxcXCJJTkVUOiBTb3VyY2UgcG9ydCBwZXJ0dXJiYXRpb24gdGFibGUgc2l6ZSAoYXMgcG93ZXIgb2YgMilcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTMtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTQ6Y29uZmlnIElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnLTQxNS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTgtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTk6Y29uZmlnIElORVRfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy00MjAtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDIyLVxcbm5ldC9pcHY0L0tjb25maWc6NDIzOmNvbmZpZyBJTkVUX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQyNC1cXHR0cmlzdGF0ZSBcXFwiSU5FVDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzQtXFxubmV0L2lwdjQvS2NvbmZpZzo0MzU6Y29uZmlnIElORVRfVENQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cXHRkZXBlbmRzIG9uIElORVRfRElBR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzgtXFxubmV0L2lwdjQvS2NvbmZpZzo0Mzk6Y29uZmlnIElORVRfVURQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQ0MC1cXHR0cmlzdGF0ZSBcXFwiVURQOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQ0Ni1cXG5uZXQvaXB2NC9LY29uZmlnOjQ0Nzpjb25maWcgSU5FVF9SQVdfRElBR1xcbm5ldC9pcHY0L0tjb25maWctNDQ4LVxcdHRyaXN0YXRlIFxcXCJSQVc6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDU0LVxcbm5ldC9pcHY0L0tjb25maWc6NDU1OmNvbmZpZyBJTkVUX0RJQUdfREVTVFJPWVxcbm5ldC9pcHY0L0tjb25maWctNDU2LVxcdGJvb2wgXFxcIklORVQ6IGFsbG93IHByaXZpbGVnZWQgcHJvY2VzcyB0byBhZG1pbmlzdHJhdGl2ZWx5IGNsb3NlIHNvY2tldHNcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTM5PWNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTQ2LVxcbm5ldC9pcHY2L0tjb25maWc6NDc6Y29uZmlnIElORVQ2X0FIXFxubmV0L2lwdjYvS2NvbmZpZy00OC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogQUggdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTYxLVxcbm5ldC9pcHY2L0tjb25maWc6NjI6Y29uZmlnIElORVQ2X0VTUFxcbm5ldC9pcHY2L0tjb25maWctNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNzYtXFxubmV0L2lwdjYvS2NvbmZpZzo3Nzpjb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG5uZXQvaXB2Ni9LY29uZmlnLTc4LVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctODktXFxubmV0L2lwdjYvS2NvbmZpZzo5MDpjb25maWcgSU5FVDZfRVNQSU5UQ1BcXG5uZXQvaXB2Ni9LY29uZmlnLTkxLVxcdGJvb2wgXFxcIklQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMDEtXFxubmV0L2lwdjYvS2NvbmZpZzoxMDI6Y29uZmlnIElORVQ2X0lQQ09NUFxcbm5ldC9pcHY2L0tjb25maWctMTAzLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUENvbXAgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTEyMD1jb25maWcgSVBWNl9JTEFcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTQwLVxcbm5ldC9pcHY2L0tjb25maWc6MTQxOmNvbmZpZyBJTkVUNl9YRlJNX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMTQyLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE0NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE0Njpjb25maWcgSU5FVDZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0xNDctXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnPTE0PWlmIE1QVENQXFxubmV0L21wdGNwL0tjb25maWctMTUtXFxubmV0L21wdGNwL0tjb25maWc6MTY6Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbm5ldC9tcHRjcC9LY29uZmlnLTE3LVxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuLS1cXG5uZXQvcHNwL0tjb25maWctNC0jXFxubmV0L3BzcC9LY29uZmlnOjU6Y29uZmlnIElORVRfUFNQXFxubmV0L3BzcC9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiUFNQIFNlY3VyaXR5IFByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvc2N0cC9LY29uZmlnPTY4PWVuZGNob2ljZVxcbm5ldC9zY3RwL0tjb25maWctNjktXFxubmV0L3NjdHAvS2NvbmZpZzo3MDpjb25maWcgSU5FVF9TQ1RQX0RJQUdcXG5uZXQvc2N0cC9LY29uZmlnLTcxLVxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjIyLjU3ODM3NzA5N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTc3Mzg0NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgVENQIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgVENQIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSB0aGUgYElORVRgIG1vZHVsZS4gTGV0J3MgYnJlYWsgZG93biB0aGUga2V5IHRha2Vhd2F5cy4gVGhpcyBjaGFuZ2UgaXMgZGVlbWVkIGBXb3J0aEZ1enppbmdgLCB3aGljaCBtZWFucyBpdCdzIGEgcG90ZW50aWFsIGFyZWEgZm9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgc28gaXQgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGhvdyBhY3RpdmUgVENQIHJlc2V0cyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5LCBob3cgYWxsb2NhdGlvbiBmbGFncyBhcmUgdXNlZCB3aGVuIHRoZXkncmUgc2VudC4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFRDUCBhbmQgTVBUQ1AgbG9naWMgdG8gKmFsd2F5cyogdXNlIGBHRlBfQVRPTUlDYCBmb3IgdGhlc2UgYWxsb2NhdGlvbnMuXG5cbk15IHJlYXNvbmluZyBzdWdnZXN0cyB0aGF0IHRoaXMgY2hhbmdlIGluIGFsbG9jYXRpb24gZmxhZ3MgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIHN1YnRsZSBpc3N1ZXMsIGVzcGVjaWFsbHkgaW4gaGlnaC1sb2FkIG9yIHJlc291cmNlLWNvbnN0cmFpbmVkIGVudmlyb25tZW50cy4gV2UgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHN3aXRjaGluZyB0byBgR0ZQX0FUT01JQ2AgZm9yIHRoZXNlIGNyaXRpY2FsIG5ldHdvcmsgb3BlcmF0aW9ucy5cblxuVGhlIGZ1bmN0aW9ucyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYXJlIGB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXRgLCBgdGNwX2Rpc2Nvbm5lY3RgLCBhbmQgYHRjcF9hYm9ydGAuIEknbGwgd2FudCB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBzZWUgaG93IHRoaXMgbmV3IGBHRlBfQVRPTUlDYCB1c2FnZSBpbXBhY3RzIHRoZW0uXG5cblRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgdG8gcmVwcm9kdWNlIHRoZSB0YXJnZXQgYXJlIGBJTkVUYCBhbmQgYE1QVENQYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NjgsIk91dHB1dFRva2VucyI6ODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDoyNy43NTU3NjQxODdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzUxNTA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3Bfc2VuZF9hY3RpdmVfcmVzZXRcIixcbiAgICBcInRjcF9kaXNjb25uZWN0XCIsXG4gICAgXCJ0Y3BfYWJvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYWxsb2NhdGlvbiBmbGFncyBmb3Igc2VuZGluZyBhY3RpdmUgVENQIHJlc2V0cyB0byBhbHdheXMgdXNlIEdGUF9BVE9NSUMsIGFsdGVyaW5nIGNvcmUgVENQIGFuZCBNUFRDUCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9zZW5kX2FjdGl2ZV9yZXNldFwiLFxuICAgIFwidGNwX2Rpc2Nvbm5lY3RcIixcbiAgICBcInRjcF9hYm9ydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBhbGxvY2F0aW9uIGZsYWdzIGZvciBzZW5kaW5nIGFjdGl2ZSBUQ1AgcmVzZXRzIHRvIGFsd2F5cyB1c2UgR0ZQX0FUT01JQywgYWx0ZXJpbmcgY29yZSBUQ1AgYW5kIE1QVENQIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDoyNy44MjkyODYyOTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NjkxMjg2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDoyNy44Mjk3NDAxMDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTk2ODY3MDgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYGdmcF90IHByaW9yaXR5YCBhcmd1bWVudCBmcm9tIGB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoKWAgYW5kIGhhcmRjb2RlcyBgR0ZQX0FUT01JQ2AgZm9yIHRoZSBTS0IgYWxsb2NhdGlvbiBhbmQgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGEgc2ltcGxlIHJlZmFjdG9yaW5nIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBidWZmZXIgbGVuZ3Rocywgb3IgYWx0ZXIgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYzJkMTJiZTk5NzM0NDY1YmNjNTY3YzhkNDQ2YzZlZDQ5MDlkZTc5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDM6MzM6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oXG5pbmRleCA2NzBjMjA4NzZmMjY1Li40MzY0OTVmZjIyNzFkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmhcbisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oXG5AQCAtNzY1LDggKzc2NSw3IEBAIGludCB0Y3BfZnJhZ21lbnQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHRjcF9xdWV1ZSB0Y3BfcXVldWUsXG4gdm9pZCB0Y3Bfc2VuZF9wcm9iZTAoc3RydWN0IHNvY2sgKik7XG4gaW50IHRjcF93cml0ZV93YWtldXAoc3RydWN0IHNvY2sgKiwgaW50IG1pYik7XG4gdm9pZCB0Y3Bfc2VuZF9maW4oc3RydWN0IHNvY2sgKnNrKTtcbi12b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IHByaW9yaXR5LFxuLVx0XHRcdCAgIGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb24pO1xuK3ZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZW51bSBza19yc3RfcmVhc29uIHJlYXNvbik7XG4gaW50IHRjcF9zZW5kX3N5bmFjayhzdHJ1Y3Qgc29jayAqKTtcbiB2b2lkIHRjcF9wdXNoX29uZShzdHJ1Y3Qgc29jayAqLCB1bnNpZ25lZCBpbnQgbXNzX25vdyk7XG4gdm9pZCBfX3RjcF9zZW5kX2FjayhzdHJ1Y3Qgc29jayAqc2ssIHUzMiByY3Zfbnh0LCB1MTYgZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IGI0MjM3ZDBlOTk0ZDYuLjkzZDcyM2Q4YzEwOTggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuKysrIGIvbmV0L2lwdjQvdGNwLmNcbkBAIC0zMTgyLDggKzMxODIsNyBAQCB2b2lkIF9fdGNwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KVxuIFx0XHQvKiBVbnJlYWQgZGF0YSB3YXMgdG9zc2VkLCB6YXAgdGhlIGNvbm5lY3Rpb24uICovXG4gXHRcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRPTkNMT1NFKTtcbiBcdFx0dGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcbi1cdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBzay1cdTAwM2Vza19hbGxvY2F0aW9uLFxuLVx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpO1xuK1x0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX0NMT1NFKTtcbiBcdH0gZWxzZSBpZiAoc29ja19mbGFnKHNrLCBTT0NLX0xJTkdFUikgXHUwMDI2XHUwMDI2ICFzay1cdTAwM2Vza19saW5nZXJ0aW1lKSB7XG4gXHRcdC8qIENoZWNrIHplcm8gbGluZ2VyIF9hZnRlcl8gY2hlY2tpbmcgZm9yIHVucmVhZCBkYXRhLiAqL1xuIFx0XHRzay1cdTAwM2Vza19wcm90LVx1MDAzZWRpc2Nvbm5lY3Qoc2ssIDApO1xuQEAgLTMyNTcsNyArMzI1Niw3IEBAIHZvaWQgX190Y3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpXG4gXHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuIFx0XHRpZiAoUkVBRF9PTkNFKHRwLVx1MDAzZWxpbmdlcjIpIFx1MDAzYyAwKSB7XG4gXHRcdFx0dGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTtcbi1cdFx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsXG4rXHRcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLFxuIFx0XHRcdFx0XHQgICAgICBTS19SU1RfUkVBU09OX1RDUF9BQk9SVF9PTl9MSU5HRVIpO1xuIFx0XHRcdF9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksXG4gXHRcdFx0XHRcdExJTlVYX01JQl9UQ1BBQk9SVE9OTElOR0VSKTtcbkBAIC0zMjc2LDcgKzMyNzUsNyBAQCB2b2lkIF9fdGNwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KVxuIFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TRSkge1xuIFx0XHRpZiAodGNwX2NoZWNrX29vbShzaywgMCkpIHtcbiBcdFx0XHR0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfQ0xPU0UpO1xuLVx0XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQyxcbitcdFx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssXG4gXHRcdFx0XHRcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX01FTU9SWSk7XG4gXHRcdFx0X19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcbiBcdFx0XHRcdFx0TElOVVhfTUlCX1RDUEFCT1JUT05NRU1PUlkpO1xuQEAgLTMzNzcsMTQgKzMzNzYsMTQgQEAgaW50IHRjcF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxuIFx0fSBlbHNlIGlmICh1bmxpa2VseSh0cC1cdTAwM2VyZXBhaXIpKSB7XG4gXHRcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfZXJyLCBFQ09OTkFCT1JURUQpO1xuIFx0fSBlbHNlIGlmICh0Y3BfbmVlZF9yZXNldChvbGRfc3RhdGUpKSB7XG4tXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgZ2ZwX2FueSgpLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XG4rXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpO1xuIFx0XHRXUklURV9PTkNFKHNrLVx1MDAzZXNrX2VyciwgRUNPTk5SRVNFVCk7XG4gXHR9IGVsc2UgaWYgKHRwLVx1MDAzZXNuZF9ueHQgIT0gdHAtXHUwMDNld3JpdGVfc2VxIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAoMSBcdTAwM2NcdTAwM2Mgb2xkX3N0YXRlKSBcdTAwMjYgKFRDUEZfQ0xPU0lORyB8IFRDUEZfTEFTVF9BQ0spKSB7XG4gXHRcdC8qIFRoZSBsYXN0IGNoZWNrIGFkanVzdHMgZm9yIGRpc2NyZXBhbmN5IG9mIExpbnV4IHdydC4gUkZDXG4gXHRcdCAqIHN0YXRlc1xuIFx0XHQgKi9cbi1cdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBnZnBfYW55KCksXG4rXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcbiBcdFx0XHRcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0RJU0NPTk5FQ1RfV0lUSF9EQVRBKTtcbiBcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19lcnIsIEVDT05OUkVTRVQpO1xuIFx0fSBlbHNlIGlmIChvbGRfc3RhdGUgPT0gVENQX1NZTl9TRU5UKVxuQEAgLTUxNDcsOCArNTE0Niw3IEBAIGludCB0Y3BfYWJvcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKVxuIFx0YmhfbG9ja19zb2NrKHNrKTtcbiBcbiBcdGlmICh0Y3BfbmVlZF9yZXNldChzay1cdTAwM2Vza19zdGF0ZSkpXG4tXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQyxcbi1cdFx0XHRcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX1NUQVRFKTtcbitcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XG4gXHR0Y3BfZG9uZV93aXRoX2Vycm9yKHNrLCBlcnIpO1xuIFxuIFx0YmhfdW5sb2NrX3NvY2soc2spO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuaW5kZXggZjI3MDlkNTg1ZWRiZC4uMTlhNzk5ZTVkNWNlMyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuY1xuKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jXG5AQCAtMzg0OSwxNSArMzg0OSwxNCBAQCB2b2lkIHRjcF9zZW5kX2ZpbihzdHJ1Y3Qgc29jayAqc2spXG4gICogd2FzIHVucmVhZCBkYXRhIGluIHRoZSByZWNlaXZlIHF1ZXVlLiAgVGhpcyBiZWhhdmlvciBpcyByZWNvbW1lbmRlZFxuICAqIGJ5IFJGQyAyNTI1LCBzZWN0aW9uIDIuMTcuICAtRGF2ZU1cbiAgKi9cbi12b2lkIHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIGdmcF90IHByaW9yaXR5LFxuLVx0XHRcdCAgIGVudW0gc2tfcnN0X3JlYXNvbiByZWFzb24pXG4rdm9pZCB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIHNrX3JzdF9yZWFzb24gcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4gXHRUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9PVVRSU1RTKTtcbiBcbiBcdC8qIE5PVEU6IE5vIFRDUCBvcHRpb25zIGF0dGFjaGVkIGFuZCB3ZSBuZXZlciByZXRyYW5zbWl0IHRoaXMuICovXG4tXHRza2IgPSBhbGxvY19za2IoTUFYX1RDUF9IRUFERVIsIHByaW9yaXR5KTtcbitcdHNrYiA9IGFsbG9jX3NrYihNQVhfVENQX0hFQURFUiwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIXNrYikge1xuIFx0XHRORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUEFCT1JURkFJTEVEKTtcbiBcdFx0cmV0dXJuO1xuQEAgLTM4NjksNyArMzg2OCw3IEBAIHZvaWQgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZ2ZwX3QgcHJpb3JpdHksXG4gXHRcdFx0ICAgICBUQ1BIRFJfQUNLIHwgVENQSERSX1JTVCk7XG4gXHR0Y3BfbXN0YW1wX3JlZnJlc2godGNwX3NrKHNrKSk7XG4gXHQvKiBTZW5kIGl0IG9mZi4gKi9cbi1cdGlmICh0Y3BfdHJhbnNtaXRfc2tiKHNrLCBza2IsIDAsIHByaW9yaXR5KSlcbitcdGlmICh0Y3BfdHJhbnNtaXRfc2tiKHNrLCBza2IsIDAsIEdGUF9BVE9NSUMpKVxuIFx0XHRORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUEFCT1JURkFJTEVEKTtcbiBcbiBcdC8qIHNrYiBvZiB0cmFjZV90Y3Bfc2VuZF9yZXNldCgpIGtlZXBzIHRoZSBza2IgdGhhdCBjYXVzZWQgUlNULFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF90aW1lci5jIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmNcbmluZGV4IDEwMzhlN2JhOWMyZWIuLmU1NmVhZTRiYzM0MWUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfdGltZXIuY1xuKysrIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmNcbkBAIC0xMjYsNyArMTI2LDcgQEAgc3RhdGljIGludCB0Y3Bfb3V0X29mX3Jlc291cmNlcyhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZG9fcmVzZXQpXG4gXHRcdCAgICAoIXRwLVx1MDAzZXNuZF93bmQgXHUwMDI2XHUwMDI2ICF0cC1cdTAwM2VwYWNrZXRzX291dCkpXG4gXHRcdFx0ZG9fcmVzZXQgPSB0cnVlO1xuIFx0XHRpZiAoZG9fcmVzZXQpXG4tXHRcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLFxuK1x0XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzayxcbiBcdFx0XHRcdFx0ICAgICAgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fTUVNT1JZKTtcbiBcdFx0dGNwX2RvbmUoc2spO1xuIFx0XHRfX05FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQQUJPUlRPTk1FTU9SWSk7XG5AQCAtODA5LDcgKzgwOSw3IEBAIHN0YXRpYyB2b2lkIHRjcF9rZWVwYWxpdmVfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHR9XG4gXHRcdH1cbi1cdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBHRlBfQVRPTUlDLCBTS19SU1RfUkVBU09OX1RDUF9TVEFURSk7XG4rXHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgU0tfUlNUX1JFQVNPTl9UQ1BfU1RBVEUpO1xuIFx0XHRnb3RvIGRlYXRoO1xuIFx0fVxuIFxuQEAgLTgzNiw3ICs4MzYsNyBAQCBzdGF0aWMgdm9pZCB0Y3Bfa2VlcGFsaXZlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0XHQgICAgaWNzay1cdTAwM2VpY3NrX3Byb2Jlc19vdXQgXHUwMDNlIDApIHx8XG4gXHRcdCAgICAodXNlcl90aW1lb3V0ID09IDAgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBpY3NrLVx1MDAzZWljc2tfcHJvYmVzX291dCBcdTAwM2U9IGtlZXBhbGl2ZV9wcm9iZXModHApKSkge1xuLVx0XHRcdHRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQyxcbitcdFx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssXG4gXHRcdFx0XHRcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0tFRVBBTElWRV9USU1FT1VUKTtcbiBcdFx0XHR0Y3Bfd3JpdGVfZXJyKHNrKTtcbiBcdFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCBiNDc0ZDAzNjIwYTc1Li5lMWYwOGY3MWNkYjE2IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtMzEwOSw4ICszMTA5LDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfZG9fZmFzdGNsb3NlKHN0cnVjdCBzb2NrICpzaylcbiBcdFx0ICovXG4gXHRcdGluZXRfY3NrKHNzayktXHUwMDNlaWNza19hY2sucmN2X21zcyA9IFRDUF9NSU5fTVNTO1xuIFxuLVx0XHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc3NrLCBzc2stXHUwMDNlc2tfYWxsb2NhdGlvbixcbi1cdFx0XHRcdCAgICAgIFNLX1JTVF9SRUFTT05fVENQX0FCT1JUX09OX0NMT1NFKTtcbitcdFx0dGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNzaywgU0tfUlNUX1JFQVNPTl9UQ1BfQUJPUlRfT05fQ0xPU0UpO1xuIHVubG9jazpcbiBcdFx0cmVsZWFzZV9zb2NrKHNzayk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuaW5kZXggMDZhMTA3ZDRlODM5Mi4uODdjY2I4NGU5OTI3YyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5oXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuQEAgLTY5MCw3ICs2OTAsNyBAQCBtcHRjcF9zZW5kX2FjdGl2ZV9yZXNldF9yZWFzb24oc3RydWN0IHNvY2sgKnNrKVxuIFx0ZW51bSBza19yc3RfcmVhc29uIHJlYXNvbjtcbiBcbiBcdHJlYXNvbiA9IHNrX3JzdF9jb252ZXJ0X21wdGNwX3JlYXNvbihzdWJmbG93LVx1MDAzZXJlc2V0X3JlYXNvbik7XG4tXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIEdGUF9BVE9NSUMsIHJlYXNvbik7XG4rXHR0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoc2ssIHJlYXNvbik7XG4gfVxuIFxuIC8qIE1hZGUgdGhlIGZ3ZCBtZW0gY2FycmllZCBieSB0aGUgZ2l2ZW4gc2tiIGF2YWlsYWJsZSB0byB0aGUgbXNrLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6MjcuODI5NzQxMTY1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5Njg2NDY4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFRDUCBSZXNldCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBFc3NlbnRpYWxseSwgSSdtIHNlZWluZyB0aGF0IHRoZSBgdGNwX3NlbmRfYWN0aXZlX3Jlc2V0YCBmdW5jdGlvbidzIHNpZ25hdHVyZSBpcyBiZWluZyBzdHJlYW1saW5lZC4gVGhlIGBnZnBfdCBwcmlvcml0eWAgcGFyYW1ldGVyIGlzIGJlaW5nIGRyb3BwZWQuIEluc3RlYWQgb2YgZHluYW1pY2FsbHkgcGFzc2luZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJpb3JpdHkgZmxhZyB0byBgYWxsb2Nfc2tiYCBhbmQgYHRjcF90cmFuc21pdF9za2JgLCB0aGUgcGF0Y2ggaGFyZGNvZGVzIGBHRlBfQVRPTUlDYC5cblxuU3BlY2lmaWNhbGx5LCB0aGUgZGlmZnMgc2hvdzogdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBpdHNlbGYgaXMgY2hhbmdpbmcsIGFuZCBpbnNpZGUgYHRjcF9zZW5kX2FjdGl2ZV9yZXNldGAsIHRoZSBgYWxsb2Nfc2tiYCBjYWxsIGFuZCB0aGUgYHRjcF90cmFuc21pdF9za2JgIGNhbGwgbm93IHVzZSB0aGUgaGFyZGNvZGVkIGBHRlBfQVRPTUlDYC4gTmF0dXJhbGx5LCBhbGwgdGhlIGNhbGxpbmcgc2l0ZXMgZm9yIHRoaXMgZnVuY3Rpb24gaGF2ZSBhbHNvIGJlZW4gdXBkYXRlZCB0byByZWZsZWN0IHRoZSBzaWduYXR1cmUgY2hhbmdlLCByZW1vdmluZyB0aGUgbm93LXVubmVjZXNzYXJ5IGBwcmlvcml0eWAgYXJndW1lbnQuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcz8gQWZ0ZXIgbG9va2luZyBpdCBvdmVyIGNhcmVmdWxseSwgdGhlIGFuc3dlciBpcyBuby4gVGhpcyBwYXRjaCAqb25seSogY2hhbmdlcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgdXNlZCBieSB0aGUgU0tCLiBJdOKAmXMgYSBwdXJlIHJlZmFjdG9yaW5nIGFuZCBzaW1wbGlmaWNhdGlvbiwgcmVwbGFjaW5nIGEgdmFyaWFibGUgd2l0aCBhIGNvbnN0YW50LiBJdCdzIG5vdCBpbnRyb2R1Y2luZyBhbnkgbmV3IGZpZWxkcywgbW9kaWZ5aW5nIGRhdGEgc3RydWN0dXJlcyBvciBzaXplcywgb3IgY2hhbmdpbmcgaG93IGRhdGEgaXMgaW5pdGlhbGl6ZWQuIEknbSBzYXRpc2ZpZWQgdGhhdCB0aGUgZXhpc3RpbmcgU0tCIGFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2ssIHdoaWNoIGhhbmRsZXMgaGVhZGVyIGNyZWF0aW9uIGFuZCBkYXRhIHNldHVwLCBpc24ndCBiZWluZyBhbHRlcmVkLCBqdXN0IHRoZSBhbGxvY2F0aW9uIGNvbnRleHQuIGBhbGxvY19za2JgIGl0c2VsZiBkb2Vzbid0IHplcm8gdGhlIGRhdGEsIGJ1dCB0aGUgc3Vic2VxdWVudCBjYWxscyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2sgZ3VhcmFudGVlIHRoYXQgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdHJhbnNtaXNzaW9uLlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzbid0IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHBlcmZlY3RseSBhZGVxdWF0ZSB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMgdGhpcyByZWZhY3RvcmluZyAqY291bGQqIGludHJvZHVjZSAtIHRob3VnaCBJIGRvbid0IHNlZSBhbnkgcmVhbCByaXNrLiBUaGUgcGF0Y2ggcHJpbWFyaWx5IGFsdGVycyBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyB3aXRoaW4gYSB3ZWxsLWVzdGFibGlzaGVkIGFuZCB0ZXN0ZWQgY29kZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjM0LCJPdXRwdXRUb2tlbnMiOjEzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjM3Ljc5ODM5MTMxM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYGdmcF90IHByaW9yaXR5YCBhcmd1bWVudCBmcm9tIGB0Y3Bfc2VuZF9hY3RpdmVfcmVzZXQoKWAgYW5kIGhhcmRjb2RlcyBgR0ZQX0FUT01JQ2AgZm9yIHRoZSBTS0IgYWxsb2NhdGlvbiBhbmQgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGEgc2ltcGxlIHJlZmFjdG9yaW5nIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBidWZmZXIgbGVuZ3Rocywgb3IgYWx0ZXIgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyBpdCBpbiBjb250cm9sIGZsb3cuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBgZ2ZwX3QgcHJpb3JpdHlgIGFyZ3VtZW50IGZyb20gYHRjcF9zZW5kX2FjdGl2ZV9yZXNldCgpYCBhbmQgaGFyZGNvZGVzIGBHRlBfQVRPTUlDYCBmb3IgdGhlIFNLQiBhbGxvY2F0aW9uIGFuZCB0cmFuc21pc3Npb24uIFRoaXMgaXMgYSBzaW1wbGUgcmVmYWN0b3Jpbmcgb2YgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgYW5kIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGJ1ZmZlciBsZW5ndGhzLCBvciBhbHRlciBpbml0aWFsaXphdGlvbiBsb2dpYy4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzaW5nIGl0IGluIGNvbnRyb2wgZmxvdy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHBlcmZlY3RseSBhZGVxdWF0ZSB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxgcdm[1] Phase: Succeeded StartedAt: 2026-08-25 03:34:48 +0000 UTC FinishedAt: 2026-08-25 03:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 03:34:48 +0000 UTC FinishedAt: 2026-08-25 03:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2] Phase: Succeeded StartedAt: 2026-08-25 03:34:48 +0000 UTC FinishedAt: 2026-08-25 07:15:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 03:34:48 +0000 UTC FinishedAt: 2026-08-25 07:15:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 03:34:48 +0000 UTC FinishedAt: 2026-08-25 03:34:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 03:34:48 +0000 UTC FinishedAt: 2026-08-25 03:34:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxgcdm/series-workflowxgcdm-convert-artifact-3769221030/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 03:34:58 +0000 UTC FinishedAt: 2026-08-25 03:50:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 03:34:58 +0000 UTC FinishedAt: 2026-08-25 03:50:38 +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:*bb85a1e2-6daf-487f-8a55-053fe59b2f1a,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-workflowxgcdm/series-workflowxgcdm-convert-artifact-3769221030/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": "3fda8885-9d6e-4c9f-b4eb-6839a8de4d02", "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-workflowxgcdm/series-workflowxgcdm-build-action-309321788/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 03:34:58 +0000 UTC FinishedAt: 2026-08-25 03:50:28 +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:*bb85a1e2-6daf-487f-8a55-053fe59b2f1a,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-workflowxgcdm/series-workflowxgcdm-convert-artifact-3769221030/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": "3fda8885-9d6e-4c9f-b4eb-6839a8de4d02", "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-workflowxgcdm/series-workflowxgcdm-build-action-309321788/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 03:50:38 +0000 UTC FinishedAt: 2026-08-25 03:50:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 03:50:38 +0000 UTC FinishedAt: 2026-08-25 03:50:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 03:50:38 +0000 UTC FinishedAt: 2026-08-25 03:50:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 03:50:38 +0000 UTC FinishedAt: 2026-08-25 03:50:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxgcdm/series-workflowxgcdm-convert-artifact-2789726713/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 03:50:49 +0000 UTC FinishedAt: 2026-08-25 03:53:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 03:50:49 +0000 UTC FinishedAt: 2026-08-25 03:52:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3fda8885-9d6e-4c9f-b4eb-6839a8de4d02,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-workflowxgcdm/series-workflowxgcdm-build-action-309321788/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-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 03:53:03 +0000 UTC FinishedAt: 2026-08-25 03:53:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 03:53:03 +0000 UTC FinishedAt: 2026-08-25 03:53:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 03:53:03 +0000 UTC FinishedAt: 2026-08-25 04:09:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 03:53:03 +0000 UTC FinishedAt: 2026-08-25 04:09:19 +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:*bb85a1e2-6daf-487f-8a55-053fe59b2f1a,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-workflowxgcdm/series-workflowxgcdm-convert-artifact-2789726713/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": "3cd7b5a6-dd04-4fe6-b28b-65889d7fbbd0", "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-workflowxgcdm/series-workflowxgcdm-build-action-1772329941/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 03:53:03 +0000 UTC FinishedAt: 2026-08-25 04:09:09 +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:*bb85a1e2-6daf-487f-8a55-053fe59b2f1a,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-workflowxgcdm/series-workflowxgcdm-convert-artifact-2789726713/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": "3cd7b5a6-dd04-4fe6-b28b-65889d7fbbd0", "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-workflowxgcdm/series-workflowxgcdm-build-action-1772329941/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 04:09:19 +0000 UTC FinishedAt: 2026-08-25 04:09:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 04:09:19 +0000 UTC FinishedAt: 2026-08-25 04:09:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 04:09:19 +0000 UTC FinishedAt: 2026-08-25 04:11:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 04:09:19 +0000 UTC FinishedAt: 2026-08-25 04:11:16 +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:*3cd7b5a6-dd04-4fe6-b28b-65889d7fbbd0,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-workflowxgcdm/series-workflowxgcdm-build-action-1772329941/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-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 04:11:26 +0000 UTC FinishedAt: 2026-08-25 07:15:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 04:11:26 +0000 UTC FinishedAt: 2026-08-25 07:15:21 +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":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"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:*3fda8885-9d6e-4c9f-b4eb-6839a8de4d02,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3cd7b5a6-dd04-4fe6-b28b-65889d7fbbd0,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-workflowxgcdm/series-workflowxgcdm-build-action-309321788/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-workflowxgcdm/series-workflowxgcdm-build-action-1772329941/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 04:11:26 +0000 UTC FinishedAt: 2026-08-25 04:11:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 04:11:26 +0000 UTC FinishedAt: 2026-08-25 04:11:30 +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":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"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-workflowxgcdm/series-workflowxgcdm-convert-artifact-1757565806/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 04:11:26 +0000 UTC FinishedAt: 2026-08-25 04:11:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 04:11:26 +0000 UTC FinishedAt: 2026-08-25 04:11:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 04:11:26 +0000 UTC FinishedAt: 2026-08-25 04:11:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 04:11:36 +0000 UTC FinishedAt: 2026-08-25 07:15:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxgcdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_send_active_reset","tcp_disconnect","tcp_abort"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b70b7b71561f2be1183b6046964d950c2b203bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"b07ffe60-8d36-4afa-aa48-37a554e791ab","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 04:11:36 +0000 UTC FinishedAt: 2026-08-25 07:15:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3fda8885-9d6e-4c9f-b4eb-6839a8de4d02,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3cd7b5a6-dd04-4fe6-b28b-65889d7fbbd0,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-workflowxgcdm/series-workflowxgcdm-build-action-309321788/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-workflowxgcdm/series-workflowxgcdm-build-action-1772329941/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-workflowxgcdm/series-workflowxgcdm-convert-artifact-1757565806/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,}